DELIMITER $$;
CREATE TRIGGER on_add_mouvements 
AFTER INSERT ON mouvements
    FOR EACH ROW 
        BEGIN
            DECLARE done INT DEFAULT FALSE;
            DECLARE var_produit_code CHAR(100);
            DECLARE var_soussociete_code CHAR(100);
            DECLARE var_quantite INT;
            DECLARE var_retour INT;
            DECLARE var_dlc INT;
            DECLARE var_casse INT;
            DECLARE var_reservation INT;
            DECLARE var_securite INT;
 
            DECLARE lignes CURSOR FOR SELECT s.produit_code, s.soussociete_code, s.quantite, s.retour, s.dlc, s.casse, s.reservation, s.securite
                                      FROM stock_depots as s 
                                      WHERE s.produit_code = NEW.produit_code AND s.soussociete_code=NEW.soussociete_code;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

            OPEN lignes;

            read_loop: LOOP
            
                FETCH lignes INTO var_produit_code,var_soussociete_code, var_quantite, var_retour, var_dlc, var_casse, var_reservation, var_securite;
                IF done THEN
                    LEAVE read_loop;
                END IF;

            -- chargement from stock
            IF NEW.type="chargement" AND NEW.from_stock=1 THEN 
                IF NEW.etat="refused" THEN
                    BEGIN
                        UPDATE stock_depots SET quantite=quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;

                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_quantite, NEW.quantite, var_quantite + NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:chargement/refusé', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );

                    END;
                ELSE
                    BEGIN
                        UPDATE stock_depots SET quantite=quantite - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_quantite, - NEW.quantite, var_quantite - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:chargement/envoyé', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                END IF;
            -- chargement from stock ri
            ELSEIF NEW.type="chargement" AND NEW.from_stock_ri=1 THEN 
                IF NEW.etat="refused" THEN
                    BEGIN
                        UPDATE stock_depots SET retour=retour + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;

                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_retour, NEW.quantite, var_retour + NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:chargement/refusé/FRM_RI', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );

                    END;
                ELSE
                    BEGIN
                        UPDATE stock_depots SET retour=retour - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_retour, - NEW.quantite, var_retour - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:chargement/envoyé/FRM_RI', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                END IF;
            ELSEIF NEW.type='retour' THEN
            	BEGIN
                    UPDATE stock_depots SET quantite=quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_quantite, NEW.quantite, var_quantite + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:retour/ajouté', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            ELSEIF NEW.type='retourI' THEN
            	BEGIN
                    UPDATE stock_depots SET retour=retour + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_retour, NEW.quantite, var_retour + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:retourI/ajouté', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
			-- ELSEIF NEW.type='cadeauxC' AND NEW.from_dash=1 THEN
            -- 	BEGIN
            --         UPDATE stock_depots SET quantite=quantite - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
            --         -- insert stock_depots_historique
            --         INSERT INTO 
            --             stock_depot_info (
            --                 user_code, commercial_code, soussociete_code, code, 
            --                 produit_code, old_quantite, diff_quantite, new_quantite, 
            --                 module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
            --             ) 
            --         VALUES (
            --             NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
            --             NEW.produit_code, var_quantite, NEW.quantite, var_quantite + NEW.quantite,
            --             'Mouvement', NEW.type, 'Triggers:cadeaux/ajouté', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
            --         );
            --     END;
            ELSEIF NEW.type='dlc' THEN
            	BEGIN
                    UPDATE stock_depots SET dlc=dlc + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_dlc, NEW.quantite, var_dlc + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:dlc/ajouté', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
            	END;
            ELSEIF NEW.type='casse' THEN
            	BEGIN
                    UPDATE stock_depots SET casse=casse + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_casse, NEW.quantite, var_casse + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:casse/ajouté', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            -- ELSEIF NEW.type="dc" THEN
            --     BEGIN
            --         -- when delet add mvt line to mouvements_deleted_table
            --         INSERT INTO `mouvements_dc`
            --             (
            --                 `id`, `magasinier_code`, `depot_code`, `commercial_code`, `caisse_code`, `soussociete_code`, 
            --                 `produit_code`, `prix_achat_ht`, `prix_achat_ttc`, `quantite`, `qte_demande`, `prix_ht`, 
            --                 `prix_ttc`, `p_tva`, `taux_tva`, `remise`, `type`, `num_serie`, `numero`, `configuration`, 
            --                 `etat`, `isSync`, `wavesoft`, `num_lot`, `deleted_at`, `created_at`, `updated_at`, `date`, 
            --                 `date_accept`, `from_stock`) 
            --         VALUES (
            --                 NEW.id, NEW.magasinier_code, NEW.depot_code, NEW.commercial_code, NEW.caisse_code, NEW.soussociete_code, 
            --                 NEW.produit_code, NEW.prix_achat_ht, NEW.prix_achat_ttc, NEW.quantite, NEW.qte_demande, NEW.prix_ht, 
            --                 NEW.prix_ttc, NEW.p_tva, NEW.taux_tva, NEW.remise, NEW.type, NEW.num_serie, NEW.numero, NEW.configuration, 
            --                 NEW.etat, NEW.isSync, NEW.wavesoft, NEW.num_lot, NEW.deleted_at, NEW.created_at, NEW.updated_at, NEW.date, 
            --                 NEW.date_accept, NEW.from_stock
            --         );
            --     END;
            END IF;
            END LOOP;
            CLOSE lignes;
        END


DELIMITER $$;
CREATE TRIGGER on_update_mouvements 
AFTER UPDATE ON mouvements
    FOR EACH ROW 
        BEGIN
            DECLARE done INT DEFAULT FALSE;
            DECLARE var_produit_code CHAR(100);
            DECLARE var_soussociete_code CHAR(100);
            DECLARE var_quantite INT;
            DECLARE var_retour INT;
            DECLARE var_dlc INT;
            DECLARE var_casse INT;
            DECLARE var_reservation INT;
            DECLARE var_securite INT;
 
            DECLARE lignes CURSOR FOR SELECT s.produit_code, s.soussociete_code, s.quantite, s.retour, s.dlc, s.casse, s.reservation, s.securite
                                      FROM stock_depots as s 
                                      WHERE s.produit_code = NEW.produit_code AND s.soussociete_code=NEW.soussociete_code;
            DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

            OPEN lignes;

            read_loop: LOOP
            
                FETCH lignes INTO var_produit_code,var_soussociete_code, var_quantite, var_retour, var_dlc, var_casse, var_reservation, var_securite;
                IF done THEN
                    LEAVE read_loop;
                END IF;

            -- chargement from stk
            IF NEW.type="chargement" AND NEW.from_stock=1 THEN 
                IF  OLD.type="chargement" AND NEW.etat="refused" AND (OLD.etat IS NULL OR OLD.etat = 'accepted') THEN
                    BEGIN
                        UPDATE stock_depots SET quantite=quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_quantite, NEW.quantite, var_quantite + NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:chargement/refusé', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                    -- cas réenvoyer chargement
                ELSEIF OLD.type="chargement" AND NEW.etat IS NULL AND OLD.etat IS NOT NULL THEN
                    BEGIN
                        UPDATE stock_depots SET quantite=quantite - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_quantite, - NEW.quantite, var_quantite - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:chargement/envoyé', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                ELSEIF OLD.type="dc" AND NEW.etat IS NULL AND NEW.type="chargement" THEN
                    BEGIN
                        UPDATE stock_depots SET quantite=quantite - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_quantite, - NEW.quantite, var_quantite - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:dc/chargement/envoyé', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                ELSEIF OLD.type="chargement" AND OLD.quantite <> NEW.quantite AND NEW.etat IS NULL AND OLD.etat IS NULL  THEN
                    BEGIN
                        UPDATE stock_depots SET quantite=quantite + OLD.quantite - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_quantite + OLD.quantite , - NEW.quantite, var_quantite + OLD.quantite - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:chargement/modifié', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                END IF;
            
             -- chargement from stk RI
            ELSEIF NEW.type="chargement" AND NEW.from_stock_ri=1 THEN 
                IF  OLD.type="chargement" AND NEW.etat="refused" AND (OLD.etat IS NULL OR OLD.etat = 'accepted') THEN
                    BEGIN
                        UPDATE stock_depots SET retour=retour + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_retour, NEW.quantite, var_retour + NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:chargement/refusé/FRM_RI', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                    -- cas réenvoyer chargement
                ELSEIF OLD.type="chargement" AND NEW.etat IS NULL AND OLD.etat IS NOT NULL THEN
                    BEGIN
                        UPDATE stock_depots SET retour=retour - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_retour, - NEW.quantite, var_retour - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:chargement/envoyé/FRM_RI', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                ELSEIF OLD.type="dc" AND NEW.etat IS NULL AND NEW.type="chargement" THEN
                    BEGIN
                        UPDATE stock_depots SET retour=retour - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_retour, - NEW.quantite, var_retour - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:dc/chargement/envoyé/FRM_RI', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                ELSEIF OLD.type="chargement" AND OLD.quantite <> NEW.quantite AND NEW.etat IS NULL AND OLD.etat IS NULL  THEN
                    BEGIN
                        UPDATE stock_depots SET retour=retour + OLD.quantite - NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                        -- insert stock_depots_historique
                        INSERT INTO 
                            stock_depot_info (
                                user_code, commercial_code, soussociete_code, code, 
                                produit_code, old_quantite, diff_quantite, new_quantite, 
                                module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                            ) 
                        VALUES (
                            NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                            NEW.produit_code, var_retour + OLD.quantite , - NEW.quantite, var_retour + OLD.quantite - NEW.quantite,
                            'Mouvement', NEW.type, 'Triggers:UPD:chargement/modifié/FRM_RI', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                        );
                    END;
                END IF;
            ELSEIF NEW.type='retour' and OLD.quantite <> NEW.quantite  AND NEW.etat <> "refused" and OLD.type<>'demandeRetour'  THEN
                BEGIN
                    UPDATE stock_depots SET quantite=quantite - OLD.quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_quantite - OLD.quantite , NEW.quantite, var_quantite - OLD.quantite + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:UPD:retour/modifié', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            ELSEIF NEW.type='retour' and OLD.type='demandeRetour'  AND OLD.etat ="demande" THEN
                BEGIN
                    UPDATE stock_depots SET quantite=quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_quantite - OLD.quantite , NEW.quantite, var_quantite + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:UPD:DemandeRetour/modifié', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            ELSEIF NEW.type='retour'  AND NEW.etat="refused"AND( OLD.etat <> "refused" OR OLD.etat IS NULL) THEN
                BEGIN
                    UPDATE stock_depots SET quantite=quantite - OLD.quantite  WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_quantite, - OLD.quantite, var_quantite - OLD.quantite,
                        'Mouvement', NEW.type, 'Triggers:UPD:retour/refusé', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;

            -- retourI
            ELSEIF NEW.type='retourI' and OLD.quantite <> NEW.quantite  AND NEW.etat <> "refused" THEN
                BEGIN
                    UPDATE stock_depots SET retour=retour - OLD.quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_retour - OLD.quantite , NEW.quantite, var_retour - OLD.quantite + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:UPD:retourI/modifié', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            ELSEIF NEW.type='retourI'  AND NEW.etat="refused"AND OLD.etat <> "refused" THEN
                BEGIN
                    UPDATE stock_depots SET retour=retour - OLD.quantite  WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_retour, - OLD.quantite, var_retour - OLD.quantite,
                        'Mouvement', NEW.type, 'Triggers:UPD:retourI/refusé', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            ELSEIF NEW.type='dlc'  and OLD.quantite <> NEW.quantite  THEN
                BEGIN
                    UPDATE stock_depots SET dlc=dlc - OLD.quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_dlc - OLD.quantite, NEW.quantite, var_dlc - OLD.quantite + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:UPD:dlc/modifié', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            ELSEIF NEW.type='casse'  and OLD.quantite <> NEW.quantite THEN
                BEGIN
                    UPDATE stock_depots SET casse=casse - OLD.quantite + NEW.quantite WHERE `produit_code`=NEW.produit_code AND `soussociete_code`=NEW.soussociete_code;
                    -- insert stock_depots_historique
                    INSERT INTO 
                        stock_depot_info (
                            user_code, commercial_code, soussociete_code, code, 
                            produit_code, old_quantite, diff_quantite, new_quantite, 
                            module_nomadis, type_mouvement, cause, etat, latitude, longitude, date, created_at, updated_at
                        ) 
                    VALUES (
                        NEW.magasinier_code, NEW.commercial_code, NEW.soussociete_code, NEW.numero,  
                        NEW.produit_code, var_casse - OLD.quantite, NEW.quantite, var_casse - OLD.quantite + NEW.quantite,
                        'Mouvement', NEW.type, 'Triggers:UPD:casse/modifié', NEW.etat, NULL, NULL, NOW(), NOW(), NOW()
                    );
                END;
            -- ELSEIF NEW.type = 'dc' THEN
            --     BEGIN
            --     INSERT INTO mouvements_dc (
            --         id, magasinier_code, depot_code, commercial_code, caisse_code, soussociete_code, 
            --         produit_code, prix_achat_ht, prix_achat_ttc, quantite, qte_demande, prix_ht, prix_ttc, 
            --         p_tva, taux_tva, remise, type, num_serie, numero, configuration, etat, isSync, wavesoft, 
            --         num_lot, created_at, updated_at, date, date_accept, from_stock
            --     )
            --     VALUES (
            --         NEW.id, NEW.magasinier_code, NEW.depot_code, NEW.commercial_code, NEW.caisse_code, 
            --         NEW.soussociete_code, NEW.produit_code, NEW.prix_achat_ht, NEW.prix_achat_ttc, NEW.quantite, 
            --         NEW.qte_demande, NEW.prix_ht, NEW.prix_ttc, NEW.p_tva, NEW.taux_tva, NEW.remise, NEW.type,
            --         NEW.num_serie, NEW.numero, NEW.configuration, NEW.etat, NEW.isSync, NEW.wavesoft,
            --         NEW.num_lot, NEW.created_at, NEW.updated_at, NEW.date, NEW.date_accept, NEW.from_stock
            --     )
            --     ON DUPLICATE KEY UPDATE
            --          magasinier_code = NEW.magasinier_code,
            --         depot_code = NEW.depot_code,
            --         commercial_code = NEW.commercial_code,
            --         caisse_code = NEW.caisse_code,
            --         soussociete_code = NEW.soussociete_code,
            --         produit_code = NEW.produit_code,
            --         prix_achat_ht = NEW.prix_achat_ht,
            --         prix_achat_ttc = NEW.prix_achat_ttc,
            --         quantite = NEW.quantite,
            --         qte_demande = NEW.qte_demande,
            --         prix_ht = NEW.prix_ht,
            --         prix_ttc = NEW.prix_ttc,
            --         p_tva = NEW.p_tva,
            --         taux_tva = NEW.taux_tva,
            --         remise = NEW.remise,
            --         type = NEW.type,
            --         num_serie = NEW.num_serie,
            --         numero = NEW.numero,
            --         configuration = NEW.configuration,
            --         etat = NEW.etat,
            --         isSync = NEW.isSync,
            --         wavesoft = NEW.wavesoft,
            --         num_lot = NEW.num_lot,
            --         created_at = NEW.created_at,
            --         updated_at = NEW.updated_at,
            --         date = NEW.date,
            --         date_accept = NEW.date_accept,
            --         from_stock = NEW.from_stock;
            --     END;
            END IF;
            END LOOP;
            CLOSE lignes;
        END

