Hasta que estés satisfecho, está terminado

Mantenimiento

Servicios de mantenimiento preventivo y correctivo para instalaciones residenciales, comerciales e industriales. Conserva tus espacios en óptimas condiciones con la ayuda de profesionales calificados y disponibles a demanda.

En MAIPRO, cuidamos tu patrimonio como si fuera nuestro. Ofrecemos soluciones confiables y personalizadas de mantenimiento preventivo y correctivo para todo tipo de inmuebles, con atención profesional, rápida y de calidad.

Nuestros clientes:

Casas, departamentos y condominios
Oficinas corporativas y edificios comerciales
Centros comerciales y plazas
Clínicas, hospitales y laboratorios
Escuelas, universidades e instituciones educativas
Dependencias gubernamentales y edificios públicos
Hoteles, restaurantes y centros de eventos
Naves industriales y bodegas
Jardines, parques y áreas verdes

Nuestros servicios están diseñados para mantener tus instalaciones siempre funcionales, limpias y en excelente estado.

  • Jardinería
  • Limpieza
  • Instalaciones
  • Pintura
  • Reparaciones en general

Para solicitar tu servicio o agendar tu cita debes tener una cuenta

Activa las notificaciones

Instala nuestra app movil

Toca compartir

Agregar a inicio

Instala nuestra app movil

