Advertisement
akozhomka

Untitled

Aug 2nd, 2021
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MySQL 6.82 KB | None | 0 0
  1. create definer = yii_doc@localhost trigger sklad_date
  2.     before update
  3.     on __return_registry
  4.     for each row
  5. BEGIN
  6.     -- sklad_date и skladprihod_date
  7.     IF (
  8.         (OLD.sklad_date IS NOT NULL && NEW.sklad_date IS NULL)
  9.         || (OLD.sklad_date IS NULL && NEW.sklad_date IS NOT NULL)
  10.         || (NEW.sklad_date != OLD.sklad_date)
  11.     ) THEN
  12.         signal sqlstate '45000' set message_text = 'Ошибка: нельзя редактировать поле sklad_date';
  13.     END IF;
  14.  
  15.     IF (NEW.kol_storage IS NOT NULL && OLD.kol_storage IS NULL) THEN
  16.         SET NEW.storage_user = USER();
  17.     END IF;
  18.  
  19.     IF (NEW.kol_supplier IS NOT NULL && OLD.kol_supplier IS NULL) THEN
  20.         SET NEW.return_user = USER();
  21.     END IF;
  22.  
  23.     IF (
  24.         (OLD.skladprihod_date IS NOT NULL && NEW.skladprihod_date IS NULL)
  25.         || (OLD.skladprihod_date IS NULL && NEW.skladprihod_date IS NOT NULL)
  26.         || (NEW.skladprihod_date != OLD.skladprihod_date)
  27.     ) THEN
  28.         signal sqlstate '45000' set message_text = 'Ошибка: нельзя редактировать поле skladprihod_date';
  29.     END IF;
  30.  
  31.     IF (
  32.         (SUBSTRING_INDEX(CURRENT_USER(), "@", 1) != "sklad_chigakovskiy"
  33.             AND SUBSTRING_INDEX(CURRENT_USER(), "@", 1) != "manager_muz"
  34.             AND SUBSTRING_INDEX(CURRENT_USER(), "@", 1) != "Sklad_zab"
  35.             AND SUBSTRING_INDEX(CURRENT_USER(), "@", 1) != "makeev"
  36.             AND SUBSTRING_INDEX(CURRENT_USER(), "@", 1) != "zakupki_valik"
  37.             AND SUBSTRING_INDEX(CURRENT_USER(), "@", 1) != "yii_doc"
  38.         )
  39.         && ((OLD.sklad_kol IS NULL && NEW.sklad_kol IS NOT NULL) || (NEW.sklad_kol != OLD.sklad_kol))
  40.     ) THEN
  41.         signal sqlstate '45000' set message_text = 'Ошибка: нельзя редактировать (НЕТ ПРАВ) поле sklad_kol';
  42.     END IF;
  43.  
  44.     IF (OLD.sklad_date IS NULL AND NEW.sklad_kol IS NOT NULL) THEN
  45.        SET NEW.sklad_date = NOW();
  46.     END IF;
  47.  
  48.     IF (OLD.skladprihod_date IS NULL AND NEW.skladprihod_kol IS NOT NULL) THEN
  49.        SET NEW.skladprihod_date = NOW();
  50.     END IF;
  51.  
  52.     -- запрет ручного редактирования date_supplier
  53.     IF (NEW.date_supplier<>OLD.date_supplier || (NEW.date_supplier IS NULL && OLD.date_supplier IS NOT NULL)) THEN
  54.         signal sqlstate '45000' set message_text = 'Ошибка: нельзя редактировать поле date_supplier';
  55.     END IF;
  56.  
  57.     IF NEW.kol_return < NEW.kol_storage THEN
  58.            signal sqlstate '45000' set message_text = 'Ошибка: кол-во товаров на складе не может превышать кол-во возвратов';
  59.     END IF;
  60.  
  61.     IF NEW.kol_storage < NEW.kol_supplier THEN
  62.            signal sqlstate '45000' set message_text = 'Ошибка: кол-во возвратов поставщику не может превышать кол-во товаров на складе';
  63.     END IF;
  64.  
  65.     IF NOT (NEW.diff_postav_return <=> OLD.diff_postav_return) THEN
  66.         SET NEW.diff_postav_return_last_update  = NOW();
  67.     END IF;
  68.  
  69.     IF (NEW.kol_return > 0 AND NEW.date_return IS NULL) THEN
  70.             SET NEW.date_return = NOW();
  71.     END IF;
  72.  
  73.     IF (NEW.kol_storage IS NOT NULL AND OLD.kol_storage IS NULL) THEN
  74.         SET NEW.date_storage = NOW();
  75.         INSERT INTO yii_doc.return_registry_log (old_kol_storage, new_kol_storage, date, user) VALUES (OLD.kol_storage, NEW.kol_storage, NOW(), SYSTEM_USER());
  76.     END IF;
  77.  
  78.     IF ((MONTH(NOW())=MONTH(OLD.date_supplier) AND YEAR(NOW()) = YEAR(OLD.date_supplier)) || (OLD.date_supplier IS NULL)) THEN
  79.         IF !(NEW.kol_supplier <=> OLD.kol_supplier) THEN
  80.  
  81.             SET NEW.date_supplier = NOW();
  82.  
  83.             INSERT INTO return_registry_log (old_kol_supplier, new_kol_supplier, date, user, invoice_id, fin_in_id)
  84.             VALUES (OLD.kol_supplier, NEW.kol_supplier, NOW(), SYSTEM_USER(),NEW.invoice_fin_number,NEW.fin_in_id);
  85.         END IF;
  86.     ELSE
  87.         IF !(NEW.kol_supplier <=> OLD.kol_supplier) THEN
  88.             SET NEW.date_supplier_correction = NOW();
  89.         END IF;
  90.     END IF;
  91.  
  92.     INSERT INTO operblock_logs.return_registry_log (
  93.         `id`
  94.         , `return_type`
  95.         , `invoice_fin_number`
  96.         , `fin_in_id`
  97.         , `kol_return`
  98.         , `kol_storage`
  99.         , `kol_supplier`
  100.         , `date_return`
  101.         , `date_storage`
  102.         , `date_supplier`
  103.         , `invoice_return_id`
  104.         , `remark`
  105.         , `nova_poshta_number`
  106.         , `num_naklad`
  107.         , `date_naklad`
  108.         , `diff_postav_return`
  109.         , `guarantee_status`
  110.         , `guarantee_date`
  111.         , `guarantee_remark`
  112.         , `repay_period`
  113.         , `packaging`
  114.         , `completeness`
  115.         , `installation`
  116.         , `vin_code_selection`
  117.         , `log_event`
  118.         , `log_user`
  119.         , `log_date`
  120.         , `sklad_kol`
  121.         , `skladprihod_kol`
  122.         , `sklad_date`
  123.         , `skladprihod_date`
  124.     )
  125.     VALUES (
  126.         NEW.id
  127.         , NEW.return_type
  128.         , NEW.invoice_fin_number
  129.         , NEW.fin_in_id
  130.         , NEW.kol_return
  131.         , NEW.kol_storage
  132.         , NEW.kol_supplier
  133.         , NEW.date_return
  134.         , NEW.date_storage
  135.         , NEW.date_supplier
  136.         , NEW.invoice_return_id
  137.         , NEW.remark
  138.         , NEW.nova_poshta_number
  139.         , NEW.num_naklad
  140.         , NEW.date_naklad
  141.         , NEW.diff_postav_return
  142.         , NEW.guarantee_status
  143.         , NEW.guarantee_date
  144.         , NEW.guarantee_remark
  145.         , NEW.repay_period
  146.         , NEW.packaging
  147.         , NEW.completeness
  148.         , NEW.installation
  149.         , NEW.vin_code_selection
  150.         , 'UPDATE'
  151.         , USER()
  152.         , NOW()
  153.         , NEW.sklad_kol
  154.         , NEW.skladprihod_kol
  155.         , NEW.sklad_date
  156.         , NEW.skladprihod_date
  157.     );
  158.  
  159.     SET @new_kol_storage = IF(NEW.kol_storage IS NOT  NULL, NEW.kol_storage, 0);
  160.     SET @old_kol_storage = IF(OLD.kol_storage IS NOT  NULL, OLD.kol_storage, 0);
  161.  
  162.     IF @old_kol_storage <> @new_kol_storage AND NEW.return_type NOT IN (5, 6) THEN
  163.         SET @fin_supplier := (
  164.             SELECT f.supplier_id
  165.             FROM fin.fin_in f
  166.             WHERE f.id = NEW.fin_in_id
  167.         );
  168.  
  169.         -- Если витрина
  170.         IF @fin_supplier = 24 THEN
  171.             SET @return_count = (@new_kol_storage - @old_kol_storage);
  172.             SET @prices_all_id = (
  173.                 SELECT
  174.                     op.price_all_id
  175.                 FROM fin.fin_in f
  176.                 LEFT JOIN yii_doc.order_product op ON op.id = f.product_id
  177.                 WHERE f.id = NEW.fin_in_id
  178.             );
  179.  
  180.             IF (@return_count != 0) THEN
  181.                 INSERT INTO yii_doc.vitrina_return_product (pa_id, return_registry_id, count)
  182.                 VALUES (@prices_all_id, NEW.id, @return_count);
  183.             END IF;
  184.         END IF;
  185.     END IF;
  186. END;
  187.  
  188.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement