-- =========================================================
-- MIGRACIÓN: Sistema editado_nube para BD NUBE
-- =========================================================
-- Agrega columna `editado_nube` TINYINT(1) DEFAULT 0 a todas
-- las tablas sincronizadas. Crea triggers BEFORE UPDATE que
-- marcan editado_nube = 1 SOLO cuando la edición NO viene
-- del proceso de sync (se detecta con @is_sync = 1).
--
-- Esto permite que:
-- - Ediciones directas en la nube → editado_nube = 1
-- - Ediciones vía sync (push de sucursal) → editado_nube = 0
-- - Al hacer pull, la sucursal recibe sus propios cambios editados en nube
-- - Las demás sucursales NO ven estos cambios
-- =========================================================

-- =====================
-- PASO 1: Agregar columna editado_nube a todas las tablas
-- =====================

ALTER TABLE `categorias` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `almacenes` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `configuraciones` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cajas` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cat_regimen_fiscal` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cat_uso_cfdi` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cat_forma_pago` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cat_metodo_pago` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `precio_rangos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE `roles` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `proveedores` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `vehiculos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `rangos_flete` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE `permisos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `usuarios` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `productos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `clientes` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE `rol_permisos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `usuario_almacenes` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `producto_equivalencias` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `descuentos_volumen` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cliente_telefonos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cliente_direcciones` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cliente_datos_fiscales` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `configuracion_rangos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `vehiculo_rangos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `diferencia_costos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE `ventas` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `ventas_mostrador` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `ordenes_compra` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `rutas_entrega` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `sesiones` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `log_actividad` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `log_seguridad` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE `venta_detalles` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `venta_pagos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `ventas_mostrador_detalles` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `ventas_mostrador_pagos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `cortes_caja` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `retiros_efectivo` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `ingresos_efectivo` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `orden_compra_detalle` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `ruta_pedidos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `pagos_clientes` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `facturas` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;

ALTER TABLE `factura_conceptos` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `factura_ventas` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;
ALTER TABLE `factura_ventas_mostrador` ADD COLUMN IF NOT EXISTS `editado_nube` TINYINT(1) NOT NULL DEFAULT 0;

-- =====================
-- PASO 2: Índice para búsquedas rápidas de editado_nube
-- =====================

CREATE INDEX IF NOT EXISTS idx_editado_nube ON `categorias` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `almacenes` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `configuraciones` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cajas` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cat_regimen_fiscal` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cat_uso_cfdi` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cat_forma_pago` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cat_metodo_pago` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `precio_rangos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `roles` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `proveedores` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `vehiculos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `rangos_flete` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `permisos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `usuarios` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `productos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `clientes` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `rol_permisos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `usuario_almacenes` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `producto_equivalencias` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `descuentos_volumen` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cliente_telefonos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cliente_direcciones` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cliente_datos_fiscales` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `configuracion_rangos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `vehiculo_rangos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `diferencia_costos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `ventas` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `ventas_mostrador` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `ordenes_compra` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `rutas_entrega` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `sesiones` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `log_actividad` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `log_seguridad` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `venta_detalles` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `venta_pagos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `ventas_mostrador_detalles` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `ventas_mostrador_pagos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `cortes_caja` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `retiros_efectivo` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `ingresos_efectivo` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `orden_compra_detalle` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `ruta_pedidos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `pagos_clientes` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `facturas` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `factura_conceptos` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `factura_ventas` (editado_nube, sucursal);
CREATE INDEX IF NOT EXISTS idx_editado_nube ON `factura_ventas_mostrador` (editado_nube, sucursal);

-- =====================
-- PASO 3: Triggers BEFORE UPDATE
-- =====================
-- Cada trigger marca editado_nube = 1 cuando:
--   1. La variable de sesión @is_sync NO está activa (es decir, NO es una operación de sync)
--   2. El registro tiene sucursal (es decir, pertenece a una sucursal)
--   3. El nuevo valor de editado_nube no se está explícitamente poniendo a 0 (para el reset)
--
-- Cuando el sync (handleSyncReceive) procesa, hace SET @is_sync = 1, así el trigger no marca.