(function(){ // ===== CONFIG (tus IDs de Elementor popups) ===== var POPUP_INSTALL_ANDROID = 1134; // Instalación Android/desktop var POPUP_INSTALL_IOS = 1166; // Instalación iOS (A2HS) var POPUP_PUSH_ACTIVATE = 1176; // Activar notificaciones (en PWA) // ================================================= var LS = window.localStorage||{getItem:function(){},setItem:function(){},removeItem:function(){}}; var deferredPrompt = null; var SHOWN_INSTALL_FLAG='maipro.install.shown'; var SHOWN_PUSH_FLAG='maipro.push.shown'; function log(){ if (window.console && console.log) console.log.apply(console, ['[Maipro]'].concat([].slice.call(arguments))); } function warn(){ if (window.console && console.warn) console.warn.apply(console, ['[Maipro]'].concat([].slice.call(arguments))); } function $(s){return document.querySelector(s);} function getCookie(n){var m=document.cookie.match(new RegExp('(?:^|; )'+n+'=([^;]+)'));return m?decodeURIComponent(m[1]):'';} function isStandalone(){var m=false;try{m=window.matchMedia&&window.matchMedia('(display-mode: standalone)').matches;}catch(e){} return m||(window.navigator.standalone===true);} function isIOS(){return /iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream;} function canShowInstallPopup(){ if(isStandalone()) return false; return !LS.getItem(SHOWN_INSTALL_FLAG); } function canShowPushPopup(){ // Mostramos el popup de activación solo si estamos en modo standalone (PWA) y no hay permiso ya concedido if(!isStandalone()) return false; if(window.Notification && Notification.permission==='granted') return false; return !LS.getItem(SHOWN_PUSH_FLAG); } // ---------- Elementor Popups helpers ---------- function openPopupById(id){ try{ if(window.elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup){ elementorProFrontend.modules.popup.showPopup({id:id}); return true; } }catch(e){ warn('No se pudo abrir popup', id, e); } return false; } function closePopups(){ try{ if(window.elementorProFrontend && elementorProFrontend.modules && elementorProFrontend.modules.popup){ elementorProFrontend.modules.popup.closePopup(); } }catch(e){} } function openPopupWhenReady(id, maxWaitMs){ var started = Date.now(); (function tick(){ if (openPopupById(id)) return; if (Date.now() - started > (maxWaitMs||6000)) { warn('Timeout abriendo popup', id); return; } setTimeout(tick, 250); })(); } // ---------- Instalación PWA ---------- window.addEventListener('beforeinstallprompt', function(e){ e.preventDefault(); deferredPrompt = e; log('beforeinstallprompt capturado'); var btn = $('#btn-install-pwa'); if (btn){ btn.disabled=false; btn.textContent='Instalar app'; } }); function maybeShowWebInstallFallback(){ if (canShowInstallPopup() && !isIOS() && !isStandalone()) { log('Mostrando popup de instalación (fallback web)'); LS.setItem(SHOWN_INSTALL_FLAG,'1'); openPopupWhenReady(POPUP_INSTALL_ANDROID, 6000); } } function maybeShowIOSInstall(){ if (canShowInstallPopup() && isIOS() && !isStandalone()) { log('Mostrando popup iOS A2HS'); LS.setItem(SHOWN_INSTALL_FLAG,'1'); openPopupWhenReady(POPUP_INSTALL_IOS, 6000); } } function wireInstallButtons(){ var bInstall=$('#btn-install-pwa'); if(bInstall){ if(!deferredPrompt){ bInstall.disabled = true; bInstall.textContent='Preparando instalación…'; } bInstall.addEventListener('click', function(ev){ ev.preventDefault(); if(!deferredPrompt){ alert('Aún preparando instalación. Intenta otra vez.'); return; } deferredPrompt.prompt(); deferredPrompt.userChoice.then(function(choice){ log('Instalación:', choice && choice.outcome); deferredPrompt = null; closePopups(); })['catch'](function(){ deferredPrompt=null; closePopups(); }); }); } var bDismiss=$('#btn-install-dismiss'); if(bDismiss){ bDismiss.addEventListener('click', function(){ closePopups(); }); } var bDismissIOS=$('#btn-install-ios-dismiss'); if(bDismissIOS){ bDismissIOS.addEventListener('click', function(){ closePopups(); }); } } // ---------- OneSignal helpers (no inyectar SDK aquí) ---------- function waitForOneSignalReady(timeoutMs) { timeoutMs = timeoutMs || 8000; return new Promise(function (resolve) { var waited = 0; var interval = 150; var t = setInterval(function () { if (window.OneSignal && typeof OneSignal.push === 'function') { clearInterval(t); return resolve(true); } waited += interval; if (waited >= timeoutMs) { clearInterval(t); return resolve(false); } }, interval); }); } function safeSetExternalUserId() { try { var externalId = (window.MaiproOneSignalConfig && MaiproOneSignalConfig.externalUserId) ? String(MaiproOneSignalConfig.externalUserId) : (window.USER_ID ? String(window.USER_ID) : null); if (!externalId) return; OneSignal.push(function() { if (typeof OneSignal.setExternalUserId === 'function') { try { OneSignal.setExternalUserId(externalId); log('OneSignal externalUserId seteado:', externalId); } catch(e){ warn('setExternalUserId error', e); } } }); } catch(e) { warn('safeSetExternalUserId', e); } } // Mostrar prompt de OneSignal (slidedown o registro) function showOneSignalPrompt() { waitForOneSignalReady(8000).then(function(ready){ if (!ready) { warn('OneSignal SDK no listo'); alert('OneSignal SDK no cargado todavía. Intenta de nuevo.'); return; } // Asociar external user id si existe safeSetExternalUserId(); OneSignal.push(function(){ if (typeof OneSignal.showSlidedownPrompt === 'function') { OneSignal.showSlidedownPrompt(); } else if (typeof OneSignal.registerForPushNotifications === 'function') { OneSignal.registerForPushNotifications().catch(function(e){ warn('registerForPushNotifications failed', e); }); } else { warn('No hay método de prompt disponible en OneSignal'); } }); }); } // Opcional: guardar mapping OneSignal userId <-> WP user_id en servidor (recomendado) // Puedes descomentar y ajustar la URL /wp-admin/admin-ajax.php?action=maipro_save_onesignal function saveOneSignalIdOnServer(oneSignalUserId) { try { if (!oneSignalUserId) return; // Si quieres que el servidor guarde el mapping, implementa el handler PHP para maipro_save_onesignal /* fetch('/wp-admin/admin-ajax.php?action=maipro_save_onesignal', { method: 'POST', credentials: 'same-origin', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ onesignal_id: oneSignalUserId }) }).then(function(r){ return r.json(); }).then(function(j){ log('Saved OS id on server', j); }).catch(function(e){ warn('saveOneSignalIdOnServer error', e); }); */ } catch(e){ warn('saveOneSignalIdOnServer', e); } } // Cuando se suscriba, OneSignal dispara subscriptionChange / puedes obtener userId function bindOneSignalEvents() { waitForOneSignalReady(8000).then(function(ready){ if(!ready) return; OneSignal.push(function(){ try { OneSignal.on && OneSignal.on('subscriptionChange', function(isSubscribed){ log('OneSignal subscriptionChange:', isSubscribed); if (isSubscribed) { OneSignal.getUserId().then(function(osId){ log('OneSignal userId:', osId); // Guardar mapping opcional: saveOneSignalIdOnServer(osId); }).catch(function(e){ warn('getUserId error', e); }); } }); } catch(e){ warn('bindOneSignalEvents error', e); } }); }); } // ---------- Notificaciones: integrar con el popup de Elementor ---------- function setPushStatus(t){ var el=$('#push-status'); if(el) el.textContent=t||''; } function wirePushPopup(){ function attach(){ var root = document.querySelector('.elementor-popup-modal[data-elementor-id="'+POPUP_PUSH_ACTIVATE+'"]'); if (!root) return false; var btn = root.querySelector('#btn-activar-push'); if (!btn || btn.__wired) return false; btn.__wired = true; btn.style.display='inline-flex'; btn.style.visibility='visible'; btn.style.opacity='1'; // reemplazamos la lógica que antes usaba Firebase por llamada a OneSignal prompt btn.addEventListener('click', function(ev){ ev.preventDefault(); setPushStatus('Preparando OneSignal...'); // Mostrar prompt de OneSignal (manejamos internamente si SDK no existe) showOneSignalPrompt(); }); return true; } var mo = new MutationObserver(function(){ attach(); }); mo.observe(document.documentElement, { childList:true, subtree:true }); setTimeout(attach, 300); if (window.jQuery && window.elementorProFrontend) { try { jQuery(document).on('elementor/popup/show', function(e,id){ if(id===POPUP_PUSH_ACTIVATE) setTimeout(attach,50); }); } catch(e){} } } function maybeShowPushPopup(){ try { var p=new URLSearchParams(window.location.search); if(p.get('showpush')==='1'){ openPopupWhenReady(POPUP_PUSH_ACTIVATE,6000); return; } } catch(e){} if (canShowPushPopup()) { log('Mostrando popup de activar notificaciones (PWA)'); LS.setItem(SHOWN_PUSH_FLAG,'1'); openPopupWhenReady(POPUP_PUSH_ACTIVATE, 6000); } } // ---------- Inicio y flujo ---------- function init(){ wireInstallButtons(); wirePushPopup(); // Enlazar eventos OneSignal para capturar subscriptionChange y mapear al servidor si hace falta bindOneSignalEvents(); if(isStandalone()){ // si estamos en PWA, esperar a que OneSignal esté listo y luego mostrar el popup si corresponde waitForOneSignalReady(8000).then(function(){ maybeShowPushPopup(); }); }else{ // si no estamos en PWA, mostrar popups de instalación según plataforma maybeShowIOSInstall(); maybeShowWebInstallFallback(); } } if(document.readyState==='complete' || document.readyState==='interactive'){ setTimeout(init, 300); } else { document.addEventListener('DOMContentLoaded', function(){ setTimeout(init,300); }); } // Mostrar instaladores si no está instalado pasado cierto timeout setTimeout(function(){ if(!isStandalone()){ if(isIOS()) maybeShowIOSInstall(); else maybeShowWebInstallFallback(); } }, 3000); window.addEventListener('appinstalled', function(){ LS.removeItem(SHOWN_INSTALL_FLAG); closePopups(); }); // Delegated listener fallback para botones que no se pudieron enganchar document.addEventListener('click', function(ev){ var el = ev.target; // activar push (fallback): si hay un botón con id btn-activar-push en cualquier parte if (el && (el.id === 'btn-activar-push' || (el.closest && el.closest('#btn-activar-push')))) { ev.preventDefault(); showOneSignalPrompt(); } }, true); // CSS para que el botón siempre sea visible en el popup (function(){ var css = document.createElement('style'); css.textContent = '' + '.elementor-popup-modal[data-elementor-id="'+POPUP_PUSH_ACTIVATE+'"] #btn-activar-push{' + ' display:inline-flex !important; visibility:visible !important; opacity:1 !important;' + '}'; document.head.appendChild(css); })(); })();