DELIMITER $$;
CREATE TRIGGER on_delete_mouvements 
AFTER DELETE ON mouvements
    FOR EACH ROW 
        BEGIN

            -- when delet add mvt line to mouvements_deleted_table
            INSERT INTO `mouvements_deleted`
                (
                    `id`, `magasinier_code`, `depot_code`, `commercial_code`, `caisse_code`, `soussociete_code`, 
                    `produit_code`, `prix_achat_ht`, `prix_achat_ttc`, `quantite`, `qte_demande`, `prix_ht`, 
                    `prix_ttc`, `p_tva`, `taux_tva`, `remise`, `type`, `num_serie`, `numero`, `configuration`, 
                    `etat`, `isSync`, `wavesoft`, `num_lot`, `deleted_at`, `created_at`, `updated_at`, `date`, 
                    `date_accept`, `from_stock`) 
            VALUES (
                    OLD.id, OLD.magasinier_code, OLD.depot_code, OLD.commercial_code, OLD.caisse_code, OLD.soussociete_code, 
                    OLD.produit_code, OLD.prix_achat_ht, OLD.prix_achat_ttc, OLD.quantite, OLD.qte_demande, OLD.prix_ht, 
                    OLD.prix_ttc, OLD.p_tva, OLD.taux_tva, OLD.remise, OLD.type, OLD.num_serie, OLD.numero, OLD.configuration, 
                    OLD.etat, OLD.isSync, OLD.wavesoft, OLD.num_lot, OLD.deleted_at, OLD.created_at, OLD.updated_at, OLD.date, 
                    OLD.date_accept, OLD.from_stock
            );
            -- check the stock and update quantite
            IF OLD.type="chargement" AND OLD.from_stock=1 THEN 
                IF OLD.etat="refused" THEN
                    BEGIN
                    UPDATE stock_depots SET quantite=quantite - OLD.quantite WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
                    END;
                ELSE
                    BEGIN
                    UPDATE stock_depots SET quantite=quantite + OLD.quantite  WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
                    END;
                END IF;
            -- check the stock and update quantite
            ELSEIF OLD.type="chargement" AND OLD.from_stock_ri=1 THEN 
                IF OLD.etat="refused" THEN
                    BEGIN
                    UPDATE stock_depots SET retour=retour - OLD.quantite WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
                    END;
                ELSE
                    BEGIN
                    UPDATE stock_depots SET retour=retour + OLD.quantite  WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
                    END;
                END IF;
            ELSEIF OLD.type='retour' and OLD.etat <> "refused" THEN
            	BEGIN
                UPDATE stock_depots SET quantite=quantite - OLD.quantite WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
                END;
            ELSEIF OLD.type='retourI' THEN
            	BEGIN
                UPDATE stock_depots SET retour=retour - OLD.quantite WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
                END;
            ELSEIF OLD.type='dlc' THEN
            	BEGIN
                UPDATE stock_depots SET dlc=dlc - OLD.quantite WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
            	END;
            ELSEIF OLD.type='casse' THEN
            	BEGIN
                UPDATE stock_depots SET casse=casse - OLD.quantite WHERE `produit_code`=OLD.produit_code AND `soussociete_code`=OLD.soussociete_code;
                END;
            -- ELSEIF OLD.type = 'dc' THEN
            --     BEGIN
            --         UPDATE mouvements_dc SET
            --             magasinier_code=OLD.magasinier_code, depot_code=OLD.depot_code, commercial_code=OLD.commercial_code, caisse_code=OLD.caisse_code, 
            --             soussociete_code=OLD.soussociete_code, produit_code=OLD.produit_code, prix_achat_ht=OLD.prix_achat_ht, 
            --             prix_achat_ttc=OLD.prix_achat_ttc, quantite=OLD.quantite, 
            --             qte_demande=OLD.qte_demande, prix_ht=OLD.prix_ht, prix_ttc=OLD.prix_ttc, 
            --             p_tva=OLD.p_tva, taux_tva=OLD.taux_tva, remise=OLD.remise, type=OLD.type,
            --             num_serie=OLD.num_serie, numero=OLD.numero, configuration=OLD.configuration, 
            --             etat=OLD.etat, isSync=OLD.isSync, wavesoft=OLD.wavesoft, num_lot=OLD.num_lot, created_at=OLD.created_at, updated_at=OLD.updated_at, 
            --             date=OLD.date, date_accept=OLD.date_accept, from_stock=OLD.from_stock
            --         WHERE id=OLD.id;
            --     END;
            END IF;       
        END