DELIMITER //

-- Nivel 0
DROP TRIGGER IF EXISTS trg_editado_nube_categorias//
CREATE TRIGGER trg_editado_nube_categorias BEFORE UPDATE ON `categorias`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_almacenes//
CREATE TRIGGER trg_editado_nube_almacenes BEFORE UPDATE ON `almacenes`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_configuraciones//
CREATE TRIGGER trg_editado_nube_configuraciones BEFORE UPDATE ON `configuraciones`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cajas//
CREATE TRIGGER trg_editado_nube_cajas BEFORE UPDATE ON `cajas`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cat_regimen_fiscal//
CREATE TRIGGER trg_editado_nube_cat_regimen_fiscal BEFORE UPDATE ON `cat_regimen_fiscal`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cat_uso_cfdi//
CREATE TRIGGER trg_editado_nube_cat_uso_cfdi BEFORE UPDATE ON `cat_uso_cfdi`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cat_forma_pago//
CREATE TRIGGER trg_editado_nube_cat_forma_pago BEFORE UPDATE ON `cat_forma_pago`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cat_metodo_pago//
CREATE TRIGGER trg_editado_nube_cat_metodo_pago BEFORE UPDATE ON `cat_metodo_pago`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_precio_rangos//
CREATE TRIGGER trg_editado_nube_precio_rangos BEFORE UPDATE ON `precio_rangos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

-- Nivel 1
DROP TRIGGER IF EXISTS trg_editado_nube_roles//
CREATE TRIGGER trg_editado_nube_roles BEFORE UPDATE ON `roles`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_proveedores//
CREATE TRIGGER trg_editado_nube_proveedores BEFORE UPDATE ON `proveedores`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_vehiculos//
CREATE TRIGGER trg_editado_nube_vehiculos BEFORE UPDATE ON `vehiculos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_rangos_flete//
CREATE TRIGGER trg_editado_nube_rangos_flete BEFORE UPDATE ON `rangos_flete`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

-- Nivel 2
DROP TRIGGER IF EXISTS trg_editado_nube_permisos//
CREATE TRIGGER trg_editado_nube_permisos BEFORE UPDATE ON `permisos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_usuarios//
CREATE TRIGGER trg_editado_nube_usuarios BEFORE UPDATE ON `usuarios`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_productos//
CREATE TRIGGER trg_editado_nube_productos BEFORE UPDATE ON `productos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_clientes//
CREATE TRIGGER trg_editado_nube_clientes BEFORE UPDATE ON `clientes`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

-- Nivel 3
DROP TRIGGER IF EXISTS trg_editado_nube_rol_permisos//
CREATE TRIGGER trg_editado_nube_rol_permisos BEFORE UPDATE ON `rol_permisos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_usuario_almacenes//
CREATE TRIGGER trg_editado_nube_usuario_almacenes BEFORE UPDATE ON `usuario_almacenes`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_producto_equivalencias//
CREATE TRIGGER trg_editado_nube_producto_equivalencias BEFORE UPDATE ON `producto_equivalencias`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_descuentos_volumen//
CREATE TRIGGER trg_editado_nube_descuentos_volumen BEFORE UPDATE ON `descuentos_volumen`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cliente_telefonos//
CREATE TRIGGER trg_editado_nube_cliente_telefonos BEFORE UPDATE ON `cliente_telefonos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cliente_direcciones//
CREATE TRIGGER trg_editado_nube_cliente_direcciones BEFORE UPDATE ON `cliente_direcciones`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cliente_datos_fiscales//
CREATE TRIGGER trg_editado_nube_cliente_datos_fiscales BEFORE UPDATE ON `cliente_datos_fiscales`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_configuracion_rangos//
CREATE TRIGGER trg_editado_nube_configuracion_rangos BEFORE UPDATE ON `configuracion_rangos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_vehiculo_rangos//
CREATE TRIGGER trg_editado_nube_vehiculo_rangos BEFORE UPDATE ON `vehiculo_rangos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_diferencia_costos//
CREATE TRIGGER trg_editado_nube_diferencia_costos BEFORE UPDATE ON `diferencia_costos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

-- Nivel 4
DROP TRIGGER IF EXISTS trg_editado_nube_ventas//
CREATE TRIGGER trg_editado_nube_ventas BEFORE UPDATE ON `ventas`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_ventas_mostrador//
CREATE TRIGGER trg_editado_nube_ventas_mostrador BEFORE UPDATE ON `ventas_mostrador`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_ordenes_compra//
CREATE TRIGGER trg_editado_nube_ordenes_compra BEFORE UPDATE ON `ordenes_compra`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_rutas_entrega//
CREATE TRIGGER trg_editado_nube_rutas_entrega BEFORE UPDATE ON `rutas_entrega`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_sesiones//
CREATE TRIGGER trg_editado_nube_sesiones BEFORE UPDATE ON `sesiones`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_log_actividad//
CREATE TRIGGER trg_editado_nube_log_actividad BEFORE UPDATE ON `log_actividad`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_log_seguridad//
CREATE TRIGGER trg_editado_nube_log_seguridad BEFORE UPDATE ON `log_seguridad`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

-- Nivel 5
DROP TRIGGER IF EXISTS trg_editado_nube_venta_detalles//
CREATE TRIGGER trg_editado_nube_venta_detalles BEFORE UPDATE ON `venta_detalles`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_venta_pagos//
CREATE TRIGGER trg_editado_nube_venta_pagos BEFORE UPDATE ON `venta_pagos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_ventas_mostrador_detalles//
CREATE TRIGGER trg_editado_nube_ventas_mostrador_detalles BEFORE UPDATE ON `ventas_mostrador_detalles`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_ventas_mostrador_pagos//
CREATE TRIGGER trg_editado_nube_ventas_mostrador_pagos BEFORE UPDATE ON `ventas_mostrador_pagos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_cortes_caja//
CREATE TRIGGER trg_editado_nube_cortes_caja BEFORE UPDATE ON `cortes_caja`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_retiros_efectivo//
CREATE TRIGGER trg_editado_nube_retiros_efectivo BEFORE UPDATE ON `retiros_efectivo`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_ingresos_efectivo//
CREATE TRIGGER trg_editado_nube_ingresos_efectivo BEFORE UPDATE ON `ingresos_efectivo`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_orden_compra_detalle//
CREATE TRIGGER trg_editado_nube_orden_compra_detalle BEFORE UPDATE ON `orden_compra_detalle`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_ruta_pedidos//
CREATE TRIGGER trg_editado_nube_ruta_pedidos BEFORE UPDATE ON `ruta_pedidos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_pagos_clientes//
CREATE TRIGGER trg_editado_nube_pagos_clientes BEFORE UPDATE ON `pagos_clientes`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_facturas//
CREATE TRIGGER trg_editado_nube_facturas BEFORE UPDATE ON `facturas`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

-- Nivel 6
DROP TRIGGER IF EXISTS trg_editado_nube_factura_conceptos//
CREATE TRIGGER trg_editado_nube_factura_conceptos BEFORE UPDATE ON `factura_conceptos`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_factura_ventas//
CREATE TRIGGER trg_editado_nube_factura_ventas BEFORE UPDATE ON `factura_ventas`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DROP TRIGGER IF EXISTS trg_editado_nube_factura_ventas_mostrador//
CREATE TRIGGER trg_editado_nube_factura_ventas_mostrador BEFORE UPDATE ON `factura_ventas_mostrador`
FOR EACH ROW BEGIN
    IF @is_sync IS NULL OR @is_sync != 1 THEN
        IF NEW.sucursal != '' AND NEW.sucursal IS NOT NULL THEN
            SET NEW.editado_nube = 1;
        END IF;
    END IF;
END//

DELIMITER ;
