]> gitweb.erp-flowers.ru Git - yii-erp24/.git/commitdiff
new way of including old project files
authorAlexander Smirnov <fredeom@mail.ru>
Wed, 28 Feb 2024 08:41:33 +0000 (11:41 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Wed, 28 Feb 2024 08:41:33 +0000 (11:41 +0300)
214 files changed:
erp24/actions/bonus/SexAction.php [new file with mode: 0644]
erp24/controllers/BonusController.php
erp24/controllers/SalesChecksController.php [new file with mode: 0644]
erp24/controllers/ShipmentController.php [changed mode: 0755->0644]
erp24/controllers/ShipmentController_old.php [new file with mode: 0755]
erp24/inc/amo.php
erp24/inc/api.php
erp24/inc/base.php
erp24/inc/base_new.php
erp24/inc/bonus.php
erp24/inc/cache.php [new file with mode: 0644]
erp24/inc/checks.php
erp24/inc/cloudpayments.php
erp24/inc/compress.php
erp24/inc/compress_timestamp.php
erp24/inc/crmconf.php
erp24/inc/db-test.php [new file with mode: 0644]
erp24/inc/db.php
erp24/inc/db2.php
erp24/inc/db_bz24.php
erp24/inc/design.php
erp24/inc/design_new.php
erp24/inc/functionsFiedlsData.php
erp24/inc/functionsFiedlsData_______.php [new file with mode: 0644]
erp24/inc/functionsFiedlsData_old.php [new file with mode: 0644]
erp24/inc/gps.php
erp24/inc/image.php
erp24/inc/integrations.php
erp24/inc/mail.php
erp24/inc/models/shipment.php [new file with mode: 0644]
erp24/inc/models/shipment_waybill_products.php [new file with mode: 0644]
erp24/inc/models/shipment_waybills.php [new file with mode: 0644]
erp24/inc/phpqrcode/INSTALL
erp24/inc/salary.php
erp24/inc/scriptsale.php
erp24/inc/shipment.php
erp24/inc/sms.class.php
erp24/inc/thumbs.php
erp24/inc/uni.php
erp24/inc/uni2.php
erp24/inc/universal.php
erp24/inc/universal_model.php [new file with mode: 0644]
erp24/inc/universal_model_old.php [new file with mode: 0644]
erp24/inc/universal_model_types/button.php [new file with mode: 0644]
erp24/inc/universal_model_types/checkbox.php [new file with mode: 0644]
erp24/inc/universal_model_types/created_at.php [new file with mode: 0644]
erp24/inc/universal_model_types/created_by.php [new file with mode: 0644]
erp24/inc/universal_model_types/date.php [new file with mode: 0644]
erp24/inc/universal_model_types/hidden.php [new file with mode: 0644]
erp24/inc/universal_model_types/multiple.php [new file with mode: 0644]
erp24/inc/universal_model_types/number.php [new file with mode: 0644]
erp24/inc/universal_model_types/numeric.php [new file with mode: 0644]
erp24/inc/universal_model_types/password.php [new file with mode: 0644]
erp24/inc/universal_model_types/search.php [new file with mode: 0644]
erp24/inc/universal_model_types/select.php [new file with mode: 0644]
erp24/inc/universal_model_types/status.php [new file with mode: 0644]
erp24/inc/universal_model_types/submit.php [new file with mode: 0644]
erp24/inc/universal_model_types/table.php [new file with mode: 0644]
erp24/inc/universal_model_types/table_function_row.php [new file with mode: 0644]
erp24/inc/universal_model_types/table_models/money_transactions.php [new file with mode: 0644]
erp24/inc/universal_model_types/table_models/order_products.php [new file with mode: 0644]
erp24/inc/universal_model_types/table_models/shipment.php [new file with mode: 0644]
erp24/inc/universal_model_types/table_models/shipment_waybill_products.php [new file with mode: 0644]
erp24/inc/universal_model_types/table_models/shipment_waybills_related.php [new file with mode: 0644]
erp24/inc/universal_model_types/tel.php [new file with mode: 0644]
erp24/inc/universal_model_types/text.php [new file with mode: 0644]
erp24/inc/universal_model_types/textarea.php [new file with mode: 0644]
erp24/inc/universal_model_types/universal_lists/admin.php [new file with mode: 0644]
erp24/inc/universal_model_types/universal_lists/admin_group.php [new file with mode: 0644]
erp24/inc/universal_model_types/universal_lists/products.php [new file with mode: 0644]
erp24/inc/universal_model_types/universal_lists/products_with_prices.php [new file with mode: 0644]
erp24/inc/universal_model_types/universal_lists/shipment.php [new file with mode: 0644]
erp24/inc/universal_model_types/universal_lists/shipment_waybills.php [new file with mode: 0644]
erp24/inc/universal_model_types/universal_lists/supplier.php [new file with mode: 0644]
erp24/inc/universal_model_view.php [new file with mode: 0644]
erp24/inc/upload.php
erp24/modul/bonus/sex.php
erp24/modul/sales_checks/index.php
erp24/modul/shipment/ajaxDivisionAutoHandStart.php [new file with mode: 0644]
erp24/modul/shipment/ajaxDivisionInfo.php [new file with mode: 0644]
erp24/modul/shipment/ajaxDivisionUpdate.php [new file with mode: 0644]
erp24/modul/shipment/ajaxField.php [new file with mode: 0644]
erp24/modul/shipment/ajaxFieldEdit.php [new file with mode: 0644]
erp24/modul/shipment/ajaxProductOption.php [new file with mode: 0644]
erp24/modul/shipment/ajaxUpdateStep.php
erp24/modul/shipment/ajaxUpdateStoreZakup.php [new file with mode: 0644]
erp24/modul/shipment/config.php
erp24/modul/shipment/config_sort.php
erp24/modul/shipment/divisionClone.php [new file with mode: 0644]
erp24/modul/shipment/divisionStore.php [new file with mode: 0644]
erp24/modul/shipment/divisionStorePrint.php [new file with mode: 0644]
erp24/modul/shipment/edit.php
erp24/modul/shipment/fields/auto_purchase_formula.php [new file with mode: 0644]
erp24/modul/shipment/fields/auto_purchase_formula_all.php [new file with mode: 0644]
erp24/modul/shipment/fields/color_percent.php [new file with mode: 0644]
erp24/modul/shipment/fields/cost_price_auto.php [new file with mode: 0644]
erp24/modul/shipment/fields/cost_price_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/delta_sales4week_supplier.php [new file with mode: 0644]
erp24/modul/shipment/fields/delta_sales7_and_supplier.php [new file with mode: 0644]
erp24/modul/shipment/fields/delta_zakup.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_auto.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_auto_all.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_auto_need.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_auto_need_all.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_hand.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_price_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_ratio.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_store.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_store_hand.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_store_ratio.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_store_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/division_summ_all.php [new file with mode: 0644]
erp24/modul/shipment/fields/entrance_cnt_7days.php [new file with mode: 0644]
erp24/modul/shipment/fields/goods_in_transit.php [new file with mode: 0644]
erp24/modul/shipment/fields/min_lot.php [new file with mode: 0644]
erp24/modul/shipment/fields/min_order.php [new file with mode: 0644]
erp24/modul/shipment/fields/order_supplier_sum.php [new file with mode: 0644]
erp24/modul/shipment/fields/price_zakup_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/purchase_fact_difference.php [new file with mode: 0644]
erp24/modul/shipment/fields/purchase_logistic.php [new file with mode: 0644]
erp24/modul/shipment/fields/purchase_price.php [new file with mode: 0644]
erp24/modul/shipment/fields/purchase_price_zakup.php [new file with mode: 0644]
erp24/modul/shipment/fields/purchase_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_fact.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_rejection.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_rejection_delta.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_storage.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_warehouseman_fact.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_warehouseman_fact_defective_related.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_warehouseman_fact_related.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_warehouseman_fact_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_zakup_fact.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_zakup_fact_sum.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_zakup_fact_summ.php [new file with mode: 0644]
erp24/modul/shipment/fields/quantity_zakup_new.php [new file with mode: 0644]
erp24/modul/shipment/fields/sales_4weeks_cnt.php [new file with mode: 0644]
erp24/modul/shipment/fields/sales_7day_amount_division.php [new file with mode: 0644]
erp24/modul/shipment/fields/sales_7day_division.php [new file with mode: 0644]
erp24/modul/shipment/fields/sales_amount.php [new file with mode: 0644]
erp24/modul/shipment/fields/sales_cnt.php [new file with mode: 0644]
erp24/modul/shipment/fields/sales_division_4weeks_cnt_avg.php [new file with mode: 0644]
erp24/modul/shipment/fields/scheduled_delivery_cnt.php [new file with mode: 0644]
erp24/modul/shipment/fields/score.php [new file with mode: 0644]
erp24/modul/shipment/fields/storehouse_balance.php [new file with mode: 0644]
erp24/modul/shipment/fields/storehouse_balance_store.php [new file with mode: 0644]
erp24/modul/shipment/fields/write_downs.php [new file with mode: 0644]
erp24/modul/shipment/fields/write_offs_4week_cnt_avg.php [new file with mode: 0644]
erp24/modul/shipment/fields/write_offs_4week_sum.php [new file with mode: 0644]
erp24/modul/shipment/fields/write_offs_comments.php [new file with mode: 0644]
erp24/modul/shipment/fields/write_offs_division.php [new file with mode: 0644]
erp24/modul/shipment/fields/write_offs_sum.php [new file with mode: 0644]
erp24/modul/shipment/fieldsConfig.php [new file with mode: 0644]
erp24/modul/shipment/fieldsData.php
erp24/modul/shipment/fieldsData2.php [new file with mode: 0644]
erp24/modul/shipment/fieldsData_____.php [new file with mode: 0644]
erp24/modul/shipment/functionsShipment.php [new file with mode: 0644]
erp24/modul/shipment/index.php
erp24/modul/shipment/poisk-item.php [new file with mode: 0644]
erp24/modul/shipment/productStoresSort.php [new file with mode: 0644]
erp24/modul/shipment/shipment.php [new file with mode: 0644]
erp24/modul/shipment/shipmentEdit.php [new file with mode: 0644]
erp24/modul/shipment/shipment_waybill_products.php [new file with mode: 0644]
erp24/modul/shipment/shipment_waybills.php [new file with mode: 0644]
erp24/modul/shipment/shipment_waybills_edit.php [new file with mode: 0644]
erp24/modul/shipment/stats.php [new file with mode: 0644]
erp24/modul/shipment/statuses_edit.php
erp24/modul/shipment/storeOrderScore.php [new file with mode: 0644]
erp24/modul/shipment/storeOrders.php [new file with mode: 0644]
erp24/templates/bottom.php
erp24/templates/top.php
erp24/views/bonus/sex.php [new file with mode: 0644]
erp24/views/sales-checks/index.php [new file with mode: 0644]
erp24/views/shipment/add.php [deleted file]
erp24/views/shipment/ajax-admin-online.php [deleted file]
erp24/views/shipment/ajax-division.php [deleted file]
erp24/views/shipment/ajax-edit-field-value.php [deleted file]
erp24/views/shipment/ajax-update-fields-data.php [deleted file]
erp24/views/shipment/ajax-update-step.php [deleted file]
erp24/views/shipment/division-print-edit.php [deleted file]
erp24/views/shipment/division-print-edit2.php [deleted file]
erp24/views/shipment/division-print.php [deleted file]
erp24/views/shipment/division.php [deleted file]
erp24/views/shipment/fields-data.php [deleted file]
erp24/views/shipment/fields-data2.php [deleted file]
erp24/views/shipment/fields.php [deleted file]
erp24/views/shipment/index.php [changed mode: 0755->0644]
erp24/views/shipment/polnogramm.php [deleted file]
erp24/views/shipment/set-division-priority.php [deleted file]
erp24/views/shipment/store-planogram-logi.php [deleted file]
erp24/views/shipment/store-products-fact-edit.php [deleted file]
erp24/views/shipment/store-products-fact.php [deleted file]
erp24/views/shipment/write_off.php [deleted file]
erp24/views/shipment_old/add.php [new file with mode: 0644]
erp24/views/shipment_old/ajax-admin-online.php [new file with mode: 0644]
erp24/views/shipment_old/ajax-division.php [new file with mode: 0644]
erp24/views/shipment_old/ajax-edit-field-value.php [new file with mode: 0644]
erp24/views/shipment_old/ajax-update-fields-data.php [new file with mode: 0644]
erp24/views/shipment_old/ajax-update-step.php [new file with mode: 0644]
erp24/views/shipment_old/division-print-edit.php [new file with mode: 0644]
erp24/views/shipment_old/division-print-edit2.php [new file with mode: 0644]
erp24/views/shipment_old/division-print.php [new file with mode: 0644]
erp24/views/shipment_old/division.php [new file with mode: 0644]
erp24/views/shipment_old/fields-data.php [new file with mode: 0644]
erp24/views/shipment_old/fields-data2.php [new file with mode: 0644]
erp24/views/shipment_old/fields.php [new file with mode: 0644]
erp24/views/shipment_old/index.php [new file with mode: 0755]
erp24/views/shipment_old/polnogramm.php [new file with mode: 0644]
erp24/views/shipment_old/set-division-priority.php [new file with mode: 0644]
erp24/views/shipment_old/store-planogram-logi.php [new file with mode: 0644]
erp24/views/shipment_old/store-products-fact-edit.php [new file with mode: 0644]
erp24/views/shipment_old/store-products-fact.php [new file with mode: 0644]
erp24/views/shipment_old/write_off.php [new file with mode: 0644]

diff --git a/erp24/actions/bonus/SexAction.php b/erp24/actions/bonus/SexAction.php
new file mode 100644 (file)
index 0000000..4e2c174
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+namespace yii_app\actions\bonus;
+
+use yii\base\Action;
+
+class SexAction extends Action
+{
+    public function run() {
+        return $this->controller->render('sex');
+    }
+}
\ No newline at end of file
index 27babf42927ae6d5c71e856e2a1ed61f38fccb20..6dea2810028a3daf695f9392622a43188976fc9a 100644 (file)
@@ -15,6 +15,7 @@ class BonusController extends \yii\web\Controller
             'ajax-user-add-stop-list' => \yii_app\actions\bonus\AjaxUserAddStopListAction::class,
             'ajax-user-remove-stop-list' => \yii_app\actions\bonus\AjaxUserRemoveStopListAction::class,
             'ajax-bonus-remove' => \yii_app\actions\bonus\AjaxBonusRemoveAction::class,
+            'sex' => \yii_app\actions\bonus\SexAction::class,
         ];
     }
 }
\ No newline at end of file
diff --git a/erp24/controllers/SalesChecksController.php b/erp24/controllers/SalesChecksController.php
new file mode 100644 (file)
index 0000000..0456731
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+namespace app\controllers;
+
+use yii\web\Controller;
+
+class SalesChecksController extends Controller
+{
+    public function actionIndex() {
+        return $this->render('index');
+    }
+}
\ No newline at end of file
old mode 100755 (executable)
new mode 100644 (file)
index 9ba0173..182cbbb
@@ -1,36 +1,12 @@
 <?php
-declare(strict_types = 1);
 
 namespace app\controllers;
 
-class ShipmentController extends \yii\web\Controller
-{
+use yii\web\Controller;
 
-    public function actions()
-    {
-        return [
-            'index' => \yii_app\actions\shipment\IndexAction::class,
-            'add' => \yii_app\actions\shipment\AddAction::class,
-            'fields' => \yii_app\actions\shipment\FieldsAction::class,
-            'division' => \yii_app\actions\shipment\DivisionAction::class,
-            'ajax-division' => \yii_app\actions\shipment\AjaxDivisionAction::class,
-            'ajax-admin-online' => \yii_app\actions\shipment\AjaxAdminOnlineAction::class,
-            'fields-data2' => \yii_app\actions\shipment\FieldsData2Action::class,
-            'ajax-update-fields-data' => \yii_app\actions\shipment\AjaxUpdateFieldsDataAction::class,
-            'ajax-update-step' => \yii_app\actions\shipment\AjaxUpdateStepAction::class,
-            'ajax-edit-field-value' => \yii_app\actions\shipment\AjaxEditFieldValueAction::class,
-            'fields-data' => \yii_app\actions\shipment\FieldsDataAction::class,
-            'ajax-update-fields-data-test' => \yii_app\actions\shipment\AjaxUpdateFieldsDataTestAction::class,
-            'division-print' => \yii_app\actions\shipment\DivisionPrintAction::class,
-            'division-print-edit2' => \yii_app\actions\shipment\DivisionPrintEdit2Action::class,
-            'division-print-edit' => \yii_app\actions\shipment\DivisionPrintEditAction::class,
-            'set-division-priority' => \yii_app\actions\shipment\SetDivisionPriorityAction::class,
-            'store-products-fact' => \yii_app\actions\shipment\StoreProductsFactAction::class,
-            'store-products-fact-edit' => \yii_app\actions\shipment\StoreProductsFactEditAction::class,
-            'polnogramm' => \yii_app\actions\shipment\PolnogrammAction::class,
-            'store-planogram-logi' => \yii_app\actions\shipment\StorePlanogramLogiAction::class,
-            'write_off' => \yii_app\actions\shipment\WriteOffAction::class,
-        ];
+class ShipmentController extends Controller
+{
+    public function actionIndex() {
+        return $this->render('index');
     }
-
-}
+}
\ No newline at end of file
diff --git a/erp24/controllers/ShipmentController_old.php b/erp24/controllers/ShipmentController_old.php
new file mode 100755 (executable)
index 0000000..b22711a
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+declare(strict_types = 1);
+
+namespace app\controllers;
+
+class ShipmentControllerOld extends \yii\web\Controller
+{
+
+    public function actions()
+    {
+        return [
+            'index' => \yii_app\actions\shipment\IndexAction::class,
+            'add' => \yii_app\actions\shipment\AddAction::class,
+            'fields' => \yii_app\actions\shipment\FieldsAction::class,
+            'division' => \yii_app\actions\shipment\DivisionAction::class,
+            'ajax-division' => \yii_app\actions\shipment\AjaxDivisionAction::class,
+            'ajax-admin-online' => \yii_app\actions\shipment\AjaxAdminOnlineAction::class,
+            'fields-data2' => \yii_app\actions\shipment\FieldsData2Action::class,
+            'ajax-update-fields-data' => \yii_app\actions\shipment\AjaxUpdateFieldsDataAction::class,
+            'ajax-update-step' => \yii_app\actions\shipment\AjaxUpdateStepAction::class,
+            'ajax-edit-field-value' => \yii_app\actions\shipment\AjaxEditFieldValueAction::class,
+            'fields-data' => \yii_app\actions\shipment\FieldsDataAction::class,
+            'ajax-update-fields-data-test' => \yii_app\actions\shipment\AjaxUpdateFieldsDataTestAction::class,
+            'division-print' => \yii_app\actions\shipment\DivisionPrintAction::class,
+            'division-print-edit2' => \yii_app\actions\shipment\DivisionPrintEdit2Action::class,
+            'division-print-edit' => \yii_app\actions\shipment\DivisionPrintEditAction::class,
+            'set-division-priority' => \yii_app\actions\shipment\SetDivisionPriorityAction::class,
+            'store-products-fact' => \yii_app\actions\shipment\StoreProductsFactAction::class,
+            'store-products-fact-edit' => \yii_app\actions\shipment\StoreProductsFactEditAction::class,
+            'polnogramm' => \yii_app\actions\shipment\PolnogrammAction::class,
+            'store-planogram-logi' => \yii_app\actions\shipment\StorePlanogramLogiAction::class,
+            'write_off' => \yii_app\actions\shipment\WriteOffAction::class,
+        ];
+    }
+
+}
index b9070c0591cc6aac131d0c2dd1f353159b3a6588..03db6022486eff34f2b17c0cfab10104766d2ffa 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 function deal($deal,$field_tip='lead') {
 global $arr_type, $db ;
index 588bcc4051e1f18ed2af0b2291705ef0a9ae4e2a..19079ec6e975ac8e53a9a677de8f0c731dfeaf69 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 function func_import_json($value,$tip,$max="") {
 
index 887ff0a4f94f67122b8b328bf44109bd4ae35fa5..48f0fc636b240b5540573dc8bf7c6247f2dbc106 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 global $mysqli;
 
 
index 73f0214e7e36ac35d48d4b001a4d6e207ed1f4fe..a59c43c6b02b222bc5597dbf4923c856e07a7506 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 
 // форматированно выводит ошибки при добавлении данных через формы
@@ -118,7 +118,7 @@ function date_get_string_month($num) {
 
 
 
-//if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
+//if (get_magic_quotes_gpc()) {
 // $el=stripslashes($el);
 //$el = str_replace("\\","/",$el);
 //$el = str_replace("\/","/",$el);
@@ -451,13 +451,13 @@ return $text;
              }
          }
          
-         $output .= $info;
+         @$output .= $info;
          // Определяем строку запроса
          $query_string_sep = (strpos($this->baseURL, '?') === FALSE) ? '?p=' : '&amp;p=';
          $this->baseURL = $this->baseURL.$query_string_sep;
          
          // Определяем текущую страницу
-         $this->currentPage = $_GET[$this->queryStringSegment];
+         $this->currentPage = @$_GET[$this->queryStringSegment];
          
          if (!is_numeric($this->currentPage) || $this->currentPage == 0){
              $this->currentPage = 1;
@@ -724,8 +724,27 @@ $str = strtolower($str);
         */
     }
     
-// функция генерирует GUID с префиксом и берет дату текущую и рандом   0000d701-7914-4640-8172-bc1f8c969ad8  
-function create_guid_my() { 
-  $str= "er".date("ymd")."-".date("Hi")."-".date("hs")."-".bin2hex(random_bytes(2))."-".bin2hex(random_bytes(6))."";
+// функция генерирует GUID с префиксом и берет дату текущую и рандом   0000d701-7914-4640-8172-bc1f8c969ad8
+function create_guid_my_old($prefix="01",$id_db="") { 
+  $str= "$prefix".date("ym")."-".date("di")."-".date("hs")."-".bin2hex(random_bytes(2))."-".bin2hex(random_bytes(6))."";
+  //abcdef-7b73-42c0-0001-000000001123 
+  return strtolower($str);
+}    
+
+
+/* $prefix
+01 - создание чека 
+02 - возврат чека 
+03 - add накладной 
+04 - add перемещение  
+06 - списание
+$id_db - уникальный номер заказа или номер AUTOINCRIMENT документа из БД
+*/
+function create_guid_my($prefix="01",$id_db="") {
+ if(empty($id_db)) $id_db=rand(0,99999999);    
+  $id_db=100000000000+$id_db;    
+  $str= "$prefix".date("Ym")."-".date("di")."-".date("hs")."-".bin2hex(random_bytes(2))."-".$id_db."";
   return  strtolower($str);
-}    
\ No newline at end of file
+} 
+
+
index 0a2ad356da36b8117d082f27c46ce5625ad098dd..6d54d656f6aed6189975dc6b34b07bcfae9390c7 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 $store_arr["Ванеева 181"]=1; 
 $store_arr["Белинка"]=2; 
diff --git a/erp24/inc/cache.php b/erp24/inc/cache.php
new file mode 100644 (file)
index 0000000..1fca34b
--- /dev/null
@@ -0,0 +1,78 @@
+<?
+class Cache
+{
+       public static  $enable = true;
+       public static  $path = '/cache';
+       private static $keys = array();
+       /**
+        * Получение данных из кэша.
+        */
+       public static function get($name) 
+       {
+               if (self::$enable) {
+                       $file = __DIR__ . self::$path . '/' . $name . '.tmp';
+                       if (file_exists($file)) {
+                               return file_get_contents($file);
+                       } else {
+                               self::$keys[] = $name;
+                               return false;
+                       }                               
+               } else {
+                       return '';
+               }
+       }
+       /**
+        * Отправка данных в кэш.
+        */
+       public static function set($content) 
+       {
+               if (self::$enable) {
+                       $name = array_pop(self::$keys);
+                       $dir  = __DIR__ . self::$path . '/';
+                       if (!is_dir($dir)) {
+                               @mkdir($dir, 0777, true);
+                       }
+                       file_put_contents($dir . '/' . $name . '.tmp', $content);
+               } 
+               return $content;
+       }
+       /**
+        * Начало кэширования фрагмента.
+        */
+       public static function begin($name) 
+       {
+               if ($content = self::get($name)) {
+                       echo $content;
+                       return false;
+               } else {
+                       ob_start();
+                       return true;
+               }
+       }
+       
+       /**
+        * Завершение кэширования фрагмента.
+        */
+       public static function end() 
+       {
+               echo self::set(ob_get_clean());
+       }
+       
+       /**
+        * Очистка кэша.
+        */
+       public static function clear() 
+       {
+               $dir = __DIR__ . self::$path;
+               foreach (glob($dir . '/*') as $file) {
+                       if (is_file($file)) {
+                               unlink($file);
+                       }
+               }
+       }
+}
+
index 32e049dad51b4e46151c62f6cd3c213c1b8ee389..acb0c7cc6fbed3d41172a827f2b6fd31eecc3a3c 100644 (file)
@@ -1,11 +1,11 @@
-<?php
+<?
 
 
 // обновляем заказ если его нет в системе вносим - заказ формируем из амо
 function create_order_from_amo($amo_id="") {
  global $db, $db2,$ACCESS_TOKEN;        
 if(!empty($amo_id)) {
-include_once("inc/db2.php");  
+include_once("inc/db.php");  
     
 if(empty($ACCESS_TOKEN)) include_once"/var/www/www-root/data/www/amo.bazacvetov24.ru/amo/amo_inc.php";
 
@@ -182,26 +182,27 @@ if(!empty($data_cnt)) {
 echo"<br>НЕ удаляем cтарую информацию id=". $row["id"] ."";   
 
 $summ=0;
+/*
  $data2 = $db2::getRows("SELECT * FROM site_order_items_sostav WHERE tip='1' AND guid!='' AND lid_id=?",[$row["id"]]);
   foreach ($data2 as $row2) {  
    $items2[]=array("product_id"=>$row2["guid"], "seller_id"=>$seller_id, "quantity"=>$row2["kol"], "price"=>$row2["price"], "discount"=>0);     //,"color"=>$row2["color_id"]
    $summ=$summ+$row2["price"]*$row2["kol"];    
  }
-
+*/
 $param=array();
 $upper=array("id","price","pay","delivery","store_id","payment_type_id","status_id","florist_id","dostavka_povtor_tip");
 foreach($upper as $pole) $param[$pole]=$row[$pole];     
 $param["price"]=$summ; 
 //$param["istochnik_id"]=1; 
 //$uopdet="UPDATE orders_amo SET $sql0 WHERE id=:id ";
-$db2::update("orders_amo", $where="id=:id LIMIT 1", $param);
+$db::update("orders_amo", $where="id=:id LIMIT 1", $param);
 
 mess("Обновили заказ ");
 
 
 
-
-$sid=$db2::getValue("SELECT sid FROM  site_orders WHERE id=? LIMIT 1",[$row["id"]]);
+/*
+$sid=$db::getValue("SELECT sid FROM  site_orders WHERE id=? LIMIT 1",[$row["id"]]);
 
 //echo" cid=$sid";
 $lid_id=$row["id"];
@@ -236,7 +237,7 @@ $db2::sql($sql);
 }
 ///////
 
-
+*/
 
 
 
@@ -279,24 +280,27 @@ return $row["id"];
 
 //создаем чек по заказу   
 function create_checks($lid_id){
-global $db;
+global $db,$db2;
 if(!empty($lid_id)) {    
+    
+$lid_id=preg_replace('/[^0-9]/', '',$lid_id);    
+    
 // пароверяем сделки на самовывоз и передано курьеру ставим статус положено в папку 
 $data = $db::getRows("SELECT * FROM orders_amo WHERE delivery!='Самовывоз' AND delivery!='Доставка из магазина' AND id=? LIMIT 1",[$lid_id]);
 
 $seller_id="3d8f7db1-8d67-11eb-bf83-b42e991aff6c"; // продавец
 $store_id="dbd70103-2c7b-11e9-9b87-c85b76f0e893"; // аэродромная
 $kkm_id="d0d6c742-4db8-11ea-b917-0018f353130f"; //Мочалина Г. М. ИП(Центральный склад) ??
-$payments_type_id="5ee4c07a-36f5-11ec-8900-fc349715dc38";  // оплата на сайте - старый 5ee4c07a-36f5-11ec-8900-fc349715dc38
+$payments_type_id="cd891514-855f-11ea-a625-40618658b055";  // оплата на сайте - старый cd891514-855f-11ea-a625-40618658b055
 // Оплата на карту  ??
 // оплата наличными курьеру ??? 
 $terminal_id="7909401c-703b-11ea-8b4b-0018f353130f"; //Сбербанк ПАО/Мочалина Г. М. ИП 7909401c-703b-11ea-8b4b-0018f353130f
 
 $payments_array=[
-    "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f"  ), //  09 Доставка Букетов
+    "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f"  ), //  09 Доставка Букетов
     "Перевод на карту Сбербанк"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f"  ), //, "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" //payments_type_id = наличные. kkm_id 09 Доставка
     "Наличными курьеру (+100 руб.)"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f"  ),
-    "PayPal"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38"  )   
+    "PayPal"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38"  )   
 ];
 
 
@@ -311,7 +315,7 @@ $seller_id=$db::getValue("SELECT export_val FROM export_import_table WHERE entit
 //echo" Вид оплаты ".$row["payment_type_id"]."  ".$row["pay"]."   ".$row["pay_text"]."    florist_id=".$row["florist_id"]."  seller_id =$seller_id ";
 // ставим в соответствие вид оплаты
 
-
+if(empty($seller_id)) $seller_id="00000000-0000-0000-0000-000000000000";
 
 
 $date = $db::getValue("SELECT UNIX_TIMESTAMP(date) as date FROM create_checks WHERE order_id=?  AND type='Продажа' order by date desc LIMIT 1",[$lid_id]);
@@ -326,6 +330,7 @@ $payments_type_id=$payments_array[$data["payment_type_id"]]["payments_type_id"];
 
 $summ=0; 
 $items2=array(); $payments2=array();
+/*
  $data2 = $db::getRows("SELECT * FROM site_order_items_sostav WHERE tip='1' AND guid!='' AND lid_id=?",[$row["id"]]);
   foreach ($data2 as $row2) {  
       
@@ -333,6 +338,21 @@ $items2=array(); $payments2=array();
    $items2[]=array("product_id"=>$row2["guid"], "seller_id"=>$seller_id, "quantity"=>$row2["kol"], "price"=>$row2["price"], "discount"=>0);    
     $summ=$summ+$row2["price"]*$row2["kol"];    
  }
+
+
+*/ 
+
+$products_json = $db::getValue("SELECT products_json FROM orders_amo WHERE amo_id=? order by created_at DESC LIMIT 1 ",[$lid_id]);
+$products_json = json_decode($products_json, true);
+
+
+print_r($products_json);
+
+exit();
+
+
+
 if(empty($items2)) $items2[]=array("seller_id"=>$seller_id, "product_id"=>"bdd17583-09d8-11e5-bd74-1c6f659fb563", "quantity"=>1, "price"=>1); //, "discount"=>0
 if(empty($summ)) $summ=1;
 
@@ -346,8 +366,17 @@ $payments2[]=$pays_arr;
 
 $payments2 = json_encode($payments2, JSON_UNESCAPED_UNICODE);
 $items2 = json_encode($items2, JSON_UNESCAPED_UNICODE);
+try{
 $db::sql("INSERT IGNORE INTO  create_checks  (date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (NOW(),?,?,?,?,?,?,?)",
 [$kkm_id,  $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]); 
+}
+catch (Exception $e0) {
+    echo 'Выброшено исключение: ',  $e0->getMessage(), "\n";
+    file_put_contents('modul/orders/error_create_order.txt', PHP_EOL . $e0->getMessage(), FILE_APPEND);
+}
+
+
+
 
 
 
@@ -393,16 +422,19 @@ if(empty($error)) {
    $param["seller_id"]=$data["seller_id"];
    $param["store_id"]=$data["store_id"];
    $param["order_id"]=$data["order_id"];
-   $param["check_id"]=create_guid();   
+   $param["check_id"]=create_guid_my("11","$id");  
    $param["sales_check"]=$data["check_id"];      
    $param["items"]=$data["items"];    
-   $param["payments"]=$data["payments"];       
+   $param["payments"]=$data["payments"]; 
+   
+   if(!empty($param["sales_check"])) {
    $sql="INSERT INTO create_checks (`date`,`status`,type,kkm_id,seller_id,store_id,order_id, check_id,sales_check,items, payments) 
    VALUES (NOW(), '0', 'Возврат',:kkm_id,:seller_id,:store_id,:order_id,:check_id,:sales_check,:items,:payments)";   
-   // echo $sql;  
+    echo $sql;  
    $db::sql($sql,$param);   
    
    mess("Чек на возврат создан");
+  } else echo("Чек на возврат не создан так как нет GUID чека продажи"); 
    
       
   } 
@@ -422,27 +454,28 @@ if(empty($error)) {
 //создаем чек по заказу   
 function create_check($lid_id){
 global $db,$db2;
-if(!empty($lid_id)) {    
+if(!empty($lid_id)) { 
+$lid_id=preg_replace('/[^0-9]/', '',$lid_id);       
 // пароверяем сделки на самовывоз и передано курьеру ставим статус положено в папку 
 
 $seller_id="3d8f7db1-8d67-11eb-bf83-b42e991aff6c"; // продавец
 $store_id="dbd70103-2c7b-11e9-9b87-c85b76f0e893"; // аэродромная
 $kkm_id="d0d6c742-4db8-11ea-b917-0018f353130f"; //Мочалина Г. М. ИП(Центральный склад) ??
-$payments_type_id="5ee4c07a-36f5-11ec-8900-fc349715dc38";  // оплата на сайте - старый 5ee4c07a-36f5-11ec-8900-fc349715dc38
+$payments_type_id="cd891514-855f-11ea-a625-40618658b055";  // оплата на сайте - старый cd891514-855f-11ea-a625-40618658b055
 // Оплата на карту  ??
 // оплата наличными курьеру ??? 
 $terminal_id="7909401c-703b-11ea-8b4b-0018f353130f"; //Сбербанк ПАО/Мочалина Г. М. ИП 7909401c-703b-11ea-8b4b-0018f353130f
 
 
 $payments_array=[
-    "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f"  ), //  09 Доставка Букетов
+    "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f"  ), //  09 Доставка Букетов
     "Перевод на карту Сбербанк"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f"  ), //, "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" //payments_type_id = наличные. kkm_id 09 Доставка
     "Наличными курьеру (+100 руб.)"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f"  ),
-    "PayPal"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38"  )   
+    "PayPal"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38"  )   
 ];
 
 
-$row = $db2::getRow("SELECT * FROM orders_amo WHERE id=? LIMIT 1",[$lid_id]);
+$row = $db::getRow("SELECT * FROM orders_amo WHERE id=? LIMIT 1",[$lid_id]);
 
 if(!empty($row) and !in_array($row["delivery"],array("Самовывоз","Доставка из магазина"))) {  
  
@@ -466,14 +499,14 @@ echo" Вид оплаты ".$row["payment_type_id"]."  ".$row["pay"]."   ".$row[
 if(!empty($payments_array[$row["payment_type_id"]])) {
     
 $payments_type_id=$payments_array[$row["payment_type_id"]]["payments_type_id"];
-      
-    
 
 $summ=0; 
 $items2=array(); $payments2=array();
 
 $empty_guid=0;
 $tov=0;
+
+/*
  $data2 = $db2::getRows("SELECT * FROM site_order_items_sostav WHERE tip='1' AND guid!='' AND lid_id=?",[$row["id"]]);
   foreach ($data2 as $row2) {  
    if(empty($row2["guid"]))    $empty_guid=1; 
@@ -484,6 +517,41 @@ $tov=0;
    }
     
  }
+ */
+
+
+$products_json = $db::getValue("SELECT products_json FROM orders_amo WHERE amo_id=? order by created_at DESC LIMIT 1 ",[$lid_id]);
+$products_json = json_decode($products_json, true);
+$tov=0;
+
+/*
+
+[{"id":8415,"name":"Букет цветов Красный глянец","url":"https://bazacvetov24.ru/flowers/buket-tsvetov-krasniy-glyanets/","selection":"","count":1,"items":[{"id":786,"name":"Гиперикум","guid":"56c5f37b-0f3b-11e5-bdc0-1c6f659fb563","price":269,"quantity":"2.00","color_id":null},{"id":457,"name":"Альстромерия","guid":"e88a4b1a-11a0-11e5-a4cf-1c6f659fb563","price":209,"quantity":"3.00","color_id":null},{"id":759,"name":"Хризантема Сантини","guid":"b469db90-37fb-11e8-bc38-1c6f659fb563","price":199,"quantity":"2.00","color_id":null},{"id":787,"name":"розы 50 эквадор","guid":"bdd1757d-09d8-11e5-bd74-1c6f659fb563","price":199,"quantity":"5.00","color_id":null},{"id":792,"name":"пленка лист","guid":"440276d6-56e3-11e9-82cb-0018f353130f","price":50,"quantity":"4.00","color_id":null},{"id":788,"name":"лента атласная","guid":"bca06e47-0dff-11e7-959c-1c6f659fb563","price":20,"quantity":"2.00","color_id":null},{"id":805,"name":"Сборка букета без упак","guid":"bca06e43-0dff-11e7-959c-1c6f659fb563","price":50,"quantity":"2.00","color_id":null},{"id":833,"name":"Илекс","guid":"b546566a-98ed-11e5-81bd-1c6f659fb563","price":550,"quantity":"1.00","color_id":null},{"id":8020,"name":"Кермек (м.пучок)","guid":"e3ec2258-4310-11ed-9336-b42e991aff6c","price":1000,"quantity":"0.10","color_id":null}]}] 
+*/
+$summ=0;
+foreach($products_json as $array){
+ echo"<br><b>Комплект  ".$array["name"]."</b> ";   
+  
+  foreach($array["items"] as $row){
+      $tov++;
+ echo"<br>".$array["name"]." кол-во".$row["quantity"]."  цена ".$row["price"]; 
+ $items2[]=array("product_id"=>$row["guid"],"seller_id"=>$seller_id,  "quantity"=>$row["quantity"], "price"=>$row["price"]);
+ $summ = $summ + $row["price"] * $row["quantity"];  
+  }
+    
+}
+
+//print_r($products_json);
+
+//exit();
+
 if(empty($items2)) $items2[]=array("seller_id"=>$seller_id, "product_id"=>"bdd17583-09d8-11e5-bd74-1c6f659fb563", "quantity"=>1, "price"=>1); //, "discount"=>0
 if(empty($summ)) $summ=1;
 
@@ -507,11 +575,11 @@ $error .="В составе  нет товаров";
 elseif(empty($empty_guid)) {
     
 if(!empty($_POST["create_check"]) and $_POST["create_check"]==2)    {
-$check_id=create_guid();    
+$check_id=create_guid_my("01","$lid_id");     
 $db::sql("INSERT IGNORE INTO  create_checks  (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (?,NOW(),?,?,?,?,?,?,?)",[$check_id,$kkm_id,  $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]); 
 //$db::sql("INSERT IGNORE INTO  create_checks2  (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (?,NOW(),?,?,?,?,?,?,?)",[$check_id,$kkm_id,  $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]); 
 //$db2::sql("INSERT IGNORE INTO  create_checks  (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (?,NOW(),?,?,?,?,?,?,?)",[$check_id,$kkm_id,  $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]); 
-mess("Чек добавлен");
+mess("Чек добавлен Сумма чека $summ ");
 }
 
 //echo"INSERT IGNORE INTO  create_checks  (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES ('$check_id',NOW(), '$kkm_id',  '$seller_id' ,'$store_id', 'Продажа', '$lid_id','$items2', '$payments2' )";
index a6cdbefe2b1bf04a838ce6c32a421defe726f28a..39cbe68ee745e9afb76a230de0da40083b861845 100644 (file)
@@ -1,11 +1,17 @@
-<?php
+<?
 
-function import_cloudpayments($date="") {
+function import_cloudpayments($date="",$setka="bazacvetov24") {
 global $db;
 
 try{
 if(empty($date)) $date=date("Y-m-d");
+
+if(!empty($_REQUEST["date"])) $date=htmlentities($_REQUEST["date"]);
+
+// если сетка база цветов
  $token_pass="pk_70415dd276d150a2e00b9d89886da:4a0ce0dcdca92f59efaac8369b0f1693";
+if($setka=="region") $token_pass="pk_038cc12a228cec115e94158a5f4b4:bb580408fbc387d1455041c8ce2133fc";
 $arrs["Date"]=$date;
 //$arrs["Date"]="2022-03-07";
 $arrs["TimeZone"]="MSK";
@@ -124,7 +130,7 @@ if($insert==1) {
     
   try{  
     $z="INSERT IGNORE INTO orders_pays  SET  $set ";
-    echo "<br><br>".$z;
+    echo "<br>+";
     $db::sql($z,$param); 
   }  
   catch (Exception $e1) {
index 9851fea7df9306e7de28b64d541487a05cbec51d..80a792c7007ec154ffab1797d9210cb90a855e11 100644 (file)
@@ -128,7 +128,7 @@ file_compress('js.js',array(
 //exit();   
 
 //             write new timestamp file compress_timestamp.php for php execution code
-$infofile='<?php '.PHP_EOL;
+$infofile='<?'.PHP_EOL;
 $infofile.='$compress_stamp='.$unix_timestamp.';'.PHP_EOL;
 $infofile.='?>'.PHP_EOL;
 file_put_contents ('compress_timestamp.php',$infofile,LOCK_EX);                //file loaded by ThreeColTemplate1.php to get unique stamp id
index ff1cc49971fbb293703d6f5d3bb9f5275a98b47e..a7b6012ebe5939790b34e0338ff6810d3b646030 100644 (file)
@@ -1,3 +1,3 @@
-<?php
+<?
 $compress_stamp=1646055591;
 ?>
index d25fdb12b3b3fbeb44af416b5157985d99ff7c64..33f9596dc0f9dda0cd99d5d566a6045e1d8b1ca3 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 $_CONFIG_SITE["id"]="100";
 $CONFIG_SETKA["id"]="100";
@@ -20,7 +20,7 @@ $_CONFIG_SITE["ftp_user_from"]="";
 $CONFIG_SETKA["ftp_user_from"]="";
 $_CONFIG_SITE["ftp_pass_from"]="";
 $CONFIG_SETKA["ftp_pass_from"]="";
-$_CONFIG_SITE["mysql_host"]=getenv('MODE') === 'dev' ? 'db' : '127.0.0.1';
+$_CONFIG_SITE["mysql_host"]="127.0.0.1";
 $_CONFIG_SITE["mysql_db"]="erp24";
 $_CONFIG_SITE["mysql_user"]="bazacvetov24";
 $_CONFIG_SITE["mysql_pass"]="JVJruro_Xdg456o3ir";
diff --git a/erp24/inc/db-test.php b/erp24/inc/db-test.php
new file mode 100644 (file)
index 0000000..14f913f
--- /dev/null
@@ -0,0 +1,184 @@
+<?
+
+
+class DB2
+{
+protected $sql_cnt = 0;
+protected $config2 = '';
+  const DB_PREFIX = '';
+  static private $db2; 
+  protected static $instance2 = null;
+  public function __construct(array $config2 = null){
+
+    if (null !== $config2) { // от return в конструкторах лично я не в восторге
+        $properties = get_class_vars(static::class); // см. комментарий ниже по тексту ответа
+        foreach ( $properties as $property => $value ) {
+            if ( isset( $config2[ $property ] ) ) {
+                $this->$property = $config2[ $property ];
+            }
+        }
+    }    
+         
+       
+         
+    if (self::$instance2 === null){
+      try {
+        self::$db2 = new PDO(
+          'mysql:host='.$config2['DB_HOST'].';dbname='.$config2['DB_NAME'],
+          $config2['DB_USER'],
+          $config2['DB_PASSWORD'],
+          $options = [
+              PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+              PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+              PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ".$config2['CHARSET']
+          ]
+        );
+      } catch (PDOException $e) {
+          throw new Exception ($e->getMessage());
+      }
+    }
+    return self::$instance2;
+  }
+  /**
+   * @param $stmt
+   * @return PDOStatement
+   */
+  public static function query($stmt)  {
+     
+    return self::$db2->query($stmt);
+  }
+  /**
+   * @param $stmt
+   * @return PDOStatement
+   */
+  public static function prepare($stmt)  {
+    return self::$db2->prepare($stmt);
+  }
+  /**
+   * @param $query
+   * @return int
+   */
+  static public function exec($query) {
+    return self::$db2->exec($query);
+  }
+  /**
+   * @return string
+   */
+  static public function lastInsertId() {
+    return self::$db2->lastInsertId();
+  }
+  /**
+   * @param $query
+   * @param array $args
+   * @return PDOStatement
+   * @throws Exception
+   */
+  public static function run($query, $args = [])  {
+    try{
+      if (!$args) {
+        return self::query($query);
+      }
+      $stmt = self::prepare($query);
+      $stmt->execute($args);
+      return $stmt;
+    } catch (PDOException $e) {
+        throw new Exception($e->getMessage());
+    }
+  }
+  /**
+   * @param $query
+   * @param array $args
+   * @return mixed
+   */
+  public static function getRow($query, $args = [])  {
+       $GLOBALS["sql_cnt"]++;
+    return self::run($query, $args)->fetch();
+  }
+  /**
+   * @param $query
+   * @param array $args
+   * @return array
+   */
+  public static function getRows($query, $args = [])  {
+       $GLOBALS["sql_cnt"]++;
+    return self::run($query, $args)->fetchAll();
+  }
+  /**
+   * @param $query
+   * @param array $args
+   * @return mixed
+   */
+  public static function getValue($query, $args = [])  {
+     $GLOBALS["sql_cnt"]++;  
+    $result = self::getRow($query, $args);
+    if (!empty($result)) {
+      $result = array_shift($result);
+    }
+    return $result;
+  }
+  /**
+   * @param $query
+   * @param array $args
+   * @return array
+   */
+  public static function getColumn($query, $args = [])  {
+       $GLOBALS["sql_cnt"]++;
+    return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);
+  }
+  
+ public static function getCol($query, $args = [])  {
+      $GLOBALS["sql_cnt"]++;
+    return self::run($query, $args)->fetch(PDO::FETCH_NAMED);
+  }  
+  
+
+  
+  public static function sql($query, $args = [])
+  { $GLOBALS["sql_cnt"]++;
+    self::run($query, $args);
+  }
+  
+  
+  public static function update($table, $where="id=:id LIMIT 1", $args = [])
+  {  
+     $query="UPDATE $table SET ";
+     $i=0;
+     $param_sql=array();
+       foreach($args as $pole =>$val) {
+        if($i!=0) $query .=","; 
+         $query .=" `$pole`=:$pole"; 
+           $param_sql[$pole]=$val;     
+        $i++;
+       }
+     $query .=" WHERE $where";
+      self::run($query, $param_sql);
+  }
+  
+  
+}
+
+global $db,$config2;
+
+$config2 = [
+    'DB_HOST' => '127.0.0.1',
+    'DB_USER' => 'erp24_api_test',
+    'DB_PASSWORD' => 'yX2hF4mO2omY7x', 
+    'DB_NAME' =>'erp24_api_test',      
+    'CHARSET' => 'utf8',       
+];
+
+
+$db = new DB2($config2);
+
+
index a10ec442f589dca353a13d4f3539c9a8711741da..da9a1af46e4b713e817324aca02193853726dc01 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 /*
 define('DB_HOST', '127.0.0.1');
 define('DB_NAME', 'erp');
@@ -37,7 +37,7 @@ protected $config = '';
     if (self::$instance === null){
       try {
         self::$db = new PDO(
-          'mysql:host='.getenv('DB_HOST').';dbname='.$config['DB_NAME'],
+          'mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'],
           $config['DB_USER'],
           $config['DB_PASSWORD'],
           $options = [
@@ -110,7 +110,7 @@ protected $config = '';
    * @return mixed
    */
   public static function getRow($query, $args = [])  {
-       $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+       @$GLOBALS["sql_cnt"]++;
     return self::run($query, $args)->fetch();
   }
  
@@ -120,7 +120,7 @@ protected $config = '';
    * @return array
    */
   public static function getRows($query, $args = [])  {
-      $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+       @$GLOBALS["sql_cnt"]++;
     return self::run($query, $args)->fetchAll();
   }
  
@@ -130,7 +130,7 @@ protected $config = '';
    * @return mixed
    */
   public static function getValue($query, $args = [])  {
-      $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+     @$GLOBALS["sql_cnt"]++;  
     $result = self::getRow($query, $args);
     if (!empty($result)) {
       $result = array_shift($result);
@@ -144,20 +144,19 @@ protected $config = '';
    * @return array
    */
   public static function getColumn($query, $args = [])  {
-      $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+       @$GLOBALS["sql_cnt"]++;
     return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);
   }
   
  public static function getCol($query, $args = [])  {
-     $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+      $GLOBALS["sql_cnt"]++;
     return self::run($query, $args)->fetch(PDO::FETCH_NAMED);
   }  
   
 
   
   public static function sql($query, $args = [])
-  {
-      $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+  { $GLOBALS["sql_cnt"]++;
     self::run($query, $args);
   }
   
@@ -173,14 +172,38 @@ protected $config = '';
         $i++;
        }
      $query .=" WHERE $where";
+     $GLOBALS["sql_cnt"]++;
       self::run($query, $param_sql);
   }
   
+    public static function insert($table, $args = [])
+  {  
+     $query="INSERT INTO $table  ";
+     $i=0;
+     $values=""; $fields="";
+     $param_sql=array();
+       foreach($args as $pole =>$val) {
+        if($i!=0) {   $values .=",";   $fields .=",";   }
+         $values .=":$pole";
+         $fields .=" `$pole` "; 
+         $param_sql[$pole]=$val;     
+        $i++;
+       }
+       $GLOBALS["sql_cnt"]++;
+     $query .=" ($fields) VALUES ($values)";
+     try {
+        self::run($query, $param_sql);
+        } catch (Exception $e) {
+          echo '<br>Выброшено исключение: ',  $e->getMessage(), "\n";
+     }
+  }  
+  
+  
  public static function mapping($query, $args = [])
   {  
       $ret_arr=array();
       $data= self::run($query, $args)->fetchAll();
-      $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;;
+      @$GLOBALS["sql_cnt"]++;
       foreach($data as $row) $ret_arr[$row["id"]]=$row["name"];  
       return  $ret_arr;  
   }
@@ -191,7 +214,7 @@ protected $config = '';
 global $db,$config;
 
 $config = [
-    'DB_HOST' => getenv('MODE') === 'dev' ? 'db' : '127.0.0.1',
+    'DB_HOST' => getenv('MODE') === 'dev' ? 'db-yii_erp24' : '127.0.0.1',
     'DB_USER' => $_CONFIG_SITE["mysql_user"],
     'DB_PASSWORD' => $_CONFIG_SITE["mysql_pass"],      
     'DB_NAME' =>$_CONFIG_SITE["mysql_db"],     
index f23a6b90d64c9f03b8654953fbf75be21e1d6633..74109f0b8429992308a8dde5f9413e5735191940 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 
 class DB2
@@ -171,10 +171,10 @@ protected $config2 = '';
 global $db2,$config2;
 
 $config2 = [
-    'DB_HOST' => 'db-yii_erp24', // '127.0.0.1',
+    'DB_HOST' => '127.0.0.1',
     'DB_USER' => 'bazacvetov24',
-    'DB_PASSWORD' => 'JVJruro_Xdg456o3ir',
-    'DB_NAME' => 'erp24', // 'bazacvetov24',
+    'DB_PASSWORD' => 'JVJruro_Xdg456o3ir',     
+    'DB_NAME' =>'bazacvetov24',        
     'CHARSET' => 'utf8',       
 ];
 
index 2bde44d98a1d9120ae3efe10cf072a32986ded14..a5f2665d9432e90460586ee92ae4995c0fdffceb 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 $config = [
     'DB_HOST' => '127.0.0.1',
     'DB_USER' => 'bazacvetov24',
index 146383338770a39fe62f0863e00458804fd242b8..37280570d69a06e9f0f652e44aacd97101691c82 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
        
 
@@ -8,11 +8,11 @@ if(!empty($_REQUEST["go"])) $go=insert_mysql($_REQUEST["go"]);
 ob_start();
 ?>
 <!DOCTYPE html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0" />
-<title><?php if(empty($_CRM_TITLE)) echo"ERP BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+<title><? if(empty($_CRM_TITLE)) echo"ERP BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
 <link rel="stylesheet" href="/assets/css/font-icons/font-awesome/css/font-awesome.min.css"><link rel="stylesheet" href="/assets/js/jquery-ui/css/no-theme/jquery-ui-1.10.3.custom.min.css">
 <link rel="stylesheet" href="/assets/css/font-icons/entypo/css/entypo.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic">
 <link rel="stylesheet" href="/assets/css/bootstrap.css"><link rel="stylesheet" href="/assets/css/neon-core.css?v=1"><link rel="stylesheet" href="/assets/css/neon-theme.css"><link rel="stylesheet" href="/assets/css/neon-forms.css?v1"><link rel="stylesheet" href="/assets/css/custom.css">
-<?php
+<?
 
        
 if(isset($CONFIG_SETKA["crm_color"])) $stl=$CONFIG_SETKA["crm_color"]; 
@@ -45,7 +45,7 @@ echo'<link rel="stylesheet" href="/assets/css/status.css?'.$csst.'">';
 ?><link href="/js/jquery-ui/jquery-ui.css" rel="stylesheet"><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="/js/jquery-ui/jquery-ui.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.min.js"></script>
 
 <base href="https://<?=$_CONFIG_SITE["name_site"]?>/"/>
-</head><?php
+</head><?
 
 if(!empty($_SESSION["admin_id"])) {
 
@@ -90,11 +90,11 @@ $manager_id=(int)$_SESSION['manager_id'];
                                        <img src="/i/logo_sm.png" height="20" alt="" />
                                </a>
                        </div>
-<?php
+<?
 $manager_id=(int)$_SESSION['manager_id'];
 $admin_id=(int)$_SESSION['admin_id'];
                        
-               
+if(0) {                
 if(!empty($CONFIG_SETKA["crm_color"])) {               
 
        
@@ -160,14 +160,18 @@ if(!file_exists($crc_page) or ($modif>$time_cache)){
        
 }
        
-       
+}      
        
 //echo'<script src="js/cache/topmenu_'.$admin_id.'_'.$light.'.js?v='.$t.'"></script>';         
 /*     <!-- add class "multiple-expanded" to allow multiple submenus to open -->
                        <!-- class "auto-inherit-active-class" will automatically add "active" class for parent elements who are marked already with class "active" -->
-                       <!-- Search Bar -->*/           
-?>             
-<ul id="main-menu2" class="main-menu navbar-nav"></ul> 
+                       <!-- Search Bar --> <ul id="main-menu2" class="main-menu navbar-nav"></ul>       */             
+?>     
+<div id="main_menu_id"/>
+
+</div>
+<script src="/yii_app/js/site/get_menu.js?v=1679062374"></script>
+
 </div> 
 </header>
 <?     
@@ -349,7 +353,7 @@ if(!empty($_REQUEST["phone"])) {    $phone=insert_mysql($_REQUEST["phone"]);}
 if(!empty($_REQUEST["zakaz_nomer"])) { $zakaz_nomer=insert_mysql($_REQUEST["zakaz_nomer"]);}   
        
        
-echo'<form method=post action="zakaz.php?go=zakaz_show">
+echo'<form method=post action="">
 <input placeholder="Фамилия" type=text name=fio value="'.$fio.'">
 <input placeholder="Номер заказа" type=text name=zakaz_nomer value="'.$zakaz_nomer.'"></td>
 <input type=text  placeholder="Телефон" name=phone value="'.$phone.'" >
index d2f88769c7765858796f4ab8f3da078e4060bf7e..78db7f4419ce50993282535086feafa13081a192 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 function crm_menu($time_cache=3200)  {
 global $light,$_CONFIG_SITE,$CONFIG_SETKA,$db;
@@ -64,11 +64,11 @@ if(!empty($_REQUEST["go"])) $go=htmlentities($_REQUEST["go"]);
 ob_start();
 ?>
 <!DOCTYPE html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0" />
-<title><?php if(empty($_CRM_TITLE)) echo"CRM BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+<title><? if(empty($_CRM_TITLE)) echo"CRM BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
 <link rel="stylesheet" href="/assets/css/font-icons/font-awesome/css/font-awesome.min.css"><link rel="stylesheet" href="/assets/js/jquery-ui/css/no-theme/jquery-ui-1.10.3.custom.min.css">
 <link rel="stylesheet" href="/assets/css/font-icons/entypo/css/entypo.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic">
 <link rel="stylesheet" href="/assets/css/bootstrap.css"><link rel="stylesheet" href="/assets/css/neon-core.css?v=1"><link rel="stylesheet" href="/assets/css/neon-theme.css"><link rel="stylesheet" href="/assets/css/neon-forms.css?v1"><link rel="stylesheet" href="/assets/css/custom.css">
-<?php
+<?
 if(isset($CONFIG_SETKA["crm_color"])) $stl=$CONFIG_SETKA["crm_color"];
 if(!empty($stl)) echo"<link rel=\"stylesheet\" href=\"/assets/css/skins/$stl.css\">";
 
@@ -92,7 +92,7 @@ $fp = @fopen($crc_page, "w+");
 echo'<link rel="stylesheet" href="/assets/css/status.css?'.$csst.'">';
 ?><link href="/js/jquery-ui/jquery-ui.css" rel="stylesheet"><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="/js/jquery-ui/jquery-ui.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.min.js"></script>
 <base href="https://<?=$_CONFIG_SITE["name_site"]?>/"/>
-</head><?php
+</head><?
 if(!empty($_SESSION["admin_id"])) {
 $db::sql("UPDATE `admin` SET lasttime=NOW() WHERE `id` = :id LIMIT 1", ['id' => $_SESSION["admin_id"]]);
 }
@@ -113,11 +113,11 @@ $manager_id=(int)$_SESSION['manager_id'];
                                        <img src="/i/logo_sm.png" height="20" alt="" />
                                </a>
                        </div>
-<?php
+<?
 $manager_id=(int)$_SESSION['manager_id'];
 $admin_id=(int)$_SESSION['admin_id'];
 
-crm_menu(10);
+//crm_menu(10);
 
 
 
@@ -126,12 +126,14 @@ crm_menu(10);
 //echo'<script src="js/cache/topmenu_'.$admin_id.'_'.$light.'.js?v='.$t.'"></script>';
 /*     <!-- add class "multiple-expanded" to allow multiple submenus to open -->
                        <!-- class "auto-inherit-active-class" will automatically add "active" class for parent elements who are marked already with class "active" -->
-                       <!-- Search Bar -->*/
+                       <!-- Search Bar --><ul id="main-menu2" class="main-menu navbar-nav"></ul>*/
 ?>
-<ul id="main-menu2" class="main-menu navbar-nav"></ul>
+<div id="main_menu_id"/>
+
 </div>
+<script src="/yii_app/js/site/get_menu.js?v=1679062374"></script>
 </header>
-<?php
+<?
 
 
 /*<div class="sidebar-menu">
@@ -403,7 +405,7 @@ $tm="Время: ".$totaltime."сек.";
 
 
 echo'<!-- Footer -->
-<footer class="main"> '.$modul.'       '.$act.' <span class="text-left btn btn-lg"  onclick="history.go(-1);return false;">Назад</span>
+<footer class="main"> + '.$modul.'     '.$act.' <span class="text-left btn btn-lg"  onclick="history.go(-1);return false;">Назад</span>
        <span class="text-right" style="font-size:1.2rem;"><i><a href="#" data-toggle="modal" data-target="#modal-big" onclick="showAjaxModal();return false;">'.$tm.'</a></i></span>
 </footer></div>
 
@@ -483,7 +485,7 @@ $('#modal-3').css({
 <style>.modal {overflow-y: auto;}
 .modal-open {  overflow: auto;}</style>
 
-<?php
+<?     
        
        
        
index 8073998a2bc0454e668b975150acdb34c5526c63..9cd6b664e18da7cc7db50352a2041f313c80902c 100644 (file)
 <?php
-
-use yii\helpers\ArrayHelper;
-use yii_app\services\SupportService;
-use yii_app\records\StoreOrdersFieldsData;
-use yii_app\records\AdminGroup;
-use yii_app\records\Products1c;
-use yii_app\records\ShipmentProviders;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrdersFieldsProperty;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StoreOrders;
-use yii_app\records\Products1cOptions;
-use yii\db\Expression;
-use yii_app\records\ExportImportTable;
-use yii_app\records\StoreOrderStatus;
-use yii_app\records\ProductsClass;
-use yii_app\records\Balances;
-use yii_app\records\StorePlanogram;
-use yii_app\records\StoreProductsFact;
-use yii_app\records\Sales;
-use yii_app\records\WriteOffs;
-use yii_app\records\StoreOrdersItem;
-use yii_app\records\StoreOrdersPrices;
-use yii_app\records\StoreOrdersColors;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
 global $products, $fieldsRows, $ProductsOptions, $FiledsDataArray, $fieldsPropertyArray,$date_start_sale, $date_start_division, $order_date_add,
-$whereInProductsId, $whereInProductsIdArr, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll;
-
+$whereInProductsId, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll, $orderCityId, $prices,
+$orderStoresArrayRelation, // массив с гуидами магазинов закупки по которым считаем статистику,
+$orderStoresArrayRelation_in //  SQL условие для выборки по магазинам IN('store_id')
+, $productGroupArray
+;
 
 $fieldsPropertyArray=[]; $FiledsData=[]; $FiledsDataArray=[]; $fieldsPropertyArray=[]; $DataFieldStats=[]; $productsColorsArray=[];
 
 $k=0;
 $whereGuid="";
 foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
-    if (!empty($guid)) {
-        if ($k!=0) {
-            $whereGuid .= ",";
-        }
-
-        $whereGuid .=" '$guid' ";  $k++;
-    }
+if(!empty($guid)) {  if($k!=0) $whereGuid .=",";    $whereGuid .=" '$guid' ";  $k++;    }
 }
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
 
-if (!empty($whereGuid)) {
-    $whereGuid = " AND id in($whereGuid) ";
-}
-
-$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
-//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1  or id=10");
-
-$fields=array(
-    "show"=>array(
-        "name"=>"Просмотр"
-    ),
-    "edit"=>array(
-        "name"=>"Правка"
-    ),
-    "dostup"=>array(
-        "name"=>"Доступ",
-        "array"=>array(
-            ""=>"x",
-            "show"=>"Просмотр",
-            "edit"=>"Редактирование"
-        )
-    ),
-    "bg"=>array(
-        "name"=>"цвет",
-        "array"=>array(
-            ""=>"без цвета",
-            "bg-white"=>"Белый",
-            "bg-info"=>"Синий",
-            "bg-indigo"=>"Индиго",
-            "bg-success"=>"Зеленый",
-            "bg-danger"=>"Красный",
-            "bg-warning"=>"Оранжевый",
-            "bg-lime"=>"Лайм"
-        )
-    )
-);
-
-$users_group = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1  or id=10");
 
-$storesArray = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => 1])
-    ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])
-    ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
 
-if (empty($providers)) {
-    $providers = ArrayHelper::map(ShipmentProviders::find()->select(['id', 'name'])->all(), 'id', 'name');
-//    $providers = $db::mapping("SELECT id,name FROM shipment_providers ");
-}
-$storesArrayAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])
-    ->where(['tip' => 'city_store', 'view' => 1])->all(), 'id', 'name');
-//$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
 
 
 
-// статусы закупок - массивы с доступами к полям
-$data = StoreOrdersStatuses::find()->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_statuses");
+// статусы закупок - массивы с доступами к полям 
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
 foreach($data as $row) {
-    $store_orders_statuses[$row["id"]]=$row["name"];
-    $store_orders_status_description[$row["id"]]=$row["description"];
-    $statuses_groups[$row["id"]]=explode(",",$row["groups"]);
-    $statuses_stores_show[$row["id"]]=$row["stores_show"];
-    $statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
-    $status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+$store_orders_statuses[$row["id"]]=$row["name"];   
+$store_orders_status_description[$row["id"]]=$row["description"];   
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
+$statuses_stores_show[$row["id"]]=$row["stores_show"]; 
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);   
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);  
 }
 
 
-
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, city_id, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,    DATE_FORMAT(date_add, '%Y-%m-%d') as date_add, 
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"]; 
+$date_update=$OrderData["date_update"]; 
+$date_start_division=$OrderData["division_date"]; 
+$order_date_add=$OrderData["date_add"]; 
+$orderCityId=$OrderData["city_id"]; 
 
 // готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
-$dataF = StoreOrdersFieldsData::find()->where(['order_id' => $orderId])->asArray()->all();
-//$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
-foreach($dataF as $row0) {
-    if (!empty($fieldsRows[$row0["field_name"]])) {
-        //если тип поля текст то заменяем
-        if ($fieldsRows[$row0["field_name"]]["tip"]=="string") {
-
-            $v = $row0["value_text"];
-        }
-    } else {
-        $v = $row0["value"];
-    }
-
-    $storeId=$row0["store_id"];
-
-    $color=$row0["color"];
-    if (empty($storeId)) {
-        $storeId = "NULL";
-    }
-    if (empty($color)) {
-        $color = "NULL";
-    }
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=? AND value!='' AND field_name!=''",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
 
-    $FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+if(isset($fieldsRows[$row0["field_name"]]["tip"]) and $fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="0";
+if(empty($color)) $color="0";
+$FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
 }
 
 
 
 
 // создаем массив со свойствами подсветки ячеек store_orders_fields_property
-$data = StoreOrdersFieldsProperty::find()->orderBy(['id' => SORT_ASC])->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC"); 
 foreach($data as $row) { 
     $fieldsPropertyArray[$row["field_id"]][]=$row;
-}
+ }
  
  // достаем поля в массив
-$data = StoreOrdersFields::find()->orderBy(['position' => SORT_ASC])->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE name_eng!='' order by position ASC"); 
 foreach($data as $row) { 
-    $fieldsRows[$row["name_eng"]]=$row;
-    if (array_key_exists($row["id"], $fieldsPropertyArray)) {
-        $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
-    }
+    @$fieldsRows[$row["name_eng"]]=$row;
+    @$fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];   
+    
     
     $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]);     //считаем поля и зависимые поля рекурсивно
+    if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+$prices=[];
+$data=$db::getRows("SELECT product_id, price FROM prices WHERE   product_id $whereInProductsId");    
+  foreach($data as $row)  {
+      $prices[$row["product_id"]]=$row["price"]; 
+  }   
 
-    if ($row["colors_save"]==1) {
-        $fields_colors[$row["name_eng"]] = $row["id"];
-    }
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">")  if($value>$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]==">=")  if($value>=$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="=")  if($value==$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="<=")  if($value<=$row["value"])  $valueCss=$row["style_class"]; 
+ if($row["type"]=="<")  if($value<$row["value"])  $valueCss=$row["style_class"]; 
+
+}  
 }
+ return $valueCss;   
+} 
 
 
 
 
 
-// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
-$OrderData = SupportService::storeOrdersSelect001($orderId);
-//$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,    DATE_FORMAT(date_add, '%Y-%m-%d') as date_add,
-//DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
-$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
-$status_order_id=$OrderData["status"];
-$date_start_sale=$OrderData["date_start"]; 
-$date_update=$OrderData["date_update"]; 
-$date_start_division=$OrderData["division_date"]; 
-$order_date_add=$OrderData["date_add"];
 
 
-if (empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$orderStoresArrayRelation_in="";
+$orderStoresArrayRelation=[];
+
+$k=0; $wr="";
+foreach($data as $row) {
+ $orderStoresArrayRelation[]=$row["store_id"];
+   if($k!=0) $wr .=","; $wr .="'".$row["store_id"]."'";
+      $k++;  
+}
+
+if(!empty($wr)) $orderStoresArrayRelation_in=" IN ($wr)";
+
+
+
+
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
     $date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
 } else {
  // иначе идем к родителю и узнаем дату матери к которой будем привязываться   
-    if (!empty($row["parent_id"])) {
-        $storeOrders = StoreOrders::find()->select(["DATE_FORMAT(date_start, '%Y-%m-%d') as date_start"])->where(['id' => $row["parent_id"]])->asArray()->one();
-        $date_start = $storeOrders['date_start'];
-//        $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);
-    }
+if(!empty($row["parent_id"])) $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);   
 }
 
-$time = time();
-if (!empty($date_start)) {
-    $time = strtotime($date_start);
-}
+
+
+$time = strtotime($date_start_sale);
 $date2=date('Y-m-d 23:59:59', $time-86400); 
 $date1=date('Y-m-d 00:00:00', $time-86400*8);
 //echo"Дата старта $date_start Считаем продажи и списания от даты $date1  до $date2";
 
-$group_id = $_SESSION['group_id'];
-
-foreach($statuses_dostup[$status_order_id][$group_id] ?? [] as $fieldid => $arrs) {
-    $dostup_fields[$fieldid]=$arrs["dostup"];
-    $bg_fields[$fieldid]=$arrs["bg"];
+if($statuses_dostup[$status_order_id][$group_id]){
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];   
+}
 }
 
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+/* можно указать перменную до подключения файла 
+$whereInProductsId = ' IN ('product_id')';
+$products=['product_id'=>"name"];
+
+*/
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
 
 
+if(empty($whereInProductsId)) {
+    
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id, o.shipments_group_id FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
 
 
 
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) { 
+  if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+   $products[$row["id"]]=$row["name"];
+   $prov[$row["id"]]=$row["provider_id"];
+   $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+   $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+   $ProductsOptions[$row["id"]]["shipments_group_id"]=$row["shipments_group_id"];   
+   
+   $k++;    
+ } 
+$whereInProductsId .=")"; 
 
 
+}
 
-// получаем массив с данными по полям из таблицы store_orders_fields_data
-$FiledsData=getDataFiledsData();
 
-/*
+function getDataFiledsData() {
+global $orderId, $db,$whereInProductsId,$fieldsRows,$FiledsData;
 $FiledsData=[];
+if(empty($whereInProductsId)) exit("У данного поставщика нет продуктов!!!");
+
+
+
+
+//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]][0][0]=$r["min_order"];  
+$FiledsData["min_lot"][$r["id"]][0][0]=$r["min_lot"]; 
+}
+
+
+
+try {
+
 // готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
-$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name!=''");
+
+
 foreach($dataF as $row) { 
 //если тип поля текст то заменяем 
 if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"];    else $v=$row["value"];
@@ -233,885 +230,1392 @@ $color=$row["color"];
 if(empty($storeId)) $storeId="NULL";
 if(empty($color)) $color="NULL";
 
-
-//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
 $FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
-}
-
-*/
+//if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
 
+}
 
+} catch (Exception $e) {
+    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";
+}
 
-// если не указан магазин или надо просуммировать для какого-то поля
-$dataF = StoreOrdersFieldsData::find()->select(['field_name', 'product_id', 'sum(value) as sum'])->where(['order_id' => $orderId])
-    ->andWhere(['IS', 'store_id', new Expression('null')])->andWhere(['IS', 'color', new Expression('null')])->groupBy(['field_name', 'product_id'])->asArray()->all();
-//$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
-//store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
-foreach($dataF as $row) {
-    $FiledsDataSumm[$row["field_name"]][$row["product_id"]] = $row["sum"];
+return $FiledsData;    
 }
 
 
-$dataF = StoreOrdersFieldsData::find()->select(['field_name', 'product_id', 'sum(value) as sum', 'color'])->where(['order_id' => $orderId])
-    ->andWhere(['IS NOT', 'store_id', new Expression('null')])->groupBy(['field_name', 'product_id', 'color'])->asArray()->all();
-//$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-//store_id IS NOT NULL  group by field_name,product_id, color",[$orderId]);
-foreach($dataF as $row) {
-    $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]] = $row["sum"];
-}
+//функция обновления данных 
+function updatefieldsRows() {
+    global $db,$fieldsRows,$whereInProductsId,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
+    $products, $productsColorsArray,$prices;
+$html="";    
+ $fieldsArr=[];   
+foreach($fieldsRows as $pole => $array) {
+    
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b>  ";   
+    
+}  
 
+foreach($fieldsArr as $fieldName) {   
+//echo"<br> $fieldName";    
+  $data_up=getArrayByFiledName($fieldName,@$date1,@$date2);    
+  insert_store_orders_fields($data_up,$fieldName);
+  $FiledsData[$fieldName]=$data_up;
+  
+}
 
 
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    @$data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    @$FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}   
+ $html .= "<br><b>$fieldName</b> считаем массив!   ";
 
-$whereProvidersId="";
-$k=0;
-foreach($providersIdInThisOrder as $pid) {
-    if ($k!=0) {
-        $whereProvidersId .= ",";
-    }
+insert_store_orders_fields($data_up,$fieldName);
 
-    $whereProvidersId .="'$pid'";
-    $k++;
 }
+  
+  
+  
+  
+// полнограммы факт по всем магазинам
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
+$data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
+$whereInProductsId",[$date_id]);
+foreach($data3 as $row2) {
+    if($row2["color"]=="" or $row2["color"]=="NULL")
+    $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"]; 
+    else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];  
+}  
+  
+  
+  
+$html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";  
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($data as $row) {
+  if(empty($row["color"]))  $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"]; 
+  else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"]; 
+    
+}    
 
-/* можно указать перменную до подключения файла 
-$whereInProductsId = ' IN ('product_id')';
-$products=['product_id'=>"name"];
+  
+  
 
-*/
-// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
-if (empty($whereInProductsId)) {
-    $whereInProductsId=" in (";
-//    $z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p
-//    WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
-//    $data2=$db::getRows($z);
-    $data2 = SupportService::products1cOptionsProducts1cSelect001($providersIdInThisOrder);
-    $whereInProductsIdArr = ArrayHelper::getColumn($data2, 'id');
-    $k=0;
-    foreach($data2 as $row) {
-        if ($k!=0) {
-            $whereInProductsId .= ",";
-        }
 
-        $whereInProductsId .="'".$row["id"]."'";
+$massivSQLColor=[];$inProduct=[];
 
-        $products[$row["id"]]=$row["name"];
-        $prov[$row["id"]]=$row["provider_id"];
-        $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
-        $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
 
-        $k++;
-    }
-    $whereInProductsId .=")";
-}
 
+$data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
 
-//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
-$da = Products1cOptions::find()->select(['id', 'min_lot', 'min_order'])->where(['in', 'id', $whereInProductsIdArr])->asArray()->all();
-//$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
-foreach($da as $r) {
-    $FiledsData["min_order"][$r["id"]]=$r["min_order"];
-    $FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
+ foreach($data4 as $row2) { 
+  $colors=explode(";",$row2["colors"]);
+  $productId=$row2["id"];
+ if(!in_array($productId,$inProduct)) {
+     
+     $html .="<h3>".$products[$productId]."</h3>";
+     $inProduct[]=$productId;
+     
+ }
+  $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+  <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+  
+  
+   foreach($colors as $color) {
+    $color=trim($color); 
+      // пробегаемся по каждому магазинам
+         foreach($storesArrayAll as $storeId => $nameSt) {
+             
+      
+                if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color]))   {  
+                 //получаем процент цвета в полнограмме
+                  if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
+                   $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+                  else $percentColor=0;
+                 // округляем до сотых
+                  $percentColor=round($percentColor,3);
+         
+                 $massivSQLColor[$productId][$storeId][$color]=$percentColor; 
+                 
+                 //заносим в глобальную переменную
+                 $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
+                 $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+                  <td>$percentColor</td></tr>";
+                  
+                }  
+        }
+ }
+  $html .="</tbody></table>";
 }
 
+insert_store_orders_fields($massivSQLColor,"color_percent","",false);  
+  
+//////  
+$data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=\"table table-bordered table-sm\">";
+foreach($data as $row) {
+  $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
+  if(trim($row["name"])!=trim($row["description"]))   $html .=$row["description"];
+  
+    $html .="</td><td> <b>".$row["field_name"]."</b>
+   ".$row["field_type"]."</td><td>"; 
+  
+  
+    if(is_array($FiledsData[$row["field_name"]])) {
+   $html .="<font color=green>++</font>";
+ }
+  //<td>".$row["sql_table_values"]."</td>
+  //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
 
-$data2 = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors'])
-    ->innerJoin(['products_1c as p', 'p.id = o.id'])
-    ->where(['in', 'p.id', $whereInProductsIdArr])
-    ->orderBy(['o.provider_id' => SORT_ASC, 'p.name' => SORT_ASC])
-    ->asArray()->all();
-//$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
-//WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) { 
-    $providers_products[$row["provider_id"]][]=$row["id"];
-
-    if (!empty($row["colors"])) {
-        $productsColorsArray[$row["id"]] = explode(";", $row["colors"]);
-    }
-} 
-
+  
+  
+/*  
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
 
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
 
-if (!empty($_REQUEST["update"])) {
-    $FiledsData=updatefieldsRows();
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
 }
+*/
 
 
-if ($date_update <= time()-260) {
-    //echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";
-    //$FiledsData=updatefieldsRows();
-    
-}
 
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+  
 
-if (!empty($_GET["update1113"])) {
-    $html="";
-    $fieldsArr=[];
-    foreach($fieldsRows as $pole => $array) {
+  
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
 
-        if ($array["field_type"]=="stats")
-            $fieldsArr[]=$pole;
+      
+     if($row["field_type"]=="stats_formula") {
+    //  echo"<h2>".$row["field_name"]." формула</h2>";
+    
+     //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);  
+    
+       foreach($products as $productId => $nameProduct) {
+      $massivSQL=array();
+       // считать или нет по каждому магазину
+       $storesArr=["NULL"=>"NULL"];
+      
+      // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+      
+      if($row["field_name"]!="storehouse_balance") {
+      if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")  
+      $storesArr = array_merge($storesArr, $storesArrayAll); 
+      }
 
-        if ($array["field_type"]=="stats_summ")
-            $fieldsStatsSum[]=$pole;
-        //echo"<br> <b>$pole </b>  ";
+       $k=1;
+       foreach($storesArr as $storeId => $nameStore) {
+       
+    //  if($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+           
+      $k++; $color="";
+      $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
 
+      // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+      if(!empty($array["value"])) {
+      $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+       $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+       
+      foreach($productsColorsArray[$productId] as $color) {
+        $color=trim($color);
+        $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+        if(!empty($array2["value"])) {
+       // if($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+            $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+            $massivSQL[$productId][$storeId][$color]=$array2["value"];
+        }    
+        
+        }
+       }
+       }  
+     //if(!empty($array["value"])) 
+     
+       insert_store_orders_fields($massivSQL,$row["field_name"]);
+      
+      }
+      
     }
 
-    foreach($fieldsArr as $fieldName) {
-        //echo"<br> $fieldName";
-        $data_up=getArrayByFiledName($fieldName,$date1,$date2);
-        insert_store_orders_fields($data_up,$fieldName);
-        $FiledsData[$fieldName]=$data_up;
+  
+  // $FiledsData[$row["field_name"]]
+   $html .="</td>
+  
+  
+  
+  </tr> ";  
+}  
+
+ $html .="</table>";  
+ /////////
+  
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
 
+/*
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+    
+   if(!empty($val)) $division_auto_need_all +=$val;
     }
 
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
+    insert_store_orders_fields($data_uper,"division_auto_need_all");
+    
+  } 
+}
 
-    foreach($fieldsStatsSum as $fieldName) {
-        //$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
-        $pole=trim($fieldsRows[$fieldName]["func_content"]);
-        $data_up=array();
-        $dataF = StoreOrdersFieldsData::find()->select(['product_id', 'sum(value) as sum', 'color'])->where(['order_id' => $orderId])
-            ->andWhere(['NOT IN', 'store_id', ['', 'NULL']])->andWhere(['field_name' => $pole])
-            ->groupBy(['product_id', 'color'])
-            ->asArray()->all();
-//        $dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-//        store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
+*/
 
-        foreach($dataF as $row) {
-            if (empty($row["color"]))
-                $row["color"]="NULL";
+//пробегаемся по всем продуктам 
+/*
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
 
-            $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
-            $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
-        }
 
-        $html .= "<br><b>$fieldName</b> считаем массив!   ";
+if(!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>"; 
+$productInner[]=$productId;
 
-        insert_store_orders_fields($data_up,$fieldName);
+$html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+получаено по факту  ".$quantity_warehouseman_fact."";  
 
-    }
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
 
+$html .="<font color=red>коэффициент $division_ratio</font>";
 
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
 
-    //////
-    $data = StoreOrdersFields::find()->select(['id,name_eng as field_name', 'position', 'field_type', 'description', 'sql_table_values'])
-        ->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
-        ->asArray()->all();
-//    $data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
-//    FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
-    $html .="<table class=t>";
+    
+}    
 
-    foreach($data as $row) {
-        $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
-        </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
-        </td> <td>";
+*/
+  
+  
+  
+//division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_summ_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+   $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
+    if(!empty($val)) $division_summ_all +=$val;
+    }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_summ_all)) {
+   $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
+    insert_store_orders_fields($data_uper,"division_summ_all");
+    
+  } 
+}  
+  
+  
 
-        //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
-        if (is_array($FiledsData[$row["field_name"]])) {
+  
+// вычисляем массив по цветам привязанным к товару
+$data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row2) { 
+  $colors=explode(";",$row2["colors"]);
+  $productId=$row2["id"];
+   
+  foreach($colors as $color) {
+    $color=trim($color); 
+    $colorsProductsArray[$productId][$color]=$color;
+  
+   }
+ }
+  
 
-            $html .="<font color=green>++</font>";
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  (field_name='division_summ_all'  or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance'   )  AND order_id='$orderId'");    
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='storehouse_balance'  AND store_id!='' AND order_id='$orderId'");    
 
-        }
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='division_auto_need'  AND order_id='$orderId'");  
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
 
+     // $storesArr = array_merge($storesArrayAll);
+       $all=0;
+       foreach($storesArrayAll as $storeId => $nameStore) {
+           
+        $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
+      //  echo"<br>$nameProduct -$nameStore  division_auto_need =".$valueArray["value"];
+         $all =$all + $valueArray["value"]; 
+         $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"]; 
+        
+        $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
+     if($orderId!=263)   insert_store_orders_fields($data_up2,"division_auto_need");     
+           
+       }
+    
+        $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all; 
+        $data_up[$productId]["NULL"]["NULL"]=$all;
 
-    /*
-    // готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
-    $dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
-    foreach($dataF as $row0) {
-    //если тип поля текст то заменяем
-    if ($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+   }
+      if($orderId!=263)     insert_store_orders_fields($data_up,"division_auto_need_all");    
+ // exit("+++++++exit  +++++");     
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact   quantity_zakup_fact
 
-    $storeId=$row0["store_id"];
-    $color=$row0["color"];
-    if (empty($storeId)) $storeId="NULL";
-    if (empty($color)) $color="NULL";
+$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_auto','division_summ') AND order_id='$orderId'");    
 
-    $FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
-    }
-    */
 
-    // получаем массив с данными по полям из таблицы store_orders_fields_data
-        $FiledsData=getDataFiledsData();
+       
+foreach($products as $productId => $nameProduct) {
+$massivSQL=array();
+$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
 
+if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
+ $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;   
+}
+else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
 
-     // if (is_array($FiledsDataSumm[$row["field_name"]])) {
+        $data_up=[];
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+        insert_store_orders_fields($data_up,"division_ratio"); 
+        
+        $data_up=[];
+        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId][0][0]);
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
+        
+        
+        insert_store_orders_fields($data_up,"division_auto"); 
 
+}
 
-        if ($row["field_type"]=="stats_formula") {
-        //  echo"<h2>".$row["field_name"]." формула</h2>";
 
-         //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+$productInner=[];
+$rp="";
+foreach($products as $productId => $nameProduct) {
+ $data_up=[];
+      //$storesArr = array_merge($storesArrayAll);
+   
+         if(empty($FiledsData["min_lot"][$productId][0][0])) $FiledsData["min_lot"][$productId][0][0]=1;  
 
-            foreach($products as $productId => $nameProduct) {
-                $massivSQL=array();
-                // считать или нет по каждому магазину
-                $storesArr=["NULL"=>"NULL"];
+$planogram_all=[];
+$planogram_fact_all=[];
 
-                // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
-                if ($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")
-                    $storesArr = array_merge($storesArr, $storesArrayAll);
+if(!in_array($productId,$productInner)) {}
 
-                $k=1;
-                foreach($storesArr as $storeId => $nameStore) {
 
-                    //  if ($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+$rp .="
+<div class=\"expanel expanel-secondary\">
+<div class=\"expanel-heading\">
 
-                    $k++; $color="";
-                    $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
 
-                    // добавляем в массив глобальные новые значение которые мы посчитали по формулам
-                    if (!empty($array["value"])) {
-                        $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
-                        $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
-
-                        foreach($productsColorsArray[$productId] as $color) {
-                            $color=trim($color);
-                            $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
-                            if (!empty($array2["value"])) {
-                                // if ($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
-                                $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
-                                $massivSQL[$productId][$storeId][$color]=$array2["value"];
-                            }
-                        }
-                    }
-                }
-                //if (!empty($array["value"]))
-
-                insert_store_orders_fields($massivSQL,$row["field_name"]);
-            }
-        }
+<h3 class=\"expanel-title\">$nameProduct 
+</h3>
+</div> <div class=\"expanel-body p-0 m-0\"> 
+факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
+, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
+мин лот=".$FiledsData["min_lot"][$productId][0][0]."
+<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
+<th>Магазин</th>
+<th><b>полнограмма</b></th>
+<th><b>факт</b></th>
+<th><b>потребность</b></th>
+<th><b>авто-деление с коэффицентом</b></th>
+<th><b>ручная добавка</b></th>
+<th><b>авто-деление с ручной добавкой</b></th></tr>
+</thead>"; 
 
 
-        // $FiledsData[$row["field_name"]]
-        $html .="".$row["description"]." </td>
+$all=0;
+$productInner[]=$productId;       
+$data_uper=[];  
+$division_summ_all=0;
+       foreach($storesArrayAll as $storeId => $nameStore) {
+           
+          $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+          $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+          //if($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c")           $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
+          
+          
+         $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+         
+         $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];  
+         
+         $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
+         $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
+         
+         
+          $rp .="<tr><td class=\"text-right\">$nameStore</td>
+          <td>".$store_planogram[$productId][$storeId]."</td>
+         <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
+          
+          <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
+          </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
+          <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
+          <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
+          </tr> ";
+          
+           
+          foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+          $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];        
+         if( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {    
+          
+         $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
+         $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+         $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+         $division_summ_color=$division_auto_color+$division_hand_color;
+         
+         $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color; 
+         $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
+         $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
+         
+         
+           
+          $percent_color_per=$percent_color*100;    
+         $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
+         <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
+         <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
+         <td>".$division_auto_need_color."
+          </td><td>".$division_auto_color."</td>
+          <td>".$division_hand_color."</td>
+          <td>".$division_summ_color."</td>
+          </tr> ";    
+         }    
+              
+          }
+          
       
-        </tr> ";
-    }
+          
+           
+       }
+       
+        $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+       
+       
+       
+        $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all; 
+        
+         insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need"); 
+         insert_store_orders_fields($data_uper["division_auto_color"],"division_auto"); 
+         insert_store_orders_fields($data_uper["division_summ_color"],"division_summ"); 
+         
+         $data_up=[];
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
+        insert_store_orders_fields($data_up,"division_auto_all"); 
+        
+        // $data_up=[];
+      //  $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+       // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+        
+        // insert_store_orders_fields($data_up,"division_summ_all"); 
 
-    $html .="</table>";
+          
 
+        
+        
+     $rp .="<tfooter>
+     <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
+     <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
+     
+     <td> 
+      ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
+</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
+<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
 
+<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
 
 
-      /////////
+</td></tr></tfooter></table>
+Остаток склада (факт-сумма даления Итого) 
+(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].") 
+Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
+</div> </div>";
+} 
+//$FiledsData=getDataFiledsData();
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+  $division_summ_all=0;  
+  
+   echo"<h1>$nameProduct</h1>";
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        echo"<br> $nameStore 
+        ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ."  ";
+        /*
+          foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+          $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];  
+          $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+          $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+          $division_summ_color=$division_auto_color+$division_hand_color;
+          $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
+           $data_up[$productId][$storeId][$color]=$division_summ_color;  
+          }
+          */
+          
+     $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];         
+          
+     }
+          
+  echo"<br><b>division_summ_all=$division_summ_all</b>";
 
+    $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+   $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;  
 
-    //$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");
+}    
+   insert_store_orders_fields($data_up,"division_summ_all"); 
 
-    // суммируем деление и заносим данные в таблицу хранения данных по полям
-    foreach($products as $productId => $name) {
-        $division_auto_need_all=0;
-        foreach($storesArrayAll as $storeId => $nameStore) {
-            //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
-            // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
-            $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
-        }
 
-        $field_name="division_auto_need_all";
-        //echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
-        if (!empty($division_auto_need_all)) {
-           $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
-            $data_uper=[];
-            $data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
-            insert_store_orders_fields($data_uper,"division_auto_need_all");
-        }
-    }
+    $data_up=[]; 
+foreach($products as $productId => $nameProduct) {
+    
+         $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] -  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
+         $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
+         
+         
+         echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
+         = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]."  - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."  ";
+   
+}        
+ insert_store_orders_fields($data_up,"storehouse_balance");               
 
-    //пробегаемся по всем продуктам
-    foreach($products as $productId => $name) {
-     $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-    $quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
 
+echo $html.$rp;
 
-    $html .="<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
-    Сумма потребности =".$division_auto_need_all."
-    Сумма получаено по факту  ".$quantity_warehouseman_fact."";
 
-    $division_ratio=1;
-    if ($division_auto_need_all > $quantity_warehouseman_fact) {
-    $division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+$db::sql("DELETE FROM store_orders_fields_data WHERE  value='0.000' AND value_text=''",[$orderId]);    
 
-    $html .="<font color=red>-меньше!</font>";
-    $html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+$db::sql("UPDATE  store_orders SET date_update=NOW(), update_html=?  WHERE id=?",["$html.$rp",$orderId]);      
+ if(!empty($_REQUEST["html_print"])) echo $html;   
+// получаем массив с данными по полям из таблицы store_orders_fields_data
 
-    }
+//$FiledsData=getDataFiledsData(); 
 
-    $html .="<font color=red>коэффициент $division_ratio</font>";
+return  $FiledsData;
+    
+}
 
-    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
-    insert_store_orders_fields($data_uper,"division_ratio");
 
 
-    }
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
 
-    StoreOrders::updateAll(['date_update' => new Expression('NOW()')], ['id' => $orderId]);
-//    $db::sql("UPDATE  store_orders SET date_update=NOW()  WHERE id='$orderId'");
+//ini_set('error_reporting', E_ALL);
+//ini_set('display_errors', 1);
+$FiledsData=[];
 
-     if (!empty($_REQUEST["html_print"])) echo $html;
+//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]][0][0]=$r["min_order"];  
+$FiledsData["min_lot"][$r["id"]][0][0]=$r["min_lot"]; 
+}
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$data2=$db::getRows("SELECT field_name, product_id, store_id, color,value_text,value FROM store_orders_fields_data
+WHERE order_id='$orderId' AND field_name!=''");
 
-    // получаем массив с данными по полям из таблицы store_orders_fields_data
+foreach($data2 as $row3) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row3["field_name"]]["tip"]=="string") $v=$row3["value_text"];    else $v=$row3["value"];
 
-    $FiledsData=getDataFiledsData();
+$storeId=$row3["store_id"];
+$color=$row3["color"];
+if(empty($storeId)) $storeId="0";
+if(empty($color)) $color="0";
 
+//echo"<br>".$row3["field_name"]." ".$row3["product_id"]." $storeId - $color";
+$FiledsData[$row3["field_name"]][$row3["product_id"]][$storeId][$color]=$v;
+//if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
 
-}/// end update3
+}
 
 
 /*
+$FiledsData=[];
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"];    else $v=$row["value"];
 
-if (!empty($_GET["update2"])) {
-    
-echo"UPDATYE=2";   
-foreach($fieldsRows as $fieldName =>$array) {
-if ($array["field_type"]=="stats_summ") {
-// echo"DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";   
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
 
 
-$pole=trim($array["func_content"]);
-$FiledsDataSummStatsFuntion=array();   
-$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-store_id!=''  AND field_name='$pole' group by product_id, color",[$orderId]);
-foreach($dataF as $row) {
-   if (empty($row["color"])) $row["color"]="NULL";
-    $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
-    $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
-   // echo"<br> $fieldName =  ".$row["product_id"]." = ".$row["color"]."  = ".$row["color"]."  ".$row["sum"]." ";
-}   
-    
-    
-echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]."  ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
- $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
-insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
+//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
 }
 
+*/
 
-if ($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
-echo"<h4>division_summ_all !!</h4>";    
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");  
 
- $massivS=[];
-foreach($products as $productId => $value) {    
-$array=getValueStatsFormula("division_summ_all",$productId,"","");  
 
- $massivS[$productId]["NULL"]["NULL"]=$array["value"];
 
- //echo"<br>$value value=".$array["value"]."  ";
-}
- insert_store_orders_fields($massivS,"division_summ_all");
-}
 
+// если не указан магазин или надо просуммировать для какого-то поля
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
+foreach($dataF as $row) $FiledsDataSumm[$row["field_name"]][$row["product_id"]]=$row["sum"];
 
-if ($array["name_eng"]=="auto_purchase_formula") {
-echo"<h4>auto_purchase_formula !!</h4>";    
 
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");  
 
- $massivS=[];
-foreach($products as $productId => $value) {    
-    
- $storesArr=["NULL"=>"NULL"];
-      
-// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
-if ($fieldsRows[$array["name_eng"]]["stores_stats"]==1)   $storesArr = array_merge($storesArr, $storesArrayAll);
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NOT NULL  group by field_name,product_id, color",[$orderId]);
+foreach($dataF as $row) $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]]=$row["sum"];
 
-foreach($storesArr as $storeId => $nameStore) {
 
- $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");  
 
- $massivS[$productId]["NULL"]["NULL"]=$array["value"];
- echo"<br>$value value=".$array["value"]."  "; 
-foreach($productsColorsArray[$productId] as $color) {    
-    
- $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);  
- $massivS[$productId][$storeId][$color]=$array["value"];
 
- echo"<br>++$color  value=".$array["value"]."  ";
-}
-}
 
-}
- insert_store_orders_fields($massivS,"auto_purchase_formula");
 
+$products_class=[];
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
 
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+if(!empty($products_class[$categoryId])) $tip=$products_class[$categoryId]; 
+// если это срезка у нее нет группы 
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории  
+ $productGroupArray["flowers"][]=$pid;
+}elseif($tip=="potted") {  $daysCounterSales=14; $daysCounterWriteOffs=14;  $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30;  $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip  $categoryId";
 }
 
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
 
 
 
-}
-
-
-//foreach($products as $productId => $value) { echo "<br>  $value => value = ++ ".  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
 
 
+//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]][0][0]=$r["min_order"];  
+$FiledsData["min_lot"][$r["id"]][0][0]=$r["min_lot"]; 
 }
 
-*/
 
 
-//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
-//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
-//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p 
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) { 
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+} 
 
 
-if (!empty($_SESSION)) {
-    if (array_key_exists("group_id", $_SESSION)) {
-        if ($_SESSION["group_id"]==1) {
-            if (!empty($rp)) {
-                echo $rp;
-            }
-        }
-    }
+
+if(!empty($_REQUEST["update"])) {
+$FiledsData=updatefieldsRows();
 }
 
 
-/*
-  $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
-     foreach($data as $row) {
-        if (empty($row["color"])) $row["color"]="NULL";
-        $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-        $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+if($date_update <= time()-260) {
+//echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";   
+//$FiledsData=updatefieldsRows(); 
+    
+}
 
-    }
-*/
-// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
 
+if(!empty($_GET["update1113"])) {
+$html="";    
+ $fieldsArr=[];   
+foreach($fieldsRows as $pole => $array) {
+    
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b>  ";   
+    
+}  
 
-//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
-if (0 and $date_start_sale!='000-00-00') {
-    //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
-    $dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
-    $orders_where=implode("','",$dataOrders);
-    if (!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
-    $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0  $orders_where group by product_id,color");
-    foreach($data as $row) {
-        if (empty($row["color"]))
-            $color="NULL";
-        else
-            $color=$row["color"];
-
-        $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
-        $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];
-    }
+foreach($fieldsArr as $fieldName) {   
+//echo"<br> $fieldName";    
+  $data_up=getArrayByFiledName($fieldName,$date1,$date2);    
+  insert_store_orders_fields($data_up,$fieldName);
+  $FiledsData[$fieldName]=$data_up;
+  
+}
 
 
-    // quantity_purchase_last_week
-    $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0  $orders_where group by product_id,color,store_id");
-    foreach($data as $row) {
-        if (empty($row["color"])) $color="NULL"; else $color=$row["color"];
-        if (empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];
-        $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];
-    }
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}   
+ $html .= "<br><b>$fieldName</b> считаем массив!   ";
 
+insert_store_orders_fields($data_up,$fieldName);
 
+}
+  
+  
+  
+//////  
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=t>";
+foreach($data as $row) {
+  $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
+  </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+   </td> <td>"; 
+  //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
+  if(is_array($FiledsData[$row["field_name"]])) {
+      
+       $html .="<font color=green>++</font>";
+      
+  }
+  
+  
+/*  
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
 
-    // товар в пути  date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
-    $dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");
-    $orders_where=implode("','",$dataOrders);
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
 
-    echo"$orders_where = $orders_where";
-    if (!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
 
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+  
+  
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
 
-    //echo"  товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color";
-    $data=$db::getRows("SELECT sum(value) as value, product_id, color  FROM 
-    store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
-    foreach($data as $row) {
-        if (empty($row["color"])) $color="NULL"; else $color=$row["color"];
-        $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
-    }
+      
+     if($row["field_type"]=="stats_formula") {
+    //  echo"<h2>".$row["field_name"]." формула</h2>";
+    
+     //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);  
+    
+       foreach($products as $productId => $nameProduct) {
+      $massivSQL=array();
+       // считать или нет по каждому магазину
+       $storesArr=["NULL"=>"NULL"];
+      
+      // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+      if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")  
+      $storesArr = array_merge($storesArr, $storesArrayAll);
 
+       $k=1;
+       foreach($storesArr as $storeId => $nameStore) {
+       
+    //  if($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+           
+      $k++; $color="";
+      $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
 
-    //quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
-    $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p 
-    WHERE p.write_offs_id=w.id  AND (w.type='Брак' or w.type='Брак с поставки') AND  w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day  group BY p.product_id,w.store_id");
-    foreach($data2 as $row) {
-        $a=ceil($row["cnt"]/2);
-        if (!empty($a)) {
-            $FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
-            $FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a;
+      // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+      if(!empty($array["value"])) {
+      $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+       $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+       
+      foreach($productsColorsArray[$productId] as $color) {
+        $color=trim($color);
+        $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+        if(!empty($array2["value"])) {
+       // if($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+            $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+            $massivSQL[$productId][$storeId][$color]=$array2["value"];
+        }    
+        
         }
-    }
-    $FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
-}
-
-
-// пересчитываем данные - берем из страых таблиц и вписываем в новые.
-if (!empty($_GET["insert"])) {
-
-// массив соответствия ID магазинов и GUID
-    $data = ExportImportTable::find()->select(['entity_id', 'export_val'])->where(['entity' => 'city_store', 'export_id' => 1])->asArray()->all();
-//    $data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
-    foreach($data as $row) {
-        $export[$row["entity_id"]]=$row["export_val"];
-        $export_revers[$row["export_val"]]=$row["entity_id"];
+       }
+       }  
+     //if(!empty($array["value"])) 
+     
+       insert_store_orders_fields($massivSQL,$row["field_name"]);
+      
+      }
+      
     }
 
-    $data_values_new=data_values_insert_sql($date1,$date2);
+  
+  // $FiledsData[$row["field_name"]]
+   $html .="".$row["description"]." </td>
+  
+  
+  
+  </tr> ";  
+}  
 
-    $fieldsArrayFlip=array_flip($fieldsArray);
-    foreach($data_values_new as $Field => $fArray) {
+ $html .="</table>";  
+  
 
-        if ($Field=="quantity_purchase_last_week1")
-        {
-            echo"<h2>$Field</h2>";
+  
+  
+  /////////
+  
+  
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
 
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+    }
 
-            foreach($fArray as $ProductId => $ArrayP) {
-                echo"<br>ProductId =".$products[$ProductId]." $ProductId";
-                foreach($ArrayP as $StoreId => $ArrayP2) {
-                    if (!empty($StoreId)) {}
-                    echo"<br>StoreId = ";
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");} 
+}
 
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
 
-                    if (!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
-                    else echo $StoreId;
-                    print_r($ArrayP2);
 
-                }
-            }
-        }
-        global $storeIdToGuidArray;
-        $storeIdToGuidArray=$export;
-        // $field_id=$fieldsArrayFlip[$Field];
-        insert_store_orders_fields($fArray,$Field);
+$html .="<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";  
 
-    }
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
 
-    StoreOrdersFieldsData::deleteAll(['and', ['or', ['value' => '0.000'], ['value' => '0.00']], ['value_text' => '']]); // ??? order id
-//    $db::sql("DELETE FROM store_orders_fields_data WHERE  (value='0.000' or  value='0.00')  AND value_text=''",[$orderId]);
+$html .="<font color=red>коэффициент $division_ratio</font>";
 
-}
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
 
+    
+}    
+  
+$db::sql("UPDATE  store_orders SET date_update=NOW()  WHERE id='$orderId'");      
+ if(!empty($_REQUEST["html_print"])) echo $html;   
+// получаем массив с данными по полям из таблицы store_orders_fields_data
 
-$_CONFIG["jscss"]='
-<style>
+$FiledsData=getDataFiledsData(); 
+    
+}/// end update3
 
-table.table tbody tr:hover td{background:#cdcdcd}
-.zak tbody tr:hover td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal;  max-height:60px;overflow:hidden}
-.zak> thead> tr>th b{font-weight:normal;}
-.zak> :not(caption)>*>* {
-    padding: 0.05rem;
-    background-color: 1px;
-    box-shadow: none;
-}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak {
-       border-collapse: collapse;
-       border-spacing: 0;
-       overflow: hidden;
-}
-.zak th, .zak td {
-       border: 1px solid #e6e6e6;
-       padding: 0.1rem;
-       vertical-align: middle;
-       position: relative;
-}
 
+/*
+
+if(!empty($_GET["update2"])) {
+    
+echo"UPDATYE=2";   
+foreach($fieldsRows as $fieldName =>$array) {
+if($array["field_type"]=="stats_summ") {
  
-.zak td:hover:before { 
-       background-color: #e3e3e3;
-       content: \'\';  
-       height: 100%;
-       left: -5000px;
-       position: absolute;  
-       top: 0;
-       width: 10000px;   
-       z-index: -2;        
-}
  
-.zak td:hover:after { 
-       background-color: #cdcdcd;
-       content: \'\';  
-       height: 10000px;    
-       left: 0;
-       position: absolute;  
-       top: -5000px;
-       width: 100%;
-       z-index: -1;        
+// echo"DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";   
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+
+
+$pole=trim($array["func_content"]);
+$FiledsDataSummStatsFuntion=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!=''  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+   // echo"<br> $fieldName =  ".$row["product_id"]." = ".$row["color"]."  = ".$row["color"]."  ".$row["sum"]." ";
+}   
+    
+    
+echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]."  ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
+ $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
+insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
 }
 
 
+if($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
+echo"<h4>division_summ_all !!</h4>";    
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");  
 
- .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
- .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
-.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+ $massivS=[];
+foreach($products as $productId => $value) {    
+$array=getValueStatsFormula("division_summ_all",$productId,"","");  
 
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
 
-table.zak thead th:not(:first-child),
-table.zak tr.zg th th:not(:first-child) {
-  vertical-align: bottom;
-  line-height: normal;
+ //echo"<br>$value value=".$array["value"]."  ";
 }
-table.zak thead b {
-  writing-mode: vertical-rl;
-  transform: scale(-1);
-  
+ insert_store_orders_fields($massivS,"division_summ_all");
 }
 
 
-table.zak tr.zg th b,table.zak tr.zg td b {
-  writing-mode: vertical-rl;
-  transform: scale(-1);
-    font-weight:normal; font-size:0.6rem;
-}
+if($array["name_eng"]=="auto_purchase_formula") {
+echo"<h4>auto_purchase_formula !!</h4>";    
 
- .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
- .app-content .side-app {
-    padding: 25px 0.5rem 0 0.5rem;
-}
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");  
 
-.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
-.zak td.td_product:hover {background:#fff;}
+ $massivS=[];
+foreach($products as $productId => $value) {    
+    
+ $storesArr=["NULL"=>"NULL"];
+      
+// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+if($fieldsRows[$array["name_eng"]]["stores_stats"]==1)   $storesArr = array_merge($storesArr, $storesArrayAll);
 
-</style>
-<script>
-const param5x = $(\'meta[name=csrf-param]\').attr(\'content\');
-const token5x = $(\'meta[name=csrf-token]\').attr(\'content\');
+foreach($storesArr as $storeId => $nameStore) {
 
-function changef(id,typeint)
-{ 
-var uname=$(\'#\'+id+\'\').val();
-if (typeint==\'double\')  uname = uname.replace(/[^0-9.\s]/gi, \'\'); 
-if (typeint==\'int\')  uname = uname.replace(/[^0-9\s]/gi, \'\'); 
-$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");  
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+ echo"<br>$value value=".$array["value"]."  "; 
+foreach($productsColorsArray[$productId] as $color) {    
+    
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);  
+ $massivS[$productId][$storeId][$color]=$array["value"];
+
+ echo"<br>++$color  value=".$array["value"]."  ";
+}
 }
 
+}
+ insert_store_orders_fields($massivS,"auto_purchase_formula");
+
 
-function ajaxEditFieldValue(name_eng,product_id,color)
-{ 
-$.ajax({
-       url: \'/shipment/ajax-edit-field-value/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\', [param5x] : token5x },  
-       success: function(data){  
-    $(\'#edit_div\').html(data);
-       }}); 
-$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
-setTimeout(function(){
- $(\'.okk\').remove();
-}, 3000);
 }
 
 
 
 
-function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
-{ 
-$.ajax({
-       url: \'/shipment/ajaxEditFieldValue/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },  
-       success: function(data){  
-    $(\'#edit_div\').html(data);
-       }}); 
-$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
-setTimeout(function(){
- $(\'.okk\').remove();
-}, 3000);
 }
 
-</script>';
 
+//foreach($products as $productId => $value) { echo "<br>  $value => value = ++ ".  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
 
-$finish = '?';
 
-//показываем панель со статусом и магазинами в зависимости от доступа
-function showOrderStoresPanel() {
-    global $db, $status_order_id, $status_edit_dostup, $store_orders_status_description, $storesArray, $store_id, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id;
+}
 
-//action="/shipment/'.$act.'/?id='.$orderId.'"
-    echo'<form method=post >
-        <table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
-    echo \yii\helpers\Html::input('hidden', Yii::$app->request->csrfParam,Yii::$app->request->csrfToken);
+*/
 
-    if (!empty($status_edit_dostup[$status_order_id][$group_id])) {
-        echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
-        foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
-            echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';
 
-        }
-        echo'</select></td><td>
-        <button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
-    }
 
-    echo'</table>';
 
-    echo'</form>';
 
-    //показываем магазины если статус закупки подразумевает разбивку данных по магазинам
-    if (true) {//if ($statuses_stores_show[$status_order_id])  {
 
-        $stores_arr = ArrayHelper::map(Products1c::find()->where(['tip' => 'city_store', 'view' => 1])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//        $stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
-        $stores_cnt=count($stores_arr);
-        $vnesli = StoreOrderStatus::find()->where(['order_id' => $orderId, 'status_id' => $status_order_id, 'status' => 1])
-            ->groupBy(['order_id', 'store_id', 'status_id'])->count();
-//        $vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status
-//        WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
 
 
-        $store_order_status=array();
-        $data2 = StoreOrderStatus::find()->select(['store_id', 'status'])->where(['order_id' => $orderId, 'status_id' => $status_order_id])
-            ->asArray()->all();
-//        $data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
-        foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];
 
 
+//функция обновляет по массиву ID продуктов информацию в таблице data
+/*
+$products - массив ID product_id=>name_product
 
+*/
+function updateProductArrayDataField($fieldsNamesArr) {
+ global $db,$products,$prices;   
+    
+print_r($products);    
 
-        echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
 
-        if ($vnesli==$stores_cnt)
-            echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>";
+$whereF=implode("','",$fieldsNamesArr);
+$whereF =" name_eng in('$whereF') ";
+  
+echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";  
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields 
+WHERE  $whereF order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+echo"<br>== ".$row["field_name"]." ".$row["field_type"]."   ";    
+    
+}    
+    
+ echo"</table>";   
+    
+}
 
-        echo'<div class="row"><div class="col-12">';
+//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
+//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
+//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
 
 
-        echo'<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if (empty($store_id)) echo'success'; else echo'danger'; echo' m-1">без магазина</a>';
 
-        foreach($storesArray as $strid=>$namestore) {
-            echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
 
-//            if ($store_order_status_value[$strid]) {
-//                echo 'outline-';
-//            }
-            if ($store_id==$strid) {
-                echo"success";
-            } else {
-                echo "info";
-            }
+//if($_SESSION["group_id"]==1) echo $rp;
 
-            echo" btn-sm m-1\"> ";
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $status_order_id, $status_edit_dostup, $orderCityId, $store_orders_status_description, $storesArray, $store_id, $whereInProductsId, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id,$prices;  
 
-//            if ($store_order_status_value[$strid]==1) {
-//                echo "<i class=\"fe fe-check me-2\"></i>";
-//            }
 
-            echo"$namestore</a>";
-        }
-        echo'</div></div>';
-
-
-        //////
-        $status_store="";
-        if (!empty($store_id)) {
-
-            if (!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
-                $storeOrderStatus = StoreOrderStatus::find()->where(['order_id' => $orderId, 'store_id' => $store_Id, 'status_id' => $status_order_id])->one();
-                if (!$storeOrderStatus) {
-                    $storeOrderStatus = new StoreOrderStatus;
-                    $storeOrderStatus->order_id = $orderId;
-                    $storeOrderStatus->store_id = $store_id;
-                    $storeOrderStatus->status_id = $status_order_id;
-                    $storeOrderStatus->status = 1;
-                    $storeOrderStatus->date = date('Y-m-d H:i:s');
-                    $storeOrderStatus->admin_id = $_SESSION["admin_id"];
-                    $storeOrderStatus->save();
-                }
-//                $db::sql("INSERT IGNORE INTO  store_order_status SET   order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=?  ",
-//                [$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
-            }
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) { 
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';   
+    
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
 
-            $sosStatus = StoreOrderStatus::find()->select(['status'])->where(['order_id' => $orderId, 'store_id' => $store_id, 'status_id' => $status_order_id])->asArray()->one();
-            $store_order_status_value = $sosStatus['status'];
-//            $store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+echo'</table></form>';
 
 
-            $status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+$nameCity=$db::getValue("SELECT name FROM universal_catalog_item WHERE id=?",[$orderCityId]);
+//echo '<div style="border-bottom:1px #cdcdcd solid; background:#e6e6e6; margin-bottom:2rem;">  ';
 
-            if (!empty($store_order_status_value))
-                $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
-            else
-                $status_store .="<a class=\"btn btn-danger\"  href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
 
 
-            echo $status_store;
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$storesArrayRelation=[];
 
-        }
-    }
+foreach($data as $row) {
+ $storesArrayRelation[]=$row["store_id"];
+ //echo' <span class="btn btn-sm m-1 btn-blue">'.$storesOrderArray[$row["store_id"]].'</span> ';   
 }
+//echo'</div>';
 
-// получаем занчение перменнй по ее названию   товару и магазину и цвету
-function getValueFieldGlobal($field_name,$productId){
-    global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats;
-    // if ($field_name=="min_order" or $field_name=="min_lot")  $value=$globalValuesArray[$field_name][$productId];
-    if (empty($value)) {
-       $value = $DataFieldStatsSumm[$productId][$field_name];
-    }
-    if (empty($value)) {
-       $value = $FiledsData[$field_name][$productId]["NULL"]["NULL"];
-    }
 
-    return $value;
-}    
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id])  { 
 
-// получаем занчение перменнй по ее названию   товару и магазину и цвету
-function getValueFieldGlobalHand($field_name,$productId){
-    global $db,$DataFieldStatsSumm,$FiledsData;
-    $value=$DataFieldStatsSumm[$productId][$field_name];
-    if (empty($value)) {
-        $value = $FiledsData[$field_name][$productId]["NULL"]["NULL"];
-    }
-    return $value;
-}    
-  
-// получаем занчение перменнй по ее названию тип stats
-function getValueFieldStats($field_name, $productId, $storeId, $color){
-global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll;    
-   if (empty($storeId)) $storeId="NULL";
-   if (empty($color)) $color="NULL";
-   $value=$FiledsData[$field_name][$productId][$storeId][$color];
-   
-   if (empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+$stores_cnt=count($stores_arr);
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status 
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
 
 
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];   
 
 
-   
- return $value;
-} 
 
-// получаем занчение перменнй по ее названию тип stats
-function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
-global $db,$FiledsData,$DataFieldStats;    
-   if (empty($storeId)) $storeId="NULL";
-   if (empty($color)) $color="NULL";
-   $value=$FiledsData[$field_name][$productId][$storeId][$color];
-  //    if (empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
- return $value;
-} 
+if($vnesli>0)
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
 
- // получаем занчение перменнй по ее названию тип stats
-function getValueFieldStatsSumm($field_name, $productId, $color){
-global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm;    
-   if (empty($color)) $color="NULL";
-   $value=$FiledsData[$field_name][$productId]["NULL"][$color];
-   if (empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
-   if (empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>"; 
 
-    return $value;
-}  
+echo'<div class="row"><div class="col-12">';
 
-function function_auto_purchase_formula($param,$print=0) {
-global $db;    
-$goods_in_transit=(float)$param["goods_in_transit"];
-$sale_7day=(float)$param["sale_7day"];
-$quantity_fact=(float)$param["quantity_fact"];
-$quantity=$param["quantity"];
+$group_show_percent_array=[50,11]; 
+
+$data=$db::getRows("SELECT product_id FROM store_orders_fields_data WHERE  order_id=? AND product_id $whereInProductsId AND field_name='sales_cnt' AND color='' AND store_id='' AND value>0 group by product_id",[$orderId]);
+$whereInProductSaleId="";
+$productsIds=[];
+$i=0;
+foreach($data as $row) {
+  $whereInProductSaleId .=" '".$row["product_id"]."' ";
+  $productsIds[]=$row["product_id"];
+     if($i<(count($data)-1)) $whereInProductSaleId .=" , ";
+     $i++;   
+}
+
+
+
+//echo"<br>Всего товаров ".count($productsIds)."  = $orderId";
+
+if($whereInProductSaleId) {
+$storeCount=[];
+$data=$db::getRows("SELECT product_id, store_id FROM store_orders_fields_data WHERE  order_id=? AND product_id IN ($whereInProductSaleId) AND field_name='quantity_zakup_new' AND color='' AND store_id!='' AND value>0 group by product_id, store_id",[$orderId]);
+  foreach($data as $row) {
+   $storeCount[$row["store_id"]] +=1;
+  
+  }
+  
+$storeCount2=[];
+   foreach($storeCount as $sid => $cnt) {
+   $storeCount2[$sid]=round(($cnt/count($productsIds))*100);
+ }   
+}
+
+echo'
+<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">Весь заказ '.$nameCity.'</a>';
+
+foreach($storesArray as $strid=>$namestore){
+    
+    
+if(in_array($strid,$storesArrayRelation) or empty($orderCityId)) {    
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
+
+if(!empty($store_order_status_value) and $store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success";     } else echo"info";  echo" btn-sm m-1\"> ";
+if(!empty($store_order_status_value) and  $store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore ";
+// массив с группами-ролями тех кто может просматривать заполеннность по магазинам
+if($status_order_id==2 and in_array($_SESSION["group_id"],$group_show_percent_array)) { 
+    
+    echo" <span class=\"btn btn-info btn-xs ml-1\" title=\"".$storeCount[$strid]." из ".count($productsIds)."\">".$storeCount2[$strid]."%</span>";
+}
+echo"</a>"; 
+} else {
+  
+  echo'<span class="btn btn-danger">к городу нет доступа '.$namestore.'</span>';  
+    
+}
+
+
+
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+    
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO  store_order_status SET   order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=?  ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}    
+    
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\"  href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+    
+}
+
+
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldGlobal($field_name,$productId){
+   global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$prices;
+   // if($field_name=="min_order" or $field_name=="min_lot")  $value=$globalValuesArray[$field_name][$productId];
+   if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+   if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+return $value;
+}    
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldGlobalHand($field_name,$productId){
+   global $db,$DataFieldStatsSumm,$FiledsData,$prices;
+   $value=$DataFieldStatsSumm[$productId][$field_name];
+      if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+  return $value;
+}    
+  
+  
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStats($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll,$prices;    
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];
+   
+   if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+
+
+
+
+   
+ return $value;
+} 
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$prices;    
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];
+  //    if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+ return $value;
+} 
+
+
+
+
+
+
+  
+ // получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsSumm($field_name, $productId, $color){
+global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm,$prices;    
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId]["NULL"][$color];
+   if(empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
+   if(empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+
+    return $value;
+}  
+
+
+
+//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
+if(0 and $date_start_sale!='000-00-00') {
+  //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";  
+$dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");    
+$orders_where=implode("','",$dataOrders);  
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";  
+  $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0  $orders_where group by product_id,color");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"];    
+       $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
+       $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];        
+   }
+   
+   
+// quantity_purchase_last_week
+  $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0  $orders_where group by product_id,color,store_id");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"]; 
+       if(empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];        
+       $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];       
+   }   
+   
+   
+   
+  // товар в пути  date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
+$dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");    
+$orders_where=implode("','",$dataOrders);  
+
+echo"$orders_where = $orders_where";
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";  
+
+
+//echo"  товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color";
+  $data=$db::getRows("SELECT sum(value) as value, product_id, color  FROM 
+  store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"];    
+       $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
+   }   
+   
+//quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND (w.type='Брак' or w.type='Брак с поставки') AND  w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day  group BY p.product_id,w.store_id");
+foreach($data2 as $row) { 
+$a=ceil($row["cnt"]/2);   
+if(!empty($a)) {
+$FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
+$FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a; 
+}
+} 
+$FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
+}
+
+
+
+
+
+
+/*
+  $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
+     foreach($data as $row) {
+        if(empty($row["color"])) $row["color"]="NULL";
+        $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+        $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+      
+    }
+*/
+// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
+
+
+
+function function_auto_purchase_formula($param,$print=0) {
+global $db;    
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
 $min_lot=$param["min_lot"];
 $min_order=$param["min_order"];
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
 
 
 // считаем запас на 2 дня
@@ -1120,24 +1624,24 @@ $sale_2day=ceil(2*($sale_7day/7));
 $fact=$quantity_fact +  $goods_in_transit;
 $fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
 
-if (($fact-$fact_sale)>0) {
+if(($fact-$fact_sale)>0) {
 $saleweek1=$fact-$fact_sale ; 
-$zakaz= (float)$sale_7day + (float)$sale_2day +  (float)$quantity - (float)$saleweek1;
+$zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
 }
 else { 
-$zakaz= (float)$sale_7day + (float)$sale_2day +  (float)$quantity ;
+$zakaz= $sale_7day + $sale_2day +  $quantity ;    
 }
 // считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
 
-if ($zakaz<0) $zakaz=0;
+if($zakaz<0) $zakaz=0;
 //округлить до минимального лота деления
 
 $ceil=ceilCoefficient($zakaz,$min_lot);
 
 
-//if (!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
 
-$ttl="".($param["color"] ?? '')."
+$ttl="".$param["color"]."
 Товар в пути goods_in_transit =$goods_in_transit
 Продажи sale_7day=  $sale_7day
 Страховой запас sale_2day= $sale_2day
@@ -1154,6 +1658,7 @@ return $arr;
 
 }
 
+
 // округляет до определенного числа
 function roundCoefficientQuantity($number, $rate = 1)
 {
@@ -1162,18 +1667,19 @@ function roundCoefficientQuantity($number, $rate = 1)
        return $rest;
 }
 
+
 // функция для формулы автоделения
 function deivisionFormula($param,$print=0) {
 $goods_in_transit=$param["goods_in_transit"];
-$sale_7day=(float)$param["sale_7day"];
-$quantity_fact=(float)$param["quantity_fact"];
-$quantity=(float)$param["quantity"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
 $min_lot=$param["min_lot"];
 $min_order=$param["min_order"];
 $quantity_purchase_summ=$param["quantity_purchase_summ"];
 $quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
 $quantity_purchase=$param["quantity_purchase"];
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
 
 // считаем запас на 3 дня
 $sale_2day=ceil(2*($sale_7day/7));
@@ -1181,7 +1687,7 @@ $sale_2day=ceil(2*($sale_7day/7));
 $fact=$quantity_fact ; //$goods_in_transit
 $fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
 
-if (($fact-$fact_sale)>0) {
+if(($fact-$fact_sale)>0) {
 $saleweek1=$fact-$fact_sale ; 
 $zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
 }
@@ -1194,17 +1700,18 @@ $zakaz= $sale_7day + $sale_2day +  $quantity ;
 $zakaz=roundCoefficientQuantity($zakaz, $min_lot);
 
 
-if (empty($zakaz)) $zakaz=$quantity;
+if(empty($zakaz)) $zakaz=$quantity;
 return $zakaz;
 
 
 }
 
+
 function ratioDivisionPercent($param){
 
 $zakazDivision=deivisionFormula($param);    
 $percent=1;
-if ($param["quantity_warehouseman_fact"]<$zakazDivision) {
+if($param["quantity_warehouseman_fact"]<$zakazDivision) {
 $percent=round($param["quantity_warehouseman_fact"]/$zakazDivision,2);
 
 }    
@@ -1229,11 +1736,11 @@ $quantity_warehouseman_fact=(int)$param["quantity_warehouseman_fact"];
 $quantity_purchase=(int)$param["quantity_purchase"];
 $sale_2day=ceil(2*($sale_7day/7));
 
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
 $zakazDivision=deivisionFormula($param);
 $zakaz=$zakazDivision;
 /*
-if ($quantity_warehouseman_fact>=$zakazDivision) {
+if($quantity_warehouseman_fact>=$zakazDivision) {
 // считаем запас на 2 дня
 
 $zakaz=$zakazDivision;
@@ -1250,22 +1757,22 @@ $txt="куплено меньше чем заказано * $percent % = $zakaz"
 */
 
 
-if ($zakaz<0) $zakaz=0;
+if($zakaz<0) $zakaz=0;
 //округлить до минимального лота деления
 
 //$ceil=roundCoefficientQuantity($zakaz,$min_lot);
 
 $ceil=$zakaz;
 
-if ($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
 
-//if (!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
 
 
 //Заказано кустовыми $quantity_purchase_summ шт.
 //Заказано на магазин $quantity_purchase шт.
 
-$ttl=" формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
+$ttl="$txt формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
 Мин. лот деления $min_lot!
 Куплено по факту $quantity_warehouseman_fact шт
 Продажи 7 дней=".$sale_7day."шт
@@ -1273,7 +1780,7 @@ $ttl=" формула = продажи_7_дней + запас_на_3дня + п
 Полнограмма ".$quantity."шт
 факт ".$quantity_fact."шт
 Заказ ".$zakaz."шт
-Округляем -> $ceil шт";
+Округляем -> $ceilшт";
 
 $array_r["value"]=$ceil;
 $array_r["title"]=$ttl;
@@ -1294,11 +1801,11 @@ $quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
 $quantity_purchase=$param["quantity_purchase"];
 
 
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
 $zakazDivision=deivisionFormula($param);
 $zakaz=$zakazDivision;
 /*
-if ($quantity_warehouseman_fact>=$zakazDivision) {
+if($quantity_warehouseman_fact>=$zakazDivision) {
 // считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
 } else {
 // если товара пришло меньше    
@@ -1308,15 +1815,15 @@ $txt="куплено меньше чем заказано * $percent % = $zakaz"
 }
 */
 
-if ($zakaz<0) $zakaz=0;
+if($zakaz<0) $zakaz=0;
 //округлить до минимального лота деления
 
 //$ceil=roundCoefficientQuantity($zakaz,$min_lot);
 
 $ceil=$zakaz;
 
-if ($ceil>=$zakazDivision) $zakaz=$zakazDivision;
-//if (!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
 
 $ttl="$txt
 формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
@@ -1338,19 +1845,24 @@ return $array_r;
 
 }
 
+
+
 function return_quantity_zakup_fact_week_formula($productId, $color){
 global $FiledsData;
 
-$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color] ?? '';
+$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color];
 //$value=rand(1,999);
 return $value;
 }
 
+
+
+
 function returnFormula($field_name, $productId, $storeId, $color){
-global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;      
+global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;      
 
-   if (empty($storeId)) $storeId="NULL";
-   if (empty($color))  $color="NULL";
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color))  $color="NULL";         
 
 $type=$fieldsRows[$field_name]["type"];
 $formula=$fieldsRows[$field_name]["func_content"];
@@ -1358,42 +1870,42 @@ $func_content_arr=explode(";",$formula);
 $avg_arr=explode(",",$func_content_arr[0]);
 
 $field[0]=$avg_arr[0];
-$field[1]=$avg_arr[1] ?? '';
+$field[1]=$avg_arr[1];
 
 
-$field_type1=$fieldsRows[$field[0]]["field_type"] ?? '';
-$field_type2=$fieldsRows[$field[1]]["field_type"] ?? '';
+@$field_type1=$fieldsRows[$field[0]]["field_type"];
+@$field_type2=$fieldsRows[$field[1]]["field_type"];
 
 $storeId1=$storeId;
-$store_save=$fieldsRows[$field[0]]["store_save"] ?? '';
-if ($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio"  or $field_type1=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то  or $field[0]=="division_auto_need"
+$store_save=$fieldsRows[$field[0]]["store_save"]
+if($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio"  or $field_type1=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то  or $field[0]=="division_auto_need"
 {
     
 $storeId1="NULL";    
 }
-$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color] ?? 0;
+$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color];
 
 
 $storeId2=$storeId;
-$store_save=$fieldsRows[$field[1]]["store_save"] ?? '';
-if ($store_save==0 or $field[1]=="division_ratio" or  $field_type2=="global" or $field_type2=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то   or $field[1]=="division_auto_need"
+$store_save=$fieldsRows[$field[1]]["store_save"];
+if($store_save==0 or $field[1]=="division_ratio" or  $field_type2=="global" or $field_type2=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то   or $field[1]=="division_auto_need"
 {
     
 $storeId2="NULL";    
 }
 
-$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color] ?? 0;
+$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color];
   
  
        
-if (!empty($formula)) {
+if(!empty($formula)) {  
     
 // среднее арифметичнкое  func_content = a1,a2;    
-if ($type=="avg") {
- if (!empty($avg2)) $avg=round(($value/$avg2)*100);      else $value=0;
+if($type=="avg") {
+ if(!empty($avg2)) $avg=round(($value/$avg2)*100);      else $value=0;
  
  $data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
 $data_uper[$productId][$storeId][$color]=$value;
 insert_store_orders_fields($data_uper,$field_name);
 }
@@ -1401,18 +1913,18 @@ insert_store_orders_fields($data_uper,$field_name);
 }
 
 // умножение  func_content = a1,a2;
-elseif ($type=="multiplication") {
+elseif($type=="multiplication") { 
     
 $value=$avg1*$avg2;
-if ($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);
+if($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);   
 
-//if ($field[1]=="division_ratio")
+//if($field[1]=="division_ratio") 
 
 
 //echo"<br> {$field[1]} store=$storeId2 $avg2 color=$color ";   умножение ".$field[0]." $field_type1 $avg1   ".$field[1]." $avg2 $field_type2 
 $value_title=" ( ".$field[0]."=$avg1) * (".$field[1]."=$avg2)";
 $data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
 $data_uper[$productId][$storeId][$color]=$value;
 insert_store_orders_fields($data_uper,$field_name);
 }    
@@ -1420,12 +1932,12 @@ insert_store_orders_fields($data_uper,$field_name);
 }
 
 // разница  func_content = a1,a2;
-elseif ($type=="difference") { $value=$avg1-$avg2;
+elseif($type=="difference") { $value=$avg1-$avg2; 
 $value=round($value);
 $value_title="$avg1(".$field[0].") -$avg2(".$field[1].")"; 
 
 $data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
 $data_uper[$productId][$storeId][$color]=$value;
 insert_store_orders_fields($data_uper,$field_name,"", false);
 }
@@ -1434,18 +1946,18 @@ insert_store_orders_fields($data_uper,$field_name,"", false);
 
 
 // суммирование
-elseif ($type=="addition") {
-$avg1=$FiledsData[$field[0]][$productId][$storeId][$color] ?? 0;
-$avg2=$FiledsData[$field[1]][$productId][$storeId][$color] ?? 0;
+elseif($type=="addition") { 
+$avg1=$FiledsData[$field[0]][$productId][$storeId][$color];
+$avg2=$FiledsData[$field[1]][$productId][$storeId][$color];
 
 $value=$avg1+$avg2;
 $value_title="$avg1(".$field[0].")  + $avg2(".$field[1].") ";  
 $value=round($value);
-//if ($field_name=="division_summ" and $storeId!="NULL")  echo"<br> ".$field[0]."   $productId = $avg1 + ".$field[1]." =$avg2  stireId=$storeId  color=$color summ=$value";
+//if($field_name=="division_summ" and $storeId!="NULL")  echo"<br> ".$field[0]."   $productId = $avg1 + ".$field[1]." =$avg2  stireId=$storeId  color=$color summ=$value";
 
 //$FiledsData[$field_name][$productId][$storeId][$color]=$value;
 
-if ($field_name=="division_summ") {
+if($field_name=="division_summ") {
 
 //echo"<br>. Продукт ".$products[$productId]." ".$storesArrayAll[$storeId]." $avg1(".$field[0].")  + $avg2(".$field[1].") =  $value";    
     
@@ -1453,7 +1965,7 @@ if ($field_name=="division_summ") {
 }
 
 $data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
 $data_uper[$productId][$storeId][$color]=$value;
 insert_store_orders_fields($data_uper,$field_name);
 }
@@ -1466,44 +1978,44 @@ insert_store_orders_fields($data_uper,$field_name);
 }
 
 
-if ($type=="division"  || $type=="division_auto_need"    || $type=="auto_purchase_formula"   || $type=="division_ratio"   ) {
-        if ($formula==true){       }  else $value_arr=["value"=>0,"title"=>"не сичтаем.."];
+if($type=="division"  || $type=="division_auto_need"    || $type=="auto_purchase_formula"   || $type=="division_ratio"   ) {  
+        if($formula==true){       }  else $value_arr=["value"=>0,"title"=>"не сичтаем.."];            
 }            
 
           
-           if (empty($color)) $color="NULL";
-             if ($storeId=="NULL" and $color=="NULL") $formula=false;
-              if ($storeId=="NULL" and $color!="NULL") $formula=false;
-               if ($storeId!="NULL" and $color=="NULL") $formula=true;
+           if(empty($color)) $color="NULL";
+             if($storeId=="NULL" and $color=="NULL") $formula=false;
+              if($storeId=="NULL" and $color!="NULL") $formula=false; 
+               if($storeId!="NULL" and $color=="NULL") $formula=true; 
           $value_arr=[];       
           $param=array();  
-            $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color] ?? '';
-            $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color] ?? '';
-            $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color] ?? '';
-            $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color] ?? '';
-            $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color] ?? '';
+            $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color];
+            $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color];
+            $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color];
+            $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color];         
+            $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color];
             
             
-            if (empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color] ?? 0;
+            if(empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color];
             
-            $param["min_lot"]=$FiledsData["min_lot"][$productId];  
-            if (empty($store_id))  $param["min_order"]=$FiledsData["min_order"][$productId];
+            $param["min_lot"]=$FiledsData["min_lot"][$productId][0][0];  
+            if(empty($store_id))  $param["min_order"]=$FiledsData["min_order"][$productId][0][0];  
             
-            $param["quantity_purchase_summ"]=$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color] ?? '';
-            $param["quantity_warehouseman_fact"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color] ?? '';
-            $param["quantity_purchase"]=$FiledsData["quantity_purchase"][$productId][$storeId][$color] ?? '';
+            $param["quantity_purchase_summ"]=@$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color];  
+            $param["quantity_warehouseman_fact"]=@$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];  
+            $param["quantity_purchase"]=@$FiledsData["quantity_purchase"][$productId][$storeId][$color];  
 
 
 // считаем авто деление
-if ($type=="division") {
   $value="устарело";
+if($type=="division") {  
+ $value="устарело";
 }
 
 
 // считаем авто деление
-if ($type=="division_ratio") {
-    $value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-    $value_title="коэффицент";
+if($type=="division_ratio") {  
+$value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+$value_title="коэффицент";
 }
 
 /*
@@ -1523,60 +2035,64 @@ insert_store_orders_fields($data_uper,"division_auto");
 
 */
 
-        // считаем авто деление
-        if ($type=="division_auto_need") {
-            $value_arr=function_division_auto_need_formula($param);
-            $value=$value_arr["value"];
-            $value_title=$value_arr["title"];
+// считаем авто деление
+if($type=="division_auto_need") {  
+$value_arr=function_division_auto_need_formula($param); 
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto_need");
+//echo"<br>!!!+$value";
+
+}
+            
+}
 
-            $data_uper = [];
 
-            if (!empty($value)) {
-                $data_uper[$productId][$storeId][$color]=$value;
-                insert_store_orders_fields($data_uper,"division_auto_need");
-                //echo"<br>!!!+$value";
+// вторая формула автозаказа
+         if($type=="auto_purchase_formula") {  
 
-            }
-        }
+if(empty($storesAll)) $storesAll=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
 
-        // вторая формула автозаказа
-        if ($type=="auto_purchase_formula") {
-            if (empty($storesAll)) {
-                $storesAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store'])->all(), 'id', 'name');
-//                $storesAll = $db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
-            }
 
+
+      
             $value_arr=function_auto_purchase_formula($param); 
             $value=$value_arr["value"];
             $value_title=$value_arr["title"];
             
-            if ($color=="NULL" and !empty($storesAll[$storeId])) {
-                $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
-
-                $itog=($FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] ?? 0) - ($param["goods_in_transit"] ?? 0);
-
-                $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] = ($FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] ?? 0) + $value;
-                echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value  all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";
-            }
+               if($color=="NULL" and !empty($storesAll[$storeId]))  {
+                   
+              
+                          $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+              
+                $itog=$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]-$param["goods_in_transit"];   
+                   
+                 $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] +=$value;   
+                     echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value  all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";   
+               }
             
-            $data_uper = [];
-
-            if (!empty($value)) {
-                $data_uper[$productId][$storeId][$color] = $value;
-                $data_ttl[$productId][$storeId][$color] = $value_title;
-                insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
-            }
-        }
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+$data_ttl[$productId][$storeId][$color]=$value_title;
+insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
+}
+}   
 
    
-        // формула подсчета за неделю - товар в пути
-         if ($type=="quantity_zakup_fact_week") {
+  // формула подсчета за неделю - товар в пути
+         if($type=="quantity_zakup_fact_week") {  
             $value=return_quantity_zakup_fact_week_formula($productId,$color);
 
          }   
          
-          if ($type=="quantity_purchase_last_week") {
-             $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color] ?? '';
+          if($type=="quantity_purchase_last_week") {  
+             $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color];
 
          }          
 
@@ -1585,7 +2101,7 @@ insert_store_orders_fields($data_uper,"division_auto");
          
 
 /*
-         if ($type=="auto_purchase") {
+         if($type=="auto_purchase") {  
                 //Мин планограмма -остатки факт на витрине +продажи +(продажи:7*3)+(продажи *5%)
             $sale_zapas3=($data_values["sales_cnt"][$pid]/7)*3;
             $sale_week=$data_values["sales_cnt"][$pid];
@@ -1600,1183 +2116,1029 @@ insert_store_orders_fields($data_uper,"division_auto");
       */     
            
            
-    $array=["value"=>$value ?? 0,"title"=>$value_title ?? ''];
-
-    return $array;
+$array=["value"=>$value,"title"=>$value_title];          
+return $array;
 }    
 
-function getValueStatsFormula($field_name,  $productId, $storeId, $color){
-    global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;
-
-   $array = returnFormula($field_name,  $productId, $storeId, $color);
-   return $array;
-} 
-
-// получаем занчение перменнй по ее названию   товару и магазину и цвету
-function getValueField($field_name,$productId,$storeId="NULL",$color="NULL") {
-    global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
-
-    if (empty($storeId)) {
-        $storeId = "NULL";
-    }
-
-    if (empty($color)) {
-        $color = "NULL";
-    }
-
-    $type_field = $fieldsRows[$field_name]["field_type"];
-    if ($type_field=="global") {
-        $value=getValueFieldGlobal($field_name,$productId);
-        //  echo"<br> $field_name pid=$productsId = value= $value";
-    } elseif ($type_field=="global_hand") {
-        $value=getValueFieldGlobalHand($field_name,$productId);
-
-        if (empty($value)) {
-            $value = $DataFieldStatsSumm[$productId][$field_name];
-        }
 
-        if (empty($value)) {
-            $value = $FiledsData[$field_name][$productId]["NULL"]["NULL"];
-        }
 
-    } elseif ($type_field == "stats") {
-        $value = getValueFieldStats($field_name, $productId, $storeId, $color);
 
-    } elseif ($type_field == "static_hand" or $type_field == "stats_hand" ) {
-        $value=getValueFieldStats($field_name,$productId,$storeId,$color);
-        echo $type_field;
 
-    } elseif ($type_field == "stats_formula") {
-        $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+function getValueStatsFormula($field_name,  $productId, $storeId, $color){
+global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;   
 
-    } elseif ($type_field=="stats_store_summ") {
-        $value = getValueFieldStatsSumm($field_name, $productId, $color);
+   $array = returnFormula($field_name,  $productId, $storeId, $color);
+   return $array;
+} 
 
-    } elseif ($type_field=="stats_summ") {
-        $value = getValueFieldStatsSumm($field_name, $productId, $color);
+    
 
-    } elseif ($type_field=="stats_store_hand") {
-        $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);
-        //echo $type_field." p=$productId $storeId  $color ";
-    } else {
-        $value=$FiledsData[$field_name][$productId][$storeId][$color];
-    }
 
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueField($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;  
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";    
+   $type_field=$fieldsRows[$field_name]["field_type"];
+   if($type_field=="global") {
+    $value=getValueFieldGlobal($field_name,$productId);
+  //  echo"<br> $field_name pid=$productsId = value= $value";   
+  }
+  
+   elseif($type_field=="global_hand") {
+    $value=getValueFieldGlobalHand($field_name,$productId);
+    
+   if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+    if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];  
+   
+  
+  } elseif($type_field=="stats") $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+   elseif($type_field=="static_hand" or $type_field=="stats_hand" ) {
+      $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+      echo $type_field;
+  }elseif($type_field=="stats_formula") {
+      $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+      
 
-    $tip = $fieldsRows[$field_name]["tip"];
+      
+  } elseif($type_field=="stats_store_summ")   $value=getValueFieldStatsSumm($field_name,$productId,$color);   
+  elseif($type_field=="stats_summ")   $value=getValueFieldStatsSumm($field_name,$productId,$color);     
+  elseif($type_field=="stats_store_hand")  {   
+      
+      $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);  
+      //echo $type_field." p=$productId $storeId  $color "; 
+      }
+  else {
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];     
+  }
+  
+  
+$tip=$fieldsRows[$field_name]["tip"];  
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.00','',$value);
 
-    if ($tip!="string" and $tip!="double" ) {
-        $value = round($value);
-    }
+     
 
-    $value=str_replace('.00','',$value);
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];   
+  
+return $array;    
+}
 
-    if (empty($array)) {
-        $array = [
-            "value" => $value,
-            "title" => $value_title
-        ];
-    }
 
-    return $array;
-}
 
 // получаем занчение перменнй по ее названию   товару и магазину и цвету
 function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
-    global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
+global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll, $prices;  
 
-    if (empty($storeId)) $storeId="NULL";
-    if (empty($color)) $color="NULL";
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";    
    
-    $colorFirst=$color;
+   $colorFirst=$color;
    
-    $type_field=$fieldsRows[$field_name]["field_type"];
-
-
-    if (
-        $field_name=="division_ratio"
-        or $field_name=="division_auto_need_all"
-        or $field_name=="quantity_zakup_fact"
-        or $field_name=="quantity_warehouseman_fact"
-        or $field_name=="storehouse_balance"
-        or $field_name=="min_lot"
-        or $field_name=="purchase_fact_difference"
-        or $field_name=="division_hand_summ"
-        or $field_name=="division_auto_all"
-        or $field_name=="division_summ_all"
-        or $field_name=="delta_zakup"
-        or $field_name=="quantity_zakup"
-        or $field_name=="quantity_zakup_fact_summa"
-
-        or $field_name=="comment_zakup"
-        or $field_name=="quantity_zakup_info"
-        or $field_name=="purchase_kust_summ"
-        or $field_name=="quantity_zakup_fact_week"
-        or $field_name=="quantity_purchase_summ"
-        or $field_name=="delta_rejection"
-        or $field_name=="quantity_warehouseman_defective"
-        or $field_name=="write_offs_comments_all"
-        or $field_name=="goods_in_transit"
-        or $field_name=="auto_purchase_formula_all"
-        or $field_name=="quantity_storage"
-    ) {
-        $storeId="NULL";
-        $color="NULL";
-    }
+   $type_field=$fieldsRows[$field_name]["field_type"];
+
+
+ if($field_name=="division_ratio" 
+    or $field_name=="division_auto_need_all"
+    or $field_name=="quantity_zakup_fact"
+    or  $field_name=="quantity_warehouseman_fact"
+    or  $field_name=="storehouse_balance"
+    or  $field_name=="min_lot"
+    or  $field_name=="purchase_fact_difference"   
+    or $field_name=="division_hand_summ"  
+    or $field_name=="division_auto_all" 
+    or $field_name=="division_summ_all"     
+    or $field_name=="delta_zakup"  
+    or $field_name=="quantity_zakup" 
+    or $field_name=="quantity_zakup_fact_summa"     
+    
+    or $field_name=="comment_zakup"  
+    or $field_name=="quantity_zakup_info" 
+    or $field_name=="purchase_kust_summ"  
+    or $field_name=="quantity_zakup_fact_week"  
+    or $field_name=="quantity_purchase_summ"  
+    or $field_name=="delta_rejection"  
+    or $field_name=="quantity_warehouseman_defective"  
+    or $field_name=="write_offs_comments_all"  
+    or $field_name=="goods_in_transit"        
+    or $field_name=="auto_purchase_formula_all"     
+    or $field_name=="quantity_storage"     
+ ) {$storeId="NULL"; $color="NULL";  }
+ if($field_name=="quantity_zakup_fact"
+    or  $field_name=="quantity_warehouseman_fact"
+    or $field_name=="delta_zakup"  
+    or $field_name=="quantity_zakup" 
+     or $field_name=="quantity_zakup_info" 
+ ) {$storeId="NULL"; $color=$colorFirst;  }
+  
  
  
-    if (
-        $field_name=="quantity_zakup_fact"
-        or  $field_name=="quantity_warehouseman_fact"
-        or $field_name=="delta_zakup"
-        or $field_name=="quantity_zakup"
-        or $field_name=="quantity_zakup_info"
-    ) {
-        $storeId="NULL";
-        $color=$colorFirst;
-    }
-
-  //TODO TUT
-    $roo = $FiledsData[$field_name][$productId] ?? '';
-    try {
-        $roo2 = $FiledsData[$field_name][$productId][$storeId] ?? '';
-    } catch (\Exception $e) {
-        $roo2 = '';
-    }
-    try {
-        $value=$FiledsData[$field_name][$productId][$storeId][$color] ?? '';
-    } catch (\Exception $e) {
-        $value = '';
-    }
-    $tip=$fieldsRows[$field_name]["tip"];
-
-    if ($field_name=="min_lot") {
-        $value = $FiledsData[$field_name][$productId];
-    }
-
-    if ($field_name=="min_order") {
-        $value = $FiledsData[$field_name][$productId];
-    }
-
  
-    if ($field_name == "color_percent") {
+  
+ @$value=$FiledsData[$field_name][$productId][$storeId][$color];     
+ @$tip=$fieldsRows[$field_name]["tip"];  
+ if($field_name=="min_lot") $value=$FiledsData[$field_name][$productId][0][0];     
+ if($field_name=="min_order") $value=$FiledsData[$field_name][$productId][0][0];     
+  
+ if($field_name=="color_percent") {
      //$tip="string"; 
-        $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
-        $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);
-    }
+ $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];  
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);  
+ }  
 
   if ($field_name=="comment_zakup") {
if($field_name=="comment_zakup") {
 
-        // $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+// $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];  
 
-    }
+ }    
   
-    $value_title = $FiledsData["title__".$field_name][$productId][$storeId][$color] ?? '';
+@$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) @$value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) @$value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
 
-    if (empty($value_title)) {
-        $value_title = $FiledsData["title__" . $field_name][$productId][$storeId]["NULL"] ?? '';
-    }
-
-    if (empty($value_title)) {
-        $value_title = $FiledsData["title__" . $field_name][$productId]["NULL"]["NULL"] ?? '';
-    }
-
-
-    if ($tip!="string" and $tip!="double") {
-        $value = round($value);
-    }
-
-    $value = str_replace('.000','',$value);
+  
 
-    if ($tip=="double") {
-        $value = round($value, 2);
-    }
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
      
 
-    if (empty($array)) {
-        $array = [
-            "value" => $value,
-            "title" => $value_title
-        ];
-    }
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];   
   
-    return $array;
+return $array;    
 }
 
-function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
-    global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll ;
 
 
-    $value=$valueArray["value"];
-    $value_title=$valueArray["title"];
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices ;  
+
 
-    $colorName=trim(str_replace(['\\','/'],['',''],$color));
-    $md5Color=md5($color);
-    $show=1;
+      $value=$valueArray["value"];
+      $value_title=$valueArray["title"];  
 
-    if (!empty($color) and $color!='NULL') {
+      $colorName=trim(str_replace(['\\','/'],['',''],$color));
+      $md5Color=md5($color);
+      $show=1;  
+    if(!empty($color) and $color!='NULL') {
           $nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';  
           $idInput=''.$fieldName.''.$productId.''.$md5Color.'';
-          $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';
-
-          if (!empty($storeId)) {
-              if ($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) {
-                  $show = 1;
-              } else {
-                  $show = 0;
-              }
+          $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';  
+          if(!empty($storeId)) { 
+              if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1;  else $show=0; 
+              
+             if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"]))  $show=1; 
+              
               
-             if (in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"])) {
-                 $show = 1;
-             }
           }
-    } else {
+     }   
+     else {
           $nameInput=''.$fieldName.'['.$productId.']';  
           $idInput=''.$fieldName.''.$productId.'';
-          $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';
+          $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';   
          
      }  
         
-    if (in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {
+    if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {    
         echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
-          if (!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
-          if (isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
-         if (isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+          if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+          if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+         if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
        echo'>';
-    } elseif ($fieldsRows[$fieldName]["type"]=="textarea") {
+    } 
+    elseif($fieldsRows[$fieldName]["type"]=="textarea") {   
         echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'"  name='.$nameInput.' class="form-control"';
-
-        if (isset($fieldsRows[$fieldName]["placeholder"])) {
-            echo ' placeholder="' . $fieldsRows[$fieldName]["placeholder"] . '"';
-        }
-
+       if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
         echo'>'.$value.'</textarea>';       
-    } else {
-        if (!empty($value_title)) {
-          echo "<span title=\"$value_title\">$value</span>";
-        } else {
-          echo $value;
-        }
-    }
+      }
+      else {
+          if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+           else   echo $value;    
+      }
+
 }
 
-function printFieldTd($fieldName,$productId,$storeId,$color="") {
-    global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum,  $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
 
-    $fieldId = $fieldsRows[$fieldName]["id"];
 
-    $dostup = $dostup_fields[$fieldId];
-    $bg = $bg_fields[$fieldId];
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum,  $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;    
 
-    // $dostup="edit";
-    if (empty($storeId)) {
-        $storeId = "NULL";
-    }
+     $fieldId=$fieldsRows[$fieldName]["id"];  
+  
+     
+     @$dostup=$dostup_fields[$fieldId];
+     @$bg=$bg_fields[$fieldId];  
+   // $dostup="edit"; 
+     if(empty($storeId) or $fieldName=="purchase_price") $storeId="NULL";     
 
 
-    if ($dostup=="edit" or $dostup=="show") {
+if($dostup=="edit" or $dostup=="show") {   
+    
+    //можно ли это поле в принципе редактировать
+    $edit=$fieldsRows[$fieldName]["field_edit"]; 
+    //можно ли это поле редактировать если выбран магазин
+    if($storeId!="NULL") { 
+    $edit=$fieldsRows[$fieldName]["field_store_edit"]; 
+    $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+    } else {
+    $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина 
+    
+    
+   if($fieldsRows[$fieldName]["field_type"]=="stats_store_hand") $edit=0;
+        
+    }
     
-        //можно ли это поле в принципе редактировать
-        $edit=$fieldsRows[$fieldName]["field_edit"];
+  echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'"  class="p-1 text-center ';
 
-        //можно ли это поле редактировать если выбран магазин
-        if ($storeId!="NULL") {
-            $edit=$fieldsRows[$fieldName]["field_store_edit"];
-            $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
-        } else {
-            $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина
 
-        }
+      $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+      
+      
+    //$value=$FiledsData[$fieldName][$productId][$storeId][$color];    
 
-        echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'"  class="p-1 text-center ';
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];  
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";   
+///$valueArray["value"]=$value;   
+//$valueArray["title"]=$value_title;   
 
+     $value=$valueArray["value"];
+     $value_title=$valueArray["title"]; 
 
-        $valueArray = getValueFieldTrue($fieldName,$productId,$storeId,$color);
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++;  }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value;   }
+}
 
 
-        //$value=$FiledsData[$fieldName][$productId][$storeId][$color];
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
 
-    //echo $FiledsData[$fieldName][$productId][$storeId][$color];
-    //$tip=$fieldsRows[$fieldName]["tip"];
-    //if ($tip!="string" and $tip!="double" ) $value=round($value);
-    //$value=str_replace('.00','',$value);
-    //$value_title="";
 
+  if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';   
+  
+  // показываем поле настройки поля позволяют.
+  if($store_show==1) {
 
-    ///$valueArray["value"]=$value;
-    //$valueArray["title"]=$value_title;
+   if($dostup=="edit" and $edit==1) {
+       
+    //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";   
+       printFieldType($valueArray,$fieldName,$productId,$storeId,$color);   
+       
+   }
+   else {
+   if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+    else {
+        
+  //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit";  
+        echo $value;   
+        
+        
+    }
+    
+     
+    
+    }
+   }
+   else { //если значение поля не нужно выводить то показвываем заглушку
+       
+      echo'XXX'; 
+       
+   }
+   
+   
+   
+   
+   echo'</td>';  
+}    
+    
+     
+     
+}
 
-         $value=$valueArray["value"];
-         $value_title=$valueArray["title"];
 
-        if (empty($color)) {
-            if ($fieldsRows[$fieldName]["row_type_sum"]=="sum") {
-                $rowArraySum[$fieldId] = ($rowArraySum[$fieldId] ?? 0) + $value;
-            }
 
-            if ($fieldsRows[$fieldName]["row_type_sum"]=="avg") {
-                $rowArraySum[$fieldId] = ($rowArraySum[$fieldId] ?? 0) + $value;
-                $rowArraySum["cnt__".$fieldId] = ($rowArraySum["cnt__".$fieldId] ?? 0) + 1;
-            }
 
-            if ($fieldsRows[$fieldName]["row_type_sum"]=="amount") {
-                $rowArraySum[$fieldId] = ($rowArraySum[$fieldId] ?? 0) + $value;
-            }
-        }
 
 
 
-        $bgNew = returnRowCssClassByFieldValue($fieldName,$value);
-        if (!empty($bgNew)) {
-            $bg = $bgNew;
-        }
+//вставляем данные в таблицу дашборда
 
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData, $prices;
+
+@$field_id=$fieldsRows[$field_name]["id"];
+@$type=$fieldsRows[$field_name]["type"];
+foreach($massivSQL as $productId =>$array) {
+   foreach($array as $storeId =>$valueArr) { 
+       foreach($valueArr as $color =>$value) { 
+          if(empty($color) or $storeId=="NULL") $color="";   
+         if($color=="NULL") $color="";         
+          
+            if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL')  $storeId=$storeIdToGuidArray[$storeId];
+           if(empty($storeId) or $storeId=="NULL") $storeId="";  
+           
+    if($type=="string")  {$value_text=$value;  $value="";}
+    else { $value_text=""; }
 
-        if (isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';
+      try {
+    //  if($field_name=="division_auto_need")    echo"<br>$field_name pid=$productId +  storeId=$storeId + color=$color + =$value ".print_r($value)."  ";
+     if(!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
+         
+         
+        if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+         @$oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+         @$oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+         
+          if($print==true)  echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle  $title"; 
+       
+       
+       
+       if(($type!="string") or ($type=="string" and $value_text!="")) {   
+         
+         @$title=$massivTitle[$productId][$storeIdData][$colorData];    
+            
+        $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)       
+          VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",     
+          [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+          
+      }
+    
+          if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+            if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+             
+        // echo"<br>По этому товару не обновляем так ка значение старое уже есть";    
+        
+         }
+         
+         if(((empty($value)  or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and  $type!="string") or ($type=="string" and $value_text=="")) {
+    
+         } 
+         else {
+        //  if($print==true)  echo"<br>!!! $field_name =$value";
+      //     $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)                 VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",              [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+         }
+          
+         // if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         //if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+          
+        //  echo"<br>$field_name pid=$productId color=$color  =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]."  ";
+         
+        
+         }
+      }
+           
+      } catch (Exception $e) 
+       {
+           echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+       }
+     
+       }
+     }
+   } 
+}
 
-        // показываем поле настройки поля позволяют.
-        if ($store_show==1) {
 
-            if ($dostup=="edit" and $edit==1) {
 
-                //  if ($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";
-                printFieldType($valueArray,$fieldName,$productId,$storeId,$color);
 
-            } else {
-                if (!empty($value_title)) {
-                    echo "<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
-                } else {
-                    //  if ($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit";
-                    echo $value;
+// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
+// собираем массив с данными по названию поля - входной параметр Имя поля
+function getArrayByFiledName($field_name,$date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;    
+$data_values=[];
+$products_class=[];
+$data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"]; 
 
-                }
-            }
-        } else {
-            //если значение поля не нужно выводить то показвываем заглушку
-            echo'XXX';
 
-        }
 
-        echo'</td>';
-    }
+$periodDaysStats=14; //количество дней статистики по продажам и списанию
+// сколько на складе по 1с
+if($field_name=="quantity_storage") {
+$data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND  product_id $whereInProductsId ");
+foreach($data2 as $row2) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+@$data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
 }
 
-//вставляем данные в таблицу дашборда
-function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
-    global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData;
-
-    $field_id=$fieldsRows[$field_name]["id"];
-    $type=$fieldsRows[$field_name]["type"];
-
-    foreach($massivSQL ?? [] as $productId =>$array) {
-        foreach($array as $storeId =>$valueArr) {
-            foreach($valueArr as $color =>$value) {
-                if (empty($color) or $storeId=="NULL") {
-                    $color = "";
-                }
-
-                if ($color=="NULL") {
-                    $color = "";
-                }
-
-                if (is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL') {
-                    $storeId = $storeIdToGuidArray[$storeId];
-                }
-
-                if (empty($storeId) or $storeId=="NULL") {
-                    $storeId = "";
-                }
-
-                if ($type=="string") {
-                    $value_text=$value;  $value="";
-                }
-                else {
-                    $value_text="";
-                }
-
-                try {
-                    //  if ($field_name=="division_auto_need")    echo"<br>$field_name pid=$productId +  storeId=$storeId + color=$color + =$value ".print_r($value)."  ";
-                    if (!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
-
-
-                        if (empty($storeId))
-                            $storeIdData="NULL";
-                        else
-                            $storeIdData=$storeId;
-                        if (empty($color))
-                            $colorData="NULL";
-                        else
-                            $colorData=$color;
-                        $oldvalue = $FiledsData[$field_name][$productId][$storeIdData][$colorData];
-                        $oldtitle = $FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
-
-                        if ($print==true) {
-                            echo "<br>!!!--------$field_name =$value oldtitle=$oldtitle  $title";
-                        }
-
-
-                        if (($type!="string") or ($type=="string" and $value_text!="")) {
-
-                            $title=$massivTitle[$productId][$storeIdData][$colorData];
-                            $storeOrdersFieldsData = StoreOrdersFieldsData::find()->where(['order_id' => $orderId, 'product_id' => $productId, 'store_id' => $storeId,
-                                'field_id' => $field_id, 'field_name' => $field_name, 'color' => $color])->one();
-                            if (!$storeOrdersFieldsData) {
-                                $storeOrdersFieldsData = new StoreOrdersFieldsData;
-                                $storeOrdersFieldsData->order_id = $orderId;
-                                $storeOrdersFieldsData->product_id = $productId;
-                                $storeOrdersFieldsData->store_id = $storeId;
-                                $storeOrdersFieldsData->field_id = $field_id;
-                                $storeOrdersFieldsData->field_name = $field_name;
-                                $storeOrdersFieldsData->color = $color;
-                                $storeOrdersFieldsData->hand = -1;
-                            } else {
-                                $storeOrdersFieldsData->hand = 0;
-                            }
-                            $storeOrdersFieldsData->value = $value;
-                            $storeOrdersFieldsData->value_text = $value_text;
-                            $storeOrdersFieldsData->date_update = date('Y-m-d H:i:s');
-                            $storeOrdersFieldsData->title = $title;
-//                            $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)
-//                            VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
-//                            [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);
-
-                        }
-
-                        if (($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
-                            if (($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
-
-                                // echo"<br>По этому товару не обновляем так ка значение старое уже есть";
-
-                            }
-
-                            if (
-                                (
-                                    (
-                                        empty($value)
-                                        or
-                                        $value=="0.000"
-                                        or
-                                        $oldvalue==$value
-                                        or
-                                        $oldvalue=="$value.000"
-                                        or
-                                        $oldtitle==$title
-                                    )
-                                    and
-                                    $type!="string"
-                                )
-                                or
-                                (
-                                    $type=="string"
-                                    and
-                                    $value_text==""
-                                )
-                            ) {
-
-                                //
-                            }
-                            else {
-                                //  if ($print==true)  echo"<br>!!! $field_name =$value";
-                                //     $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)                 VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",              [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);
-                            }
-
-                            // if (empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
-                            //if (empty($color)) $colorData="NULL"; else  $colorData=$color;
-
-                            //  echo"<br>$field_name pid=$productId color=$color  =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]."  ";
-
-
-                        }
-                    }
-
-                } catch (Exception $e)
-                {
-                echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param ?? '').' error='. $e->getMessage();
-                }
-            }
-        }
-    }
+//полнограмма
+if($field_name=="quantity") {
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id  $whereInProductsId");
+foreach($store_planogram as $row) {
+    
+    
+   // echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  g ={$row["quantity"]}";
+    @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    @$data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+    
+}
 }
 
-// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
-// собираем массив с данными по названию поля - входной параметр Имя поля
-function getArrayByFiledName($field_name,$date1,$date2) {
-    global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$whereInProductsIdArr, $date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;
 
-    $products_class=[];
-    $data = ProductsClass::find()->where(['in', 'tip', ['potted', 'wrap']])->asArray()->all();
-//    $data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
-    foreach($data as $row) {
-        $products_class[$row["category_id"]] = $row["tip"];
-    }
 
+//плнограмма факт quantity_fact
+if($field_name=="quantity_fact") {
+$db::sql("DELETE  FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
+  
+    
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id  $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+    //   echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  quantity ={$row["quantity"]}";
 
+    @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    @$data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+}
+}
 
 
 
-    $periodDaysStats=14; //количество дней статистики по продажам и списанию
 
-    // сколько на складе по 1с
-    if ($field_name=="quantity_storage") {
-        $data2 = Balances::find()->where(['>', 'quantity', 0])->andWhere(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-//        $data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND  product_id $whereInProductsId ");
-        foreach($data2 as $row2) {
-            $data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
-            $data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
-        }
-    }
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
 
-    //полнограмма
-    if ($field_name=="quantity") {
-        $store_planogram = StorePlanogram::find()->select(['product_id', 'quantity', 'store_id', 'color'])->where(['>', 'quantity', 0])
-            ->andWhere(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-//        $store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id  $whereInProductsId");
-        foreach($store_planogram as $row) {
+//узнаем категорибю товара
+@$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+@$tip=$products_class[$categoryId]; 
+// если это срезка у нее нет группы 
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории  
+ $productGroupArray["flowers"][]=$pid;
+}elseif($tip=="potted") {  $daysCounterSales=14; $daysCounterWriteOffs=14;  $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30;  $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip  $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {    
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      @$data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+}
+}
+}
 
-           // echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  g ={$row["quantity"]}";
-            $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
-            $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
 
-        }
-    }
 
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt111") {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  $whereInProductsId
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      @$data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+}
 
 
-    //плнограмма факт quantity_fact
-    if ($field_name=="quantity_fact") {
-        StoreOrdersFieldsData::deleteAll(['order_id' => $orderId, 'field_name' => 'quantity_fact']);
-//        $db::sql("DELETE  FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
 
-        $spf = StoreProductsFact::find()->select(['date_id'])->orderBy(['date_id' => SORT_DESC])->asArray()->one();
-        $date_id = $spf['date_id'];
-//        $date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
-        $store_products_fact = StoreProductsFact::find()->select(['product_id', 'quantity', 'store_id', 'color'])
-            ->where(['>', 'quantity', 0])->andWhere(['date_id' => $date_id])
-            ->andWhere(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-//        $store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id  $whereInProductsId",[$date_id]);
-        foreach($store_products_fact as $row) {
-            //   echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  quantity ={$row["quantity"]}";
+//продажи количество штук привязанные к дате деления
+if($field_name=="sales_7day_division") {
 
-            $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
-            $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
-        }
-    }
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
 
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
 
+if(!empty($whereInProductsId_in)) {    
+    
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)    AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      @$data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+} 
+//echo"<br> Дата атуальных продаж для деления $date_start_division ";     
+//print_r($data_values);
+}
+}
 
 
-    //разбиваем продукты по группам - у каждой группы будет свой запрос
-    $productGroupArray=[];
-    foreach($products as $pid => $pName) {
+//продажи  сумма привязанные к дате деления
+if($field_name=="sales_7day_amount_division" ) {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
 
-        //узнаем категорибю товара
-        $categoryId=$ProductsOptions[$pid]["parent_id"];
-        // по категории узнаем тип товара горшечка или упаковка
-        $tip=$products_class[$categoryId];
-        // если это срезка у нее нет группы
-        if (empty($tip)) {
-            $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
-            $productGroupArray["flowers"][] = $pid;
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
 
-        } elseif ($tip=="potted") {
-            $daysCounterSales=14;
-            $daysCounterWriteOffs=14;
-            $productGroupArray["potted"][] = $pid;
-        } elseif ($tip=="wrap") {
-            $daysCounterSales=30;
-            $daysCounterWriteOffs=30;
-            $productGroupArray["wrap"][] = $pid;
-        }
-        //echo"<br> $pid => $pName $tip  $categoryId";
-    }
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");    
+foreach($data2 as $row2) { 
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+@$data_values[$row2["product_id"]][0][0] +=$sale; 
+}
+}
+}
+}
+}
 
-    // настройки для срезки
-    $configGroupProducts["flowers"]["day_sales"]=7;
-    $configGroupProducts["flowers"]["day_write_offs"]=7;
-    //для горшечки
-    $configGroupProducts["potted"]["day_sales"]=14;
-    $configGroupProducts["potted"]["day_write_offs"]=14;
-    //для упаковки
-    $configGroupProducts["wrap"]["day_sales"]=30;
-    $configGroupProducts["wrap"]["day_write_offs"]=30;
-
-
-
-    //продажи количество штук привязанные к дате старта продаж
-    if ($field_name=="sales_cnt") {
-        // пробегаем по каждому типу товара и группируем запросы к БД
-        foreach($productGroupArray as $group =>$pArray) {
-            $day_sales=$configGroupProducts[$group]["day_sales"];
-            echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
-            //собираем условие по выборке товаров
-            $whereInProductsId_in="";
-            $j=0;
-            foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}
-
-            if (!empty($whereInProductsId_in)) {
-                $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
-                    "sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt", "sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt"])
-                    ->innerJoin('sales_products as i', 's.id = i.check_id')
-                    ->where(['in', 'i.product_id', $pArray])
-                    ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
-                    ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL ' . $day_sales . ' day')])
-                    ->groupBy(['i.product_id', 's.store_id', 's.operation'])
-                    ->asArray()->all();
-//                $data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt
-//                FROM sales as s, sales_products as i
-//                WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)
-//                AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");
-                foreach($data2 as $row2) {
-                    $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
-                    $cnt=(int)$cnt;
-                    if (!empty($cnt)) {
-                        $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
-                        $data_values[$row2["product_id"]][0][0] +=$cnt;
-                    }
-                }
-            }
-        }
-    }
 
+//продажи  сумма
+if($field_name=="sales_amount" ) {
+    
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
 
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
 
-    //продажи количество штук привязанные к дате старта продаж
-    if ($field_name=="sales_cnt111") {
-        $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
-            "sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt", "sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt"])
-            ->innerJoin('sales_products as i', 's.id = i.check_id')
-            ->where(['in', 'i.product_id', $pArray])
-            ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
-            ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL 7 day')])
-            ->groupBy(['i.product_id', 's.store_id', 's.operation'])
-            ->asArray()->all();
-//        $data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt
-//        FROM sales as s, sales_products as i
-//        WHERE s.id=i.check_id AND  i.product_id  $whereInProductsId
-//        AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation  ");
-        foreach($data2 as $row2) {
-            $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
-            $cnt=(int)$cnt;
-            if (!empty($cnt)) {
-                $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
-                $data_values[$row2["product_id"]][0][0] +=$cnt;
-            }
-        }
-    }
+if(!empty($whereInProductsId_in)) {       
+$data2=$db::getRows("SELECT i.product_id,sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");    
+foreach($data2 as $row2) { 
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+@$data_values[$row2["product_id"]][0][0] +=$sale; 
+}
 
+}
+}
+}
+}
 
 
-    //продажи количество штук привязанные к дате деления
-    if ($field_name=="sales_7day_division") {
-
-        // пробегаем по каждому типу товара и группируем запросы к БД
-        foreach($productGroupArray as $group =>$pArray) {
-            $day_sales=$configGroupProducts[$group]["day_sales"];
-            echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
-            //собираем условие по выборке товаров
-            $whereInProductsId_in="";
-            $j=0;
-            foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}
-
-            if (!empty($whereInProductsId_in)) {
-
-                $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
-                    "sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt", "sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt"])
-                    ->innerJoin('sales_products as i', 's.id = i.check_id')
-                    ->where(['in', 'i.product_id', $pArray])
-                    ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
-                    ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL ' . $day_sales . ' day')])
-                    ->groupBy(['i.product_id', 's.store_id', 's.operation'])
-                    ->asArray()->all();
-//                $data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt
-//                FROM sales as s, sales_products as i
-//                WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)    AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");
-                foreach($data2 as $row2) {
-                    $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
-                    $cnt=(int)$cnt;
-
-                    if (!empty($cnt)) {
-                        $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
-                        $data_values[$row2["product_id"]][0][0] +=$cnt;
-                    }
-                }
-            }
-            //echo"<br> Дата атуальных продаж для деления $date_start_division ";
-            //print_r($data_values);
 
-        }
-    }
+//списания за 14 дней среднее - недельное списание от даты 1
+if($field_name=="write_downs" or $field_name=="quantity_rejection") {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> "; 
 
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
 
-    //продажи  сумма привязанные к дате деления
-    if ($field_name=="sales_7day_amount_division" ) {
-
-        // пробегаем по каждому типу товара и группируем запросы к БД
-        foreach($productGroupArray as $group =>$pArray) {
-            $day_sales=$configGroupProducts[$group]["day_sales"];
-            echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
-            //собираем условие по выборке товаров
-            $whereInProductsId_in="";
-            $j=0;
-            foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}
-
-            if (!empty($whereInProductsId_in)) {
-                $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
-                    "sum(if (s.operation='Продажа',i.summ,0)) as sale", "sum(if (s.operation='Возврат',i.summ,0)) as vozvr"])
-                    ->innerJoin('sales_products as i', 's.id = i.check_id')
-                    ->where(['in', 'i.product_id', $pArray])
-                    ->andWhere(['<=', 's.date', "$date_start_division 00:00:00"])
-                    ->andWhere(['>=', 's.date', new Expression($date_start_division . ' - INTERVAL ' . $day_sales . ' day')])
-                    ->groupBy(['i.product_id', 's.store_id', 's.operation'])
-                    ->asArray()->all();
-//                $data2=$db::getRows("SELECT i.product_id, sum(if (s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if (s.operation='Возврат', i.summ ,0)) as vozvr
-//                FROM sales as s, sales_products as i
-//                WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");
-                foreach($data2 as $row2) {
-                    $sale=$row2["sale"]-$row2["vozvr"];
-                    $sale=(int)$sale;
-                    if (!empty($sale)) {
-                        $data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
-                        $data_values[$row2["product_id"]][0][0] +=$sale;
-                    }
-                }
-            }
-        }
-    }
+if(!empty($whereInProductsId_in)) {       
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
 
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND  
 
-    //продажи  сумма
-    if ($field_name=="sales_amount" ) {
-        // пробегаем по каждому типу товара и группируем запросы к БД
-        foreach($productGroupArray as $group =>$pArray) {
-            $day_sales=$configGroupProducts[$group]["day_sales"];
-            echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
-            //собираем условие по выборке товаров
-            $whereInProductsId_in="";
-            $j=0;
-            foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}
-
-            if (!empty($whereInProductsId_in)) {
-                $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
-                    "sum(if (s.operation='Продажа',i.summ,0)) as sale", "sum(if (s.operation='Возврат',i.summ,0)) as vozvr"])
-                    ->innerJoin('sales_products as i', 's.id = i.check_id')
-                    ->where(['in', 'i.product_id', $pArray])
-                    ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
-                    ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL ' . $day_sales . ' day')])
-                    ->groupBy(['i.product_id', 's.store_id', 's.operation'])
-                    ->asArray()->all();
-//                $data2=$db::getRows("SELECT i.product_id,sum(if (s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if (s.operation='Возврат', i.summ ,0)) as vozvr
-//                FROM sales as s, sales_products as i
-//                WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");
-                foreach($data2 as $row2) {
-                    $sale=$row2["sale"]-$row2["vozvr"];
-                    $sale=(int)$sale;
-                    if (!empty($sale)) {
-                        $data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
-                        $data_values[$row2["product_id"]][0][0] +=$sale;
-                    }
-                }
-            }
-        }
-    }
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
 
 
+echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND  
 
-    //списания за 14 дней среднее - недельное списание от даты 1
-    if ($field_name=="write_downs" or $field_name=="quantity_rejection") {
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
 
-        // пробегаем по каждому типу товара и группируем запросы к БД
-        foreach($productGroupArray as $group =>$pArray) {
-            $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
-            echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> ";
+$valAll=0;
+foreach($data2 as $row2) { 
+    
+if($periodDaysStats==7) $a=ceil($row2["cnt"]/2);  
+else  $a=ceil($row2["cnt"]);  
 
-            //собираем условие по выборке товаров
-            $whereInProductsId_in="";
-            $j=0;
-            foreach($pArray as $prodId) {
-                if ($j>0)
-                    $whereInProductsId_in .=",";
+if(!empty($a)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+@$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
 
-                $whereInProductsId_in .="'$prodId'";
-                $j++;
-            }
+//списания за 14 дней среднее - недельное списание от даты деления
+if($field_name=="write_offs_division") {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>$group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+foreach($data2 as $row2) { 
+$a=ceil($row2["cnt"]);   
 
-            if (!empty($whereInProductsId_in)) {
-                //$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
-                //echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
-
-                if ($periodDaysStats==7) $periodDaysStats_where=14;
-                else $periodDaysStats_where=$periodDaysStats;
-                $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(p.quantity) as cnt", "w.store_id"])
-                    ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
-                    ->where(['w.type' => 'Брак'])
-                    ->andWhere(['in', 'p.product_id', $pArray])
-                    ->andWhere(['<=', 'w.date', "$date_start_sale 00:00:00"])
-                    ->andWhere(['>=', 'w.date', new Expression($date_start_sale . ' - INTERVAL ' . $periodDaysStats_where . ' day')])
-                    ->groupBy(['p.product_id', 'w.store_id'])
-                    ->asArray()->all();
-//                $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
-//                FROM write_offs as w, write_offs_products as p
-//                WHERE p.write_offs_id=w.id  AND w.type='Брак' AND
-//
-//                w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
-//                AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
-
-
-                echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
-                FROM write_offs as w, write_offs_products as p 
-                WHERE p.write_offs_id=w.id  AND w.type='Брак' AND  
-                
-                w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
-                AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
-
-                $valAll=0;
-                foreach($data2 as $row2) {
-
-                    if ($periodDaysStats==7) {
-                        $a = ceil($row2["cnt"] / 2);
-                    }
-                    else {
-                        $a = ceil($row2["cnt"]);
-                    }
-
-                    if (!empty($a)) {
-                        $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
-                        $data_values[$row2["product_id"]][0][0] +=$a;
-                    }
-                }
+if(!empty($a)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+@$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
 
-            }
-        }
-    }
 
-    //списания за 14 дней среднее - недельное списание от даты деления
-    if ($field_name=="write_offs_division") {
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_cnt_avg") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+//$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+//echo"<br>+++ <h1>$group дней $periodDaysStats</h1> "; 
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'";   $j++;}  
+*/
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) { 
+  $a=round($row2["cnt"]/4);   
+   if(!empty($a)) {
+   @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   @$data_values[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+}
+}
+}
 
-        // пробегаем по каждому типу товара и группируем запросы к БД
-        foreach($productGroupArray as $group =>$pArray) {
-            $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
-            echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
 
-            //собираем условие по выборке товаров
-            $whereInProductsId_in="";
-            $j=0;
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+*/
 
-            foreach($pArray as $prodId) {
-                if ($j>0)
-                    $whereInProductsId_in .=",";
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2)   { 
+  $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]/4) );   
+   if(!empty($a)) {
+   @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   @$data_values[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+}
+}
+}
 
-                $whereInProductsId_in .="'$prodId'";
-                $j++;
-            }
 
-            if (!empty($whereInProductsId_in)) {
-                $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(p.quantity) as cnt", "w.store_id"])
-                    ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
-                    ->where(['w.type' => 'Брак'])
-                    ->andWhere(['in', 'p.product_id', $pArray])
-                    ->andWhere(['<=', 'w.date', "$date_start_division 00:00:00"])
-                    ->andWhere(['>=', 'w.date', new Expression($date_start_division . ' - INTERVAL ' . $periodDaysStats . ' day')])
-                    ->groupBy(['p.product_id', 'w.store_id'])
-                    ->asArray()->all();
-//                $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
-//                FROM write_offs as w, write_offs_products as p
-//                WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
-                $valAll=0;
-                foreach ($data2 as $row2) {
-
-                    $a=ceil($row2["cnt"]);
-
-
-                    if (!empty($a)) {
-                        $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
-                        $data_values[$row2["product_id"]][0][0] +=$a;
-                    }
-                }
-            }
-        }
-    }
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=7;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+*/
 
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2)   { 
+  $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]) );   
+  
+  echo"<br> write_offs_sum ".$row2["product_id"]." ".$row2["cnt"]." шт.   цена=".$prices[$row2["product_id"]]."  ";
+  
+   if(!empty($a)) {
+   @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   @$data_values[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+}
+}
+}
 
-    //комментарии к ксписанию по магазину
-    if ($field_name=="write_offs_comments") {
-        //$time = strtotime($date1);
-        //$time2 = strtotime($date2);
-        //$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
-        //echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
-        //echo"<br>$field_name $date1 - $date_14day";
+//комментарии к ксписанию по магазину
+if($field_name=="write_offs_comments") {
+//$time = strtotime($date1);
+//$time2 = strtotime($date2);
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
 
-        // пробегаем по каждому типу товара и группируем запросы к БД
-        foreach($productGroupArray as $group => $pArray) {
-            $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
-            echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> ";
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> "; 
 
-            //собираем условие по выборке товаров
-            $whereInProductsId_in="";
-            $j=0;
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
 
-            foreach($pArray as $prodId) {
-                if ($j>0)
-                    $whereInProductsId_in .=",";
+if(!empty($whereInProductsId_in)) {     
 
-                $whereInProductsId_in .="'$prodId'";
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
 
-                $j++;
-            }
+$date_start_sale2=date("Y-m-d");
 
-            if (!empty($whereInProductsId_in)) {
-
-                if ($periodDaysStats==7) {
-                    $periodDaysStats_where = 14;
-                }
-                else {
-                    $periodDaysStats_where = $periodDaysStats;
-                }
-
-                $date_start_sale2=date("Y-m-d");
-
-                $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(c.quantity) as cnt", "w.store_id", "c.comment_id"])
-                    ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
-                    ->innerJoin('write_offs_comments as c', 'c.write_offs_id = p.write_offs_id AND p.product_id = c.product_id')
-                    ->where(['w.type' => 'Брак'])
-                    ->andWhere(['>', 'c.quantity', 0])
-                    ->andWhere(['in', 'p.product_id', $pArray])
-                    ->andWhere(['<=', 'w.date', "$date_start_sale2 00:00:00"])
-                    ->andWhere(['>=', 'w.date', new Expression($date_start_sale2 . ' - INTERVAL ' . $periodDaysStats_where . ' day')])
-                    ->groupBy(['p.product_id', 'w.store_id', 'c.comment_id'])
-                    ->asArray()->all();
-//                $data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
-//                FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
-//                WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0
-//
-//                AND   p.product_id in($whereInProductsId_in)
-//
-//                AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
-//
-//                group BY p.product_id,w.store_id, c.comment_id");
-
-                $valAll=0;
-
-                foreach($data2 as $row2) {
-                $a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
-                //echo"<br> $a";
-                    if (!empty($a)) {
-                    $data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
-                    //$data_values[$row2["product_id"]][0][0] +=$a;
-                    }
-                }
-            }
-        }
-    }
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 
 
-    //комментарии к ксписанию по магазинам суммарно
-    if ($field_name=="write_offs_comments_all") {
-        $time = strtotime($date1);
-        $time2 = strtotime($date2);
-
-        $date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
-        //echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
-        //echo"<br>$field_name $date1 - $date_14day";
-        $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(c.quantity) as cnt", "c.comment_id"])
-            ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
-            ->innerJoin('write_offs_comments as c', 'c.write_offs_id = p.write_offs_id AND p.product_id = c.product_id')
-            ->where(['w.type' => 'Брак'])
-            ->andWhere(['>', 'c.quantity', 0])
-            ->andWhere(['>=', 'w.date', $date_14day])
-            ->andWhere(['<=', 'w.date', $date2])
-            ->groupBy(['p.product_id', 'c.comment_id'])
-            ->asArray()->all();
-//        $data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt,  c.comment_id
-//        FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
-//        WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=?  AND  w.date<=?
-//        group BY p.product_id, c.comment_id",[$date_14day,$date2]);
-        $valAll=0;
-
-        foreach($data2 as $row2) {
-            $a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
-            //echo"<br> $a";
-            $data_values[$row2["product_id"]][0][0] .=$a;
-        }
-    }
+AND   p.product_id in($whereInProductsId_in) 
 
+AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
 
-    //quantity_purchase_last_week заказ за последние  неделю который приедет
-    if ($field_name=="quantity_purchase_last_week") {
-        if ($date_start_sale!='000-00-00') {
+group BY p.product_id,w.store_id, c.comment_id");
+$valAll=0;
+foreach($data2 as $row2) { 
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";  
+//echo"<br> $a";
+if(!empty($a)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+//$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
 
-            // старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+//комментарии к ксписанию по магазинам суммарно
+if($field_name=="write_offs_comments_all") {
+$time = strtotime($date1);
+$time2 = strtotime($date2);
 
-            //echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
-            $dataOrders = StoreOrders::find()->select(['id', 'name', 'date_start'])
-                ->where(['<=', 'date_start', $date_start_sale . ' 00:00:00'])
-                ->andWhere(['>=', 'date_start', new Expression($date_start_sale . ' - INTERVAL 7 day')])
-                ->asArray()->all();
-//            $dataOrders=$db::getRows("SELECT  id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt,  c.comment_id
+FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=?  AND  w.date<=? 
+group BY p.product_id, c.comment_id",[$date_14day,$date2]);
+$valAll=0;
+foreach($data2 as $row2) { 
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";  
+//echo"<br> $a";
+@$data_values[$row2["product_id"]][0][0] .=$a;
+}
+}
 
-            $orders_whereArr = ArrayHelper::getColumn($dataOrders, 'id');
-            $orders_where="";
-            $i=0;
-            echo"В этих закупках считаем закупленный товар";
 
-            foreach($dataOrders as $row22) {
-                echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";
-                if ($i>0)
-                    $orders_where .=",";
+//quantity_purchase_last_week заказ за последние  неделю который приедет
+if($field_name=="quantity_purchase_last_week") {
+if($date_start_sale!='000-00-00') {
+    
+    
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые     
+    
+    
+//echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";  
+$dataOrders=$db::getRows("SELECT  id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");    
+
+$orders_where="";
+$i=0;
+echo"В этих закупках считаем закупленный товар";
+foreach($dataOrders as $row22) {
+ echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";     
+ if($i>0) $orders_where .=",";
+    $orders_where .="'".$row22["id"]."'"; 
+  $i++;
+}   
+if(!empty($orders_where)) $orders_where=" AND order_id in($orders_where)";   
+$data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0  $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];   
+@$data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];    
+}
+}
 
-                $orders_where .="'".$row22["id"]."'";
-                $i++;
-            }
+}
 
-            if (!empty($orders_where)) {
-                $orders_where = " AND order_id in($orders_where)";
-            }
 
-            $data3 = StoreOrdersItem::find()->select(['sum(quantity_purchase) as quantity_purchase', 'product_id', 'store_id'])
-                ->where(['>', 'quantity_purchase', 0])->andWhere(['in', 'order_id', $orders_whereArr])
-                ->groupBy(['product_id', 'store_id'])->asArray()->all();
-//            $data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0  $orders_where group by product_id, store_id");
+if($field_name=="goods_in_transit") {
+    
+    echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
+if($order_date_add!='000-00-00') {
+    
+  
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые     
+if(!empty($orders_where)) {
+//$orders_where=" AND order_id in($orders_where)";   
+//$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0  $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+//$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];   
+//$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];    
+}
+}
 
-            foreach($data3 as $row2) {
-                $data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];
-                $data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];
-            }
-        }
 
-    }
+$dataOrders2=$db::getRows("SELECT  id,date_add FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");    
 
+$idss="";
+$k=0;
 
-    if ($field_name=="goods_in_transit") {
+echo"<b>Товар в пути участвуют заказы:</b>";
+foreach($dataOrders2 as $row) { 
+  if($k>0) $idss.=" OR";    $idss.= " order_id='".$row["id"]."'";  $k++; 
+  
+  echo"<br> id=".$row["id"]."  дата старта:".$row["date_add"]." ";
+  
+}
 
-        echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
-        if ($order_date_add!='000-00-00') {
+if(!empty($idss))  $orders_where=" AND ( $idss) AND order_id!='$orderId'";  
 
-            // старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
-            if (!empty($orders_where)) {
-            //$orders_where=" AND order_id in($orders_where)";
-            //$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0  $orders_where group by product_id, store_id");
-                foreach($data3 as $row2) {
-                //$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];
-                //$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];
-                }
-            }
 
-            $dataOrders2 = StoreOrders::find()->select(['id', 'date_add'])
-                ->where(['<=', 'date_add', $order_date_add])
-                ->andWhere(['>=', 'date_add', new Expression($order_date_add . ' - INTERVAL 7 day')])
-                ->asArray()->all();
-//            $dataOrders2=$db::getRows("SELECT  id,date_add FROM store_orders
-//            WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");
-
-            $idssArr = ArrayHelper::getColumn($dataOrders2, 'id');
-            $idss="";
-            $k=0;
-
-            echo"<b>Товар в пути участвуют заказы:</b>";
-            foreach($dataOrders2 as $row) {
-              if ($k>0) $idss.=" OR";    $idss.= " order_id='".$row["id"]."'";  $k++;
+echo"order_date_add = $order_date_add orders_where=$orders_where ";   
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, color  FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
+  
+ // echo"<br> SQL SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color  ";
+  
+     foreach($data2 as $row2) {
+        @$data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];   
+       // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"]; 
+        
+        echo"<br> ".@$products[$row2["product_id"]]." = ".$row2["value"]." ";
+   }   
 
-              echo"<br> id=".$row["id"]."  дата старта:".$row["date_add"]." ".$row["name"]."";
 
-            }
+}
 
-            if (!empty($idss))  $orders_where=" AND ( $idss) AND order_id!='$orderId'";
 
 
-            echo"order_date_add = $order_date_add orders_where=$orders_where ";
-            $data2 = StoreOrdersFieldsData::find()->select(['sum(value) as value', 'product_id', 'color'])
-                ->where(['field_name' => 'quantity_zakup_fact'])
-                ->andWhere(['>', 'value', 0])->andWhere(['in', 'order_id', $idssArr])
-                ->andWhere(['!=', 'order_id', $orderId])
-                ->groupBy(['product_id', 'color'])
-                ->asArray()->all();
-//             $data2=$db::getRows("SELECT sum(value) as value, product_id, color  FROM
-//             store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
 
-             // echo"<br> SQL SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color  ";
 
-            foreach($data2 as $row2) {
-                $data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];
-               // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"];
 
-                echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
-            }
-        }
-    }
 
+}
 
 
-    // если мы попадаем в поля сохраненные в таблице store_orders_prices  типа global_hand
 
-    $inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
-    if (in_array($field_name,$inFieldTable)) {
+// если мы попадаем в поля сохраненные в таблице store_orders_prices  типа global_hand 
 
-      ///  echo"+$field_name+ order_id=$orderId";
-        $data = StoreOrdersPrices::find()->select(['product_id', $field_name])->where(['order_id' => $orderId])->asArray()->all();
-//    $data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
-    foreach($data as $row) {
-        //foreach($inFieldTable as $field)
-            $data_values[$row["product_id"]][0][0]=$row[$field_name];
-        }
+$inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
+if(in_array($field_name,$inFieldTable)) {
+    
+  ///  echo"+$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
+foreach($data as $row) { 
+    //foreach($inFieldTable as $field) 
+        @$data_values[$row["product_id"]][0][0]=$row[$field_name];
+    }  
 
 
 
-    $inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
-    $field_id=$fieldsRows[$field_name]["id"];
-    if (!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
-        $data = StoreOrdersColors::find()->select(['product_id', 'store_id', 'quantity', 'color'])
-            ->where(['order_id' => $orderId, 'field_id' => $field_id])->andWhere(['!=', 'color', ''])
-            ->andWhere(['!=', 'store_id', 'undefined'])->asArray()->all();
-//    $data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
-    foreach($data as $row) {
-        if (empty($row["store_id"]))  $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
-        }
-    }
-    }
-
-
-    // если мы попадаем в поля сохраненные в таблице store_orders_item  типа global_hand
-    $inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
-    if (in_array($field_name,$inFieldTable)) {
+$inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) { 
+    if(empty($row["store_id"]))  @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+    }     
+}
+}
 
-    //echo"+!!!!!$field_name+ order_id=$orderId";
-        $data = StoreOrdersItem::find()->select(['product_id', 'store_id', $field_name])
-            ->where(['order_id' => $orderId])
-            ->andWhere(['!=', 'store_id', 'undefined'])->asArray()->all();
-//    $data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=?  AND store_id!='undefined'",[$orderId]);
-    foreach($data as $row) {
-        $data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
-        }
 
-    $inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
-    $field_id=$fieldsRows[$field_name]["id"];
-    if (!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
-        $data = StoreOrdersColors::find()->select(['product_id', 'store_id', 'quantity', 'color'])
-            ->where(['order_id' => $orderId, 'field_id' => $field_id])->andWhere(['!=', 'color', ''])
-            ->andWhere(['!=', 'store_id', 'undefined'])->asArray()->all();
-//    $data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!=''  AND store_id!='undefined'",[$orderId,$field_id]);
-    foreach($data as $row) {
-        $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
-        }
-    }
+// если мы попадаем в поля сохраненные в таблице store_orders_item  типа global_hand
+$inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+if(in_array($field_name,$inFieldTable)) {
+    
+//echo"+!!!!!$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=?  AND store_id!='undefined'",[$orderId]);
+foreach($data as $row) { 
+    @$data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
+    }   
+    
+$inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!=''  AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) { 
+    @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+    }     
+}   
+    
+    
+    
+}
+return $data_values;
+}
 
 
 
-    }
-    return $data_values;
 
-}
 
 // функция заносит в массив данные по полям в заказеЗакупщика исходные данные ID заказа Дата 1 Дата2 И магазин Может быть =0
 function data_values_insert_sql($date1,$date2) {
 global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$date_start_division,$orderId,$fieldsRows;
-$data = StoreOrdersFields::find()->select(['id', 'name_eng as field_name', 'position', 'field_type', 'description', 'sql_table_values'])
-    ->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
-    ->asArray()->all();
-//$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
 echo"<table class=t>";
 foreach($data as $row) {
   echo "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."</td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
@@ -2789,14 +3151,14 @@ foreach($data as $row) {
  // print_r($data_values[$row["field_name"]]);
  
   /*
-if ($printArray==true) {
+if($printArray==true) {    
   
   foreach($fArray as $ProductId => $ArrayP) {
    echo"<br>ProductId =".$products[$ProductId]." $ProductId";    
      foreach($ArrayP as $StoreId => $ArrayP2) {
-      if (!empty($StoreId)) {}
+      if(!empty($StoreId)) {}
         echo"<br>StoreId = ";  
-         if (!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
+         if(!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
         else echo $StoreId;
         //print_r($ArrayP2);
   
@@ -2815,734 +3177,226 @@ return $data_values;
 
 }
 
-// вытаскиваем зависимые перменные
-/*
-foreach($fieldsArrayDepended as $fId =>$DependedArray) {
- //   echo"<br> $fId"; 
- if (!empty($DependedArray)) {
-     foreach($DependedArray as $Field) {
-     $Field=trim($Field); 
-       if (!empty($Field)) {
-      //   if (is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field]."";
-    //     else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
-         // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт.  - не привязана к магазину
-         // stats суммарная по магазинам - на основе данных из других таблиц  сумма продаж в шт, сумма спсиания
-         // stats_store_hand  суммарная по магазинам - на основе вводных данных
-         // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
-       }
-    }
-  }
-}
 
-// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
-$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
-foreach($dataF as $row) { 
-$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];    
-foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
-}
 
-// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
-$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
-foreach($dataF as $row) { 
-$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];    
-foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
-}
-
-*/
-// возвращаем css класс по значению ячейки
-function returnRowCssClassByFieldValue($fieldName,$value){
-    global $fieldsRows;
-    $valueCss="";
-    if (!empty($fieldsRows[$fieldName]["property"] )) {
-        foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
-            if ($row["type"]==">")  if ($value>$row["value"])  $valueCss=$row["style_class"];
-            if ($row["type"]==">=")  if ($value>=$row["value"])  $valueCss=$row["style_class"];
-            if ($row["type"]=="=")  if ($value==$row["value"])  $valueCss=$row["style_class"];
-            if ($row["type"]=="<=")  if ($value<=$row["value"])  $valueCss=$row["style_class"];
-            if ($row["type"]=="<")  if ($value<$row["value"])  $valueCss=$row["style_class"];
-
-        }
-    }
-    return $valueCss;
-}
-
-function getDataFiledsData() {
-    global $orderId, $db, $whereInProductsId, $whereInProductsIdArr, $fieldsRows;
 
 
-//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
-    $da = Products1cOptions::find()->select(['id', 'min_lot', 'min_order'])
-        ->where(['in', 'id', $whereInProductsIdArr ?? []])
-        ->asArray()->all();
-//    $da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
-    foreach($da as $r) {
-        $FiledsData["min_order"][$r["id"]]=$r["min_order"];
-        $FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
-    }
-
-// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
-    $dataF = StoreOrdersFieldsData::find()->where(['order_id' => $orderId])->asArray()->all();
-//    $dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
-    foreach($dataF as $row) {
-//если тип поля текст то заменяем
-        if ($fieldsRows[$row["field_name"]]["tip"]=="string")
-            $v=$row["value_text"];
-        else
-            $v=$row["value"];
-
-        $storeId=$row["store_id"];
-        $color=$row["color"];
-        if (empty($storeId)) $storeId="NULL";
-        if (empty($color)) $color="NULL";
-
-        $FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
-
 
+// пересчитываем данные - берем из страых таблиц и вписываем в новые.
+if(!empty($_GET["insert"])) {
+    
+// массив соответствия ID магазинов и GUID    
+$data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
+foreach($data as $row) { 
+$export[$row["entity_id"]]=$row["export_val"];
+$export_revers[$row["export_val"]]=$row["entity_id"];
+}     
+    
+$data_values_new=data_values_insert_sql($date1,$date2);
 
+$fieldsArrayFlip=array_flip($fieldsArray);
+foreach($data_values_new as $Field => $fArray) {
 
-        if (!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+if($Field=="quantity_purchase_last_week1")  
+{
+    echo"<h2>$Field</h2>";   
 
-    }
 
-    return $FiledsData;
+  foreach($fArray as $ProductId => $ArrayP) {
+   echo"<br>ProductId =".$products[$ProductId]." $ProductId";    
+     foreach($ArrayP as $StoreId => $ArrayP2) {
+      if(!empty($StoreId)) {}
+        echo"<br>StoreId = ";  
+        
+        
+        if(!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
+        else echo $StoreId;
+        print_r($ArrayP2);
+  
+ } 
+ }
 }
+  global $storeIdToGuidArray;
+   $storeIdToGuidArray=$export;
+  // $field_id=$fieldsArrayFlip[$Field];
+   insert_store_orders_fields($fArray,$Field); 
 
-//функция обновления данных
-function updatefieldsRows() {
-    global $db,$fieldsRows,$whereInProductsId,$whereInProductsIdArr,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
-           $products, $productsColorsArray;
-
-    $html="";
-    $fieldsArr=[];
-    foreach($fieldsRows as $pole => $array) {
-
-        if ($array["field_type"]=="stats") $fieldsArr[]=$pole;
-        if ($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
-//echo"<br> <b>$pole </b>  ";
-
-    }
-
-//    foreach($fieldsArr as $fieldName) {
-////echo"<br> $fieldName";
-//        $data_up=getArrayByFiledName($fieldName,$date1,$date2);
-//        insert_store_orders_fields($data_up,$fieldName);
-//        $FiledsData[$fieldName]=$data_up;
-//
-//    }
-
-
-    foreach($fieldsStatsSum as $fieldName) {
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
-        $pole=trim($fieldsRows[$fieldName]["func_content"]);
-        $data_up=array();
-        $dataF = StoreOrdersFieldsData::find()->select(['product_id', 'sum(value) as sum', 'color'])
-            ->where(['order_id' => $orderId])->andWhere(['not in', 'store_id', ['', 'NULL']])
-            ->andWhere(['field_name' => $pole])->groupBy(['product_id', 'color'])
-            ->asArray()->all();
-//        $dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-//store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
-        foreach($dataF as $row) {
-            if (empty($row["color"])) $row["color"]="NULL";
-            $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
-            $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
-        }
-        $html .= "<br><b>$fieldName</b> считаем массив!   ";
-
-        insert_store_orders_fields($data_up,$fieldName);
-
-    }
-
-
-
-
-// полнограммы факт по всем магазинам
-    $spf005 = StoreProductsFact::find()->select(['date_id'])->orderBy(['date_id' => SORT_DESC])->one();
-    $date_id = $spf005['date_id'];
-//    $date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
-    $data3 = StoreProductsFact::find()->select(['store_id', 'product_id', 'quantity,color'])
-        ->where(['date_id' => $date_id])->andWhere(['>', 'quantity', 0])
-        ->andWhere(['in', 'product_id', $whereInProductsIdArr])
-        ->asArray()->all();
-//    $data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
-//$whereInProductsId",[$date_id]);
-    foreach($data3 as $row2) {
-        if ($row2["color"]=="" or $row2["color"]=="NULL")
-            $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"];
-        else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];
-    }
-
-
-
-    $html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";
-    $data = StorePlanogram::find()->select(['product_id', 'store_id', 'quantity', 'color'])->where(['>', 'quantity', 0])
-        ->andWhere(['in', 'product_id', $whereInProductsIdArr])
-        ->asArray()->all();
-//    $data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
-    foreach($data as $row) {
-        if (empty($row["color"]))  $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"];
-        else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
-
-    }
-
-
-
-
-
-    $massivSQLColor=[];$inProduct=[];
-
-
-
-    $data4 = Products1cOptions::find()->select(['id', 'colors'])->where(['>', 'provider_id', 0])->andWhere(['!-', 'colors', ''])
-        ->andWhere(['in', 'id', $whereInProductsIdArr])->groupBy(['id'])->orderBy(['id' => SORT_DESC])
-        ->asArray()->all();
-//    $data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
-
-    foreach($data4 as $row2) {
-        $colors=explode(";",$row2["colors"]);
-        $productId=$row2["id"];
-
-        if (!in_array($productId,$inProduct)) {
-
-            $html .="<h3>".$products[$productId]."</h3>";
-            $inProduct[]=$productId;
-
-        }
-
-        $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
-  <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
-
-
-        foreach($colors as $color) {
-            $color=trim($color);
-            // пробегаемся по каждому магазинам
-            foreach($storesArrayAll as $storeId => $nameSt) {
-
-
-                if (!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color]))   {
-                    //получаем процент цвета в полнограмме
-                    if (!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
-                        $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
-                    else $percentColor=0;
-                    // округляем до сотых
-                    $percentColor=round($percentColor,3);
-
-                    $massivSQLColor[$productId][$storeId][$color]=$percentColor;
-
-                    //заносим в глобальную переменную
-                    $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
-                    $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
-                  <td>$percentColor</td></tr>";
-
-                }
-            }
-        }
-        $html .="</tbody></table>";
-    }
-
-    insert_store_orders_fields($massivSQLColor,"color_percent","",false);
-
-
-//////
-    $data = StoreOrdersFields::find()->select(['id', 'name_eng as field_name', 'name', 'position', 'field_type', 'description', 'sql_table_values'])
-        ->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
-        ->asArray()->all();
-//    $data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
-//FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
-    $html .="<table class=\"table table-bordered table-sm\">";
-    foreach($data as $row) {
-        $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
-        if (trim($row["name"])!=trim($row["description"]))   $html .=$row["description"];
-
-        $html .="</td><td> <b>".$row["field_name"]."</b>
-   ".$row["field_type"]."</td><td>";
-
-
-        if (is_array($FiledsData[$row["field_name"]] ?? '')) {
-            $html .="<font color=green>++</font>";
-        }
-        //<td>".$row["sql_table_values"]."</td>
-        //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
-
-
-
-        /*
-        // готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
-        $dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
-        foreach($dataF as $row0) {
-        //если тип поля текст то заменяем
-        if ($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
-
-        $storeId=$row0["store_id"];
-        $color=$row0["color"];
-        if (empty($storeId)) $storeId="NULL";
-        if (empty($color)) $color="NULL";
-
-        $FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
-        }
-        */
-
-// получаем массив с данными по полям из таблицы store_orders_fields_data
-        $FiledsData=getDataFiledsData();
-
-
-
-        // if (is_array($FiledsDataSumm[$row["field_name"]])) {
-
-
-        if ($row["field_type"]=="stats_formula") {
-            //  echo"<h2>".$row["field_name"]." формула</h2>";
-
-            //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
-
-            foreach($products as $productId => $nameProduct) {
-                $massivSQL=array();
-                // считать или нет по каждому магазину
-                $storesArr=["NULL"=>"NULL"];
-
-                // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
-
-                if ($row["field_name"]!="storehouse_balance") {
-                    if ($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")
-                        $storesArr = array_merge($storesArr, $storesArrayAll);
-                }
-
-                $k=1;
-                foreach($storesArr as $storeId => $nameStore) {
-
-                    //  if ($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+ } 
+$db::sql("DELETE FROM store_orders_fields_data WHERE  (value='0.000' or  value='0.00')  AND value_text=''",[$orderId]);  
+  
+}
 
-                    $k++; $color="";
-                    $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
 
-                    // добавляем в массив глобальные новые значение которые мы посчитали по формулам
-                    if (!empty($array["value"])) {
-                        $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
-                        $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+$_CONFIG["jscss"]='
+<style>
 
-                        foreach($productsColorsArray[$productId] as $color) {
-                            $color=trim($color);
-                            $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
-                            if (!empty($array2["value"])) {
-                                // if ($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
-                                $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
-                                $massivSQL[$productId][$storeId][$color]=$array2["value"];
-                            }
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal;  max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+    padding: 0.05rem;
+    background-color: 1px;
+    box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+       border-collapse: collapse;
+       border-spacing: 0;
+       overflow: hidden;
+}
+.zak th, .zak td {
+       border: 1px solid #e6e6e6;
+       padding: 0.1rem;
+       vertical-align: middle;
+       position: relative;
+}
 
-                        }
-                    }
-                }
-                //if (!empty($array["value"]))
+.zak td:hover:before { 
+       background-color: #e3e3e3;
+       content: \'\';  
+       height: 100%;
+       left: -5000px;
+       position: absolute;  
+       top: 0;
+       width: 10000px;   
+       z-index: -2;        
+}
+.zak td:hover:after { 
+       background-color: #cdcdcd;
+       content: \'\';  
+       height: 10000px;    
+       left: 0;
+       position: absolute;  
+       top: -5000px;
+       width: 100%;
+       z-index: -1;        
+}
 
-                insert_store_orders_fields($massivSQL,$row["field_name"]);
 
-            }
 
-        }
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
 
 
-        // $FiledsData[$row["field_name"]]
-        $html .="</td>
-  
-  
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+  vertical-align: bottom;
+  line-height: normal;
+}
+table.zak thead b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
   
-  </tr> ";
-    }
-
-    $html .="</table>";
-    /////////
-
-
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");
+}
 
-    /*
-    // суммируем деление и заносим данные в таблицу хранения данных по полям
-    foreach($products as $productId => $name) {
-      $division_auto_need_all=0;
-      foreach($storesArrayAll as $storeId => $nameStore) {
-      //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
-       // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
-        $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
 
-       if (!empty($val)) $division_auto_need_all +=$val;
-        }
+table.zak tr.zg th b,table.zak tr.zg td b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+    font-weight:normal; font-size:0.6rem;
+}
 
-    //$field_name="division_auto_need_all";
-    //echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
-    if (!empty($division_auto_need_all)) {
-       $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
-        $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
-        insert_store_orders_fields($data_uper,"division_auto_need_all");
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+    padding: 25px 0.5rem 0 0.5rem;
+}
 
-      }
-    }
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+.zak td.td_product:hover {background:#fff;}
 
-    */
+</style>
+<script>
 
-//пробегаемся по всем продуктам
-    /*
-    foreach($products as $productId => $name) {
-     $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-    $quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+function changef(id,typeint)
+{ 
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\')  uname = uname.replace(/[^0-9.\s]/gi, \'\'); 
+if(typeint==\'int\')  uname = uname.replace(/[^0-9\s]/gi, \'\'); 
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
 
 
-    if (!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>";
-    $productInner[]=$productId;
+function ajaxEditFieldValue(name_eng,product_id,color)
+{ 
+$.ajax({
+       url: \'/shipment/ajaxEditFieldValue/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+       }}); 
+$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
 
-    $html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
-    получаено по факту  ".$quantity_warehouseman_fact."";
 
-    $division_ratio=1;
-    if ($division_auto_need_all > $quantity_warehouseman_fact) {
-    $division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
 
-    $html .="<font color=red>-меньше!</font>";
-    $html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
 
-    }
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{ 
+$.ajax({
+       url: \'/shipment/ajaxEditFieldValue/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+       }}); 
+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
 
-    $html .="<font color=red>коэффициент $division_ratio</font>";
+</script>';
 
-    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
-    insert_store_orders_fields($data_uper,"division_ratio");
 
 
-    }
 
-    */
 
 
-    /*
-  //division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
-  foreach($products as $productId => $name) {
-    $division_summ_all=0;
-    foreach($storesArrayAll as $storeId => $nameStore) {
-     $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
-      if (!empty($val)) $division_summ_all +=$val;
-      }
 
-  //$field_name="division_auto_need_all";
-  //echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
-  if (!empty($division_summ_all)) {
-     $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
-      $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
-      insert_store_orders_fields($data_uper,"division_summ_all");
 
+// вытаскиваем зависимые перменные
+/*
+foreach($fieldsArrayDepended as $fId =>$DependedArray) {
+ //   echo"<br> $fId"; 
+ if(!empty($DependedArray)) {
+     foreach($DependedArray as $Field) {
+     $Field=trim($Field); 
+       if(!empty($Field)) {
+      //   if(is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field].""; 
+    //     else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
+         // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт.  - не привязана к магазину
+         // stats суммарная по магазинам - на основе данных из других таблиц  сумма продаж в шт, сумма спсиания
+         // stats_store_hand  суммарная по магазинам - на основе вводных данных
+         // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
+       }
     }
   }
-   */
-
-
-
-// вычисляем массив по цветам привязанным к товару
-    $data4 = Products1cOptions::find()->select(['id', 'colors'])->where(['>', 'provider_id', 0])->andWhere(['!=', 'colors', ''])
-        ->andWhere(['in', 'id', $whereInProductsIdArr])->groupBy(['id'])->orderBy(['id' => SORT_DESC])
-        ->asArray()->all();
-//    $data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
-    foreach($data4 as $row2) {
-        $colors=explode(";",$row2["colors"]);
-        $productId=$row2["id"];
-
-        foreach($colors as $color) {
-            $color=trim($color);
-            $colorsProductsArray[$productId][$color]=$color;
-
-        }
-    }
-
-
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE  (field_name='division_summ_all'  or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance'   )  AND order_id='$orderId'");
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='storehouse_balance'  AND store_id!='' AND order_id='$orderId'");
-
-//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='division_auto_need'  AND order_id='$orderId'");
-    $data_up=[];
-    foreach($products as $productId => $nameProduct) {
-
-        // $storesArr = array_merge($storesArrayAll);
-        $all=0;
-        foreach($storesArrayAll as $storeId => $nameStore) {
-
-            $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
-            //  echo"<br>$nameProduct -$nameStore  division_auto_need =".$valueArray["value"];
-            $all =$all + $valueArray["value"];
-            $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"];
-
-            $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
-            if ($orderId!=263)   insert_store_orders_fields($data_up2,"division_auto_need");
-
-        }
-
-        $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all;
-        $data_up[$productId]["NULL"]["NULL"]=$all;
-
-    }
-    if ($orderId!=263)     insert_store_orders_fields($data_up,"division_auto_need_all");
-    // exit("+++++++exit  +++++");
-    $rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact   quantity_zakup_fact
-
-    StoreOrdersFieldsData::deleteAll(['and', ['in', 'field_name', ['division_auto', 'division_summ']], ['order_id' => $orderId]]);
-//    $db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_auto','division_summ') AND order_id='$orderId'");
-
-
-
-    foreach($products as $productId => $nameProduct) {
-        $massivSQL=array();
-        $FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
-
-        if ($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
-            $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
-        }
-        else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
-
-        $data_up=[];
-        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-        insert_store_orders_fields($data_up,"division_ratio");
-
-        $data_up=[];
-        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
-        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
-
-
-        insert_store_orders_fields($data_up,"division_auto");
-
-    }
-
-
-    $productInner=[];
-    $rp="";
-    foreach($products as $productId => $nameProduct) {
-        $data_up=[];
-        //$storesArr = array_merge($storesArrayAll);
-
-        if (empty($FiledsData["min_lot"][$productId])) $FiledsData["min_lot"][$productId]=1;
-
-        $planogram_all=[];
-        $planogram_fact_all=[];
-
-        if (!in_array($productId,$productInner)) {}
-
-
-        $rp .="
-<div class=\"expanel expanel-secondary\">
-<div class=\"expanel-heading\">
-
-
-<h3 class=\"expanel-title\">$nameProduct 
-</h3>
-</div> <div class=\"expanel-body p-0 m-0\"> 
-факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
-, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
-мин лот=".$FiledsData["min_lot"][$productId]."
-<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
-<th>Магазин</th>
-<th><b>полнограмма</b></th>
-<th><b>факт</b></th>
-<th><b>потребность</b></th>
-<th><b>авто-деление с коэффицентом</b></th>
-<th><b>ручная добавка</b></th>
-<th><b>авто-деление с ручной добавкой</b></th></tr>
-</thead>";
-
-
-        $all=0;
-        $productInner[]=$productId;
-        $data_uper=[];
-        $division_summ_all=0;
-        foreach($storesArrayAll as $storeId => $nameStore) {
-
-            $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-            $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
-            //if ($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c")           $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
-
-
-            $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
-
-            $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
-
-            $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
-            $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
-
-
-            $rp .="<tr><td class=\"text-right\">$nameStore</td>
-          <td>".$store_planogram[$productId][$storeId]."</td>
-         <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
-          
-          <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
-          </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
-          <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
-          <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
-          </tr> ";
-
-
-            foreach($store_planogram_colors[$productId][$storeId] ?? [] as $color => $quantity) {
-                $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
-                if ( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {
-
-                    $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
-                    $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
-                    $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
-                    $division_summ_color=$division_auto_color+$division_hand_color;
-
-                    $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color;
-                    $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
-                    $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
-
-
-
-                    $percent_color_per=$percent_color*100;
-                    $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
-         <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
-         <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
-         <td>".$division_auto_need_color."
-          </td><td>".$division_auto_color."</td>
-          <td>".$division_hand_color."</td>
-          <td>".$division_summ_color."</td>
-          </tr> ";
-                }
-
-            }
-
-
-
-
-        }
-
-        $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
-
-
-
-        $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all;
-
-        insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need");
-        insert_store_orders_fields($data_uper["division_auto_color"],"division_auto");
-        insert_store_orders_fields($data_uper["division_summ_color"],"division_summ");
-
-        $data_up=[];
-        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
-        insert_store_orders_fields($data_up,"division_auto_all");
-
-        // $data_up=[];
-        //  $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
-        // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
-
-        // insert_store_orders_fields($data_up,"division_summ_all");
-
-
-
-
-
-        $rp .="<tfooter>
-     <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
-     <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
-     
-     <td> 
-      ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
-</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
-<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
-
-<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
-
-
-</td></tr></tfooter></table>
-Остаток склада (факт-сумма даления Итого) 
-(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].") 
-Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
-</div> </div>";
-    }
-
-    $FiledsData=getDataFiledsData();
-    $data_up=[];
-    foreach($products as $productId => $nameProduct) {
-        $division_summ_all=0;
-
-        echo"<h1>$nameProduct</h1>";
-        foreach($storesArrayAll as $storeId => $nameStore) {
-            echo"<br> $nameStore 
-        ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ."  ";
-            /*
-              foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
-              $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
-              $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
-              $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
-              $division_summ_color=$division_auto_color+$division_hand_color;
-              $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
-               $data_up[$productId][$storeId][$color]=$division_summ_color;
-              }
-              */
-
-            $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];
-
-        }
-
-        echo"<br><b>division_summ_all=$division_summ_all</b>";
-
-        $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
-        $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
-
-    }
-    insert_store_orders_fields($data_up,"division_summ_all");
-
-
-    $data_up=[];
-    foreach($products as $productId => $nameProduct) {
-
-        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] -  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
-        $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
-
-
-        echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
-         = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]."  - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."  ";
-
-    }
-    insert_store_orders_fields($data_up,"storehouse_balance");
-
-
-    echo $html.$rp;
-
-
-    StoreOrdersFieldsData::deleteAll(['value' => '0.000', 'value_text' => '']); // ???
-//    $db::sql("DELETE FROM store_orders_fields_data WHERE  value='0.000' AND value_text=''",[$orderId]);
-
-    StoreOrders::updateAll(['date_update' => new Expression("NOW()"), 'update_html' => "%html.$rp"], ['id' => $orderId]);
-//    $db::sql("UPDATE  store_orders SET date_update=NOW(), update_html=?  WHERE id=?",["$html.$rp",$orderId]);
-
-    if (!empty($_REQUEST["html_print"])) echo $html;
-
-// получаем массив с данными по полям из таблицы store_orders_fields_data
-
-    $FiledsData=getDataFiledsData();
-
-    return  $FiledsData;
+}
 
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) { 
+$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];    
+foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
 }
 
-//функция обновляет по массиву ID продуктов информацию в таблице data
-/*
-$products - массив ID product_id=>name_product
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) { 
+$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];    
+foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
+}
 
 */
-function updateProductArrayDataField($fieldsNamesArr) {
-    global $db,$products;
-
-    print_r($products);
-
-
-    $whereF=implode("','",$fieldsNamesArr);
-    $whereF =" name_eng in('$whereF') ";
-
-    echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";
-
-    $data = StoreOrdersFields::find()->select(['id', 'name_eng as field_name', 'position', 'field_type', 'description', 'sql_table_values'])
-        ->where(['in', 'name_eng', $fieldsNamesArr])->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
-        ->asArray()->all();
-//    $data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields
-//    WHERE  $whereF order by position ASC, id ASC");
-    echo"<table class=t>";
-    foreach($data as $row) {
-        echo"<br>== ".$row["field_name"]." ".$row["field_type"]."   ";
-
-    }
-
-    echo"</table>";
-
-}
\ No newline at end of file
diff --git a/erp24/inc/functionsFiedlsData_______.php b/erp24/inc/functionsFiedlsData_______.php
new file mode 100644 (file)
index 0000000..8f2280a
--- /dev/null
@@ -0,0 +1,3134 @@
+<?php
+
+global $products, $fieldsRows, $ProductsOptions, $FiledsDataArray, $fieldsPropertyArray,$date_start_sale, $date_start_division, $order_date_add,
+$whereInProductsId, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll;
+
+$fieldsPropertyArray=[]; $FiledsData=[]; $FiledsDataArray=[]; $fieldsPropertyArray=[]; $DataFieldStats=[]; $productsColorsArray=[];
+
+$k=0;
+$whereGuid="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+if(!empty($guid)) {  if($k!=0) $whereGuid .=",";    $whereGuid .=" '$guid' ";  $k++;    }
+}
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
+
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1  or id=10");
+
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
+
+$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+
+// статусы закупок - массивы с доступами к полям 
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];   
+$store_orders_status_description[$row["id"]]=$row["description"];   
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
+$statuses_stores_show[$row["id"]]=$row["stores_show"]; 
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);   
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);  
+}
+
+
+
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+$FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+
+
+
+
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC"); 
+foreach($data as $row) { 
+    $fieldsPropertyArray[$row["field_id"]][]=$row;
+ }
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC"); 
+foreach($data as $row) { 
+    $fieldsRows[$row["name_eng"]]=$row;
+    $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];   
+    
+    
+    $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]);     //считаем поля и зависимые поля рекурсивно
+    if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">")  if($value>$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]==">=")  if($value>=$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="=")  if($value==$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="<=")  if($value<=$row["value"])  $valueCss=$row["style_class"]; 
+ if($row["type"]=="<")  if($value<$row["value"])  $valueCss=$row["style_class"]; 
+
+}  
+}
+ return $valueCss;   
+} 
+
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,    DATE_FORMAT(date_add, '%Y-%m-%d') as date_add, 
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"]; 
+$date_update=$OrderData["date_update"]; 
+$date_start_division=$OrderData["division_date"]; 
+$order_date_add=$OrderData["date_add"]; 
+
+
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+    $date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
+} else {
+ // иначе идем к родителю и узнаем дату матери к которой будем привязываться   
+ $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);   
+}
+
+
+
+$time = strtotime($date_start);
+$date2=date('Y-m-d 23:59:59', $time-86400); 
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+//echo"Дата старта $date_start Считаем продажи и списания от даты $date1  до $date2";
+
+
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];   
+}
+
+
+
+
+function getDataFiledsData() {
+global $orderId, $db,$whereInProductsId,$fieldsRows;
+
+
+//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];  
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"]; 
+}
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"];    else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+
+
+
+
+if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+
+}
+
+return $FiledsData;    
+}
+
+
+//функция обновления данных 
+function updatefieldsRows() {
+    global $db,$fieldsRows,$whereInProductsId,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
+    $products, $productsColorsArray;
+$html="";    
+ $fieldsArr=[];   
+foreach($fieldsRows as $pole => $array) {
+    
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b>  ";   
+    
+}  
+
+foreach($fieldsArr as $fieldName) {   
+//echo"<br> $fieldName";    
+  $data_up=getArrayByFiledName($fieldName,$date1,$date2);    
+  insert_store_orders_fields($data_up,$fieldName);
+  $FiledsData[$fieldName]=$data_up;
+  
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}   
+ $html .= "<br><b>$fieldName</b> считаем массив!   ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+  
+  
+  
+  
+// полнограммы факт по всем магазинам
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
+$data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
+$whereInProductsId",[$date_id]);
+foreach($data3 as $row2) {
+    if($row2["color"]=="" or $row2["color"]=="NULL")
+    $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"]; 
+    else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];  
+}  
+  
+  
+  
+$html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";  
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($data as $row) {
+  if(empty($row["color"]))  $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"]; 
+  else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"]; 
+    
+}    
+
+  
+  
+
+
+$massivSQLColor=[];$inProduct=[];
+
+
+
+$data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+
+ foreach($data4 as $row2) { 
+  $colors=explode(";",$row2["colors"]);
+  $productId=$row2["id"];
+ if(!in_array($productId,$inProduct)) {
+     
+     $html .="<h3>".$products[$productId]."</h3>";
+     $inProduct[]=$productId;
+     
+ }
+  $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+  <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+  
+  
+   foreach($colors as $color) {
+    $color=trim($color); 
+      // пробегаемся по каждому магазинам
+         foreach($storesArrayAll as $storeId => $nameSt) {
+             
+      
+                if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color]))   {  
+                 //получаем процент цвета в полнограмме
+                  if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
+                   $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+                  else $percentColor=0;
+                 // округляем до сотых
+                  $percentColor=round($percentColor,3);
+         
+                 $massivSQLColor[$productId][$storeId][$color]=$percentColor; 
+                 
+                 //заносим в глобальную переменную
+                 $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
+                 $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+                  <td>$percentColor</td></tr>";
+                  
+                }  
+        }
+ }
+  $html .="</tbody></table>";
+}
+
+insert_store_orders_fields($massivSQLColor,"color_percent","",false);  
+  
+//////  
+$data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=\"table table-bordered table-sm\">";
+foreach($data as $row) {
+  $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
+  if(trim($row["name"])!=trim($row["description"]))   $html .=$row["description"];
+  
+    $html .="</td><td> <b>".$row["field_name"]."</b>
+   ".$row["field_type"]."</td><td>"; 
+  
+  
+    if(is_array($FiledsData[$row["field_name"]])) {
+   $html .="<font color=green>++</font>";
+ }
+  //<td>".$row["sql_table_values"]."</td>
+  //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
+
+  
+  
+/*  
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+  
+
+  
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+      
+     if($row["field_type"]=="stats_formula") {
+    //  echo"<h2>".$row["field_name"]." формула</h2>";
+    
+     //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);  
+    
+       foreach($products as $productId => $nameProduct) {
+      $massivSQL=array();
+       // считать или нет по каждому магазину
+       $storesArr=["NULL"=>"NULL"];
+      
+      // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+      
+      if($row["field_name"]!="storehouse_balance") {
+      if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")  
+      $storesArr = array_merge($storesArr, $storesArrayAll); 
+      }
+
+       $k=1;
+       foreach($storesArr as $storeId => $nameStore) {
+       
+    //  if($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+           
+      $k++; $color="";
+      $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+      // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+      if(!empty($array["value"])) {
+      $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+       $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+       
+      foreach($productsColorsArray[$productId] as $color) {
+        $color=trim($color);
+        $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+        if(!empty($array2["value"])) {
+       // if($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+            $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+            $massivSQL[$productId][$storeId][$color]=$array2["value"];
+        }    
+        
+        }
+       }
+       }  
+     //if(!empty($array["value"])) 
+     
+       insert_store_orders_fields($massivSQL,$row["field_name"]);
+      
+      }
+      
+    }
+
+  
+  // $FiledsData[$row["field_name"]]
+   $html .="</td>
+  
+  
+  
+  </tr> ";  
+}  
+
+ $html .="</table>";  
+ /////////
+  
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
+
+/*
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+    
+   if(!empty($val)) $division_auto_need_all +=$val;
+    }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
+    insert_store_orders_fields($data_uper,"division_auto_need_all");
+    
+  } 
+}
+
+*/
+
+//пробегаемся по всем продуктам 
+/*
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+if(!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>"; 
+$productInner[]=$productId;
+
+$html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+получаено по факту  ".$quantity_warehouseman_fact."";  
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+    
+}    
+
+*/
+  
+  
+  /*
+//division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_summ_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+   $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
+    if(!empty($val)) $division_summ_all +=$val;
+    }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_summ_all)) {
+   $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
+    insert_store_orders_fields($data_uper,"division_summ_all");
+    
+  } 
+}  
+ */ 
+  
+
+  
+// вычисляем массив по цветам привязанным к товару
+$data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row2) { 
+  $colors=explode(";",$row2["colors"]);
+  $productId=$row2["id"];
+   
+  foreach($colors as $color) {
+    $color=trim($color); 
+    $colorsProductsArray[$productId][$color]=$color;
+  
+   }
+ }
+  
+
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  (field_name='division_summ_all'  or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance'   )  AND order_id='$orderId'");    
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='storehouse_balance'  AND store_id!='' AND order_id='$orderId'");    
+
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='division_auto_need'  AND order_id='$orderId'");  
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+
+     // $storesArr = array_merge($storesArrayAll);
+       $all=0;
+       foreach($storesArrayAll as $storeId => $nameStore) {
+           
+        $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
+      //  echo"<br>$nameProduct -$nameStore  division_auto_need =".$valueArray["value"];
+         $all =$all + $valueArray["value"]; 
+         $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"]; 
+        
+        $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
+     if($orderId!=263)   insert_store_orders_fields($data_up2,"division_auto_need");     
+           
+       }
+    
+        $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all; 
+        $data_up[$productId]["NULL"]["NULL"]=$all;
+
+   }
+      if($orderId!=263)     insert_store_orders_fields($data_up,"division_auto_need_all");    
+ // exit("+++++++exit  +++++");     
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact   quantity_zakup_fact
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_auto','division_summ') AND order_id='$orderId'");    
+
+
+       
+foreach($products as $productId => $nameProduct) {
+$massivSQL=array();
+$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+
+if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
+ $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;   
+}
+else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
+
+        $data_up=[];
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+        insert_store_orders_fields($data_up,"division_ratio"); 
+        
+        $data_up=[];
+        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
+        
+        
+        insert_store_orders_fields($data_up,"division_auto"); 
+
+}
+
+
+$productInner=[];
+$rp="";
+foreach($products as $productId => $nameProduct) {
+ $data_up=[];
+      //$storesArr = array_merge($storesArrayAll);
+   
+         if(empty($FiledsData["min_lot"][$productId])) $FiledsData["min_lot"][$productId]=1;  
+
+$planogram_all=[];
+$planogram_fact_all=[];
+
+if(!in_array($productId,$productInner)) {}
+
+
+$rp .="
+<div class=\"expanel expanel-secondary\">
+<div class=\"expanel-heading\">
+
+
+<h3 class=\"expanel-title\">$nameProduct 
+</h3>
+</div> <div class=\"expanel-body p-0 m-0\"> 
+факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
+, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
+мин лот=".$FiledsData["min_lot"][$productId]."
+<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
+<th>Магазин</th>
+<th><b>полнограмма</b></th>
+<th><b>факт</b></th>
+<th><b>потребность</b></th>
+<th><b>авто-деление с коэффицентом</b></th>
+<th><b>ручная добавка</b></th>
+<th><b>авто-деление с ручной добавкой</b></th></tr>
+</thead>"; 
+
+
+$all=0;
+$productInner[]=$productId;       
+$data_uper=[];  
+$division_summ_all=0;
+       foreach($storesArrayAll as $storeId => $nameStore) {
+           
+          $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+          $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+          //if($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c")           $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
+          
+          
+         $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+         
+         $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];  
+         
+         $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
+         $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
+         
+         
+          $rp .="<tr><td class=\"text-right\">$nameStore</td>
+          <td>".$store_planogram[$productId][$storeId]."</td>
+         <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
+          
+          <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
+          </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
+          <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
+          <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
+          </tr> ";
+          
+           
+          foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+          $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];        
+         if( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {    
+          
+         $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
+         $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+         $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+         $division_summ_color=$division_auto_color+$division_hand_color;
+         
+         $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color; 
+         $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
+         $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
+         
+         
+           
+          $percent_color_per=$percent_color*100;    
+         $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
+         <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
+         <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
+         <td>".$division_auto_need_color."
+          </td><td>".$division_auto_color."</td>
+          <td>".$division_hand_color."</td>
+          <td>".$division_summ_color."</td>
+          </tr> ";    
+         }    
+              
+          }
+          
+      
+          
+           
+       }
+       
+        $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+       
+       
+       
+        $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all; 
+        
+         insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need"); 
+         insert_store_orders_fields($data_uper["division_auto_color"],"division_auto"); 
+         insert_store_orders_fields($data_uper["division_summ_color"],"division_summ"); 
+         
+         $data_up=[];
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
+        insert_store_orders_fields($data_up,"division_auto_all"); 
+        
+        // $data_up=[];
+      //  $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+       // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+        
+        // insert_store_orders_fields($data_up,"division_summ_all"); 
+
+          
+
+        
+        
+     $rp .="<tfooter>
+     <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
+     <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
+     
+     <td> 
+      ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
+</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
+<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
+
+<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
+
+
+</td></tr></tfooter></table>
+Остаток склада (факт-сумма даления Итого) 
+(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].") 
+Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
+</div> </div>";
+} 
+$FiledsData=getDataFiledsData();
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+  $division_summ_all=0;  
+  
+   echo"<h1>$nameProduct</h1>";
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        echo"<br> $nameStore 
+        ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ."  ";
+        /*
+          foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+          $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];  
+          $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+          $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+          $division_summ_color=$division_auto_color+$division_hand_color;
+          $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
+           $data_up[$productId][$storeId][$color]=$division_summ_color;  
+          }
+          */
+          
+     $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];         
+          
+     }
+          
+  echo"<br><b>division_summ_all=$division_summ_all</b>";
+
+    $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+   $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;  
+
+}    
+   insert_store_orders_fields($data_up,"division_summ_all"); 
+
+
+    $data_up=[]; 
+foreach($products as $productId => $nameProduct) {
+    
+         $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] -  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
+         $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
+         
+         
+         echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
+         = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]."  - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."  ";
+   
+}        
+ insert_store_orders_fields($data_up,"storehouse_balance");               
+
+
+echo $html.$rp;
+
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE  value='0.000' AND value_text=''",[$orderId]);    
+
+$db::sql("UPDATE  store_orders SET date_update=NOW(), update_html=?  WHERE id=?",["$html.$rp",$orderId]);      
+ if(!empty($_REQUEST["html_print"])) echo $html;   
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData(); 
+
+return  $FiledsData;
+    
+}
+
+
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+/*
+$FiledsData=[];
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"];    else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+
+//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+}
+
+*/
+
+
+
+// если не указан магазин или надо просуммировать для какого-то поля
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
+foreach($dataF as $row) $FiledsDataSumm[$row["field_name"]][$row["product_id"]]=$row["sum"];
+
+
+
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NOT NULL  group by field_name,product_id, color",[$orderId]);
+foreach($dataF as $row) $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]]=$row["sum"];
+
+
+
+
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+/* можно указать перменную до подключения файла 
+$whereInProductsId = ' IN ('product_id')';
+$products=['product_id'=>"name"];
+
+*/
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+if(empty($whereInProductsId)) {
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) { 
+  if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+   $products[$row["id"]]=$row["name"];
+   $prov[$row["id"]]=$row["provider_id"];
+   $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+   $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+   $k++;    
+ } 
+$whereInProductsId .=")"; 
+}
+
+
+//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];  
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"]; 
+}
+
+
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p 
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) { 
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+} 
+
+
+
+if(!empty($_REQUEST["update"])) {
+$FiledsData=updatefieldsRows();
+}
+
+
+if($date_update <= time()-260) {
+//echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";   
+//$FiledsData=updatefieldsRows(); 
+    
+}
+
+
+if(!empty($_GET["update1113"])) {
+$html="";    
+ $fieldsArr=[];   
+foreach($fieldsRows as $pole => $array) {
+    
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b>  ";   
+    
+}  
+
+foreach($fieldsArr as $fieldName) {   
+//echo"<br> $fieldName";    
+  $data_up=getArrayByFiledName($fieldName,$date1,$date2);    
+  insert_store_orders_fields($data_up,$fieldName);
+  $FiledsData[$fieldName]=$data_up;
+  
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}   
+ $html .= "<br><b>$fieldName</b> считаем массив!   ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+  
+  
+  
+//////  
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=t>";
+foreach($data as $row) {
+  $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
+  </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+   </td> <td>"; 
+  //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
+  if(is_array($FiledsData[$row["field_name"]])) {
+      
+       $html .="<font color=green>++</font>";
+      
+  }
+  
+  
+/*  
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+  
+  
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+      
+     if($row["field_type"]=="stats_formula") {
+    //  echo"<h2>".$row["field_name"]." формула</h2>";
+    
+     //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);  
+    
+       foreach($products as $productId => $nameProduct) {
+      $massivSQL=array();
+       // считать или нет по каждому магазину
+       $storesArr=["NULL"=>"NULL"];
+      
+      // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+      if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")  
+      $storesArr = array_merge($storesArr, $storesArrayAll);
+
+       $k=1;
+       foreach($storesArr as $storeId => $nameStore) {
+       
+    //  if($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+           
+      $k++; $color="";
+      $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+      // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+      if(!empty($array["value"])) {
+      $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+       $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+       
+      foreach($productsColorsArray[$productId] as $color) {
+        $color=trim($color);
+        $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+        if(!empty($array2["value"])) {
+       // if($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+            $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+            $massivSQL[$productId][$storeId][$color]=$array2["value"];
+        }    
+        
+        }
+       }
+       }  
+     //if(!empty($array["value"])) 
+     
+       insert_store_orders_fields($massivSQL,$row["field_name"]);
+      
+      }
+      
+    }
+
+  
+  // $FiledsData[$row["field_name"]]
+   $html .="".$row["description"]." </td>
+  
+  
+  
+  </tr> ";  
+}  
+
+ $html .="</table>";  
+  
+
+  
+  
+  /////////
+  
+  
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+    }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");} 
+}
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+$html .="<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";  
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+    
+}    
+  
+$db::sql("UPDATE  store_orders SET date_update=NOW()  WHERE id='$orderId'");      
+ if(!empty($_REQUEST["html_print"])) echo $html;   
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData(); 
+    
+}/// end update3
+
+
+/*
+
+if(!empty($_GET["update2"])) {
+    
+echo"UPDATYE=2";   
+foreach($fieldsRows as $fieldName =>$array) {
+if($array["field_type"]=="stats_summ") {
+// echo"DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";   
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+
+
+$pole=trim($array["func_content"]);
+$FiledsDataSummStatsFuntion=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!=''  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+   // echo"<br> $fieldName =  ".$row["product_id"]." = ".$row["color"]."  = ".$row["color"]."  ".$row["sum"]." ";
+}   
+    
+    
+echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]."  ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
+ $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
+insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
+}
+
+
+if($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
+echo"<h4>division_summ_all !!</h4>";    
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");  
+
+ $massivS=[];
+foreach($products as $productId => $value) {    
+$array=getValueStatsFormula("division_summ_all",$productId,"","");  
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+
+ //echo"<br>$value value=".$array["value"]."  ";
+}
+ insert_store_orders_fields($massivS,"division_summ_all");
+}
+
+
+if($array["name_eng"]=="auto_purchase_formula") {
+echo"<h4>auto_purchase_formula !!</h4>";    
+
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");  
+
+ $massivS=[];
+foreach($products as $productId => $value) {    
+    
+ $storesArr=["NULL"=>"NULL"];
+      
+// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+if($fieldsRows[$array["name_eng"]]["stores_stats"]==1)   $storesArr = array_merge($storesArr, $storesArrayAll);
+
+foreach($storesArr as $storeId => $nameStore) {
+
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");  
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+ echo"<br>$value value=".$array["value"]."  "; 
+foreach($productsColorsArray[$productId] as $color) {    
+    
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);  
+ $massivS[$productId][$storeId][$color]=$array["value"];
+
+ echo"<br>++$color  value=".$array["value"]."  ";
+}
+}
+
+}
+ insert_store_orders_fields($massivS,"auto_purchase_formula");
+
+
+}
+
+
+
+
+}
+
+
+//foreach($products as $productId => $value) { echo "<br>  $value => value = ++ ".  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
+
+
+}
+
+*/
+
+
+
+
+
+
+
+
+
+
+//функция обновляет по массиву ID продуктов информацию в таблице data
+/*
+$products - массив ID product_id=>name_product
+
+*/
+function updateProductArrayDataField($fieldsNamesArr) {
+ global $db,$products;   
+    
+print_r($products);    
+
+
+$whereF=implode("','",$fieldsNamesArr);
+$whereF =" name_eng in('$whereF') ";
+  
+echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";  
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields 
+WHERE  $whereF order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+echo"<br>== ".$row["field_name"]." ".$row["field_type"]."   ";    
+    
+}    
+    
+ echo"</table>";   
+    
+}
+
+//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
+//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
+//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
+
+
+
+
+if($_SESSION["group_id"]==1) echo $rp;
+
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $status_order_id, $status_edit_dostup, $store_orders_status_description, $storesArray, $store_id, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id;  
+
+
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) { 
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';   
+    
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
+
+echo'</table>
+
+
+';
+
+
+
+
+
+echo'</form>';
+
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id])  { 
+
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+$stores_cnt=count($stores_arr);
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status 
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
+
+
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];   
+
+
+
+
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
+
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>"; 
+
+echo'<div class="row"><div class="col-12">';
+
+
+echo'<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">без магазина</a>';
+
+foreach($storesArray as $strid=>$namestore){
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
+
+if($store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success";     } else echo"info";  echo" btn-sm m-1\"> ";
+if($store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore</a>";   
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+    
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO  store_order_status SET   order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=?  ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}    
+    
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\"  href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+    
+}
+
+
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldGlobal($field_name,$productId){
+   global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats;
+   // if($field_name=="min_order" or $field_name=="min_lot")  $value=$globalValuesArray[$field_name][$productId];
+   if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+   if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+return $value;
+}    
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldGlobalHand($field_name,$productId){
+   global $db,$DataFieldStatsSumm,$FiledsData;
+   $value=$DataFieldStatsSumm[$productId][$field_name];
+      if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+  return $value;
+}    
+  
+  
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStats($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll;    
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];
+   
+   if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+
+
+
+
+   
+ return $value;
+} 
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats;    
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];
+  //    if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+ return $value;
+} 
+
+
+
+
+
+
+  
+ // получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsSumm($field_name, $productId, $color){
+global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm;    
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId]["NULL"][$color];
+   if(empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
+   if(empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+
+    return $value;
+}  
+
+
+
+//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
+if(0 and $date_start_sale!='000-00-00') {
+  //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";  
+$dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");    
+$orders_where=implode("','",$dataOrders);  
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";  
+  $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0  $orders_where group by product_id,color");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"];    
+       $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
+       $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];        
+   }
+   
+   
+// quantity_purchase_last_week
+  $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0  $orders_where group by product_id,color,store_id");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"]; 
+       if(empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];        
+       $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];       
+   }   
+   
+   
+   
+  // товар в пути  date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
+$dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");    
+$orders_where=implode("','",$dataOrders);  
+
+echo"$orders_where = $orders_where";
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";  
+
+
+//echo"  товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color";
+  $data=$db::getRows("SELECT sum(value) as value, product_id, color  FROM 
+  store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"];    
+       $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
+   }   
+   
+//quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND (w.type='Брак' or w.type='Брак с поставки') AND  w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day  group BY p.product_id,w.store_id");
+foreach($data2 as $row) { 
+$a=ceil($row["cnt"]/2);   
+if(!empty($a)) {
+$FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
+$FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a; 
+}
+} 
+$FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
+}
+
+
+
+
+
+
+/*
+  $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
+     foreach($data as $row) {
+        if(empty($row["color"])) $row["color"]="NULL";
+        $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+        $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+      
+    }
+*/
+// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
+
+
+
+function function_auto_purchase_formula($param,$print=0) {
+global $db;    
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+if(empty($min_lot)) $min_lot=1;
+
+
+// считаем запас на 2 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact +  $goods_in_transit;
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ; 
+$zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
+}
+else { 
+$zakaz= $sale_7day + $sale_2day +  $quantity ;    
+}
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+$ceil=ceilCoefficient($zakaz,$min_lot);
+
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="".$param["color"]."
+Товар в пути goods_in_transit =$goods_in_transit
+Продажи sale_7day=  $sale_7day
+Страховой запас sale_2day= $sale_2day
+Полнограмма $quantity
+факт $quantity_fact
+Заказ $zakaz
+Округляем -> $ceil 
+";
+
+
+$arr["value"]=$ceil;
+$arr["title"]=$ttl;
+return $arr;
+
+}
+
+
+// округляет до определенного числа
+function roundCoefficientQuantity($number, $rate = 1)
+{
+       $rest = $rate * floor($number / $rate);
+       
+       return $rest;
+}
+
+
+// функция для формулы автоделения
+function deivisionFormula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+if(empty($min_lot)) $min_lot=1;
+
+// считаем запас на 3 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact ; //$goods_in_transit
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ; 
+$zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
+}
+else { 
+$zakaz= $sale_7day + $sale_2day +  $quantity ;    
+}
+
+//echo"<br>$zakaz";
+
+$zakaz=roundCoefficientQuantity($zakaz, $min_lot);
+
+
+if(empty($zakaz)) $zakaz=$quantity;
+return $zakaz;
+
+
+}
+
+
+function ratioDivisionPercent($param){
+
+$zakazDivision=deivisionFormula($param);    
+$percent=1;
+if($param["quantity_warehouseman_fact"]<$zakazDivision) {
+$percent=round($param["quantity_warehouseman_fact"]/$zakazDivision,2);
+
+}    
+ $array["value"]=$percent;
+ $array["title"]="Автоделение = $zakazDivision Куплено ".$param["quantity_warehouseman_fact"].""; 
+ return $array;   
+    
+}
+
+// функция для формулы  потребности при автоделении 
+function function_division_auto_need_formula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=(int)$param["sale_7day"];
+$sale_7day=(int)$param["sales_7day_division"];
+$quantity_fact=(int)$param["quantity_fact"];
+$quantity=(int)$param["quantity"];
+$min_lot=(int)$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=(int)$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=(int)$param["quantity_warehouseman_fact"];
+$quantity_purchase=(int)$param["quantity_purchase"];
+$sale_2day=ceil(2*($sale_7day/7));
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем запас на 2 дня
+
+$zakaz=$zakazDivision;
+
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше    
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+    
+    
+}
+*/
+
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+
+//Заказано кустовыми $quantity_purchase_summ шт.
+//Заказано на магазин $quantity_purchase шт.
+
+$ttl="$txt формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
+Мин. лот деления $min_lot!
+Куплено по факту $quantity_warehouseman_fact шт
+Продажи 7 дней=".$sale_7day."шт
+Страховой запас на 2 дня= ".$sale_2day."шт
+Полнограмма ".$quantity."шт
+факт ".$quantity_fact."шт
+Заказ ".$zakaz."шт
+Округляем -> $ceilшт";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+// функция для формулы автоделения
+function function_division_auto_formula1($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше    
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+}
+*/
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="$txt
+формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+Минимальный лот деления $min_lot
+Заказано кустовыми ".$quantity_purchase_summ."шт.
+Заказано на магазин ".$quantity_purchas."шт.
+Куплено к-м факту ".$quantity_warehouseman_fact."шт.
+Продажи 7 дней=  ".$sale_7day."шт.
+Страховой запас 2дня".$sale_2day."шт.
+Полнограмма $quantityшт.
+факт $quantity_factшт.
+Заказ $zakazшт.
+Округляем -> $ceilшт.
+";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+
+
+function return_quantity_zakup_fact_week_formula($productId, $color){
+global $FiledsData;
+
+$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color];
+//$value=rand(1,999);
+return $value;
+}
+
+
+
+
+function returnFormula($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;      
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color))  $color="NULL";         
+
+$type=$fieldsRows[$field_name]["type"];
+$formula=$fieldsRows[$field_name]["func_content"];
+$func_content_arr=explode(";",$formula);  
+$avg_arr=explode(",",$func_content_arr[0]);
+
+$field[0]=$avg_arr[0];
+$field[1]=$avg_arr[1];
+
+
+$field_type1=$fieldsRows[$field[0]]["field_type"];
+$field_type2=$fieldsRows[$field[1]]["field_type"];
+
+$storeId1=$storeId;
+$store_save=$fieldsRows[$field[0]]["store_save"]; 
+if($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio"  or $field_type1=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то  or $field[0]=="division_auto_need"
+{
+    
+$storeId1="NULL";    
+}
+$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color];
+
+
+$storeId2=$storeId;
+$store_save=$fieldsRows[$field[1]]["store_save"];
+if($store_save==0 or $field[1]=="division_ratio" or  $field_type2=="global" or $field_type2=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то   or $field[1]=="division_auto_need"
+{
+    
+$storeId2="NULL";    
+}
+
+$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color];
+  
+       
+if(!empty($formula)) {  
+    
+// среднее арифметичнкое  func_content = a1,a2;    
+if($type=="avg") {
+ if(!empty($avg2)) $avg=round(($value/$avg2)*100);      else $value=0;
+ $data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+}
+
+// умножение  func_content = a1,a2;
+elseif($type=="multiplication") { 
+    
+$value=$avg1*$avg2;
+if($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);   
+
+//if($field[1]=="division_ratio") 
+
+
+//echo"<br> {$field[1]} store=$storeId2 $avg2 color=$color ";   умножение ".$field[0]." $field_type1 $avg1   ".$field[1]." $avg2 $field_type2 
+$value_title=" ( ".$field[0]."=$avg1) * (".$field[1]."=$avg2)";
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}    
+    
+}
+
+// разница  func_content = a1,a2;
+elseif($type=="difference") { $value=$avg1-$avg2; 
+$value=round($value);
+$value_title="$avg1(".$field[0].") -$avg2(".$field[1].")"; 
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name,"", false);
+}
+
+}
+
+
+// суммирование
+elseif($type=="addition") { 
+$avg1=$FiledsData[$field[0]][$productId][$storeId][$color];
+$avg2=$FiledsData[$field[1]][$productId][$storeId][$color];
+
+$value=$avg1+$avg2;
+$value_title="$avg1(".$field[0].")  + $avg2(".$field[1].") ";  
+$value=round($value);
+//if($field_name=="division_summ" and $storeId!="NULL")  echo"<br> ".$field[0]."   $productId = $avg1 + ".$field[1]." =$avg2  stireId=$storeId  color=$color summ=$value";
+
+//$FiledsData[$field_name][$productId][$storeId][$color]=$value;
+
+if($field_name=="division_summ") {
+
+//echo"<br>. Продукт ".$products[$productId]." ".$storesArrayAll[$storeId]." $avg1(".$field[0].")  + $avg2(".$field[1].") =  $value";    
+    
+    
+}
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+
+}
+
+
+
+}
+
+
+if($type=="division"  || $type=="division_auto_need"    || $type=="auto_purchase_formula"   || $type=="division_ratio"   ) {  
+        if($formula==true){       }  else $value_arr=["value"=>0,"title"=>"не сичтаем.."];            
+}            
+
+          
+           if(empty($color)) $color="NULL";
+             if($storeId=="NULL" and $color=="NULL") $formula=false;
+              if($storeId=="NULL" and $color!="NULL") $formula=false; 
+               if($storeId!="NULL" and $color=="NULL") $formula=true; 
+          $value_arr=[];       
+          $param=array();  
+            $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color];
+            $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color];
+            $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color];
+            $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color];         
+            $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color];
+            
+            
+            if(empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color];
+            
+            $param["min_lot"]=$FiledsData["min_lot"][$productId];  
+            if(empty($store_id))  $param["min_order"]=$FiledsData["min_order"][$productId];  
+            
+            $param["quantity_purchase_summ"]=$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color];  
+            $param["quantity_warehouseman_fact"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];  
+            $param["quantity_purchase"]=$FiledsData["quantity_purchase"][$productId][$storeId][$color];  
+
+
+// считаем авто деление
+if($type=="division") {  
+ $value="устарело";
+}
+
+
+// считаем авто деление
+if($type=="division_ratio") {  
+$value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+$value_title="коэффицент";
+}
+
+/*
+// считаем авто деление
+if($type=="division_auto") {  
+
+$value_arr=function_division_auto_formula($param); 
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto");
+}
+            
+}
+
+*/
+
+// считаем авто деление
+if($type=="division_auto_need") {  
+$value_arr=function_division_auto_need_formula($param); 
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto_need");
+//echo"<br>!!!+$value";
+
+}
+            
+}
+
+
+// вторая формула автозаказа
+         if($type=="auto_purchase_formula") {  
+
+if(empty($storesAll)) $storesAll=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
+
+
+
+      
+            $value_arr=function_auto_purchase_formula($param); 
+            $value=$value_arr["value"];
+            $value_title=$value_arr["title"];
+            
+               if($color=="NULL" and !empty($storesAll[$storeId]))  {
+                   
+              
+                          $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+              
+                $itog=$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]-$param["goods_in_transit"];   
+                   
+                 $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] +=$value;   
+                     echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value  all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";   
+               }
+            
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+$data_ttl[$productId][$storeId][$color]=$value_title;
+insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
+}
+}   
+
+   
+  // формула подсчета за неделю - товар в пути
+         if($type=="quantity_zakup_fact_week") {  
+            $value=return_quantity_zakup_fact_week_formula($productId,$color);
+
+         }   
+         
+          if($type=="quantity_purchase_last_week") {  
+             $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color];
+
+         }          
+
+        
+         
+         
+
+/*
+         if($type=="auto_purchase") {  
+                //Мин планограмма -остатки факт на витрине +продажи +(продажи:7*3)+(продажи *5%)
+            $sale_zapas3=($data_values["sales_cnt"][$pid]/7)*3;
+            $sale_week=$data_values["sales_cnt"][$pid];
+            $percent5=$data_values["sales_cnt"][$pid]*0.05;
+            $valuef = $data_values["quantity"][$pid] - $data_values["quantity_fact"][$pid] + $sale_week + $sale_zapas3 + $percent5; 
+            $valuef=ceil($valuef);
+                $value="$valuef" ;  
+            }
+        
+        
+
+      */     
+           
+           
+$array=["value"=>$value,"title"=>$value_title];          
+return $array;
+}    
+
+
+
+
+
+function getValueStatsFormula($field_name,  $productId, $storeId, $color){
+global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;   
+
+   $array = returnFormula($field_name,  $productId, $storeId, $color);
+   return $array;
+} 
+
+    
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueField($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;  
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";    
+   $type_field=$fieldsRows[$field_name]["field_type"];
+   if($type_field=="global") {
+    $value=getValueFieldGlobal($field_name,$productId);
+  //  echo"<br> $field_name pid=$productsId = value= $value";   
+  }
+  
+   elseif($type_field=="global_hand") {
+    $value=getValueFieldGlobalHand($field_name,$productId);
+    
+   if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+    if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];  
+   
+  
+  } elseif($type_field=="stats") $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+   elseif($type_field=="static_hand" or $type_field=="stats_hand" ) {
+      $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+      echo $type_field;
+  }elseif($type_field=="stats_formula") {
+      $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+      
+
+      
+  } elseif($type_field=="stats_store_summ")   $value=getValueFieldStatsSumm($field_name,$productId,$color);   
+  elseif($type_field=="stats_summ")   $value=getValueFieldStatsSumm($field_name,$productId,$color);     
+  elseif($type_field=="stats_store_hand")  {   
+      
+      $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);  
+      //echo $type_field." p=$productId $storeId  $color "; 
+      }
+  else {
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];     
+  }
+  
+  
+$tip=$fieldsRows[$field_name]["tip"];  
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.00','',$value);
+
+     
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];   
+  
+return $array;    
+}
+
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;  
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";    
+   
+   $colorFirst=$color;
+   
+   $type_field=$fieldsRows[$field_name]["field_type"];
+
+
+ if($field_name=="division_ratio" 
+    or $field_name=="division_auto_need_all"
+    or $field_name=="quantity_zakup_fact"
+    or  $field_name=="quantity_warehouseman_fact"
+    or  $field_name=="storehouse_balance"
+    or  $field_name=="min_lot"
+    or  $field_name=="purchase_fact_difference"   
+    or $field_name=="division_hand_summ"  
+    or $field_name=="division_auto_all" 
+    or $field_name=="division_summ_all"     
+    or $field_name=="delta_zakup"  
+    or $field_name=="quantity_zakup" 
+    or $field_name=="quantity_zakup_fact_summa"     
+    
+    or $field_name=="comment_zakup"  
+    or $field_name=="quantity_zakup_info" 
+    or $field_name=="purchase_kust_summ"  
+    or $field_name=="quantity_zakup_fact_week"  
+    or $field_name=="quantity_purchase_summ"  
+    or $field_name=="delta_rejection"  
+    or $field_name=="quantity_warehouseman_defective"  
+    or $field_name=="write_offs_comments_all"  
+    or $field_name=="goods_in_transit"        
+    or $field_name=="auto_purchase_formula_all"     
+    or $field_name=="quantity_storage"     
+ ) {$storeId="NULL"; $color="NULL";  }
+ if($field_name=="quantity_zakup_fact"
+    or  $field_name=="quantity_warehouseman_fact"
+    or $field_name=="delta_zakup"  
+    or $field_name=="quantity_zakup" 
+     or $field_name=="quantity_zakup_info" 
+ ) {$storeId="NULL"; $color=$colorFirst;  }
+  
+  
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];     
+ $tip=$fieldsRows[$field_name]["tip"];  
+ if($field_name=="min_lot") $value=$FiledsData[$field_name][$productId];     
+ if($field_name=="min_order") $value=$FiledsData[$field_name][$productId];     
+  
+ if($field_name=="color_percent") {
+     //$tip="string"; 
+ $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];  
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);  
+ }  
+
+ if($field_name=="comment_zakup") {
+
+// $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];  
+
+ }    
+  
+$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
+
+  
+
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
+     
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];   
+  
+return $array;    
+}
+
+
+
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll ;  
+
+
+      $value=$valueArray["value"];
+      $value_title=$valueArray["title"];  
+
+      $colorName=trim(str_replace(['\\','/'],['',''],$color));
+      $md5Color=md5($color);
+      $show=1;  
+    if(!empty($color) and $color!='NULL') {
+          $nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';  
+          $idInput=''.$fieldName.''.$productId.''.$md5Color.'';
+          $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';  
+          if(!empty($storeId)) { 
+              if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1;  else $show=0; 
+              
+             if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"]))  $show=1; 
+              
+              
+          }
+     }   
+     else {
+          $nameInput=''.$fieldName.'['.$productId.']';  
+          $idInput=''.$fieldName.''.$productId.'';
+          $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';   
+         
+     }  
+        
+    if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {    
+        echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
+          if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+          if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+         if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+       echo'>';
+    } 
+    elseif($fieldsRows[$fieldName]["type"]=="textarea") {   
+        echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'"  name='.$nameInput.' class="form-control"';
+       if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+        echo'>'.$value.'</textarea>';       
+      }
+      else {
+          if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+           else   echo $value;    
+      }
+
+}
+
+
+
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum,  $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;    
+
+     $fieldId=$fieldsRows[$fieldName]["id"];  
+  
+     
+     $dostup=$dostup_fields[$fieldId];
+     $bg=$bg_fields[$fieldId];  
+   // $dostup="edit"; 
+     if(empty($storeId)) $storeId="NULL";     
+
+
+if($dostup=="edit" or $dostup=="show") {   
+    
+    //можно ли это поле в принципе редактировать
+    $edit=$fieldsRows[$fieldName]["field_edit"]; 
+    //можно ли это поле редактировать если выбран магазин
+    if($storeId!="NULL") { 
+    $edit=$fieldsRows[$fieldName]["field_store_edit"]; 
+    $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+    } else {
+    $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина         
+        
+    }
+    
+  echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'"  class="p-1 text-center ';
+
+
+      $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+      
+      
+    //$value=$FiledsData[$fieldName][$productId][$storeId][$color];    
+
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];  
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";   
+///$valueArray["value"]=$value;   
+//$valueArray["title"]=$value_title;   
+
+     $value=$valueArray["value"];
+     $value_title=$valueArray["title"]; 
+
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++;  }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value;   }
+}
+
+
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
+
+
+  if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';   
+  
+  // показываем поле настройки поля позволяют.
+  if($store_show==1) {
+
+   if($dostup=="edit" and $edit==1) {
+       
+    //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";   
+       printFieldType($valueArray,$fieldName,$productId,$storeId,$color);   
+       
+   }
+   else {
+   if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+    else {
+        
+  //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit";  
+        echo $value;   
+        
+        
+    }
+    
+     
+    
+    }
+   }
+   else { //если значение поля не нужно выводить то показвываем заглушку
+       
+      echo'XXX'; 
+       
+   }
+   
+   
+   
+   
+   echo'</td>';  
+}    
+    
+     
+     
+}
+
+
+
+
+
+
+
+//вставляем данные в таблицу дашборда
+
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData;
+
+$field_id=$fieldsRows[$field_name]["id"];
+$type=$fieldsRows[$field_name]["type"];
+foreach($massivSQL as $productId =>$array) {
+   foreach($array as $storeId =>$valueArr) { 
+       foreach($valueArr as $color =>$value) { 
+          if(empty($color) or $storeId=="NULL") $color="";   
+         if($color=="NULL") $color="";         
+          
+            if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL')  $storeId=$storeIdToGuidArray[$storeId];
+           if(empty($storeId) or $storeId=="NULL") $storeId="";  
+           
+    if($type=="string")  {$value_text=$value;  $value="";}
+    else { $value_text=""; }
+
+      try {
+    //  if($field_name=="division_auto_need")    echo"<br>$field_name pid=$productId +  storeId=$storeId + color=$color + =$value ".print_r($value)."  ";
+     if(!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
+         
+         
+        if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+         $oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+         $oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+         
+          if($print==true)  echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle  $title"; 
+       
+       
+       
+       if(($type!="string") or ($type=="string" and $value_text!="")) {   
+         
+         $title=$massivTitle[$productId][$storeIdData][$colorData];    
+            
+        $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)       
+          VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",     
+          [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+          
+      }
+    
+          if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+            if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+             
+        // echo"<br>По этому товару не обновляем так ка значение старое уже есть";    
+        
+         }
+         
+         if(((empty($value)  or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and  $type!="string") or ($type=="string" and $value_text=="")) {
+    
+         } 
+         else {
+        //  if($print==true)  echo"<br>!!! $field_name =$value";
+      //     $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)                 VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",              [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+         }
+          
+         // if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         //if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+          
+        //  echo"<br>$field_name pid=$productId color=$color  =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]."  ";
+         
+        
+         }
+      }
+           
+      } catch (Exception $e) 
+       {
+           echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+       }
+     
+       }
+     }
+   } 
+}
+
+
+
+
+// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
+// собираем массив с данными по названию поля - входной параметр Имя поля
+function getArrayByFiledName($field_name,$date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;    
+$products_class=[];
+$data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"]; 
+
+
+
+$periodDaysStats=14; //количество дней статистики по продажам и списанию
+// сколько на складе по 1с
+if($field_name=="quantity_storage") {
+$data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND  product_id $whereInProductsId ");
+foreach($data2 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+$data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
+}
+
+//полнограмма
+if($field_name=="quantity") {
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id  $whereInProductsId");
+foreach($store_planogram as $row) {
+    
+    
+   // echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  g ={$row["quantity"]}";
+    $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+    
+}
+}
+
+
+
+//плнограмма факт quantity_fact
+if($field_name=="quantity_fact") {
+$db::sql("DELETE  FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
+  
+    
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id  $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+    //   echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  quantity ={$row["quantity"]}";
+
+    $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+}
+}
+
+
+
+
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId]; 
+// если это срезка у нее нет группы 
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории  
+ $productGroupArray["flowers"][]=$pid;
+}elseif($tip=="potted") {  $daysCounterSales=14; $daysCounterWriteOffs=14;  $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30;  $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip  $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {    
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      $data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+}
+}
+}
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt111") {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  $whereInProductsId
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      $data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+}
+
+
+
+//продажи количество штук привязанные к дате деления
+if($field_name=="sales_7day_division") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {    
+    
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)    AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      $data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+} 
+//echo"<br> Дата атуальных продаж для деления $date_start_division ";     
+//print_r($data_values);
+}
+}
+
+
+//продажи  сумма привязанные к дате деления
+if($field_name=="sales_7day_amount_division" ) {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");    
+foreach($data2 as $row2) { 
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale; 
+}
+}
+}
+}
+}
+
+
+//продажи  сумма
+if($field_name=="sales_amount" ) {
+    
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {       
+$data2=$db::getRows("SELECT i.product_id,sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");    
+foreach($data2 as $row2) { 
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale; 
+}
+
+}
+}
+}
+}
+
+
+
+//списания за 14 дней среднее - недельное списание от даты 1
+if($field_name=="write_downs" or $field_name=="quantity_rejection") {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {       
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND  
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
+
+
+echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND  
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
+
+$valAll=0;
+foreach($data2 as $row2) { 
+    
+if($periodDaysStats==7) $a=ceil($row2["cnt"]/2);  
+else  $a=ceil($row2["cnt"]);  
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
+
+//списания за 14 дней среднее - недельное списание от даты деления
+if($field_name=="write_offs_division") {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>$group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+foreach($data2 as $row2) { 
+$a=ceil($row2["cnt"]);   
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
+
+
+//комментарии к ксписанию по магазину
+if($field_name=="write_offs_comments") {
+//$time = strtotime($date1);
+//$time2 = strtotime($date2);
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {     
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+
+$date_start_sale2=date("Y-m-d");
+
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 
+
+AND   p.product_id in($whereInProductsId_in) 
+
+AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
+
+group BY p.product_id,w.store_id, c.comment_id");
+$valAll=0;
+foreach($data2 as $row2) { 
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";  
+//echo"<br> $a";
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+//$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
+
+//комментарии к ксписанию по магазинам суммарно
+if($field_name=="write_offs_comments_all") {
+$time = strtotime($date1);
+$time2 = strtotime($date2);
+
+$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt,  c.comment_id
+FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=?  AND  w.date<=? 
+group BY p.product_id, c.comment_id",[$date_14day,$date2]);
+$valAll=0;
+foreach($data2 as $row2) { 
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";  
+//echo"<br> $a";
+$data_values[$row2["product_id"]][0][0] .=$a;
+}
+}
+
+
+//quantity_purchase_last_week заказ за последние  неделю который приедет
+if($field_name=="quantity_purchase_last_week") {
+if($date_start_sale!='000-00-00') {
+    
+    
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые     
+    
+    
+//echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";  
+$dataOrders=$db::getRows("SELECT  id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");    
+
+$orders_where="";
+$i=0;
+echo"В этих закупках считаем закупленный товар";
+foreach($dataOrders as $row22) {
+ echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";     
+ if($i>0) $orders_where .=",";
+    $orders_where .="'".$row22["id"]."'"; 
+  $i++;
+}   
+if(!empty($orders_where)) $orders_where=" AND order_id in($orders_where)";   
+$data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0  $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];   
+$data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];    
+}
+}
+
+}
+
+
+if($field_name=="goods_in_transit") {
+    
+    echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
+if($order_date_add!='000-00-00') {
+    
+  
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые     
+if(!empty($orders_where)) {
+//$orders_where=" AND order_id in($orders_where)";   
+//$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0  $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+//$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];   
+//$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];    
+}
+}
+
+
+$dataOrders2=$db::getRows("SELECT  id,date_add FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");    
+
+$idss="";
+$k=0;
+
+echo"<b>Товар в пути участвуют заказы:</b>";
+foreach($dataOrders2 as $row) { 
+  if($k>0) $idss.=" OR";    $idss.= " order_id='".$row["id"]."'";  $k++; 
+  
+  echo"<br> id=".$row["id"]."  дата старта:".$row["date_add"]." ".$row["name"]."";
+  
+}
+
+if(!empty($idss))  $orders_where=" AND ( $idss) AND order_id!='$orderId'";  
+
+
+echo"order_date_add = $order_date_add orders_where=$orders_where ";   
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, color  FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
+  
+ // echo"<br> SQL SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color  ";
+  
+     foreach($data2 as $row2) {
+        $data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];   
+       // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"]; 
+        
+        echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
+   }   
+
+
+}
+
+
+
+
+
+
+
+}
+
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_prices  типа global_hand 
+
+$inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
+if(in_array($field_name,$inFieldTable)) {
+    
+  ///  echo"+$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
+foreach($data as $row) { 
+    //foreach($inFieldTable as $field) 
+        $data_values[$row["product_id"]][0][0]=$row[$field_name];
+    }  
+
+
+
+$inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) { 
+    if(empty($row["store_id"]))  $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+    }     
+}
+}
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_item  типа global_hand
+$inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+if(in_array($field_name,$inFieldTable)) {
+    
+//echo"+!!!!!$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=?  AND store_id!='undefined'",[$orderId]);
+foreach($data as $row) { 
+    $data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
+    }   
+    
+$inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!=''  AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) { 
+    $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+    }     
+}   
+    
+    
+    
+}
+return $data_values;
+}
+
+
+
+
+
+// функция заносит в массив данные по полям в заказеЗакупщика исходные данные ID заказа Дата 1 Дата2 И магазин Может быть =0
+function data_values_insert_sql($date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$date_start_division,$orderId,$fieldsRows;
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+  echo "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."</td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+   </td> <td>"; 
+  //$date_start_sale 
+  $data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
+  echo"<b>".$row["field_name"]."</b> - собираем данные и сохраняем в таблицу ";  
+  
+  
+ // print_r($data_values[$row["field_name"]]);
+  /*
+if($printArray==true) {    
+  
+  foreach($fArray as $ProductId => $ArrayP) {
+   echo"<br>ProductId =".$products[$ProductId]." $ProductId";    
+     foreach($ArrayP as $StoreId => $ArrayP2) {
+      if(!empty($StoreId)) {}
+        echo"<br>StoreId = ";  
+         if(!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
+        else echo $StoreId;
+        //print_r($ArrayP2);
+  
+ } 
+ }
+ } 
+*/ 
+
+  
+  
+  echo"</td><td>".$row["description"]."</td>  </tr> ";
+  
+} 
+echo"</table>";
+return $data_values;
+
+}
+
+
+
+
+
+
+// пересчитываем данные - берем из страых таблиц и вписываем в новые.
+if(!empty($_GET["insert"])) {
+    
+// массив соответствия ID магазинов и GUID    
+$data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
+foreach($data as $row) { 
+$export[$row["entity_id"]]=$row["export_val"];
+$export_revers[$row["export_val"]]=$row["entity_id"];
+}     
+    
+$data_values_new=data_values_insert_sql($date1,$date2);
+
+$fieldsArrayFlip=array_flip($fieldsArray);
+foreach($data_values_new as $Field => $fArray) {
+
+if($Field=="quantity_purchase_last_week1")  
+{
+    echo"<h2>$Field</h2>";   
+
+
+  foreach($fArray as $ProductId => $ArrayP) {
+   echo"<br>ProductId =".$products[$ProductId]." $ProductId";    
+     foreach($ArrayP as $StoreId => $ArrayP2) {
+      if(!empty($StoreId)) {}
+        echo"<br>StoreId = ";  
+        
+        
+        if(!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
+        else echo $StoreId;
+        print_r($ArrayP2);
+  
+ } 
+ }
+}
+  global $storeIdToGuidArray;
+   $storeIdToGuidArray=$export;
+  // $field_id=$fieldsArrayFlip[$Field];
+   insert_store_orders_fields($fArray,$Field); 
+
+ } 
+$db::sql("DELETE FROM store_orders_fields_data WHERE  (value='0.000' or  value='0.00')  AND value_text=''",[$orderId]);  
+  
+}
+
+
+$_CONFIG["jscss"]='
+<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal;  max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+    padding: 0.05rem;
+    background-color: 1px;
+    box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+       border-collapse: collapse;
+       border-spacing: 0;
+       overflow: hidden;
+}
+.zak th, .zak td {
+       border: 1px solid #e6e6e6;
+       padding: 0.1rem;
+       vertical-align: middle;
+       position: relative;
+}
+
+.zak td:hover:before { 
+       background-color: #e3e3e3;
+       content: \'\';  
+       height: 100%;
+       left: -5000px;
+       position: absolute;  
+       top: 0;
+       width: 10000px;   
+       z-index: -2;        
+}
+.zak td:hover:after { 
+       background-color: #cdcdcd;
+       content: \'\';  
+       height: 10000px;    
+       left: 0;
+       position: absolute;  
+       top: -5000px;
+       width: 100%;
+       z-index: -1;        
+}
+
+
+
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+  vertical-align: bottom;
+  line-height: normal;
+}
+table.zak thead b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+  
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+    font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+    padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+.zak td.td_product:hover {background:#fff;}
+
+</style>
+<script>
+
+function changef(id,typeint)
+{ 
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\')  uname = uname.replace(/[^0-9.\s]/gi, \'\'); 
+if(typeint==\'int\')  uname = uname.replace(/[^0-9\s]/gi, \'\'); 
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+function ajaxEditFieldValue(name_eng,product_id,color)
+{ 
+$.ajax({
+       url: \'/shipment/ajaxEditFieldValue/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+       }}); 
+$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+
+
+
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{ 
+$.ajax({
+       url: \'/shipment/ajaxEditFieldValue/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+       }}); 
+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+</script>';
+
+
+
+
+
+
+
+
+// вытаскиваем зависимые перменные
+/*
+foreach($fieldsArrayDepended as $fId =>$DependedArray) {
+ //   echo"<br> $fId"; 
+ if(!empty($DependedArray)) {
+     foreach($DependedArray as $Field) {
+     $Field=trim($Field); 
+       if(!empty($Field)) {
+      //   if(is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field].""; 
+    //     else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
+         // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт.  - не привязана к магазину
+         // stats суммарная по магазинам - на основе данных из других таблиц  сумма продаж в шт, сумма спсиания
+         // stats_store_hand  суммарная по магазинам - на основе вводных данных
+         // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
+       }
+    }
+  }
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) { 
+$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];    
+foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) { 
+$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];    
+foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
+}
+
+*/
diff --git a/erp24/inc/functionsFiedlsData_old.php b/erp24/inc/functionsFiedlsData_old.php
new file mode 100644 (file)
index 0000000..6fcb9ad
--- /dev/null
@@ -0,0 +1,3354 @@
+<?php
+
+global $products, $fieldsRows, $ProductsOptions, $FiledsDataArray, $fieldsPropertyArray,$date_start_sale, $date_start_division, $order_date_add,
+$whereInProductsId, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll, $orderCityId, $prices,
+$orderStoresArrayRelation, // массив с гуидами магазинов закупки по которым считаем статистику,
+$orderStoresArrayRelation_in //  SQL условие для выборки по магазинам IN('store_id')
+, $productGroupArray
+;
+
+$fieldsPropertyArray=[]; $FiledsData=[]; $FiledsDataArray=[]; $fieldsPropertyArray=[]; $DataFieldStats=[]; $productsColorsArray=[];
+
+$k=0;
+$whereGuid="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+if(!empty($guid)) {  if($k!=0) $whereGuid .=",";    $whereGuid .=" '$guid' ";  $k++;    }
+}
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
+
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1  or id=10");
+
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
+
+$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+
+// статусы закупок - массивы с доступами к полям 
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];   
+$store_orders_status_description[$row["id"]]=$row["description"];   
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
+$statuses_stores_show[$row["id"]]=$row["stores_show"]; 
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);   
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);  
+}
+
+
+
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+$FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+
+
+
+
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC"); 
+foreach($data as $row) { 
+    $fieldsPropertyArray[$row["field_id"]][]=$row;
+ }
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC"); 
+foreach($data as $row) { 
+    $fieldsRows[$row["name_eng"]]=$row;
+    $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];   
+    
+    
+    $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]);     //считаем поля и зависимые поля рекурсивно
+    if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+$prices=[];
+$data=$db::getRows("SELECT product_id, price FROM prices WHERE   product_id $whereInProductsId");    
+  foreach($data as $row)  {
+      $prices[$row["product_id"]]=$row["price"]; 
+  }   
+
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">")  if($value>$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]==">=")  if($value>=$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="=")  if($value==$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="<=")  if($value<=$row["value"])  $valueCss=$row["style_class"]; 
+ if($row["type"]=="<")  if($value<$row["value"])  $valueCss=$row["style_class"]; 
+
+}  
+}
+ return $valueCss;   
+} 
+
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, city_id, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,    DATE_FORMAT(date_add, '%Y-%m-%d') as date_add, 
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"]; 
+$date_update=$OrderData["date_update"]; 
+$date_start_division=$OrderData["division_date"]; 
+$order_date_add=$OrderData["date_add"]; 
+$orderCityId=$OrderData["city_id"]; 
+
+
+
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$orderStoresArrayRelation_in="";
+$orderStoresArrayRelation=[];
+
+$k=0; $wr="";
+foreach($data as $row) {
+ $orderStoresArrayRelation[]=$row["store_id"];
+   if($k!=0) $wr .=","; $wr .="'".$row["store_id"]."'";
+      $k++;  
+}
+
+if(!empty($wr)) $orderStoresArrayRelation_in=" IN ($wr)";
+
+
+
+
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+    $date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
+} else {
+ // иначе идем к родителю и узнаем дату матери к которой будем привязываться   
+ $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);   
+}
+
+
+
+$time = strtotime($date_start);
+$date2=date('Y-m-d 23:59:59', $time-86400); 
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+//echo"Дата старта $date_start Считаем продажи и списания от даты $date1  до $date2";
+
+
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];   
+}
+
+
+
+
+function getDataFiledsData() {
+global $orderId, $db,$whereInProductsId,$fieldsRows,$prices;
+
+
+//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];  
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"]; 
+}
+
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"];    else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+
+
+
+
+if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+
+}
+
+return $FiledsData;    
+}
+
+
+
+//функция обновления данных 
+function updatefieldsRows() {
+    global $db,$fieldsRows,$whereInProductsId,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
+    $products, $productsColorsArray,$prices;
+$html="";    
+ $fieldsArr=[];   
+foreach($fieldsRows as $pole => $array) {
+    
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b>  ";   
+    
+}  
+
+foreach($fieldsArr as $fieldName) {   
+//echo"<br> $fieldName";    
+  $data_up=getArrayByFiledName($fieldName,$date1,$date2);    
+  insert_store_orders_fields($data_up,$fieldName);
+  $FiledsData[$fieldName]=$data_up;
+  
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}   
+ $html .= "<br><b>$fieldName</b> считаем массив!   ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+  
+  
+  
+  
+// полнограммы факт по всем магазинам
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
+$data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
+$whereInProductsId",[$date_id]);
+foreach($data3 as $row2) {
+    if($row2["color"]=="" or $row2["color"]=="NULL")
+    $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"]; 
+    else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];  
+}  
+  
+  
+  
+$html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";  
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($data as $row) {
+  if(empty($row["color"]))  $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"]; 
+  else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"]; 
+    
+}    
+
+  
+  
+
+
+$massivSQLColor=[];$inProduct=[];
+
+
+
+$data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+
+ foreach($data4 as $row2) { 
+  $colors=explode(";",$row2["colors"]);
+  $productId=$row2["id"];
+ if(!in_array($productId,$inProduct)) {
+     
+     $html .="<h3>".$products[$productId]."</h3>";
+     $inProduct[]=$productId;
+     
+ }
+  $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+  <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+  
+  
+   foreach($colors as $color) {
+    $color=trim($color); 
+      // пробегаемся по каждому магазинам
+         foreach($storesArrayAll as $storeId => $nameSt) {
+             
+      
+                if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color]))   {  
+                 //получаем процент цвета в полнограмме
+                  if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
+                   $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+                  else $percentColor=0;
+                 // округляем до сотых
+                  $percentColor=round($percentColor,3);
+         
+                 $massivSQLColor[$productId][$storeId][$color]=$percentColor; 
+                 
+                 //заносим в глобальную переменную
+                 $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
+                 $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+                  <td>$percentColor</td></tr>";
+                  
+                }  
+        }
+ }
+  $html .="</tbody></table>";
+}
+
+insert_store_orders_fields($massivSQLColor,"color_percent","",false);  
+  
+//////  
+$data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=\"table table-bordered table-sm\">";
+foreach($data as $row) {
+  $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
+  if(trim($row["name"])!=trim($row["description"]))   $html .=$row["description"];
+  
+    $html .="</td><td> <b>".$row["field_name"]."</b>
+   ".$row["field_type"]."</td><td>"; 
+  
+  
+    if(is_array($FiledsData[$row["field_name"]])) {
+   $html .="<font color=green>++</font>";
+ }
+  //<td>".$row["sql_table_values"]."</td>
+  //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
+
+  
+  
+/*  
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+//$FiledsData=getDataFiledsData();
+  
+
+  
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+      
+     if($row["field_type"]=="stats_formula") {
+    //  echo"<h2>".$row["field_name"]." формула</h2>";
+    
+     //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);  
+    
+       foreach($products as $productId => $nameProduct) {
+      $massivSQL=array();
+       // считать или нет по каждому магазину
+       $storesArr=["NULL"=>"NULL"];
+      
+      // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+      
+      if($row["field_name"]!="storehouse_balance") {
+      if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")  
+      $storesArr = array_merge($storesArr, $storesArrayAll); 
+      }
+
+       $k=1;
+       foreach($storesArr as $storeId => $nameStore) {
+       
+    //  if($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+           
+      $k++; $color="";
+      $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+      // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+      if(!empty($array["value"])) {
+      $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+       $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+       
+      foreach($productsColorsArray[$productId] as $color) {
+        $color=trim($color);
+        $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+        if(!empty($array2["value"])) {
+       // if($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+            $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+            $massivSQL[$productId][$storeId][$color]=$array2["value"];
+        }    
+        
+        }
+       }
+       }  
+     //if(!empty($array["value"])) 
+     
+       insert_store_orders_fields($massivSQL,$row["field_name"]);
+      
+      }
+      
+    }
+
+  
+  // $FiledsData[$row["field_name"]]
+   $html .="</td>
+  
+  
+  
+  </tr> ";  
+}  
+
+ $html .="</table>";  
+ /////////
+  
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
+
+/*
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+    
+   if(!empty($val)) $division_auto_need_all +=$val;
+    }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
+    insert_store_orders_fields($data_uper,"division_auto_need_all");
+    
+  } 
+}
+
+*/
+
+//пробегаемся по всем продуктам 
+/*
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+if(!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>"; 
+$productInner[]=$productId;
+
+$html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+получаено по факту  ".$quantity_warehouseman_fact."";  
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+    
+}    
+
+*/
+  
+  
+  
+//division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_summ_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+   $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
+    if(!empty($val)) $division_summ_all +=$val;
+    }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_summ_all)) {
+   $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
+    insert_store_orders_fields($data_uper,"division_summ_all");
+    
+  } 
+}  
+  
+
+  
+// вычисляем массив по цветам привязанным к товару
+$data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row2) { 
+  $colors=explode(";",$row2["colors"]);
+  $productId=$row2["id"];
+   
+  foreach($colors as $color) {
+    $color=trim($color); 
+    $colorsProductsArray[$productId][$color]=$color;
+  
+   }
+ }
+  
+
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  (field_name='division_summ_all'  or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance'   )  AND order_id='$orderId'");    
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='storehouse_balance'  AND store_id!='' AND order_id='$orderId'");    
+
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE   field_name='division_auto_need'  AND order_id='$orderId'");  
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+
+     // $storesArr = array_merge($storesArrayAll);
+       $all=0;
+       foreach($storesArrayAll as $storeId => $nameStore) {
+           
+        $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
+      //  echo"<br>$nameProduct -$nameStore  division_auto_need =".$valueArray["value"];
+         $all =$all + $valueArray["value"]; 
+         $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"]; 
+        
+        $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
+     if($orderId!=263)   insert_store_orders_fields($data_up2,"division_auto_need");     
+           
+       }
+    
+        $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all; 
+        $data_up[$productId]["NULL"]["NULL"]=$all;
+
+   }
+      if($orderId!=263)     insert_store_orders_fields($data_up,"division_auto_need_all");    
+ // exit("+++++++exit  +++++");     
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact   quantity_zakup_fact
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_auto','division_summ') AND order_id='$orderId'");    
+
+
+       
+foreach($products as $productId => $nameProduct) {
+$massivSQL=array();
+$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+
+if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
+ $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;   
+}
+else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
+
+        $data_up=[];
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+        insert_store_orders_fields($data_up,"division_ratio"); 
+        
+        $data_up=[];
+        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+        $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
+        
+        
+        insert_store_orders_fields($data_up,"division_auto"); 
+
+}
+
+
+$productInner=[];
+$rp="";
+foreach($products as $productId => $nameProduct) {
+ $data_up=[];
+      //$storesArr = array_merge($storesArrayAll);
+   
+         if(empty($FiledsData["min_lot"][$productId])) $FiledsData["min_lot"][$productId]=1;  
+
+$planogram_all=[];
+$planogram_fact_all=[];
+
+if(!in_array($productId,$productInner)) {}
+
+
+$rp .="
+<div class=\"expanel expanel-secondary\">
+<div class=\"expanel-heading\">
+
+
+<h3 class=\"expanel-title\">$nameProduct 
+</h3>
+</div> <div class=\"expanel-body p-0 m-0\"> 
+факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
+, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
+мин лот=".$FiledsData["min_lot"][$productId]."
+<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
+<th>Магазин</th>
+<th><b>полнограмма</b></th>
+<th><b>факт</b></th>
+<th><b>потребность</b></th>
+<th><b>авто-деление с коэффицентом</b></th>
+<th><b>ручная добавка</b></th>
+<th><b>авто-деление с ручной добавкой</b></th></tr>
+</thead>"; 
+
+
+$all=0;
+$productInner[]=$productId;       
+$data_uper=[];  
+$division_summ_all=0;
+       foreach($storesArrayAll as $storeId => $nameStore) {
+           
+          $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+          $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+          //if($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c")           $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
+          
+          
+         $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+         
+         $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];  
+         
+         $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
+         $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
+         
+         
+          $rp .="<tr><td class=\"text-right\">$nameStore</td>
+          <td>".$store_planogram[$productId][$storeId]."</td>
+         <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
+          
+          <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
+          </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
+          <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
+          <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
+          </tr> ";
+          
+           
+          foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+          $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];        
+         if( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {    
+          
+         $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
+         $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+         $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+         $division_summ_color=$division_auto_color+$division_hand_color;
+         
+         $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color; 
+         $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
+         $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
+         
+         
+           
+          $percent_color_per=$percent_color*100;    
+         $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
+         <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
+         <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
+         <td>".$division_auto_need_color."
+          </td><td>".$division_auto_color."</td>
+          <td>".$division_hand_color."</td>
+          <td>".$division_summ_color."</td>
+          </tr> ";    
+         }    
+              
+          }
+          
+      
+          
+           
+       }
+       
+        $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+       
+       
+       
+        $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all; 
+        
+         insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need"); 
+         insert_store_orders_fields($data_uper["division_auto_color"],"division_auto"); 
+         insert_store_orders_fields($data_uper["division_summ_color"],"division_summ"); 
+         
+         $data_up=[];
+        $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
+        insert_store_orders_fields($data_up,"division_auto_all"); 
+        
+        // $data_up=[];
+      //  $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+       // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+        
+        // insert_store_orders_fields($data_up,"division_summ_all"); 
+
+          
+
+        
+        
+     $rp .="<tfooter>
+     <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
+     <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
+     
+     <td> 
+      ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
+</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
+<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
+
+<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
+
+
+</td></tr></tfooter></table>
+Остаток склада (факт-сумма даления Итого) 
+(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].") 
+Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
+</div> </div>";
+} 
+//$FiledsData=getDataFiledsData();
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+  $division_summ_all=0;  
+  
+   echo"<h1>$nameProduct</h1>";
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        echo"<br> $nameStore 
+        ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ."  ";
+        /*
+          foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+          $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];  
+          $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+          $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+          $division_summ_color=$division_auto_color+$division_hand_color;
+          $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
+           $data_up[$productId][$storeId][$color]=$division_summ_color;  
+          }
+          */
+          
+     $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];         
+          
+     }
+          
+  echo"<br><b>division_summ_all=$division_summ_all</b>";
+
+    $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+   $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;  
+
+}    
+   insert_store_orders_fields($data_up,"division_summ_all"); 
+
+
+    $data_up=[]; 
+foreach($products as $productId => $nameProduct) {
+    
+         $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] -  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
+         $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
+         
+         
+         echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
+         = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]."  - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."  ";
+   
+}        
+ insert_store_orders_fields($data_up,"storehouse_balance");               
+
+
+echo $html.$rp;
+
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE  value='0.000' AND value_text=''",[$orderId]);    
+
+$db::sql("UPDATE  store_orders SET date_update=NOW(), update_html=?  WHERE id=?",["$html.$rp",$orderId]);      
+ if(!empty($_REQUEST["html_print"])) echo $html;   
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData(); 
+
+return  $FiledsData;
+    
+}
+
+
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+/*
+$FiledsData=[];
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"];    else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+
+//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+}
+
+*/
+
+
+
+
+
+// если не указан магазин или надо просуммировать для какого-то поля
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
+foreach($dataF as $row) $FiledsDataSumm[$row["field_name"]][$row["product_id"]]=$row["sum"];
+
+
+
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NOT NULL  group by field_name,product_id, color",[$orderId]);
+foreach($dataF as $row) $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]]=$row["sum"];
+
+
+
+
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+/* можно указать перменную до подключения файла 
+$whereInProductsId = ' IN ('product_id')';
+$products=['product_id'=>"name"];
+
+*/
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+if(empty($whereInProductsId)) {
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id, o.shipments_group_id FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) { 
+  if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+   $products[$row["id"]]=$row["name"];
+   $prov[$row["id"]]=$row["provider_id"];
+   $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+   $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+   $ProductsOptions[$row["id"]]["shipments_group_id"]=$row["shipments_group_id"];   
+   
+   $k++;    
+ } 
+$whereInProductsId .=")"; 
+}
+
+
+
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId]; 
+// если это срезка у нее нет группы 
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории  
+ $productGroupArray["flowers"][]=$pid;
+}elseif($tip=="potted") {  $daysCounterSales=14; $daysCounterWriteOffs=14;  $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30;  $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip  $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+
+
+//глобальный массив с переменными  - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];  
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"]; 
+}
+
+
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p 
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) { 
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+} 
+
+
+
+if(!empty($_REQUEST["update"])) {
+$FiledsData=updatefieldsRows();
+}
+
+
+if($date_update <= time()-260) {
+//echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";   
+//$FiledsData=updatefieldsRows(); 
+    
+}
+
+
+if(!empty($_GET["update1113"])) {
+$html="";    
+ $fieldsArr=[];   
+foreach($fieldsRows as $pole => $array) {
+    
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b>  ";   
+    
+}  
+
+foreach($fieldsArr as $fieldName) {   
+//echo"<br> $fieldName";    
+  $data_up=getArrayByFiledName($fieldName,$date1,$date2);    
+  insert_store_orders_fields($data_up,$fieldName);
+  $FiledsData[$fieldName]=$data_up;
+  
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL'  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}   
+ $html .= "<br><b>$fieldName</b> считаем массив!   ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+  
+  
+  
+//////  
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=t>";
+foreach($data as $row) {
+  $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
+  </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+   </td> <td>"; 
+  //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
+  if(is_array($FiledsData[$row["field_name"]])) {
+      
+       $html .="<font color=green>++</font>";
+      
+  }
+  
+  
+/*  
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) { 
+//если тип поля текст то заменяем 
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"];    else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+  
+  
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+      
+     if($row["field_type"]=="stats_formula") {
+    //  echo"<h2>".$row["field_name"]." формула</h2>";
+    
+     //  $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);  
+    
+       foreach($products as $productId => $nameProduct) {
+      $massivSQL=array();
+       // считать или нет по каждому магазину
+       $storesArr=["NULL"=>"NULL"];
+      
+      // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+      if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need"  or $row["field_name"]=="division_summ")  
+      $storesArr = array_merge($storesArr, $storesArrayAll);
+
+       $k=1;
+       foreach($storesArr as $storeId => $nameStore) {
+       
+    //  if($row["field_name"]=="division_auto_need")   $html .="<br><h4>Магазин $k $nameStore</h4>";
+           
+      $k++; $color="";
+      $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+      // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+      if(!empty($array["value"])) {
+      $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+       $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+       
+      foreach($productsColorsArray[$productId] as $color) {
+        $color=trim($color);
+        $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+        if(!empty($array2["value"])) {
+       // if($row["field_name"]=="division_summ_all")    echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+            $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+            $massivSQL[$productId][$storeId][$color]=$array2["value"];
+        }    
+        
+        }
+       }
+       }  
+     //if(!empty($array["value"])) 
+     
+       insert_store_orders_fields($massivSQL,$row["field_name"]);
+      
+      }
+      
+    }
+
+  
+  // $FiledsData[$row["field_name"]]
+   $html .="".$row["description"]." </td>
+  
+  
+  
+  </tr> ";  
+}  
+
+ $html .="</table>";  
+  
+
+  
+  
+  /////////
+  
+  
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+    }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");} 
+}
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+$html .="<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";  
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+    
+}    
+  
+$db::sql("UPDATE  store_orders SET date_update=NOW()  WHERE id='$orderId'");      
+ if(!empty($_REQUEST["html_print"])) echo $html;   
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData(); 
+    
+}/// end update3
+
+
+
+/*
+
+if(!empty($_GET["update2"])) {
+    
+echo"UPDATYE=2";   
+foreach($fieldsRows as $fieldName =>$array) {
+if($array["field_type"]=="stats_summ") {
+// echo"DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";   
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");  
+
+
+$pole=trim($array["func_content"]);
+$FiledsDataSummStatsFuntion=array();   
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!=''  AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+   if(empty($row["color"])) $row["color"]="NULL"; 
+    $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+    $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+   // echo"<br> $fieldName =  ".$row["product_id"]." = ".$row["color"]."  = ".$row["color"]."  ".$row["sum"]." ";
+}   
+    
+    
+echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]."  ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
+ $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
+insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
+}
+
+
+if($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
+echo"<h4>division_summ_all !!</h4>";    
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");  
+
+ $massivS=[];
+foreach($products as $productId => $value) {    
+$array=getValueStatsFormula("division_summ_all",$productId,"","");  
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+
+ //echo"<br>$value value=".$array["value"]."  ";
+}
+ insert_store_orders_fields($massivS,"division_summ_all");
+}
+
+
+if($array["name_eng"]=="auto_purchase_formula") {
+echo"<h4>auto_purchase_formula !!</h4>";    
+
+//$db::sql("DELETE FROM  store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");  
+
+ $massivS=[];
+foreach($products as $productId => $value) {    
+    
+ $storesArr=["NULL"=>"NULL"];
+      
+// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+if($fieldsRows[$array["name_eng"]]["stores_stats"]==1)   $storesArr = array_merge($storesArr, $storesArrayAll);
+
+foreach($storesArr as $storeId => $nameStore) {
+
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");  
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+ echo"<br>$value value=".$array["value"]."  "; 
+foreach($productsColorsArray[$productId] as $color) {    
+    
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);  
+ $massivS[$productId][$storeId][$color]=$array["value"];
+
+ echo"<br>++$color  value=".$array["value"]."  ";
+}
+}
+
+}
+ insert_store_orders_fields($massivS,"auto_purchase_formula");
+
+
+}
+
+
+
+
+}
+
+
+//foreach($products as $productId => $value) { echo "<br>  $value => value = ++ ".  $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
+
+
+}
+
+*/
+
+
+
+
+
+
+
+
+
+
+//функция обновляет по массиву ID продуктов информацию в таблице data
+/*
+$products - массив ID product_id=>name_product
+
+*/
+function updateProductArrayDataField($fieldsNamesArr) {
+ global $db,$products,$prices;   
+    
+print_r($products);    
+
+
+$whereF=implode("','",$fieldsNamesArr);
+$whereF =" name_eng in('$whereF') ";
+  
+echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";  
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields 
+WHERE  $whereF order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+echo"<br>== ".$row["field_name"]." ".$row["field_type"]."   ";    
+    
+}    
+    
+ echo"</table>";   
+    
+}
+
+//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
+//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
+//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
+
+
+
+
+if($_SESSION["group_id"]==1) echo $rp;
+
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $status_order_id, $status_edit_dostup, $orderCityId, $store_orders_status_description, $storesArray, $store_id, $whereInProductsId, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id,$prices;  
+
+
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) { 
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';   
+    
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
+
+echo'</table></form>';
+
+
+$nameCity=$db::getValue("SELECT name FROM universal_catalog_item WHERE id=?",[$orderCityId]);
+//echo '<div style="border-bottom:1px #cdcdcd solid; background:#e6e6e6; margin-bottom:2rem;">  ';
+
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$storesArrayRelation=[];
+
+foreach($data as $row) {
+ $storesArrayRelation[]=$row["store_id"];
+ //echo' <span class="btn btn-sm m-1 btn-blue">'.$storesOrderArray[$row["store_id"]].'</span> ';   
+}
+//echo'</div>';
+
+
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id])  { 
+
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+$stores_cnt=count($stores_arr);
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status 
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
+
+
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];   
+
+
+
+if($vnesli>0)
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
+
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>"; 
+
+echo'<div class="row"><div class="col-12">';
+
+$group_show_percent_array=[50,11]; 
+
+$data=$db::getRows("SELECT product_id FROM store_orders_fields_data WHERE  order_id=? AND product_id $whereInProductsId AND field_name='sales_cnt' AND color='' AND store_id='' AND value>0 group by product_id",[$orderId]);
+$whereInProductSaleId="";
+$productsIds=[];
+$i=0;
+foreach($data as $row) {
+  $whereInProductSaleId .=" '".$row["product_id"]."' ";
+  $productsIds[]=$row["product_id"];
+     if($i<(count($data)-1)) $whereInProductSaleId .=" , ";
+     $i++;   
+}
+
+
+
+//echo"<br>Всего товаров ".count($productsIds)."  = $orderId";
+
+if($whereInProductSaleId) {
+$storeCount=[];
+$data=$db::getRows("SELECT product_id, store_id FROM store_orders_fields_data WHERE  order_id=? AND product_id IN ($whereInProductSaleId) AND field_name='quantity_zakup_new' AND color='' AND store_id!='' AND value>0 group by product_id, store_id",[$orderId]);
+  foreach($data as $row) {
+   $storeCount[$row["store_id"]] +=1;
+  
+  }
+  
+$storeCount2=[];
+   foreach($storeCount as $sid => $cnt) {
+   $storeCount2[$sid]=round(($cnt/count($productsIds))*100);
+ }   
+}
+
+echo'
+<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">Весь заказ '.$nameCity.'</a>';
+
+foreach($storesArray as $strid=>$namestore){
+    
+    
+if(in_array($strid,$storesArrayRelation) or empty($orderCityId)) {    
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
+
+if($store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success";     } else echo"info";  echo" btn-sm m-1\"> ";
+if($store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore ";
+// массив с группами-ролями тех кто может просматривать заполеннность по магазинам
+if($status_order_id==2 and in_array($_SESSION["group_id"],$group_show_percent_array)) { 
+    
+    echo" <span class=\"btn btn-info btn-xs ml-1\" title=\"".$storeCount[$strid]." из ".count($productsIds)."\">".$storeCount2[$strid]."%</span>";
+}
+echo"</a>"; 
+} else {
+  
+  echo'<span class="btn btn-danger">к городу нет доступа '.$namestore.'</span>';  
+    
+}
+
+
+
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+    
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO  store_order_status SET   order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=?  ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}    
+    
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\"  href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+    
+}
+
+
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldGlobal($field_name,$productId){
+   global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$prices;
+   // if($field_name=="min_order" or $field_name=="min_lot")  $value=$globalValuesArray[$field_name][$productId];
+   if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+   if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+return $value;
+}    
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldGlobalHand($field_name,$productId){
+   global $db,$DataFieldStatsSumm,$FiledsData,$prices;
+   $value=$DataFieldStatsSumm[$productId][$field_name];
+      if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+  return $value;
+}    
+  
+  
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStats($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll,$prices;    
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];
+   
+   if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+
+
+
+
+   
+ return $value;
+} 
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$prices;    
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];
+  //    if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+ return $value;
+} 
+
+
+
+
+
+
+  
+ // получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsSumm($field_name, $productId, $color){
+global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm,$prices;    
+   if(empty($color)) $color="NULL";        
+   $value=$FiledsData[$field_name][$productId]["NULL"][$color];
+   if(empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
+   if(empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+
+    return $value;
+}  
+
+
+
+//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
+if(0 and $date_start_sale!='000-00-00') {
+  //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";  
+$dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");    
+$orders_where=implode("','",$dataOrders);  
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";  
+  $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0  $orders_where group by product_id,color");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"];    
+       $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
+       $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];        
+   }
+   
+   
+// quantity_purchase_last_week
+  $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0  $orders_where group by product_id,color,store_id");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"]; 
+       if(empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];        
+       $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];       
+   }   
+   
+   
+   
+  // товар в пути  date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
+$dataOrders=$db::getRows("SELECT  id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");    
+$orders_where=implode("','",$dataOrders);  
+
+echo"$orders_where = $orders_where";
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";  
+
+
+//echo"  товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color";
+  $data=$db::getRows("SELECT sum(value) as value, product_id, color  FROM 
+  store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
+     foreach($data as $row) {
+       if(empty($row["color"])) $color="NULL"; else $color=$row["color"];    
+       $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
+   }   
+   
+//quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND (w.type='Брак' or w.type='Брак с поставки') AND  w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day  group BY p.product_id,w.store_id");
+foreach($data2 as $row) { 
+$a=ceil($row["cnt"]/2);   
+if(!empty($a)) {
+$FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
+$FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a; 
+}
+} 
+$FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
+}
+
+
+
+
+
+
+/*
+  $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
+     foreach($data as $row) {
+        if(empty($row["color"])) $row["color"]="NULL";
+        $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+        $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+      
+    }
+*/
+// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
+
+
+
+function function_auto_purchase_formula($param,$print=0) {
+global $db;    
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+if(empty($min_lot)) $min_lot=1;
+
+
+// считаем запас на 2 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact +  $goods_in_transit;
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ; 
+$zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
+}
+else { 
+$zakaz= $sale_7day + $sale_2day +  $quantity ;    
+}
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+$ceil=ceilCoefficient($zakaz,$min_lot);
+
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="".$param["color"]."
+Товар в пути goods_in_transit =$goods_in_transit
+Продажи sale_7day=  $sale_7day
+Страховой запас sale_2day= $sale_2day
+Полнограмма $quantity
+факт $quantity_fact
+Заказ $zakaz
+Округляем -> $ceil 
+";
+
+
+$arr["value"]=$ceil;
+$arr["title"]=$ttl;
+return $arr;
+
+}
+
+
+// округляет до определенного числа
+function roundCoefficientQuantity($number, $rate = 1)
+{
+       $rest = $rate * floor($number / $rate);
+       
+       return $rest;
+}
+
+
+// функция для формулы автоделения
+function deivisionFormula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+if(empty($min_lot)) $min_lot=1;
+
+// считаем запас на 3 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact ; //$goods_in_transit
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ; 
+$zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
+}
+else { 
+$zakaz= $sale_7day + $sale_2day +  $quantity ;    
+}
+
+//echo"<br>$zakaz";
+
+$zakaz=roundCoefficientQuantity($zakaz, $min_lot);
+
+
+if(empty($zakaz)) $zakaz=$quantity;
+return $zakaz;
+
+
+}
+
+
+function ratioDivisionPercent($param){
+
+$zakazDivision=deivisionFormula($param);    
+$percent=1;
+if($param["quantity_warehouseman_fact"]<$zakazDivision) {
+$percent=round($param["quantity_warehouseman_fact"]/$zakazDivision,2);
+
+}    
+ $array["value"]=$percent;
+ $array["title"]="Автоделение = $zakazDivision Куплено ".$param["quantity_warehouseman_fact"].""; 
+ return $array;   
+    
+}
+
+// функция для формулы  потребности при автоделении 
+function function_division_auto_need_formula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=(int)$param["sale_7day"];
+$sale_7day=(int)$param["sales_7day_division"];
+$quantity_fact=(int)$param["quantity_fact"];
+$quantity=(int)$param["quantity"];
+$min_lot=(int)$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=(int)$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=(int)$param["quantity_warehouseman_fact"];
+$quantity_purchase=(int)$param["quantity_purchase"];
+$sale_2day=ceil(2*($sale_7day/7));
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем запас на 2 дня
+
+$zakaz=$zakazDivision;
+
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше    
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+    
+    
+}
+*/
+
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+
+//Заказано кустовыми $quantity_purchase_summ шт.
+//Заказано на магазин $quantity_purchase шт.
+
+$ttl="$txt формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
+Мин. лот деления $min_lot!
+Куплено по факту $quantity_warehouseman_fact шт
+Продажи 7 дней=".$sale_7day."шт
+Страховой запас на 2 дня= ".$sale_2day."шт
+Полнограмма ".$quantity."шт
+факт ".$quantity_fact."шт
+Заказ ".$zakaz."шт
+Округляем -> $ceilшт";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+// функция для формулы автоделения
+function function_division_auto_formula1($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше    
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+}
+*/
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="$txt
+формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+Минимальный лот деления $min_lot
+Заказано кустовыми ".$quantity_purchase_summ."шт.
+Заказано на магазин ".$quantity_purchas."шт.
+Куплено к-м факту ".$quantity_warehouseman_fact."шт.
+Продажи 7 дней=  ".$sale_7day."шт.
+Страховой запас 2дня".$sale_2day."шт.
+Полнограмма $quantityшт.
+факт $quantity_factшт.
+Заказ $zakazшт.
+Округляем -> $ceilшт.
+";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+
+
+function return_quantity_zakup_fact_week_formula($productId, $color){
+global $FiledsData;
+
+$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color];
+//$value=rand(1,999);
+return $value;
+}
+
+
+
+
+function returnFormula($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;      
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color))  $color="NULL";         
+
+$type=$fieldsRows[$field_name]["type"];
+$formula=$fieldsRows[$field_name]["func_content"];
+$func_content_arr=explode(";",$formula);  
+$avg_arr=explode(",",$func_content_arr[0]);
+
+$field[0]=$avg_arr[0];
+$field[1]=$avg_arr[1];
+
+
+$field_type1=$fieldsRows[$field[0]]["field_type"];
+$field_type2=$fieldsRows[$field[1]]["field_type"];
+
+$storeId1=$storeId;
+$store_save=$fieldsRows[$field[0]]["store_save"]; 
+if($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio"  or $field_type1=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то  or $field[0]=="division_auto_need"
+{
+    
+$storeId1="NULL";    
+}
+$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color];
+
+
+$storeId2=$storeId;
+$store_save=$fieldsRows[$field[1]]["store_save"];
+if($store_save==0 or $field[1]=="division_ratio" or  $field_type2=="global" or $field_type2=="global_hand"  or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то   or $field[1]=="division_auto_need"
+{
+    
+$storeId2="NULL";    
+}
+
+$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color];
+  
+       
+if(!empty($formula)) {  
+    
+// среднее арифметичнкое  func_content = a1,a2;    
+if($type=="avg") {
+ if(!empty($avg2)) $avg=round(($value/$avg2)*100);      else $value=0;
+ $data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+}
+
+// умножение  func_content = a1,a2;
+elseif($type=="multiplication") { 
+    
+$value=$avg1*$avg2;
+if($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);   
+
+//if($field[1]=="division_ratio") 
+
+
+//echo"<br> {$field[1]} store=$storeId2 $avg2 color=$color ";   умножение ".$field[0]." $field_type1 $avg1   ".$field[1]." $avg2 $field_type2 
+$value_title=" ( ".$field[0]."=$avg1) * (".$field[1]."=$avg2)";
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}    
+    
+}
+
+// разница  func_content = a1,a2;
+elseif($type=="difference") { $value=$avg1-$avg2; 
+$value=round($value);
+$value_title="$avg1(".$field[0].") -$avg2(".$field[1].")"; 
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name,"", false);
+}
+
+}
+
+
+// суммирование
+elseif($type=="addition") { 
+$avg1=$FiledsData[$field[0]][$productId][$storeId][$color];
+$avg2=$FiledsData[$field[1]][$productId][$storeId][$color];
+
+$value=$avg1+$avg2;
+$value_title="$avg1(".$field[0].")  + $avg2(".$field[1].") ";  
+$value=round($value);
+//if($field_name=="division_summ" and $storeId!="NULL")  echo"<br> ".$field[0]."   $productId = $avg1 + ".$field[1]." =$avg2  stireId=$storeId  color=$color summ=$value";
+
+//$FiledsData[$field_name][$productId][$storeId][$color]=$value;
+
+if($field_name=="division_summ") {
+
+//echo"<br>. Продукт ".$products[$productId]." ".$storesArrayAll[$storeId]." $avg1(".$field[0].")  + $avg2(".$field[1].") =  $value";    
+    
+    
+}
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+
+}
+
+
+
+}
+
+
+if($type=="division"  || $type=="division_auto_need"    || $type=="auto_purchase_formula"   || $type=="division_ratio"   ) {  
+        if($formula==true){       }  else $value_arr=["value"=>0,"title"=>"не сичтаем.."];            
+}            
+
+          
+           if(empty($color)) $color="NULL";
+             if($storeId=="NULL" and $color=="NULL") $formula=false;
+              if($storeId=="NULL" and $color!="NULL") $formula=false; 
+               if($storeId!="NULL" and $color=="NULL") $formula=true; 
+          $value_arr=[];       
+          $param=array();  
+            $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color];
+            $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color];
+            $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color];
+            $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color];         
+            $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color];
+            
+            
+            if(empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color];
+            
+            $param["min_lot"]=$FiledsData["min_lot"][$productId];  
+            if(empty($store_id))  $param["min_order"]=$FiledsData["min_order"][$productId];  
+            
+            $param["quantity_purchase_summ"]=$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color];  
+            $param["quantity_warehouseman_fact"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];  
+            $param["quantity_purchase"]=$FiledsData["quantity_purchase"][$productId][$storeId][$color];  
+
+
+// считаем авто деление
+if($type=="division") {  
+ $value="устарело";
+}
+
+
+// считаем авто деление
+if($type=="division_ratio") {  
+$value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]; 
+$value_title="коэффицент";
+}
+
+/*
+// считаем авто деление
+if($type=="division_auto") {  
+
+$value_arr=function_division_auto_formula($param); 
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto");
+}
+            
+}
+
+*/
+
+// считаем авто деление
+if($type=="division_auto_need") {  
+$value_arr=function_division_auto_need_formula($param); 
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto_need");
+//echo"<br>!!!+$value";
+
+}
+            
+}
+
+
+// вторая формула автозаказа
+         if($type=="auto_purchase_formula") {  
+
+if(empty($storesAll)) $storesAll=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
+
+
+
+      
+            $value_arr=function_auto_purchase_formula($param); 
+            $value=$value_arr["value"];
+            $value_title=$value_arr["title"];
+            
+               if($color=="NULL" and !empty($storesAll[$storeId]))  {
+                   
+              
+                          $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+              
+                $itog=$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]-$param["goods_in_transit"];   
+                   
+                 $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] +=$value;   
+                     echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value  all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";   
+               }
+            
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+$data_ttl[$productId][$storeId][$color]=$value_title;
+insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
+}
+}   
+
+   
+  // формула подсчета за неделю - товар в пути
+         if($type=="quantity_zakup_fact_week") {  
+            $value=return_quantity_zakup_fact_week_formula($productId,$color);
+
+         }   
+         
+          if($type=="quantity_purchase_last_week") {  
+             $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color];
+
+         }          
+
+        
+         
+         
+
+/*
+         if($type=="auto_purchase") {  
+                //Мин планограмма -остатки факт на витрине +продажи +(продажи:7*3)+(продажи *5%)
+            $sale_zapas3=($data_values["sales_cnt"][$pid]/7)*3;
+            $sale_week=$data_values["sales_cnt"][$pid];
+            $percent5=$data_values["sales_cnt"][$pid]*0.05;
+            $valuef = $data_values["quantity"][$pid] - $data_values["quantity_fact"][$pid] + $sale_week + $sale_zapas3 + $percent5; 
+            $valuef=ceil($valuef);
+                $value="$valuef" ;  
+            }
+        
+        
+
+      */     
+           
+           
+$array=["value"=>$value,"title"=>$value_title];          
+return $array;
+}    
+
+
+
+
+
+function getValueStatsFormula($field_name,  $productId, $storeId, $color){
+global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;   
+
+   $array = returnFormula($field_name,  $productId, $storeId, $color);
+   return $array;
+} 
+
+    
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueField($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;  
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";    
+   $type_field=$fieldsRows[$field_name]["field_type"];
+   if($type_field=="global") {
+    $value=getValueFieldGlobal($field_name,$productId);
+  //  echo"<br> $field_name pid=$productsId = value= $value";   
+  }
+  
+   elseif($type_field=="global_hand") {
+    $value=getValueFieldGlobalHand($field_name,$productId);
+    
+   if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+    if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];  
+   
+  
+  } elseif($type_field=="stats") $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+   elseif($type_field=="static_hand" or $type_field=="stats_hand" ) {
+      $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+      echo $type_field;
+  }elseif($type_field=="stats_formula") {
+      $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+      
+
+      
+  } elseif($type_field=="stats_store_summ")   $value=getValueFieldStatsSumm($field_name,$productId,$color);   
+  elseif($type_field=="stats_summ")   $value=getValueFieldStatsSumm($field_name,$productId,$color);     
+  elseif($type_field=="stats_store_hand")  {   
+      
+      $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);  
+      //echo $type_field." p=$productId $storeId  $color "; 
+      }
+  else {
+   $value=$FiledsData[$field_name][$productId][$storeId][$color];     
+  }
+  
+  
+$tip=$fieldsRows[$field_name]["tip"];  
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.00','',$value);
+
+     
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];   
+  
+return $array;    
+}
+
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll, $prices;  
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";    
+   
+   $colorFirst=$color;
+   
+   $type_field=$fieldsRows[$field_name]["field_type"];
+
+
+ if($field_name=="division_ratio" 
+    or $field_name=="division_auto_need_all"
+    or $field_name=="quantity_zakup_fact"
+    or  $field_name=="quantity_warehouseman_fact"
+    or  $field_name=="storehouse_balance"
+    or  $field_name=="min_lot"
+    or  $field_name=="purchase_fact_difference"   
+    or $field_name=="division_hand_summ"  
+    or $field_name=="division_auto_all" 
+    or $field_name=="division_summ_all"     
+    or $field_name=="delta_zakup"  
+    or $field_name=="quantity_zakup" 
+    or $field_name=="quantity_zakup_fact_summa"     
+    
+    or $field_name=="comment_zakup"  
+    or $field_name=="quantity_zakup_info" 
+    or $field_name=="purchase_kust_summ"  
+    or $field_name=="quantity_zakup_fact_week"  
+    or $field_name=="quantity_purchase_summ"  
+    or $field_name=="delta_rejection"  
+    or $field_name=="quantity_warehouseman_defective"  
+    or $field_name=="write_offs_comments_all"  
+    or $field_name=="goods_in_transit"        
+    or $field_name=="auto_purchase_formula_all"     
+    or $field_name=="quantity_storage"     
+ ) {$storeId="NULL"; $color="NULL";  }
+ if($field_name=="quantity_zakup_fact"
+    or  $field_name=="quantity_warehouseman_fact"
+    or $field_name=="delta_zakup"  
+    or $field_name=="quantity_zakup" 
+     or $field_name=="quantity_zakup_info" 
+ ) {$storeId="NULL"; $color=$colorFirst;  }
+  
+  
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];     
+ $tip=$fieldsRows[$field_name]["tip"];  
+ if($field_name=="min_lot") $value=$FiledsData[$field_name][$productId];     
+ if($field_name=="min_order") $value=$FiledsData[$field_name][$productId];     
+  
+ if($field_name=="color_percent") {
+     //$tip="string"; 
+ $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];  
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);  
+ }  
+
+ if($field_name=="comment_zakup") {
+
+// $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];  
+
+ }    
+  
+$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
+
+  
+
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
+     
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];   
+  
+return $array;    
+}
+
+
+
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices ;  
+
+
+      $value=$valueArray["value"];
+      $value_title=$valueArray["title"];  
+
+      $colorName=trim(str_replace(['\\','/'],['',''],$color));
+      $md5Color=md5($color);
+      $show=1;  
+    if(!empty($color) and $color!='NULL') {
+          $nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';  
+          $idInput=''.$fieldName.''.$productId.''.$md5Color.'';
+          $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';  
+          if(!empty($storeId)) { 
+              if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1;  else $show=0; 
+              
+             if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"]))  $show=1; 
+              
+              
+          }
+     }   
+     else {
+          $nameInput=''.$fieldName.'['.$productId.']';  
+          $idInput=''.$fieldName.''.$productId.'';
+          $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';   
+         
+     }  
+        
+    if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {    
+        echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
+          if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+          if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+         if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+       echo'>';
+    } 
+    elseif($fieldsRows[$fieldName]["type"]=="textarea") {   
+        echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'"  name='.$nameInput.' class="form-control"';
+       if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+        echo'>'.$value.'</textarea>';       
+      }
+      else {
+          if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+           else   echo $value;    
+      }
+
+}
+
+
+
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum,  $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;    
+
+     $fieldId=$fieldsRows[$fieldName]["id"];  
+  
+     
+     $dostup=$dostup_fields[$fieldId];
+     $bg=$bg_fields[$fieldId];  
+   // $dostup="edit"; 
+     if(empty($storeId) or $fieldName=="purchase_price") $storeId="NULL";     
+
+
+if($dostup=="edit" or $dostup=="show") {   
+    
+    //можно ли это поле в принципе редактировать
+    $edit=$fieldsRows[$fieldName]["field_edit"]; 
+    //можно ли это поле редактировать если выбран магазин
+    if($storeId!="NULL") { 
+    $edit=$fieldsRows[$fieldName]["field_store_edit"]; 
+    $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+    } else {
+    $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина 
+    
+    
+   if($fieldsRows[$fieldName]["field_type"]=="stats_store_hand") $edit=0;
+        
+    }
+    
+  echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'"  class="p-1 text-center ';
+
+
+      $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+      
+      
+    //$value=$FiledsData[$fieldName][$productId][$storeId][$color];    
+
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];  
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";   
+///$valueArray["value"]=$value;   
+//$valueArray["title"]=$value_title;   
+
+     $value=$valueArray["value"];
+     $value_title=$valueArray["title"]; 
+
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++;  }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value;   }
+}
+
+
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
+
+
+  if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';   
+  
+  // показываем поле настройки поля позволяют.
+  if($store_show==1) {
+
+   if($dostup=="edit" and $edit==1) {
+       
+    //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";   
+       printFieldType($valueArray,$fieldName,$productId,$storeId,$color);   
+       
+   }
+   else {
+   if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+    else {
+        
+  //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit";  
+        echo $value;   
+        
+        
+    }
+    
+     
+    
+    }
+   }
+   else { //если значение поля не нужно выводить то показвываем заглушку
+       
+      echo'XXX'; 
+       
+   }
+   
+   
+   
+   
+   echo'</td>';  
+}    
+    
+     
+     
+}
+
+
+
+
+
+
+
+//вставляем данные в таблицу дашборда
+
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData, $prices;
+
+$field_id=$fieldsRows[$field_name]["id"];
+$type=$fieldsRows[$field_name]["type"];
+foreach($massivSQL as $productId =>$array) {
+   foreach($array as $storeId =>$valueArr) { 
+       foreach($valueArr as $color =>$value) { 
+          if(empty($color) or $storeId=="NULL") $color="";   
+         if($color=="NULL") $color="";         
+          
+            if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL')  $storeId=$storeIdToGuidArray[$storeId];
+           if(empty($storeId) or $storeId=="NULL") $storeId="";  
+           
+    if($type=="string")  {$value_text=$value;  $value="";}
+    else { $value_text=""; }
+
+      try {
+    //  if($field_name=="division_auto_need")    echo"<br>$field_name pid=$productId +  storeId=$storeId + color=$color + =$value ".print_r($value)."  ";
+     if(!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
+         
+         
+        if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+         $oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+         $oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+         
+          if($print==true)  echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle  $title"; 
+       
+       
+       
+       if(($type!="string") or ($type=="string" and $value_text!="")) {   
+         
+         $title=$massivTitle[$productId][$storeIdData][$colorData];    
+            
+        $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)       
+          VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",     
+          [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+          
+      }
+    
+          if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+            if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+             
+        // echo"<br>По этому товару не обновляем так ка значение старое уже есть";    
+        
+         }
+         
+         if(((empty($value)  or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and  $type!="string") or ($type=="string" and $value_text=="")) {
+    
+         } 
+         else {
+        //  if($print==true)  echo"<br>!!! $field_name =$value";
+      //     $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)                 VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",              [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+         }
+          
+         // if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         //if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+          
+        //  echo"<br>$field_name pid=$productId color=$color  =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]."  ";
+         
+        
+         }
+      }
+           
+      } catch (Exception $e) 
+       {
+           echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+       }
+     
+       }
+     }
+   } 
+}
+
+
+
+
+// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
+// собираем массив с данными по названию поля - входной параметр Имя поля
+function getArrayByFiledName($field_name,$date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;    
+$products_class=[];
+$data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"]; 
+
+
+
+$periodDaysStats=14; //количество дней статистики по продажам и списанию
+// сколько на складе по 1с
+if($field_name=="quantity_storage") {
+$data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND  product_id $whereInProductsId ");
+foreach($data2 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+$data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
+}
+
+//полнограмма
+if($field_name=="quantity") {
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id  $whereInProductsId");
+foreach($store_planogram as $row) {
+    
+    
+   // echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  g ={$row["quantity"]}";
+    $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+    
+}
+}
+
+
+
+//плнограмма факт quantity_fact
+if($field_name=="quantity_fact") {
+$db::sql("DELETE  FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
+  
+    
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id  $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+    //   echo"<br>$field_name {$row["product_id"]}  = {$row["store_id"]}  quantity ={$row["quantity"]}";
+
+    $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+}
+}
+
+
+
+
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId]; 
+// если это срезка у нее нет группы 
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории  
+ $productGroupArray["flowers"][]=$pid;
+}elseif($tip=="potted") {  $daysCounterSales=14; $daysCounterWriteOffs=14;  $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30;  $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip  $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {    
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      $data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+}
+}
+}
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt111") {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  $whereInProductsId
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      $data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+}
+
+
+
+//продажи количество штук привязанные к дате деления
+if($field_name=="sales_7day_division") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {    
+    
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)    AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      $data_values[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+} 
+//echo"<br> Дата атуальных продаж для деления $date_start_division ";     
+//print_r($data_values);
+}
+}
+
+
+//продажи  сумма привязанные к дате деления
+if($field_name=="sales_7day_amount_division" ) {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");    
+foreach($data2 as $row2) { 
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale; 
+}
+}
+}
+}
+}
+
+
+//продажи  сумма
+if($field_name=="sales_amount" ) {
+    
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {       
+$data2=$db::getRows("SELECT i.product_id,sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");    
+foreach($data2 as $row2) { 
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale; 
+}
+
+}
+}
+}
+}
+
+
+
+//списания за 14 дней среднее - недельное списание от даты 1
+if($field_name=="write_downs" or $field_name=="quantity_rejection") {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {       
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND  
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
+
+
+echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND  
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
+
+$valAll=0;
+foreach($data2 as $row2) { 
+    
+if($periodDaysStats==7) $a=ceil($row2["cnt"]/2);  
+else  $a=ceil($row2["cnt"]);  
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
+
+//списания за 14 дней среднее - недельное списание от даты деления
+if($field_name=="write_offs_division") {
+    
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>$group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+foreach($data2 as $row2) { 
+$a=ceil($row2["cnt"]);   
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
+
+
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_cnt_avg") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+//$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+//echo"<br>+++ <h1>$group дней $periodDaysStats</h1> "; 
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'";   $j++;}  
+*/
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) { 
+  $a=round($row2["cnt"]/4);   
+   if(!empty($a)) {
+   $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   $data_values[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+}
+}
+}
+
+
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+*/
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2)   { 
+  $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]/4) );   
+   if(!empty($a)) {
+   $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   $data_values[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+}
+}
+}
+
+
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=7;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+*/
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND   p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2)   { 
+  $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]) );   
+  
+  echo"<br> write_offs_sum ".$row2["product_id"]." ".$row2["cnt"]." шт.   цена=".$prices[$row2["product_id"]]."  ";
+  
+   if(!empty($a)) {
+   $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   $data_values[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+}
+}
+}
+
+//комментарии к ксписанию по магазину
+if($field_name=="write_offs_comments") {
+//$time = strtotime($date1);
+//$time2 = strtotime($date2);
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {     
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+
+$date_start_sale2=date("Y-m-d");
+
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 
+
+AND   p.product_id in($whereInProductsId_in) 
+
+AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
+
+group BY p.product_id,w.store_id, c.comment_id");
+$valAll=0;
+foreach($data2 as $row2) { 
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";  
+//echo"<br> $a";
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+//$data_values[$row2["product_id"]][0][0] +=$a; 
+}
+}
+}
+}
+}
+
+//комментарии к ксписанию по магазинам суммарно
+if($field_name=="write_offs_comments_all") {
+$time = strtotime($date1);
+$time2 = strtotime($date2);
+
+$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId)   w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1  до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt,  c.comment_id
+FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
+WHERE p.write_offs_id=w.id  AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=?  AND  w.date<=? 
+group BY p.product_id, c.comment_id",[$date_14day,$date2]);
+$valAll=0;
+foreach($data2 as $row2) { 
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";  
+//echo"<br> $a";
+$data_values[$row2["product_id"]][0][0] .=$a;
+}
+}
+
+
+//quantity_purchase_last_week заказ за последние  неделю который приедет
+if($field_name=="quantity_purchase_last_week") {
+if($date_start_sale!='000-00-00') {
+    
+    
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые     
+    
+    
+//echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";  
+$dataOrders=$db::getRows("SELECT  id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");    
+
+$orders_where="";
+$i=0;
+echo"В этих закупках считаем закупленный товар";
+foreach($dataOrders as $row22) {
+ echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";     
+ if($i>0) $orders_where .=",";
+    $orders_where .="'".$row22["id"]."'"; 
+  $i++;
+}   
+if(!empty($orders_where)) $orders_where=" AND order_id in($orders_where)";   
+$data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0  $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];   
+$data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];    
+}
+}
+
+}
+
+
+if($field_name=="goods_in_transit") {
+    
+    echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
+if($order_date_add!='000-00-00') {
+    
+  
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые     
+if(!empty($orders_where)) {
+//$orders_where=" AND order_id in($orders_where)";   
+//$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0  $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+//$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];   
+//$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];    
+}
+}
+
+
+$dataOrders2=$db::getRows("SELECT  id,date_add FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");    
+
+$idss="";
+$k=0;
+
+echo"<b>Товар в пути участвуют заказы:</b>";
+foreach($dataOrders2 as $row) { 
+  if($k>0) $idss.=" OR";    $idss.= " order_id='".$row["id"]."'";  $k++; 
+  
+  echo"<br> id=".$row["id"]."  дата старта:".$row["date_add"]." ".$row["name"]."";
+  
+}
+
+if(!empty($idss))  $orders_where=" AND ( $idss) AND order_id!='$orderId'";  
+
+
+echo"order_date_add = $order_date_add orders_where=$orders_where ";   
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, color  FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color");
+  
+ // echo"<br> SQL SELECT sum(value) as value, product_id, color  FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0  $orders_where group by product_id,color  ";
+  
+     foreach($data2 as $row2) {
+        $data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];   
+       // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"]; 
+        
+        echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
+   }   
+
+
+}
+
+
+
+
+
+
+
+}
+
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_prices  типа global_hand 
+
+$inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
+if(in_array($field_name,$inFieldTable)) {
+    
+  ///  echo"+$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
+foreach($data as $row) { 
+    //foreach($inFieldTable as $field) 
+        $data_values[$row["product_id"]][0][0]=$row[$field_name];
+    }  
+
+
+
+$inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) { 
+    if(empty($row["store_id"]))  $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+    }     
+}
+}
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_item  типа global_hand
+$inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+if(in_array($field_name,$inFieldTable)) {
+    
+//echo"+!!!!!$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=?  AND store_id!='undefined'",[$orderId]);
+foreach($data as $row) { 
+    $data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
+    }   
+    
+$inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!=''  AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) { 
+    $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+    }     
+}   
+    
+    
+    
+}
+return $data_values;
+}
+
+
+
+
+
+// функция заносит в массив данные по полям в заказеЗакупщика исходные данные ID заказа Дата 1 Дата2 И магазин Может быть =0
+function data_values_insert_sql($date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$date_start_division,$orderId,$fieldsRows;
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+  echo "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."</td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+   </td> <td>"; 
+  //$date_start_sale 
+  $data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);  
+  echo"<b>".$row["field_name"]."</b> - собираем данные и сохраняем в таблицу ";  
+  
+  
+ // print_r($data_values[$row["field_name"]]);
+  /*
+if($printArray==true) {    
+  
+  foreach($fArray as $ProductId => $ArrayP) {
+   echo"<br>ProductId =".$products[$ProductId]." $ProductId";    
+     foreach($ArrayP as $StoreId => $ArrayP2) {
+      if(!empty($StoreId)) {}
+        echo"<br>StoreId = ";  
+         if(!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
+        else echo $StoreId;
+        //print_r($ArrayP2);
+  
+ } 
+ }
+ } 
+*/ 
+
+  
+  
+  echo"</td><td>".$row["description"]."</td>  </tr> ";
+  
+} 
+echo"</table>";
+return $data_values;
+
+}
+
+
+
+
+
+
+// пересчитываем данные - берем из страых таблиц и вписываем в новые.
+if(!empty($_GET["insert"])) {
+    
+// массив соответствия ID магазинов и GUID    
+$data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
+foreach($data as $row) { 
+$export[$row["entity_id"]]=$row["export_val"];
+$export_revers[$row["export_val"]]=$row["entity_id"];
+}     
+    
+$data_values_new=data_values_insert_sql($date1,$date2);
+
+$fieldsArrayFlip=array_flip($fieldsArray);
+foreach($data_values_new as $Field => $fArray) {
+
+if($Field=="quantity_purchase_last_week1")  
+{
+    echo"<h2>$Field</h2>";   
+
+
+  foreach($fArray as $ProductId => $ArrayP) {
+   echo"<br>ProductId =".$products[$ProductId]." $ProductId";    
+     foreach($ArrayP as $StoreId => $ArrayP2) {
+      if(!empty($StoreId)) {}
+        echo"<br>StoreId = ";  
+        
+        
+        if(!is_numeric($StoreId))  echo "".$export_revers[$StoreId];
+        else echo $StoreId;
+        print_r($ArrayP2);
+  
+ } 
+ }
+}
+  global $storeIdToGuidArray;
+   $storeIdToGuidArray=$export;
+  // $field_id=$fieldsArrayFlip[$Field];
+   insert_store_orders_fields($fArray,$Field); 
+
+ } 
+$db::sql("DELETE FROM store_orders_fields_data WHERE  (value='0.000' or  value='0.00')  AND value_text=''",[$orderId]);  
+  
+}
+
+
+$_CONFIG["jscss"]='
+<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal;  max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+    padding: 0.05rem;
+    background-color: 1px;
+    box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+       border-collapse: collapse;
+       border-spacing: 0;
+       overflow: hidden;
+}
+.zak th, .zak td {
+       border: 1px solid #e6e6e6;
+       padding: 0.1rem;
+       vertical-align: middle;
+       position: relative;
+}
+
+.zak td:hover:before { 
+       background-color: #e3e3e3;
+       content: \'\';  
+       height: 100%;
+       left: -5000px;
+       position: absolute;  
+       top: 0;
+       width: 10000px;   
+       z-index: -2;        
+}
+.zak td:hover:after { 
+       background-color: #cdcdcd;
+       content: \'\';  
+       height: 10000px;    
+       left: 0;
+       position: absolute;  
+       top: -5000px;
+       width: 100%;
+       z-index: -1;        
+}
+
+
+
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+  vertical-align: bottom;
+  line-height: normal;
+}
+table.zak thead b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+  
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+    font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+    padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+.zak td.td_product:hover {background:#fff;}
+
+</style>
+<script>
+
+function changef(id,typeint)
+{ 
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\')  uname = uname.replace(/[^0-9.\s]/gi, \'\'); 
+if(typeint==\'int\')  uname = uname.replace(/[^0-9\s]/gi, \'\'); 
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+function ajaxEditFieldValue(name_eng,product_id,color)
+{ 
+$.ajax({
+       url: \'/shipment/ajaxEditFieldValue/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+       }}); 
+$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+
+
+
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{ 
+$.ajax({
+       url: \'/shipment/ajaxEditFieldValue/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+       }}); 
+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+</script>';
+
+
+
+
+
+
+
+
+// вытаскиваем зависимые перменные
+/*
+foreach($fieldsArrayDepended as $fId =>$DependedArray) {
+ //   echo"<br> $fId"; 
+ if(!empty($DependedArray)) {
+     foreach($DependedArray as $Field) {
+     $Field=trim($Field); 
+       if(!empty($Field)) {
+      //   if(is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field].""; 
+    //     else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
+         // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт.  - не привязана к магазину
+         // stats суммарная по магазинам - на основе данных из других таблиц  сумма продаж в шт, сумма спсиания
+         // stats_store_hand  суммарная по магазинам - на основе вводных данных
+         // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
+       }
+    }
+  }
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) { 
+$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];    
+foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) { 
+$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];    
+foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
+}
+
+*/
index f004de31be8d1be04b2ae0069f136891747e1af9..bb747545f70e7e414f7023e1aacb6147adb57d20 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
  function latlng2distance($gps, $gps2)  {
  $gpsarr=explode(",",$gps);
index eb857d6883346c26f2a11c3f6f8125028a9676b6..9dafc32a1fd176c036910ce70a7dc3b066a668c5 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 //require_once dirname(__FILE__)."/image_bmp.php";
 /* 
 Пример использования:
index da9f17c41667018b53b9a6e98c3db8c982a0b0d6..e9cf09d4718fa3e47aad0c93485d4c95bcaa4d5e 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 function get_export_id($export_val, $entity="admin", $export_id=1) {
 global $db,$arr__export;
 if(empty($arr__export["$entity$export_id"])) {
index 87bc4641a0a3bdc0b89e6dd2f7822b1766130056..55b1d6860875fbee889029df60e3230db3d18917 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 require "startup.php";
 if(!is_administrator()) header("Location: index.php");
 if($_SESSION['group_id']==0) header("Location: index.php");
@@ -462,7 +462,7 @@ imap_close($connection);
 </body>
 </html>
 
-<?php
+<?     
        
        
        
diff --git a/erp24/inc/models/shipment.php b/erp24/inc/models/shipment.php
new file mode 100644 (file)
index 0000000..9850ae3
--- /dev/null
@@ -0,0 +1,14 @@
+<?
+
+$_MODEL["shipment"]=[
+"model"=>"shipment",
+"table" => "store_orders",
+"model_related" => "",
+"statuses" => "",
+"status_name" => "status",
+"uid_name" =>"id",
+"uid_tip" =>"int",
+"uid_name_from_related_model" =>"",
+"url_model_add" =>"/shipment/add/",
+"url_model_view" =>"/shipment/edit/",
+];
\ No newline at end of file
diff --git a/erp24/inc/models/shipment_waybill_products.php b/erp24/inc/models/shipment_waybill_products.php
new file mode 100644 (file)
index 0000000..92a4231
--- /dev/null
@@ -0,0 +1,15 @@
+<?
+
+$_MODEL["shipment_waybill_products"]=[
+"model"=>"shipment_waybill_products",
+"table" => "shipment_waybill_products",
+"model_related" => "",
+"parent" => "shipment_waybills",
+"statuses" => "",
+"status_name" => "status_id",
+"uid_name" =>"id",
+"uid_tip" =>"int",
+"uid_name_from_parent_model" =>"waybill_id",
+"url_model_add" =>"/shipment_waybill_products/add/",
+"url_model_view" =>"/shipment/shipment_waybill_products/",
+];
\ No newline at end of file
diff --git a/erp24/inc/models/shipment_waybills.php b/erp24/inc/models/shipment_waybills.php
new file mode 100644 (file)
index 0000000..ab50abd
--- /dev/null
@@ -0,0 +1,14 @@
+<?
+
+$_MODEL["shipment_waybills"]=[
+"model"=>"shipment_waybills",
+"table" => "shipment_waybills",
+"model_related" => "shipment_waybill_products",
+"statuses" => "",
+"status_name" => "status_id",
+"uid_name" =>"id",
+"uid_tip" =>"int",
+"uid_name_from_related_model" =>"waybill_id",
+"url_model_add" =>"/shipment_waybills/add/",
+"url_model_view" =>"/shipment/shipment_waybills/",
+];
\ No newline at end of file
index 0f8e6af574c17468bc57e59f8b4b93fbb90a242f..945c95ae5c957f9b6999dc83e5904b4bb9fd3aa4 100644 (file)
@@ -18,7 +18,7 @@ provided comments and project wiki page (links in README file)
 
 Notice: probably you should'nt use all of this in same script :)
 
-<?php
+<?phpb
 
 //include only that one, rest required files will be included from it
 include "qrlib.php"
index b19099587d2b6441ac4762ad36fc31a4fe553d21..f1c199b8f82353fb2889763fb551d232ba4ccb9f 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 $_CONFIG["salary"]["normal_count_shift"]=[25=>15,30=>15,35=>15,50=>15];
 
index eec85cec5b971abda5ca1545668a74adf46b8531..3ca9ac417362f3bb7fd0c9b02bbdaa2c35001fdf 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 function make_links_clickable($text)
 {
index c5869f4fd0e52c0bfcbd1faa1332d1afe1bc144a..76a7fe3ac72a7d69fee6b8f5e02aac33dec6d6dc 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 // округляет до определенного числа
 function ceilCoefficient($number, $rate = 1)
index 6f26d67341c7e49effa3fa2ccd07bc3de70b1efa..f6aa99993e8cbc9129725b336d27adc9ae6331f2 100644 (file)
@@ -139,7 +139,7 @@ class Messages extends Request implements Factory
         return (string) "{$this->url}/xml/";
     }
 
-    protected function parseXml($xml)
+    protected static function parseXml($xml)
     {
         $domXml = simplexml_load_string($xml);
         $arr = array();
@@ -237,7 +237,7 @@ class State extends Request implements Factory
         return (string) "{$this->url}/xml/state.php";
     }
 
-    protected function parseXml($xml)
+    protected static function parseXml($xml)
     {
         $domXml = simplexml_load_string($xml);
         $arr = array();
@@ -300,7 +300,7 @@ class Balance extends Request implements Factory
         return (string) "{$this->url}/xml/balance.php";
     }
 
-    protected function parseXml($xml)
+    protected static function parseXml($xml)
     {
         $domXml = simplexml_load_string($xml);
         $arr = array();
@@ -377,7 +377,7 @@ class Incoming extends Request implements Factory
         $this->item['end'] = $end;
     }
 
-    protected function parseXml($xml)
+    protected static function parseXml($xml)
     {
         $domXml = simplexml_load_string($xml);
         $arr = array();
index 32fa446cc102e13baca70459a2c7b931271fa235..2c4e22ce7fcc9c57fcf634faee9d932c8927b0f5 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 class Thumbs 
 {
        public function __construct($filename)
index afb64f7d5127f836336b7d5570dd07f26ac36264..8c0d1fce9c5ccaedf6b93aeb222559237d01e9d3 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 function store_select($form=1,$pole_name="id",$store_all=0) {
 global $db;
 
@@ -1251,7 +1251,7 @@ $(document).ready(function() {
        });
 });    
 </script>      
-<?php
+<?                                                                     
                                                                
 
 }
@@ -2394,9 +2394,7 @@ elseif(empty($bottom_print)) bottom($txt);
 function get_sql_array($sql_table, $id, $name, $where ) {
 global $db;
 
-$data = Yii::$app->db->createCommand("SELECT $id,$name FROM $sql_table  $where")->queryAll();
-//$data = $db::getRows("SELECT $id,$name FROM $sql_table  $where");
-$array = [];
+$data = $db::getRows("SELECT $id,$name FROM $sql_table  $where");
 foreach ($data as $it) {       
  $array[$it[$id]]=$it[$name];  
     }  
index 6a4784dc642b29af821a3568c250a95e2f9be037..2bcdd0431d471c45a757867142ca2ff3d92318f8 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 $_CONFIG["entity_arr"]=array(
     "lead"=>array("name"=>"Сделки/заказы", "table"=>"orders_amo"),
     "client"=>array("name"=>"Клиент", "table"=>"contacts","type_id"=>0),
@@ -82,7 +82,7 @@ function construct_form_fields_azea() {
 global $db,$modul, $act,$fields_edit,$h1;
        
 $validate_config=validate_config();    
-
+       
 $data=$db::getRows("SELECT id,name FROM uni_status WHERE type='".$modul."_group' order by posit ASC"); 
 foreach ($data as $row) $sel_group[$row["id"]] = $row["name"];
 
@@ -132,19 +132,12 @@ if(!empty($fields_table_edit)) {
 $fields_table_edit=""; 
 if(!empty($_POST["position"])) {
 $n=count($_POST["position"]);  
-foreach($_POST["position"] as $v =>$p) {
-    $item = \yii_app\records\ModulesUniFields::find()->where(['and', ['modul' => $modul], ['id' => $v]])->one();
-    $item->posit = $n;
-    $item->save();
-//    $db::sql("UPDATE  modules_uni_fields SET posit=? WHERE modul='$modul' AND id=?",[$n,$v]);
-    $n--;
-}
+foreach($_POST["position"] as $v =>$p) {$db::sql("UPDATE  modules_uni_fields SET posit=? WHERE modul='$modul' AND id=?",[$n,$v]);      $n--;   }
 $mess="Сохранили";    
 }
 
-$sel_group=get_sql_array("uni_status", "id", "name", " WHERE type='".$modul."_group' order by posit DESC");
-$data2 = Yii::$app->db->createCommand("SELECT * FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC")->queryAll();
-//$data2=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC");
+$sel_group=get_sql_array("uni_status", "id", "name", " WHERE type='".$modul."_group' order by posit DESC");    
+$data2=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC");      
        
 if(count($data2)>0) {          
        
@@ -288,7 +281,7 @@ if(!empty($act)) $action .="$act/";
  unif_fields_show($forma, $table_sql) ;        
 
        
-$idname=$forma["id"]["name"] ?? '';
+$idname=$forma["id"]["name"];  
 $item=array();
 
 
@@ -298,11 +291,10 @@ if(!empty($_REQUEST[$idname])) $id=(int)$_REQUEST[$idname];
 if(!empty($id)) { 
  $where_sql="";
 if(!empty($form_parametr["WHERE_SQL"])) $where_sql=$form_parametr["WHERE_SQL"];    
-
-
-$q = "SELECT name,id FROM $table_sql WHERE id=:id $where_sql LIMIT 1";
-$data = Yii::$app->db->createCommand($q, [':id' => $id])->queryAll();
-//$data = $db::getRows($q,[$id]);
+    
+    
+$q = "SELECT name,id FROM $table_sql WHERE id=? $where_sql LIMIT 1";
+$data = $db::getRows($q,[$id]);
 $n=count($data);
 if($n>0) {     
 foreach ($data as $row)  { 
@@ -316,42 +308,35 @@ $h1='<h1>'.$row["name"].'</h1>';
 }
 } else { 
 //top("Ошибка 404 - запись не найдена");
-//include"templates/top.php";
+include"templates/top.php";
 
 error_mess("ID не найден");
 //bottom();
-include dirname(__DIR__, 1) . '/templates/bottom_light.php';
+include"templates/bottom.php";
 exit();        
 }
 }
 
 
        
-if(!empty($id)) {
-    $q = \yii_app\records\ModulesUniFields::find()->alias('o')->select(['*', 'v.id as id_value', 'v.val as val', 'o.group_id as group_id', 'o.name', 'o.image_config'])
-        ->leftJoin('uni_fields_value as v', 'o.id = v.field_id AND v.uni_id = ' . $id)
-        ->where(['o.modul' => $modul])->orderBy(['o.posit' => SORT_DESC])->asArray();
-//    $q = "SELECT *,v.id as id_value, v.val as val, o.group_id as group_id,o.name, o.image_config FROM modules_uni_fields as o
-//LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id='$id') WHERE o.modul='$modul' ORDER BY o.posit DESC";
-} else {
-    $q = \yii_app\records\ModulesUniFields::find()->select(['*', 'select_val as val'])->where(['modul' => $modul])
-        ->orderBy(['posit' => SORT_DESC])->asArray();
-//    $q = "SELECT *,select_val as val FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC";
-}
+if(!empty($id)) 
+$q = "SELECT *,v.id as id_value,v.val as val, o.group_id as group_id,o.name, o.image_config FROM modules_uni_fields as o 
+LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id='$id') WHERE o.modul='$modul' ORDER BY o.posit DESC";
+ else 
+ $q = "SELECT *,select_val as val FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC";
 
 
 
 
 if(empty($fields_edit)) {      
-foreach($forma as $key_name => $massiv_k) $no_uni_fields[]=$key_name;
-$data = $q->all();
-//$data = $db::getRows($q);
+foreach($forma as $key_name => $massiv_k) $no_uni_fields[]=$key_name;  
+$data = $db::getRows($q);
 foreach ($data as $row) {      
 if(empty($row["val"]) and !empty($row["select_val"])) $row["val"]=$row["select_val"];  
 
 
 $image_config=json_decode($row["image_config"], true,JSON_UNESCAPED_UNICODE);     
-$ext_1=explode(",",$image_config["ext"] ?? '');
+$ext_1=explode(",",$image_config["ext"]);
 
        
 $forma[$row["name_eng"]]=["name"=>$row["name_eng"], "tip"=>"string", "name_pole"=>$row["name"], "ext"=>$ext_1,  "image_config"=>$row["image_config"],  "class_row"=>'fdiv f_'.$row["group_id"], "type"=>$row["type"], "sql_func"=>$row["sql_func"],  "value"=>$row["val"], "val_arr"=>explode(";",$row["val"]), "select_val"=>explode(";",$row["select_val"]),  "required"=>$row["required"],   "attr"=>str_replace('&quot;','"',$row["attr"]),  "leftclass"=>$row["leftclass"], "class"=>$row["class"], "placeholder"=>$row["placeholder"], "class_block"=>$row["class_block"], "style"=>$row["style"], "html"=>$row["html"], "dostup_arr"=>$row["dostup_arr"]    ]   ;  
@@ -379,8 +364,7 @@ echo" ++ {$row["name_eng"]}={$row["val"]}";
 }       
 */
 
-$item = Yii::$app->db->createCommand("SELECT * FROM $table_sql WHERE $idname=:idname  LIMIT 1", [':idname' => $id])->queryAll()[0] ?? '';
-//$item = $db::getRow("SELECT * FROM $table_sql WHERE $idname=?  LIMIT 1",[$id]);
+$item = $db::getRow("SELECT * FROM $table_sql WHERE $idname=?  LIMIT 1",[$id]);
        
 
 
@@ -393,14 +377,12 @@ $catid=$item["cat_id"];
 
 
        
-/*заносим свойства для категории товара в массив*/
-$data = \yii_app\records\ProductsCatProperty::find()->select(['id'])->where(['cat_id' => $catid])->asArray()->all();
-//$data = $db::getRows("SELECT id FROM products_cat_property WHERE cat_id=?",[$catid]);
+/*заносим свойства для категории товара в массив*/     
+$data = $db::getRows("SELECT id FROM products_cat_property WHERE cat_id=?",[$catid]);  
 foreach ($data as $row) $data_items[]=$row["id"];      
        
 /*заносим все характеристики в общий массив*/
-$data = \yii_app\records\CatProperty::find()->select(['id', 'name', 'tip', 'parent_id'])->asArray()->all();
-//$data = $db::getRows("SELECT id,name,tip,parent_id FROM cat_property");
+$data = $db::getRows("SELECT id,name,tip,parent_id FROM cat_property");        
 foreach ($data as $row) { 
 $cat_property[$row["id"]]=$row["name"];
 if($row["tip"]==0)   $select_all[$row["id"]]= $row["name"];
@@ -409,8 +391,7 @@ if($row["tip"]==1)   $selectp[$row["parent_id"]][$row["id"]]= $row["name"];
                                                
        
 /*запрашиваем какие возможные свойства есть у товара в категории  cat_id=$id*/
-$data = \yii_app\records\ProductsCatProperty::find()->select(['cat_id', 'id'])->where(['cat_id' => $catid])->asArray()->all();
-//$data = $db::getRows("SELECT cat_id,id FROM products_cat_property WHERE cat_id=?",[$catid]);
+$data = $db::getRows("SELECT cat_id,id FROM products_cat_property WHERE cat_id=?",[$catid]); 
 foreach ($data as $row){
   $select[$row["id"]]=$cat_property[$row["id"]]; 
   $selec[]=$row["cat_id"];                             
@@ -418,24 +399,16 @@ foreach ($data as $row){
        
 /*сохраняем даные свойств товара */ 
 if(!empty($_POST["save"])) {   
-    // удаляем старые записи перед записью новых
-    \yii_app\records\ProductsPropertyValue::deleteAll(['id' => $id]);
-    //$db::sql("DELETE FROM products_property_value WHERE id=?",[$id]);
-    foreach($_POST["in"] as $v =>$p)   {
-        if(!empty($p) and !empty($id)) {
-            $item = new \yii_app\records\ProductsPropertyValue;
-            $item->property_id = $p;
-            $item->id = $id;
-            $item->val = '';
-            $item->save();
-//            $db::sql("INSERT IGNORE INTO products_property_value VALUES(?,?,?)",[$p,$id,'']);
-        }
-    }
+// удаляем старые записи перед записью новых       
+$db::sql("DELETE FROM products_property_value WHERE id=?",[$id]);              
+foreach($_POST["in"] as $v =>$p)       { 
+if(!empty($p) and !empty($id)) $db::sql("INSERT IGNORE INTO products_property_value VALUES(?,?,?)",[$p,$id,'']);               
 }
 
-/*запрашиваем даные свойств товара */
-$data = \yii_app\records\ProductsPropertyValue::find()->where(['id' => $id])->asArray()->all();
-//$data = $db::getRows("SELECT * FROM products_property_value WHERE id=?",[$id]);
+}
+
+/*запрашиваем даные свойств товара */             
+$data = $db::getRows("SELECT * FROM products_property_value WHERE id=?",[$id]); 
 foreach ($data as $row) $prop_val[$row["property_id"]]=$row["property_id"]; 
        
 /*вывод свойств у товара*/  
@@ -448,20 +421,15 @@ foreach ($data as $row) $prop_val[$row["property_id"]]=$row["property_id"];
 }
        
        
-if(!empty($modul_uni)) {
-$q = \yii_app\records\ModulesUniFields::find()->alias('o')
-    ->select(['v.val as val', 'o.name_eng as name_eng', 'o.type', 'o.attr', 'o.name', 'o.tip', 'o.sql_func', 'o.required',
-        'o.leftclass', 'o.class', 'o.placeholder', 'o.class_block', 'o.style', 'o.html', 'o.dostup_values', 'o.image_config'])
-        ->leftJoin('uni_fields_value as v', 'o.id = v.field_id AND v.uni_id = ' . $id)
-        ->where(['o.modul' => $modul_uni])->orderBy(['o.posit' => SORT_DESC])->asArray();
-//$q = "SELECT v.val as val, o.name_eng as name_eng, o.type,o.attr, o.name,o.tip,o.sql_func,o.required,o.leftclass,o.class,o.placeholder,o.class_block,
-//o.style, o.html, o.dostup_values,
-//o.image_config FROM modules_uni_fields as o   LEFT JOIN uni_fields_value as v ON   o.id=v.field_id AND v.uni_id='$id' WHERE  o.modul='$modul_uni'";
-//echo "$q";
+if(!empty($modul_uni)) {       
+
+$q = "SELECT v.val as val, o.name_eng as name_eng, o.type,o.attr, o.name,o.tip,o.sql_func,o.required,o.leftclass,o.class,o.placeholder,o.class_block,
+o.style, o.html, o.dostup_values,
+o.image_config FROM modules_uni_fields as o   LEFT JOIN uni_fields_value as v ON   o.id=v.field_id AND v.uni_id='$id' WHERE  o.modul='$modul_uni'";
+echo "$q";     
+
 
-$data = $q->all();
-//$data = $db::getRows($q);
-$form_field_uni = [];
+$data = $db::getRows($q);
 foreach ($data as $row) {      
 //echo" ++ {$row["name_eng"]}={$row["val"]} ";
 
@@ -489,13 +457,9 @@ construct_form_submit_uni($forma, $table_sql,$modul_uni,$form_field_hide_array);
        
 /////////      
        
-$data = \yii_app\records\ModulesUniFields::find()->alias('o')
-    ->select(['*', 'v.val as val', 'o.name_eng as name_eng', 'o.type', 'o.required', 'o.attr', 'o.dostup_values', 'o.image_config'])
-    ->leftJoin('uni_fields_value as v', 'o.id = v.field_id AND v.uni_id = ' . $id)
-    ->where(['o.modul' => $modul_uni])
-    ->asArray()->all();
-//$q = "SELECT *,v.val as val, o.name_eng as name_eng, o.type, o.required,o.attr, o.dostup_values, o.image_config  FROM modules_uni_fields as o  LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id=?) WHERE o.modul=? ";
-//$data = $db::getRows($q,[$id,$modul_uni]);
+
+$q = "SELECT *,v.val as val, o.name_eng as name_eng, o.type, o.required,o.attr, o.dostup_values, o.image_config  FROM modules_uni_fields as o  LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id=?) WHERE o.modul=? ";
+$data = $db::getRows($q,[$id,$modul_uni]);
 foreach ($data as $row) {      
 $attr=$row["attr"];
 if($row["type"]=="multiple") { $val_2=explode(",",$row["val"]); $row["val"]=$val_2; $tip="array";       } else $val_err='';
@@ -559,9 +523,9 @@ $sql_up="";
 //foreach($form_field_hide_array as $keys => $vals) { echo"<br>Скрываем поле $keys => $vals"; }
 
 /////////      
-$data = \yii_app\records\ModulesUniFields::find()->select(['name_eng'])->where(['modul' => $modul_uni_fields])->asArray()->all();
-//$q = "SELECT name_eng FROM modules_uni_fields WHERE modul=?";
-//$data = $db::getRows($q,[$modul_uni_fields]);
+
+$q = "SELECT name_eng FROM modules_uni_fields WHERE modul=?";
+$data = $db::getRows($q,[$modul_uni_fields]);
 foreach ($data as $row) {      
 $form_field_hide_array[$row["name_eng"]]=$row["name_eng"];     
 //echo"<br>Скрываем поле {$row["name_eng"]} ";
@@ -574,10 +538,9 @@ if($table_sql!='modules_uni_fields') {
 
 
  
-$sql_up='';
-$sql_upvalue = [];
+$sql_up='';    
 foreach($_POST as $name => $value) {
-    
+ // echo" <br> $name => $value ";  
     
 if(!in_array($name,array('id','save')) and isset($form_field_hide_array[$name]) and  $forma[$name]["type"]!="table") { 
 if($forma[$name]["type"]=="multiple") {$val=""; $i=0;  foreach($_POST[$name] as $keys1 => $values1){ if($i!=0)  $val .=",";  $val .="$values1";  $i++;  }}
@@ -635,7 +598,7 @@ $sql_upvalue[$name]=$val;
 $p=0;
 $sql="";
 $param2=array();
-if (isset($id)) $param2['id2']=$id;
+$param2['id2']=$id;
 foreach($sql_upvalue as $nm => $vl) {
  if($p>0) $sql .=",";    
 $sql .=" `$nm` = :$nm"; 
@@ -844,8 +807,8 @@ elseif(empty($forma[$name]["mysql_table"])) {       $sql1 .=",$name";  $sql2 .=", '$va
        
 $val='';       
 if($name!="save" and $name!="id" and $forma[$name]["type"]!="image"   and $forma[$name]["type"]!="table"  and $forma[$name]["type"]!="video"   and $forma[$name]["type"]!="file"  and !isset($forma[$name]["no_form"]) and $forma[$name]["type"]!="html") {
-if(isset($_POST[$name])) {
-$val=htmlentities(is_array($_POST[$name]) ? implode(',', $_POST[$name]) : $_POST[$name]);
+if(isset($_POST[$name])) { 
+$val=htmlentities($_POST[$name]);
 //echo"<br> $name value=$val ";
         
         
@@ -903,7 +866,7 @@ if($n == 1) $error .="<li>Поле ".$forma[$name]["name_pole"].": запись
 
 
 if(empty($forma[$name]["mysql_table"])) {
-//$sql1 .=",$name";  $sql2 .=", '$val' ";
+$sql1 .=",$name";  $sql2 .=", '$val' ";
 $sql_up .=", $name='$val' ";   
        
 $sql_up1_array[] = $name;      
@@ -963,7 +926,7 @@ $q="UPDATE `$table_sql` SET $up WHERE `$idname` = :id2 $w"; //$where_modul
 //     echo "$q ".print_r($param)."";
 //exit($q);
 $db::sql($q, $param);  
-$mess="Запись обновлена $q";
+$mess="Запись обновлена";
 
 if(!empty($_POST)) {
     
@@ -1066,10 +1029,10 @@ foreach($sql_up_array as $k =>$val) {
        
        
 // удаляем из массива поля универсальные чтобы не было ошибки в базе    
-//foreach($form_field_hide_array as $k =>$val) {
-////unset($sql_up_array[$k]);
-////echo" <br> ------ $k =>$val";
-//}
+foreach($form_field_hide_array as $k =>$val) {
+//unset($sql_up_array[$k]);    
+//echo" <br> ------ $k =>$val";        
+}              
        
        
        
@@ -1155,7 +1118,7 @@ else { if(!empty($act)) header("Location: /$modul/$act/?$idname=$id1");
 }
        
        
-//include_once"templates/top.php";
+include_once"templates/top.php";       
 if(!empty($_GET["mess"])) $mess=htmlentities($_GET["mess"]);
 
 
@@ -1243,8 +1206,7 @@ if(!empty($mess))  mess($mess);
 echo"<div class=\"panel-body\">
                        <div class=\"tab-content\">
                        <div class=\"tab-pane active\" id=\"profile-1\">
-<form method=post role=\"form\" class=\"form-horizontal was-validated\" id=\"erpform\" autocomplete=\"off\" enctype=\"multipart/form-data\" >";
-?><input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" /><?php
+<form method=post role=\"form\" class=\"form-horizontal was-validated\" id=\"erpform\" autocomplete=\"off\" enctype=\"multipart/form-data\" action=\"$action\">";
 //<input name=go value=\"".htmlentities($_REQUEST["go"])."\" type=hidden>
 
        
@@ -1270,7 +1232,7 @@ echo $group_menu;
 //////////     конец групп   
 
 if(!empty($forma["save"])) {$save=$forma["save"]; unset($forma["save"]); }
-$form_field_uni = [];
+       
 foreach($form_field_uni as $name => $pole_arr2) {      
 $forma[$name]=$pole_arr2;      
 //echo" +++++ {$name} {$pole_arr2["value"]} "; 
@@ -1291,7 +1253,7 @@ if(!empty($pole_arr["html_begin"]) ) echo html_entity_decode($forma[$name]["html
 //echo" dostup_arr=". $pole_arr["dostup_arr"] ."";
        
 if(!empty($pole_arr["br"]) )  echo"<div class=\"row\"></div>";                 
-$id_pole=$forma["id"]["name"] ?? '';
+$id_pole=$forma["id"]["name"]
        
 /*HEDDEN*/
 if($forma[$name]["type"]=="hidden" and !empty($id) and !empty($idname) and $id_pole==$idname) {  echo"<input type=hidden name=".$idname."  value=\"".$id."\">"; if(!empty($forma[$name]["html"])) echo $forma[$name]["html"];}
@@ -1321,8 +1283,8 @@ if(!empty($forma[$name]["class"])) $class=$forma[$name]["class"];
 if(!empty($forma[$name]["name_pole_txt"])) $forma[$name]["name_pole"]=$forma[$name]["name_pole_txt"];  
        
 
-$dostup_arr=isset($pole_arr["dostup_arr"]) ? unserialize($pole_arr["dostup_arr"]) : [];
-if(isset($_CONFIG_SITE["dostup_fields"]) && $_CONFIG_SITE["dostup_fields"][$modul]==1) {$show=0; $edit=0;}
+$dostup_arr=unserialize($pole_arr["dostup_arr"]);
+if($_CONFIG_SITE["dostup_fields"][$modul]==1) {$show=0; $edit=0;}
 else {$show=1; $edit=1;}
 
 if(!empty($dostup_arr[$_SESSION["group_id"]][0]["show"])) {
@@ -1653,7 +1615,12 @@ $arr=array();
 $arr2=array();
 
 
-if(!empty($forma[$name]["val_arr"])) {$arr[0]=implode(";",$forma[$name]["val_arr"]);   }
+if(!empty($forma[$name]["val_arr"])) {
+    
+    $arr[0]=implode(";",$forma[$name]["val_arr"]);
+}
+
+
        
 $count_pole=explode(",",$sql_z[0]);            
 if(count($count_pole)==2)      $arr2=select_sql_func($sql_z[0],$sql_z[1],$sql_z[2]);   
@@ -1665,6 +1632,8 @@ if(count($count_pole)==3) {  $arr2=outSelectsql("0",$sql_z[1],$count_pole[0],$co
 
 
 foreach($arr2 as $idd =>$vall)  $arr[$idd]=$vall;
+
+
 /*
 if($name=="group_id" and $modul=="admin")  {   
 // echo" +++ ".$forma[$name]["dostup_values"]."   ".   $_SESSION['admin_group_add_arr'];
@@ -1702,6 +1671,16 @@ $forma[$name]["val_arr"]="".$vall22;
 
        
 }
+
+
+
+
+if(!empty($forma[$name]["val_arr"]) and $forma[$name]["tip"]=="string")  {
+//$arr=[];
+//$ars=implode(";",$forma[$name]["val_arr"]);
+ //foreach($ars as $idd =>$vall)  $forma[$name]["val_arr"][$vall]=$vall;   
+ //echo" $name ++++++ ".$forma[$name]["tip"]."";   
+}
        
        
        
@@ -1796,7 +1775,7 @@ optgroup[label] {
        
 /*multy-select*/       
 if($pole_arr["type"]=="multiple")  { 
-$item[$name]=explode(",",$item[$name] ?? '');
+$item[$name]=explode(",",$item[$name]);
 echo"<label class=\"control-label2 form-label"; 
 if(empty($forma[$name]["class_left"]))  echo" col-xs-12 col-sm-3";                                                             
 echo" text-lg-right\">"; if(!empty($forma[$name]["required"])) echo"*"; echo"".$forma[$name]["name_pole"]."</label><div class=\""; 
@@ -1817,8 +1796,8 @@ echo" id=crm$name>";
        
 if(!empty($forma[$name]["val_arr"])) {  
 foreach($forma[$name]["val_arr"] as $vid =>$namev) {  echo"<option value=$vid"; 
-if(in_array($vid,$item[$name])) echo" selected";
-if (is_array($forma[$name]["value"]) && in_array($vid, $forma[$name]["value"])) echo " selected";
+if(in_array($vid,$item[$name])) echo" selected"; 
+if(in_array($vid,$forma[$name]["value"])) echo" selected";                                                                                                             
 echo">$namev</option>";   }
 }                                                               
 echo"</select></div></div>";   
@@ -2262,19 +2241,17 @@ return $item;
 
 
 function construct_modul_form_azea($modul)   {
-global /*$modul,*/$db,$h1,$group_menu,$uni_fields, $_CONFIG,$forma_sql_table;
-
-$data = \yii_app\records\ModulesUniFields::find()->where(['modul' => $modul])->orderBy(['posit' => SORT_DESC])->asArray()->all();
-//$data=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul=? ORDER BY posit DESC",[$modul]);
+global $modul,$db,$h1,$group_menu,$uni_fields, $_CONFIG,$forma_sql_table;
+$data=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul=? ORDER BY posit DESC",[$modul]);     
 foreach ($data as $row) {      
 
-    $image_config=json_decode(empty($row["image_config"]) ? '{}' : $row["image_config"], true,JSON_UNESCAPED_UNICODE);
-    $ext_1=explode(",",$image_config["ext"] ?? '');
+$image_config=json_decode($row["image_config"], true,JSON_UNESCAPED_UNICODE);     
+$ext_1=explode(",",$image_config["ext"]);
 
-    if(empty($row["val"]) and !empty($row["select_val"])) $row["val"]=$row["select_val"];
-    $forma[$row["name_eng"]]=["name"=>$row["name_eng"], "tip"=>$row["tip"], "name_pole"=>$row["name"], "ext"=>$ext_1,  "dostup_values"=>$row["dostup_values"],    "image_config"=>$row["image_config"],   "class_row"=>'fdiv f_'.$row["group_id"], "sql_func"=>$row["sql_func"],"value"=>$row["default_val"], "val_arr"=>explode(";",$row["val"] ?? ''), "select_val"=>explode(";",$row["select_val"]),   "default_val"=>$row["default_val"], "type"=>$row["type"], "class_block"=>$row["class_block"], "class"=>$row["class"], "style"=>$row["style"], "attr"=>$row["attr"], "placeholder"=>$row["placeholder"], "leftclass"=>$row["leftclass"], "required"=>$row["required"], "dostup_arr"=>$row["dostup_arr"],   "html"=>$row["html"]];
-    if(!empty($ext_1)) $forma[$row["name_eng"]]["ext"]=$ext_1;
-    //echo"<br> {$row["name_eng"]} {$row["required"]} ";
+if(empty($row["val"]) and !empty($row["select_val"])) $row["val"]=$row["select_val"];  
+$forma[$row["name_eng"]]=["name"=>$row["name_eng"], "tip"=>$row["tip"], "name_pole"=>$row["name"], "ext"=>$ext_1,  "dostup_values"=>$row["dostup_values"],    "image_config"=>$row["image_config"],   "class_row"=>'fdiv f_'.$row["group_id"], "sql_func"=>$row["sql_func"],"value"=>$row["default_val"], "val_arr"=>explode(";",$row["val"]), "select_val"=>explode(";",$row["select_val"]),   "default_val"=>$row["default_val"], "type"=>$row["type"], "class_block"=>$row["class_block"], "class"=>$row["class"], "style"=>$row["style"], "attr"=>$row["attr"], "placeholder"=>$row["placeholder"], "leftclass"=>$row["leftclass"], "required"=>$row["required"], "dostup_arr"=>$row["dostup_arr"],   "html"=>$row["html"]];       
+if(!empty($ext_1)) $forma[$row["name_eng"]]["ext"]=$ext_1;
+//echo"<br> {$row["name_eng"]} {$row["required"]} ";   
 
 }
 if(empty($forma["save"])) $forma["save"]=["name"=>"save","type"=>"submit","value"=>"сохранить"];
@@ -2291,8 +2268,8 @@ if(!empty($uni_fields)) $uni_fields=$modul;
 construct_form_azea($forma,$modul,$h1,"2",$uni_fields); 
 
 if(!empty($_CONFIG["bottom_content"])) echo $_CONFIG["bottom_content"];
-
-include dirname(__DIR__, 1) . '/templates/bottom_light.php';
+       
+include"templates/bottom.php"; 
 }
 
 
@@ -2789,41 +2766,40 @@ $db::sql($z,[$entity,$action_id,$pole,$field_id, $entity_id, $val, $admin_id, $d
 }
 
 
-//$spiski_arr=array(
-// "id,name;city_store;WHERE 1 order by name ASC"=>"Список магазинов в НН",
-// "admin_id,name_admin;admin;WHERE group_id=27 order by name_admin ASC"=>"Список курьеров",
-// "admin_id,name_admin;admin;WHERE group_id=12 order by name_admin ASC"=>"Список курьеров 2",
-//
-// "id,name;city_geo;WHERE city_id='1343' order by name ASC"=>"Список районов",
-//  "id_city,city_name_ru;city;WHERE main='1' order by city_name_ru ASC"=>"Список городов",
-//  "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC"=>"Список менеджеров",
-// "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC" =>"Список флористов",
-//   "admin_id,name_admin;admin;WHERE group_id=10 or group_id=4 order by name_admin ASC"=>"Список менеджеров и операторов",
-//   "status_id,status;status;WHERE type='istochnik'"=>"Список источников сделки",
-//    "status_id,status;status;WHERE type='problem'"=>"Список Жалоб",
-//    "status_id,status;status;WHERE type='otkaz'"=>"Список Отказов",
-//    "status_id,status;status;WHERE type='otkaz_rop'"=>"Список Отказов РОП",
-//    "status_id,status;status;WHERE type='status_vozvrat'"=>"Список Статусов на возврат",
-//    "setka_id,brend;setka;WHERE 1"=>"Список Брендов",
-//    "site_id,url_site;setka_site;WHERE 1 order by city_id, city ASC"=>"Список сайтов",
-//    "status_id,status;status;WHERE type='payment'"=>"Список типов оплат",
-//   "status_id,status;status;WHERE type='povod'"=>"Список поводов для букета",
-//   "status_id,status;status;WHERE type='opozdal'"=>"Список причин опозданий курьеров",
-//    "status_id,status;status;WHERE type='brend'"=>"Список брендов",
-//
-//
-//
-// );
-
-//$zz = $zz ?? '';
-//$zz=preg_replace_callback("|{RAND}|","generate_r", $zz);
-//$zz=str_replace('[YEAR]',date("Y",time()),$zz);
-//$zz=str_replace('[MONTH]',date("m",time()),$zz);
-//$zz=str_replace('[DAY]',date("d",time()),$zz);
-//$zz=str_replace('[HOUR]',date("H",time()),$zz);
-//$zz=str_replace('[MINUT]',date("i",time()),$zz);
-//$zz=str_replace('[SECUND]',date("s",time()),$zz);
-//$zz=str_replace('[ADMIN_ID]',$_SESSION["admin_id"],$zz);
-//$zz=str_replace('[ADMIN_NAME]',$_SESSION["name_admin"],$zz);
-//$zz=str_replace('[RANDN]',rand(0,9),$zz);
-//$zz=str_replace('[TIME]',time(),$zz);
\ No newline at end of file
+$spiski_arr=array(
+ "id,name;city_store;WHERE 1 order by name ASC"=>"Список магазинов в НН",
+ "admin_id,name_admin;admin;WHERE group_id=27 order by name_admin ASC"=>"Список курьеров",
+ "admin_id,name_admin;admin;WHERE group_id=12 order by name_admin ASC"=>"Список курьеров 2",
+
+ "id,name;city_geo;WHERE city_id='1343' order by name ASC"=>"Список районов",
+  "id_city,city_name_ru;city;WHERE main='1' order by city_name_ru ASC"=>"Список городов",
+  "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC"=>"Список менеджеров",
+ "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC" =>"Список флористов",
+   "admin_id,name_admin;admin;WHERE group_id=10 or group_id=4 order by name_admin ASC"=>"Список менеджеров и операторов",
+   "status_id,status;status;WHERE type='istochnik'"=>"Список источников сделки",   
+    "status_id,status;status;WHERE type='problem'"=>"Список Жалоб",   
+    "status_id,status;status;WHERE type='otkaz'"=>"Список Отказов",     
+    "status_id,status;status;WHERE type='otkaz_rop'"=>"Список Отказов РОП",     
+    "status_id,status;status;WHERE type='status_vozvrat'"=>"Список Статусов на возврат",     
+    "setka_id,brend;setka;WHERE 1"=>"Список Брендов",   
+    "site_id,url_site;setka_site;WHERE 1 order by city_id, city ASC"=>"Список сайтов",       
+    "status_id,status;status;WHERE type='payment'"=>"Список типов оплат",       
+   "status_id,status;status;WHERE type='povod'"=>"Список поводов для букета",       
+   "status_id,status;status;WHERE type='opozdal'"=>"Список причин опозданий курьеров",       
+    "status_id,status;status;WHERE type='brend'"=>"Список брендов",       
+  
+    
+ );
+
+$zz=preg_replace_callback("|{RAND}|","generate_r", $zz);
+$zz=str_replace('[YEAR]',date("Y",time()),$zz);
+$zz=str_replace('[MONTH]',date("m",time()),$zz);
+$zz=str_replace('[DAY]',date("d",time()),$zz);
+$zz=str_replace('[HOUR]',date("H",time()),$zz);
+$zz=str_replace('[MINUT]',date("i",time()),$zz);
+$zz=str_replace('[SECUND]',date("s",time()),$zz);
+$zz=str_replace('[ADMIN_ID]',$_SESSION["admin_id"],$zz);
+$zz=str_replace('[ADMIN_NAME]',$_SESSION["name_admin"],$zz);
+$zz=str_replace('[RANDN]',rand(0,9),$zz);
+$zz=str_replace('[TIME]',time(),$zz);
\ No newline at end of file
index acf188e4afe69849458832e8a92a79ab424a1fb3..a2e347f40acef2b1b1aded736d3b778a89e9a588 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 
 function connect_mysql_crm(){
 global $_CONFIG_SITE;
diff --git a/erp24/inc/universal_model.php b/erp24/inc/universal_model.php
new file mode 100644 (file)
index 0000000..64c42a3
--- /dev/null
@@ -0,0 +1,1391 @@
+<?
+global $show_design;
+
+
+ini_set('display_errors', '1');
+ini_set('display_startup_errors', '1');
+error_reporting(E_ALL);
+
+function get_table_name_from_model($model){
+$model_config=get_config_universal_model($model);
+if(!empty($model_config["table"])) $table=$model_config["table"]; else  $table=$model;  
+    return   $table;
+}
+
+function get_name_filed_status_from_universal_model($model){
+
+$related=[
+"universal_model"=>"",    
+"shipment"=>"status",     
+"shipment_waybills"=>"status_id", 
+"shipment_waybill_products"=>""  
+    ];
+    
+if(!empty($related[$model])) $status_name=$related[$model];  else  $status_name=""; 
+return   $status_name;
+    
+}
+
+
+function get_filed_value_from_universal_model($model,$field,$id){
+global $db;   
+$table=get_table_name_from_model($model);
+$value="";
+    try {
+     $value=$db::getValue("SELECT $field FROM $table WHERE id=?",[$id]);
+    } catch (Exception $e) {    echo 'Ошибка '.$model.' '.$table.' : ',  $e->getMessage(), "\n";}
+
+ return $value;   
+}
+
+function get_config_universal_model($model){
+global $db;   
+if(is_numeric($model)) $field_name="id"; else $field_name="model";
+
+$config=[];
+
+ if($model=="universal_model")  {
+     
+  $config=["table"=>"universal_model","uid_name"=>"id"]; 
+  
+ } 
+
+    try {
+     $row=$db::getRow("SELECT * FROM universal_model WHERE $field_name=?",[$model]);
+     $config=$row;
+    if(!empty($row["json_params"]))  {
+        $json_params=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+          if(!empty($json_params)) {
+             foreach($json_params as $field => $array) {
+            $config[$field]=$array;  
+            }
+          }
+    }
+    
+    if(!empty($row["json_access"]))  {
+        $json_params=json_decode($row["json_access"], true, 512, JSON_UNESCAPED_UNICODE);
+        if(!empty($json_params)) {
+        foreach($json_params as $field => $array) {
+         $config["access"][$field]=$array;  
+        }
+    }
+    }    
+    
+    
+     
+    } catch (Exception $e) {    echo 'Ошибка '.$model.' '.$table.' : ',  $e->getMessage(), "\n";}
+ return $config;   
+}
+
+
+function get_access_from_universal_model($model) {
+global $db,$access_array;
+if(empty($access_array)) {
+$data=$db::getRows("SELECT status_id,group_id,access_json FROM universal_model_status_relationsip_group WHERE model=?",[$model]);
+$access_array=[];
+    foreach ($data as $row) {
+         if(!empty($row["access_json"])) $json=json_decode($row["access_json"], true, 512, JSON_UNESCAPED_UNICODE); else $json=true;
+         $access_array[$row["status_id"]][$row["group_id"]]=$json;
+    }  
+}    
+  return $access_array;
+}
+
+
+function get_access_action_from_universal_model($model) {
+global $db;
+$access_model_array=$db::getValue("SELECT json_access FROM universal_model WHERE model=?",[$model]);
+if(!empty($access_model_array)) $access_model_array=json_decode($access_model_array, true, 512, JSON_UNESCAPED_UNICODE); else $access_model_array=true;
+ return $access_model_array;
+}
+
+
+function get_universal_model_field($model,$field) {
+global $db;
+$data=$db::getRows("SELECT parent_field,field FROM universal_model_fields WHERE model=?",[$model]);
+$related_fields=[];
+    foreach ($data as $fieldRow) {     
+         if(!empty($fieldRow["parent_field"]))  $related_fields[$fieldRow["parent_field"]][]=$fieldRow["field"];
+    } 
+    $data=$db::getRows("SELECT * FROM universal_model_fields WHERE model=? AND field=? ORDER BY posit DESC",[$model,$field]);
+
+    $universal_model_fields=[];
+    foreach($data as $row) {
+    $universal_model_fields=$row; 
+    if(!empty($related_fields[$row["field"]])) $universal_model_fields["dependent_fields"] =$related_fields[$row["field"]];      
+    $json_params=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+     foreach($json_params as $field => $value) $universal_model_fields[$field]=$value; 
+     unset($universal_model_fields["json_params"]);
+    }
+return $universal_model_fields;
+}
+
+function get_universal_model_fields($model) {
+global $db;
+$data=$db::getRows("SELECT parent_field,field FROM universal_model_fields WHERE model=?",[$model]);
+$related_fields=[];
+    foreach ($data as $fieldRow) {     
+         if(!empty($fieldRow["parent_field"]))  $related_fields[$fieldRow["parent_field"]][]=$fieldRow["field"];
+    } 
+    $data=$db::getRows("SELECT * FROM universal_model_fields WHERE model=?  ORDER BY posit DESC",[$model]);
+
+    $universal_model_fields=[];
+    foreach($data as $row) {
+    $universal_model_fields[$row["field"]]=$row; 
+    if(!empty($related_fields[$row["field"]])) $universal_model_fields[$row["field"]]["dependent_fields"] =$related_fields[$row["field"]];      
+    $json_params=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+    if(!empty($json_params)) {
+     foreach($json_params as $field => $value) {
+       
+        if(!empty($value)) {   
+        //echo"<br> $field - $value"; 
+        $universal_model_fields[$row["field"]][$field]=$value; }
+         
+     }
+     unset($universal_model_fields[$row["field"]]["json_params"]);
+    }
+    }
+return $universal_model_fields;
+}
+
+
+function get_query_field_model_alias($field_model_alias) {
+$query=[];    
+if($field_model_alias=="shipment_waybill_products") include"inc/universal_model_types/universal_lists/products_with_prices.php";
+else {
+$f="inc/universal_model_types/universal_lists/$field_model_alias.php";
+if(is_file($f)) include($f);
+}
+    
+ return $query;   
+}
+
+
+function get_name_from_string($select="id,name", $table_name,$id){
+global $db;
+$select_arr=explode(",",$select);
+$idname=$select_arr[0];
+$name=$select_arr[1];
+$nameP="";
+    try {
+      $nameP = $db::getValue("SELECT $name FROM $table_name WHERE $idname=? LIMIT 1",[$id]);
+    } catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}
+ return $nameP;            
+}
+
+
+function get_array_from_string($select="id,name", $table_name, $where="") {
+global $db;
+$where=str_replace(["{","}"],["'","'"],$where);
+$select_arr=explode(",",$select);
+try {
+  $data = $db::getRows("SELECT $select FROM $table_name $where");
+  
+$sel_group=[];
+$i=1;
+foreach ($data as $row) {
+  //  $sel_group[$row[$select_arr[0]]] = $row[$select_arr[1]];
+    $sel_group[$row["id"]] = $row["name"];
+    if($i>500) { 
+        //echo"Отображаются только 500 записей.. ";
+    break; }
+    $i++;
+}
+
+
+} catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}
+
+ return $sel_group;    
+}
+
+
+//сохраняем логи для универальной модели
+function universal_model_logs($entity_id,$json_param,$type="update"){
+    global $db,$model,$model_config;     
+    if(empty($model_config)) $model_config=get_config_universal_model($model);
+    $log_fields=[];
+    $log_fields["type"]=$type;
+    $log_fields["created_at"]=date('c');
+    $log_fields["created_by"]=$_SESSION["admin_id"];
+    $log_fields["entity_id"]=$entity_id;
+    $log_fields["json_param"]=json_encode($json_param,JSON_UNESCAPED_UNICODE);
+    $log_fields["model_id"]=$model_config["id"];
+    if(!empty($log_fields["model_id"]) and !empty($type) and !empty($entity_id) and !empty($json_param))  {
+       try{
+          $db::insert("universal_model_logs",$log_fields); 
+           // $idNew = $db -> lastInsertId();
+           //  mess("Добавлен лог ID=$idNew");
+         } catch(Exception $e) {    echo 'Ошибка при внесении логов: ',  $e->getMessage(), "\n";}
+    }
+}
+
+
+function select_universal_catalog($alias,$value) {
+    global $db;     
+       $html .="<select name=status_id>";
+    foreach($data["val_arr"] as $vid =>$namev) { 
+     $html .="<option value=\"$vid\""; 
+     if($vid==$val) $html .=" selected";                                                          
+     $html .=">$namev</option>";
+   }
+       $html .="</select>";
+}
+
+function form_field_print($data,$dataValues,$model) {
+global $db,$form_config,$access_array_this_status,$status_id_real,$model_config;     
+$model_config=get_config_universal_model($model);
+if(isset($model_config["status_name"])) $name_field_status=$model_config["status_name"]; else $name_field_status="";
+if(isset($model_config["uid_name"])) $uid_name=$model_config["uid_name"]; else $uid_name="id";
+//print_r($data["json_params"]);   
+   if(!empty($data["json_params"])) {
+   $json_params=json_decode($data["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+   if(is_array($json_params)) foreach($json_params as $field => $value) $data[$field]=$value; 
+     if(!empty($json_params["field_groups"])) $data["field_groups"]=json_decode($json_params["field_groups"], true, 512, JSON_UNESCAPED_UNICODE);
+   }
+         if(!empty(@$access_array_this_status[$data[$uid_name]])) $access=$access_array_this_status[$data[$uid_name]];
+         else $access="";
+         
+      //  echo"<br> $data[$uid_name] ";         echo print_r($access_array_this_status[$data[$uid_name]]); 
+         
+      //   print_r($access_array_this_status); 
+       //  exit();
+         
+        if($form_config) $access="edit"; 
+       // if(empty($name_field_status)) $access="edit";  
+         
+   if($access!="close") {      
+    if(!in_array($data["tip"],["table"])){
+
+      if(empty($data["autoincriment"])  and !in_array($data["type"],["hidden","table_field"])) {   
+          echo '<tr';
+          if(!empty($model_config["status_name"]) and $model_config["status_name"]==$data["field"]) {
+            echo' style="background:lime;"';  
+            }
+             $class_block="blgroup"; 
+             if(!empty($data["field_groups"])) {
+                  foreach($data["field_groups"] as $field_group_id)  $class_block .=" blgroup_$field_group_id";  
+              }
+             if(!empty($data["class_block"]))  $class_block .=" ".$data["class_block"];  
+              
+             if(!empty($class_block))  echo' class="'.$class_block.'"';
+              echo'><td class="w-20 text-right">';
+     
+          
+          
+           if(!empty($data["required"]))  { echo'<b title="field_id='.@$data[$uid_name].'"> * '.@$data["name"].'</b>';   }
+         else  echo  $data["name"];
+         //  echo foreach($data["dependent_fields"] as $k => $f_name)
+         
+       if(@$data["json_params"] and $form_config)  echo'<span class="tag tag-sm tag-warning ms-1">json</span>';  
+         echo'</td><td id="tdform'.$data["field"].'" class="text-left 
+         '.@$data["class_block"].'"';
+          if(!empty($data["style_block"])) echo' style="'.$data["style_block"].'"';
+          echo'>';
+           if($data["type"]!="hidden")    {  } elseif($data["type"]=="hidden" and !empty($data["autoincriment"])) {
+          }
+       }
+     } else      echo'<tr><td colspan=2>';
+      
+  
+    // заменяем значение у мультисписка на значения из таблицы универсальных связей. 
+    if(in_array($data["type"],["multiple"])) { 
+     if(!empty($data["tip_relation"])) { 
+       if($data["tip_relation"]=="universal") { //при типе харанения данных в универсальной таблице связей
+         $dataValues[$data["field"]]=@$dataValues[$data["field"]."__relations"]; // заменяем на подготовленный массив
+        }
+       if($data["tip_relation"]=="json") { //при типе харанения данных в таблице для модели в формате JSON
+       
+       //  $dataValues[$data["field"]]=$dataValues[$data["field"]];        
+
+        }        
+       if($data["tip_relation"]=="custom") { // связи хранятся в отдельной таблице 
+         $dataValues[$data["field"]]=@$dataValues[$data["field"]."__relations_custom"]; 
+        }         
+        
+      } else $dataValues[$data["field"]]=explode(",",@$dataValues[$data["field"]]); // если не указано где хранить связь по умолчанию храним как спроку с разделителем,
+    }
+    // end multiple
+       if($access=="edit")      echo get_form_field_type($data,$dataValues,$model);
+      else {
+          if(in_array($data["type"],["table","table_field","table_function_row"])) echo get_form_field_type($data,$dataValues,$model);
+          elseif(!in_array($data["type"],["hidden"]))           echo get_form_field_value($data,$dataValues,$model);
+      }
+                
+                
+      if(empty($data["autoincriment"]) or $data["type"]!="hidden") {
+         if(!empty($data["description"]))   echo '<div class="descr_info">'.html_entity_decode($data["description"]).'</div>';
+       
+      if(!empty($data["html"]))   echo html_entity_decode($data["html"]);
+            echo'</td></tr>'; 
+      }
+  
+   }
+
+
+     if(!empty($data["autoincriment"])  or in_array($data["type"],["hidden"])) {  
+      echo get_form_field_type($data,$dataValues,$model);   
+         
+     }
+  
+                 
+}
+
+function get_dynamic_universal_catalog_items($alias) {
+global $db;
+$query_sql="";
+   switch($alias){
+   case "stores": $query_sql="SELECT id,name FROM products_1c WHERE tip='city_store' AND view=1 order by name ASC";    break;
+   case "products": $query_sql="SELECT id,name FROM products_1c WHERE tip='products' AND view=1 order by name ASC";    break;
+   case "products_group": $query_sql="SELECT id,name FROM products_1c WHERE tip='products_group'  order by name ASC";    break;
+   case "cashes1c": $query_sql="SELECT id,name FROM products_1c WHERE tip='cashes'  order by name ASC";    break;
+   case "counteragents": $query_sql="SELECT id,name FROM products_1c WHERE tip='counteragents'  order by name ASC";    break;
+   case "terminals": $query_sql="SELECT id,name FROM products_1c WHERE tip='terminals'  order by name ASC";    break;
+   case "payment_types": $query_sql="SELECT id,name FROM products_1c WHERE tip='payment_types'  order by name ASC";    break;
+   case "sites": $select_arr=["1"=>"bazacverov.ru"];  break;
+   case "admins": $query_sql="SELECT id,name FROM admin WHERE group_id>0  order by name ASC";    break;   
+   
+   default: break;
+   }  
+  if(!empty($query_sql)) {
+    try{   $select_arr=$db::mapping($query_sql);  } catch (Exception $e) {    echo 'Выброшено исключение: get_dynamic_universal_catalog_item ',  $e->getMessage(), "\n";}
+ }         
+  
+ return $select_arr;   
+}
+
+
+
+
+// достаем из поля SELEC массив со значениями списка - он может быть сформирован SQL запросом а также JSON
+function get_select_array_from_universal_model($data,$dataValues) {
+global $db,$form_config;     
+if(empty($data["select_val"])) $data["select_val"]="";
+if(empty($data["value_arr"])) $data["value_arr"]="";
+$data["val_arr"]=explode(";",$data["select_val"]); 
+
+if(!empty($data["select_array_json"])) $data["val_arr"]=$data["select_array_json"]; //json_decode(
+
+if(is_array($data["value_arr"]) and !empty($data["value_arr"])) $data["val_arr"]=$data["value_arr"];
+//если поле с запросом к БД 
+if(!empty($data["sql_func"])) {
+$sql_z=explode(";",$data["sql_func"]); 
+$count_pole=explode(",",$sql_z[0]);    
+
+@$where = $sql_z[2];
+
+if(!empty($data["parent_field"])) $where=str_replace('{{'.$data["parent_field"].'}}',@$dataValues[$data["parent_field"]],$where);
+
+   foreach ($data as $fieldN => $roww) {
+    if(!empty($data[$fieldN]))  @$where=str_replace('{{'.@$data[$fieldN].'}}',@$dataValues[$data[$fieldN]],$where);    
+       
+   }
+
+if(count($count_pole)==2)      $select_arr=get_array_from_string($sql_z[0],$sql_z[1],$where); 
+    
+} 
+
+
+if(!empty($data["query_sql"])) {
+$query_sql=$data["query_sql"]; 
+if(!empty($data["parent_field"])) $query_sql=str_replace('{{'.$data["parent_field"].'}}',@$dataValues[$data["parent_field"]],$query_sql);
+
+foreach ($data as $fieldN => $roww) {
+    if(!empty($data[$fieldN]))  @$query_sql=str_replace('{{'.@$data[$fieldN].'}}',@$dataValues[$data[$fieldN]],$query_sql);    
+   }
+        $select_arr=[];
+        try{ 
+         $datas=$db::getRows($query_sql); 
+         foreach($datas as $rows) $select_arr[$rows["id"]]=$rows["name"];
+         } catch (Exception $e) {    echo 'Выброшено исключение: '.$query_sql.' ',  $e->getMessage(), "\n";}   
+}
+
+//если выбран источник данных универальный каталог - имеем алиас каталога
+if(!empty($data["universal_catalog_alias"])) {
+    $select_arr=[];  
+    $catalog_array=$db::getRow("SELECT catalog_alias,alias FROM universal_catalog WHERE id=?",[(int)$data["universal_catalog_alias"]]);
+      switch($catalog_array["catalog_alias"]) {
+        case "list":
+                try{     
+                     $select_arr=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias=? order by posit DESC, name ASC",[$catalog_array["alias"]]);
+                   } catch (Exception $e) {    echo 'Выброшено исключение: universal_catalog '.$catalog_array["alias"].' ',  $e->getMessage(), "\n";}  
+             break;
+        case "dynamic": $select_arr=get_dynamic_universal_catalog_items($catalog_array["alias"]);  break;  
+        default: break;
+         
+     }
+     
+
+}
+
+
+
+if(!empty($select_arr)) { 
+if(!isset($select_arr[0])) $select_arr[0] ="-выбрать-";
+$data["val_arr"]=$select_arr;
+}
+return $data["val_arr"];
+}
+
+
+// получаем только значение поля для полей которые открыты только для просмотра
+function get_form_field_value($data,$dataValues,$model="") {
+global $db,$form_config; 
+$form_field_value="";
+if(!in_array($data["type"],["hidden"])) $form_field_value=@$dataValues[$data["field"]];
+if(in_array($data["type"],["hidden"])) $form_field_value=@$dataValues[$data["field"]];
+
+
+
+
+if(in_array($data["type"],["select","multiple","search"])) {
+   $select_arr=get_select_array_from_universal_model($data,$dataValues); 
+ // if(empty($dataValues[$data["field"]]))  $dataValues[$data["field"]]=$dataValues[$data["field"]."__relations"];
+
+   if(in_array($data["type"],["select"])) $form_field_value=@$select_arr[$dataValues[$data["field"]]];
+   else {
+      
+     $form_field_value=""; 
+      if(!empty($dataValues[$data["field"]."__relations"])) {
+          $relations=$dataValues[$data["field"]."__relations"];
+          foreach($relations as $k => $v) {
+             // echo "$k => $v ".$select_arr[$v]."";
+            if(!empty($select_arr[$v])) 
+            $form_field_value .="<span class=\"btn btn-warning btn-sm me-1\">".$select_arr[$v]."</span>";   
+          }
+      } else {
+          // $multy=explode(",",$dataValues[$data["field"]]); 
+      
+       if(!empty($dataValues[$data["field"]]) and is_array($dataValues[$data["field"]])){   
+            $multy=$dataValues[$data["field"]]; 
+           foreach($multy as $k => $v) {
+             if(in_array($v,$select_arr)) 
+             $form_field_value .="<span class=\"btn btn-warning  btn-sm me-1\">".$select_arr[$k]."</span>";   
+          }
+      }
+      } 
+      
+    }
+} 
+
+if(in_array($data["type"],["checkbox"])) {
+    if($dataValues[$data["field"]]==true or $dataValues[$data["field"]]==1)  $form_field_value ="да";  
+    else  $form_field_value ="нет";   
+}
+
+if(in_array($data["type"],["password"])) {
+    $form_field_value ="*******";   
+}
+
+
+
+if(in_array($data["type"],["search"])) {
+$query=get_query_field_model_alias($data["field_model_alias"]);
+if(!empty($query["get_name"]))  $form_field_value=$db::getValue("".$query["get_name"]." LIMIT 1",[$dataValues[$data["field"]]]);
+}
+
+
+return $form_field_value;
+
+
+}
+
+function get_form_field_type($data,$dataValues,$model="") {
+global $db,$form_config,$access_array_this_status,$status_id_real; 
+$attributes=' id=form'.$data["field"].' class="';
+
+if(!empty($model)) {
+    $model_config=get_config_universal_model($model);
+   if(!empty($model_config["status_name"]) and !empty($data["field"]) and empty($data["change_type"]) and $model_config["status_name"]==$data["field"]) $data["type"]="status";  
+}
+
+if(!empty($data["change_field_name"]))  $data["input_name"]=$data["change_field_name"];
+else $data["input_name"]=$data["field"];
+
+
+
+if(in_array($data["type"],["text","textarea","numeric","date","number","search","status","created_by","created_at"])) $attributes .='form-control';
+if(in_array($data["type"],["select","multiple"])) $attributes .='form-select';
+if(in_array($data["type"],["select2"])) $attributes .=' select2';
+
+
+if(!empty($data["class"])) $attributes .=' '.$data["class"].''; 
+$attributes .='"';
+if(!empty($data["style"])) $attributes .=' style="'.$data["style"].'"';
+if(!empty($data["placeholder"])) $attributes .=' placeholder="'.$data["placeholder"].'"';
+if(!empty($data["attr"])) $attributes .=' '.html_entity_decode($data["attr"]).'';
+if(!empty($data["required"])) $attributes .=' required="required"';
+if(!empty($data["json_params"]) and $form_config==true) $data["input_name"]='json_params['.$data["field"].']';  
+
+
+
+if(!empty($data["sql_func_unicum"])) $attributes .=' onchange="unicum_value(\''.$data["field"].'\')"';
+
+
+$f="inc/universal_model_types/".$data["type"].".php";
+ if(is_file($f) ){  include $f;
+   return $html;
+ } else {
+   if($data["type"]!="table_field") return $html="формат данных еще не доработан или отсуствует";
+   else return;
+     
+ }
+}
+
+
+  
+   //обрабатываем POST данные согласно типу данных поля  
+  function check_field_tip($value,$tip) {
+    if($tip=="string")  $value=htmlentities($value);
+    if($tip=="int")  $value=intval($value);  
+    if($tip=="array")  $value=intval($value);     
+    if($tip=="guid")  $value=htmlentities($value);      
+    return $value;  
+  }
+  
+  
+ //обрабатываем POST данные согласно типу поля  
+  function check_field_type($row) {
+    $value="";  
+    if(isset($_POST[$row["field"]]))  {
+    switch($row["type"]) {
+     case    "multiple": $value=implode(",",$_POST[$row["field"]]); 
+     $value=htmlentities($value);
+      break;
+     case    "checkbox": if($_POST[$row["field"]]=="on") $value=1; else $value=0;     break;
+     default: $value=check_field_tip($_POST[$row["field"]],$row["tip"]);
+      }
+    }
+    return $value;  
+  }
+  
+
+function update_universal_form($model="",$forma=[]){
+global $db,$model,$model_config;
+if(!empty($_POST)){
+  if(empty($model)) $model=htmlentities($_POST["model"]);  
+   if(empty($model)) exit("Нет имени модели");
+   $model_config=get_config_universal_model($model);
+   
+
+
+   $update=[];
+  if(empty($forma)) 
+  {
+        try{ 
+        $forma=$db::getRows("SELECT id,name,field,tip,type,json_params,universal_catalog_alias FROM universal_model_fields WHERE model=? ORDER BY posit DESC",[$model]);
+        }catch (Exception $e) { echo 'Ошибка universal_model_fields: ',  $e->getMessage(), "\n"; }  
+
+  }
+   
+  
+   try{  
+   $fields_table_data=$db::getRows("select COLUMN_NAME as field from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =?",[$model_config["table"]]);
+   foreach($fields_table_data as $rowf)   $fields_table_sql[]=$rowf["field"];   
+   }   catch (Exception $e) {             echo 'Выброшено исключение ошибка при выборке полей таблицы: ',  $e->getMessage(), "\n"; }  
+
+   
+   
+   
+    if($model=="universal_model"){   
+      $json_params=[];  
+      foreach($_POST["json_params"] as $field => $value) {
+        
+          if($field=="select_array_json")  $json_params[$field]=json_decode($value, false, 512, JSON_UNESCAPED_UNICODE);        
+          else   $json_params[$field]=htmlentities($value);        
+                 
+      }     
+      $update["json_params"]=json_encode($json_params, JSON_UNESCAPED_UNICODE); 
+    }
+
+  
+  
+   
+    $no_fields=[];
+    $tip_relation="";
+    $sql_fields_relations=[];
+    $sql_fields_relations_from_logs=[];
+    $sql_fields_relations_dell=[];   
+     foreach($forma as $row) {
+         
+         //просматриваем поля для которых надо сохранять связи -
+          if(!empty($row["json_params"])) $row["json_params"]=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);  
+          if(!empty($row["json_params"]["tip_relation"]) and $row["json_params"]["tip_relation"]=="universal") {
+              // $tip_relation .="<h3> ".$row["id"]." ".$row["name"]." ".$row["json_params"]["tip_relation"] ."</h3>";
+              if(isset($_POST[$row["field"]])) {
+               $relation = array_map('htmlentities', $_POST[$row["field"]]);
+              foreach($relation as $k)  {
+                  
+                $alias=$db::getValue("SELECT alias FROM universal_catalog WHERE id=?",[(int)$row["universal_catalog_alias"]]);
+                 // $tip_relation .="<br>".$model_config["id"]." ".$update[$model_config["uid_name"]]."   ".$model_config["model"]."  => алиас универсального списка  ".$alias." (id= ".$row["id"].")    => ".$row["field"]." =>  $k ";
+                   // $tip_relation .="<br>".$model_config["model"]." => ".$update[$model_config["uid_name"]]."|".$alias." =>  $k "; 
+                   //  $tip_relation .="<br>".$model_config["id"]." => ".$update[$model_config["uid_name"]]."|".(int)$row["universal_catalog_alias"]." =>  $k ";  
+              
+                   if(!empty($k)) {
+                   $sql_fields_relations[]="INSERT IGNORE INTO universal_model_fields_relations (model_id, model_entity_id,universal_catalog_id,universal_value)
+                     VALUES ('".$model_config["id"]."', '".$update[$model_config["uid_name"]]."','".(int)$row["universal_catalog_alias"]."','".htmlentities($k)."')";
+                     
+                
+                     if($row["tip"]=="int") {
+                         $k=(int)$k;
+                     }
+                     else $k=htmlentities($k);
+                     
+                     
+                     $sql_fields_relations_from_logs[$row["field"]][]=$k;
+                     }
+                   $sql_fields_relations_dell[]=(int)$row["universal_catalog_alias"];  
+                 }
+            }    
+                
+                
+           }
+         
+         
+         //чекбоксы специфическая вешь - невозможно заменить свойство если чекбокс не нажат. А в случае когда поле будет скрыто или было включено а его надо выклюичть не возможно определить что оно есть в POST
+          if($row["type"]=="checkbox") 
+          { 
+            // echo"У нас в форме активный чекбокс + ".$row["field"]."  ";  
+             if(!isset($_POST[$row["field"]])) $_POST[$row["field"]]=false;
+            }          
+           
+         
+         
+         
+         if(isset($_POST[$row["field"]]) ) 
+          { 
+              
+       
+          if(in_array($row["field"] , $fields_table_sql)) {
+                 $value=check_field_type($row);
+                 $update[$row["field"]]=$value;
+                 
+             }
+             else $no_fields[]=$row["field"];
+             }
+         }
+           // exit("!! model=$model ".$model_config["table"]." id=".$model_config["uid_name"]."  !! ".print_r($update)); 
+          
+            try{ 
+                if(!empty($update[$model_config["uid_name"]]))  { 
+                    
+                  $err="";
+                  if(!empty($no_fields))   $err="Полей ".implode(",",$no_fields)." нет в таблице БД"; 
+                   $db::update($model_config["table"]," ".$model_config["uid_name"]."=:".$model_config["uid_name"]." LIMIT 1",$update);
+                   mess("Сохранили $tip_relation $err ".print_r($update));
+                  
+                  if(!empty($sql_fields_relations_dell)) {
+                  $sql_in=implode("','",$sql_fields_relations_dell);
+                  $db::sql("DELETE FROM universal_model_fields_relations WHERE model_id=? AND model_entity_id=? AND universal_catalog_id in ('$sql_in')",[$model_config["id"], $update[$model_config["uid_name"]] ]); 
+                  
+                    foreach($sql_fields_relations as $sql_q) {
+                      $db::sql($sql_q);   
+                   }
+                  }  
+                  $update_log=[];
+                  $update_log=$update;
+                    foreach($forma as $row) {
+                     if($row["type"]=="password") $update_log[$row["field"]]="***";    
+                    }    
+                   if(!empty($sql_fields_relations_from_logs)) $update_log["universal_relations"]=$sql_fields_relations_from_logs;
+                  
+                  
+                  // внесение логов
+                  universal_model_logs($update[$model_config["uid_name"]],$update_log,"update");
+                  
+                  
+                  // если был изменен статус
+                  if(!empty($model_config["status_name"])) {
+                  $status_name=$model_config["status_name"];
+                  $status_name_old=$status_name."__old"; 
+                       if(!empty($_POST[$status_name] and !empty($_POST[$status_name_old])  and $_POST[$status_name_old]!=$_POST[$status_name])) {
+                         // внесение логов
+                           $update_log=[$status_name=>(int)$_POST[$status_name], $status_name_old=>(int)$_POST[$status_name_old]];
+                          universal_model_logs($update[$model_config["uid_name"]],$update_log,"status");
+                      
+                       }
+                  
+                  }
+                  
+                  
+                 }
+                 else { 
+                        foreach($forma as $row) {
+                           if($row["type"]=="created_at") {
+                               $update[$row["field"]]=date('c');  
+                              // unset($update[$row["field"]]); 
+                           }
+                           if($row["type"]=="created_by")  $update[$row["field"]]=(int)$_SESSION["admin_id"];   
+                        }     
+                     
+                   //  exit(print_r($update));
+                     
+                       $db::insert($model_config["table"],$update); 
+                       $idNew = $db -> lastInsertId();
+                       
+                       mess("Добавлено ID=$idNew");
+                       
+                 }
+     
+               } catch (Exception $e) { 
+                   echo 'Выброшено исключение: ',  $e->getMessage(), "\n";
+                   
+               }   
+   }
+}
+
+
+
+
+function save_universal_form($model,$forma=[]) {
+global $db,$form_config,$entity_key_id_name, $entity_key_id;
+ if(!empty($_POST["save"])) {
+    $model=htmlentities($_POST["save"]);
+   if(empty($forma)) $forma=$db::getRows("SELECT name,field,tip,type FROM universal_model_fields WHERE model=? ORDER BY posit DESC",[$model]);
+
+    $table_name=get_table_name_from_model($model);
+   if($form_config) $table_name="universal_model_fields";
+
+
+   $update=[];
+      
+
+      
+      
+      
+     if($form_config){   
+      $json_params=[];  
+      foreach($_POST["json_params"] as $field => $value) {
+          
+     
+        
+          if($field=="select_array_json" and !empty($value)) {   $json_params[$field]=json_decode($value, true, 512, JSON_UNESCAPED_UNICODE);    } 
+          elseif($field=="field_groups") {
+              $value = array_map("intval", $value);
+              if(!empty($value)) {
+              $value=json_encode($value, JSON_UNESCAPED_UNICODE); 
+               $json_params[$field]=$value;  
+              }
+              
+          }
+          else {  
+               // echo"<br> $field = $value". $forma[$field]["tip_relation"];
+              
+               if($forma[$field]["type"]=="checkbox") { if(isset($_POST[$row["field"]]) and $_POST[$row["field"]]=="on") $value=true; else $value=false;  }
+               elseif($forma[$field]["type"]=="multiple") {
+                   if(!empty($forma[$field]["tip_relation"])) {
+                    if($forma[$field]["tip_relation"]=="json") { //при типе харанения данных в таблице для модели в формате JSON
+                       if(!empty($value))  $json_params[$field]=json_encode($value, JSON_UNESCAPED_UNICODE); 
+                     }
+                    } elseif(!empty($value))  $value=implode(",",$value);   
+               }
+                if(!empty($value))  $json_params[$field]=htmlentities($value);  
+          }
+        }     
+      $update["json_params"]=json_encode($json_params, JSON_UNESCAPED_UNICODE); 
+      
+      
+                        //   if(is_array($value)) echo "<br> field=".$field." =>!!! ".$value."! -< json = {$json_params[$field]}!";
+                  //   $j=json_decode($json_params[$field], true, 512, JSON_UNESCAPED_UNICODE);      
+                     
+    // print_r($update["json_params"]);
+    }
+        
+       foreach($forma as $row) {
+
+         if(isset($_POST[$row["field"]]) ) 
+          { 
+              
+             // echo"+" .$row["field"] ;
+             $value=htmlentities($_POST[$row["field"]]);
+             if($row["type"]=="multiple") {
+                   $value=implode(",",$_POST[$row["field"]]);   
+              if($row["type"]=="checkbox") { if($_POST[$row["field"]]=="on") $value=true; else $value=false;  }
+             }
+              $update[$row["field"]]=$value;
+         }
+         
+       }
+           // exit("!! model=$model $table_name !! ".print_r($update)); 
+           
+            
+        try{ 
+            if(!empty($update["id"]))  { $db::update($table_name,"id=:id LIMIT 1",$update);
+             //$url="/".$_SERVER['QUERY_STRING']; 
+
+           //  header("Location: /universal_model/fields/?model_alias=".htmlentities($_REQUEST["model_alias"])."&field_id=".$update["id"]."&info_mess=Сохранили");
+             
+            mess("Сохранили ".print_r($update).""); 
+                
+            }
+            else { 
+               foreach($forma as $row) {
+                 if($row["type"]=="created_at") {
+                  $update[$row["field"]]="NOW()";   
+                 }
+                 if($row["type"]=="created_by") {
+                  $update[$row["field"]]=(int)$_SESSION["admin_id"];   
+                 }                 
+              }
+                
+              //  exit(print_r($update));
+                $db::insert($table_name,$update); 
+                $idNew = $db -> lastInsertId();
+              //  $url="/".$_SERVER['QUERY_STRING']; 
+                header("Location: /universal_model/fields/?model_alias=".htmlentities($_REQUEST["model_alias"])."&field_id=".$idNew."");
+                
+                
+            }
+     
+         } catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}   
+
+    }   
+}
+
+
+
+
+function universal_model_form_delete($model=""){
+global $db,$form_config;
+
+ if(@$_REQUEST["delete"]=="confirmDellete") {
+if(empty($model)) $model=htmlentities($_REQUEST["model"]);   
+if(empty($model)) exit("Нет имени модели");
+
+$model_config=get_config_universal_model($model);
+$access_action=get_access_action_from_universal_model($model);
+
+
+
+//получаем ID СТАТУСа объекта сущности
+if(!empty($model_config["status_name"])) {
+$status_id=get_filed_value_from_universal_model($model,$model_config["status_name"],@(int)$_REQUEST[$model_config["uid_name"]]);
+$status_id_real=$db::getValue("SELECT id FROM universal_catalog_item WHERE catalog_alias=? AND guid=?",[$model,$status_id]);
+}
+  
+  
+if($status_id_real!="" and !empty($access_action["model"][$status_id_real][$_SESSION["group_id"]]))
+$access_array_this_status=$access_action["model"][$status_id_real][$_SESSION["group_id"]];
+
+if(!empty($access_array_this_status["delete"])) {
+
+    if(@$_REQUEST["delete"]=="confirmDellete"  and !$form_config and !empty($_REQUEST[$model_config["uid_name"]])) {
+       try{
+           
+         //  $db::sql("DELETE FROM ".$model_config["table"]." WHERE ".$model_config["uid_name"]."=?",[(int)$_REQUEST[$model_config["uid_name"]]]);
+           mess("Удалили");
+           exit();
+        } catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}   
+    }
+} else {
+    
+    error_mess("У вас нет прав дял удаления записи");
+}
+}
+}
+
+
+
+
+
+// выводим форму FORM для заполнения данных для модели
+function universal_model_form($model,$table_name=""){
+global $db,$_CONFIG,$act,$model_config,$form_config,$show_design,$access_array,$access_array_this_status,$status_id_real;
+//$show_design=true;
+if($model=="shipment_waybill_products") $show_design=false;
+
+$model_config=get_config_universal_model($model);
+
+//"parent_model":"40",
+// проверяем есть ли у этой модели родитель - если есть то у нас будет другая логика отношения к статусам модели - будем наследовать статус от родителя
+if(!empty($model_config["parent_model"])) {
+    
+$model_config_parent=get_config_universal_model($model_config["parent_model"]);
+$statuses_id=(int)$model_config_parent["statuses"];
+$model_parent=$model_config_parent["model"];
+$name_field_status_parent=$model_config_parent["status_name"];
+$uid_name_parent=$model_config_parent["uid_name"];
+
+//echo"parent_model=$model_parent каталог со статусами $statuses_id ";
+
+
+$alias=$db::getValue("SELECT alias FROM universal_catalog WHERE catalog_alias='status' AND id=?",[$statuses_id]);
+$status_parent=$db::mapping("SELECT id, name FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$alias]);
+
+//print_r($status_parent);
+
+$access_array_parent=get_access_from_universal_model($model_parent);
+
+//echo"<br>";
+//echo print_r($access_array_parent);
+
+//$access_array=get_access_from_universal_model($model);
+//echo"<br>";
+//echo print_r($access_array);
+
+}
+
+
+
+if(empty($model_config)) exit("У модели $model не настроена конфигурация");
+if(!empty($model_config["status_name"])) $name_field_status=$model_config["status_name"]; else $name_field_status="";
+if(!empty($model_config["uid_name"])) $uid_name=$model_config["uid_name"]; else $uid_name="id";
+if(!empty($model_config["table"])) $table_name=$model_config["table"];else $table_name=$model;
+
+$access_action=get_access_action_from_universal_model($model);
+//получаем массив с доступами к полям в зависисмости отстатуса группы пользователя
+
+
+if(!empty($access_array_parent)) $access_array=$access_array_parent; // наследуемся от родителя
+else $access_array=get_access_from_universal_model($model);
+
+  universal_model_form_delete($model); 
+
+ if($show_design) include_once("templates/top.php");
+if(!empty($_REQUEST["$uid_name"]))     $entity_key_id=htmlentities($_REQUEST["$uid_name"]);
+
+
+//получаем имя СТАТУСного поля
+//if(empty($status_id)) $name_field_status=get_name_filed_status_from_universal_model($model);
+
+
+//получаем ID СТАТУСа объекта сущности
+
+if(empty($name_field_status_parent)) { // усли нет родительской сущности то берем статус от этой сущности
+if(!empty($name_field_status)) {
+    $status_id=get_filed_value_from_universal_model($model,$name_field_status,@(int)$_REQUEST["$uid_name"]);
+    $status_id_real=$db::getValue("SELECT id FROM universal_catalog_item WHERE catalog_alias=? AND guid=?",[$model,$status_id]);
+   }
+} else { 
+    
+    // если родительска] сущность есть то достаем стутс родительской модели
+    if(!empty($model_config["name_key_relation_from_parent"])) {
+    $uid_name_parent_fom_children=$model_config["name_key_relation_from_parent"]; //достаем из настроек текущей модели - имя поля-ключа по которому можно выйтти на ID родительской сущности
+    $get_parent_entity_id=$db::getValue("SELECT $uid_name_parent_fom_children FROM ".$table_name." WHERE $uid_name=? ",[(int)$_REQUEST[$uid_name]]);
+    $status_id_parent=$db::getValue("SELECT $name_field_status_parent FROM ".$model_config_parent["table"]." WHERE $uid_name_parent=? ",[$get_parent_entity_id]);
+    $status_id_parent_real=$db::getValue("SELECT id FROM universal_catalog_item WHERE catalog_alias=? AND guid=?",[$model_parent,$status_id_parent]);
+  //  echo" = ID родителя $get_parent_entity_id   => ststus_parent_id= $status_id_parent_real";
+    $status_id_real=$status_id_parent_real;
+    $status_id=$status_id_parent; 
+    } else $status_id_real=$status_id=1;
+    
+    
+}  
+
+
+if(empty($name_field_status)) $status_id_real=$status_id=1;
+   
+   
+//print_r($access_array);
+   
+   
+if($status_id_real!="" and !empty($access_array[$status_id_real][$_SESSION["group_id"]]) and empty($access_array_this_status)) $access_array_this_status=$access_array[$status_id_real][$_SESSION["group_id"]];
+
+//echo "name_field_status=$name_field_status status_id=$status_id status_id_real=$status_id_real ".print_r($access_array_this_status);
+
+
+// массив с доступами к действиям по статусу - группе Действия - add- добавить новую запись, delete удалить, edit сохранить
+$access_action_array=[];
+
+if(!empty($access_action["model"][$status_id_real][$_SESSION["group_id"]])) $access_action_array=$access_action["model"][$status_id_real][$_SESSION["group_id"]];
+
+
+
+if(!empty($model_config["group_fields"])) {
+$universal_catalog_group_id=$model_config["group_fields"];
+
+
+$universal_catalog_group_id_alias=$db::getValue("SELECT alias FROM universal_catalog WHERE id=?",[$universal_catalog_group_id]);
+$groups_fields_array=$db::mapping("SELECT id, name FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$universal_catalog_group_id_alias]);
+
+if(!empty($groups_fields_array)) {
+  echo'<button  class="btn btn-success ms-2" onclick="$(\'.blgroup\').show();">показать все</button>';    
+    $script_hide='';    
+    foreach($groups_fields_array as $gid => $name_group) {
+      if(empty($script_hide)) $script_hide='$(\'.blgroup\').hide();$(\'.blgroup_'.$gid.'\').show();'; 
+       echo'<button id="'.$gid.'" class="btn btn-info ms-2" onclick="$(\'.blgroup\').hide();$(\'.blgroup_'.$gid.'\').show();">'.$name_group.'</button>';    
+        
+    }
+@$_CONFIG["jscss"] .='<script>$( document ).ready(function() {'.$script_hide.'});</script>';    
+}
+
+
+}
+
+
+
+//echo"status_id = $status_id real=$status_id_real ";
+//print_r($access_array);
+$dataValues=[];
+
+if(!empty($_REQUEST[$uid_name])) {
+    $id=(int)$_REQUEST[$uid_name];
+    
+    if(@$_GET["info_mess"]) mess(htmlentities($_GET["info_mess"]));
+    
+    try{ 
+    if(empty($table_name)) $table_name=$model;  
+      //получаем спсико полей с типами - если поля специфические даты то пробегаемся по ним 
+      $select_date_array=$db::mapping("SELECT id,field as name FROM universal_model_fields WHERE model=? AND type IN ('created_at','datetime') ORDER BY posit DESC",[$model]);
+      
+     //форматируем типы данных связанные со временем в нужный формат для запроса sql   
+     $select="";   
+     if(!empty($select_date_array)) {
+         foreach($select_date_array as $field_id => $field)
+         $select .=",DATE_FORMAT($field,'%Y-%m-%d %H:%i:%s') as $field ";
+     }
+    
+    $dataValues=$db::getRow("SELECT * $select FROM $table_name WHERE $uid_name=?",[$id]);
+    if($form_config) {
+        
+        echo"!!!!!!!!";
+       $json_params=json_decode($dataValues["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+       foreach($json_params as $field => $value) {
+           if($field=="select_array_json")  $dataValues[$field]=json_encode($value, JSON_UNESCAPED_UNICODE);  
+            else $dataValues[$field]=$value;
+        }
+    }
+     if(empty($dataValues)) exit("ID не найден");
+     
+     } catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}
+     
+     
+     
+     $field_id_array=$db::mapping("SELECT universal_catalog_alias as id,field as name FROM universal_model_fields WHERE model=? AND universal_catalog_alias!='' AND type='multiple'",[$model]);
+      // достаем все связи этой модели со списками в один массив чтобы все было в 1 запросе
+     $relations=[];
+     $relations_data=$db::getRows("SELECT universal_catalog_id,universal_value as value  FROM universal_model_fields_relations WHERE model_id=? AND model_entity_id=?",[$model_config["id"], $id ]);
+     foreach($relations_data as $r) {
+        $relations[$field_id_array[$r["universal_catalog_id"]]][]=$r["value"];    
+        $dataValues[$field_id_array[$r["universal_catalog_id"]]."__relations"][]=$r["value"];
+     }
+   
+    
+}
+
+
+       
+$data=$db::getRows("SELECT * FROM universal_model_fields WHERE model='$model' ORDER BY posit DESC");
+if($data) {            
+    
+$nameModel=$db::getValue("SELECT name FROM universal_model WHERE model=?",[$model]);
+echo'<h3>Сущность <a href="/universal_model/">'.$nameModel.'</a>';
+if(!empty($id) and !empty($access_action_array["add"])) echo'<a href="/'.$model.'/add/?'.$uid_name.'='.@$dataValues["waybill_id"].'" class="btn btn-success btn-sm">+ добавить новую</a>';
+echo'</h3>
+<form method=post role="form" id="mainform'.$model.'" class="needs-validation" enctype="multipart/form-data" class="form-horizontal" action="" autocomplete="off">
+<div class="table-responsive"><table class="table"><tbody>';
+$parent_fields=[];
+$related_fields=[];
+$required_statuses=[]; // обязательные стутатусы с полями
+$fields=[];
+    foreach ($data as $fieldRow) {     
+    if(!empty($fieldRow["parent_field"])) $parent_fields[$fieldRow["parent_field"]][$fieldRow["field"]]=$fieldRow["field"];    
+    if(!empty($fieldRow["parent_field"]))  $related_fields[$fieldRow["parent_field"]][]=$fieldRow["field"];
+    if(!empty($fieldRow["required_statuses_json"]))  $required_statuses[$fieldRow["field"]]=json_decode($fieldRow["required_statuses_json"], true, 512, JSON_UNESCAPED_UNICODE);
+    $fields[$fieldRow["field"]]=$fieldRow["name"];
+    } 
+    
+    $required_fields=[];
+    // пробегаемся по всем полям у кого указаны обязательно на данном статусе
+    foreach($required_statuses as $field => $array) {
+      if(in_array($status_id_real,$array))  $required_fields[]=$field;
+        
+    }
+    
+   // echo"id status real=$status_id_real<br>";
+  //  print_r($model_config["access"]["status_access"]);
+    
+    
+    $json_parse_array=[];
+    $json_parse_array[$status_id_real]=$required_fields;
+    
+    if(!empty($model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]])) {
+      foreach($model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]] as $status_access) {
+          
+          $required_fields_validate=[];
+           // пробегаемся по всем полям у кого указаны обязательно на данном статусе
+          foreach($required_statuses as $field => $array) {
+             if(in_array($status_access,$array))  $required_fields_validate[]=$field;
+           }
+          echo" можно перемещать на статус ++ <b>$status_access</b> (
+              обязательные поля ".implode(",",$required_fields_validate)." )<br>";
+              
+                  $json_parse_array[$status_access]=$required_fields_validate;
+        }
+   }
+    
+
+$data_convert=$db::mapping("SELECT  id as name, guid as id FROM universal_catalog_item WHERE catalog_alias=?",[$model]);
+    
+ echo"<script>
+
+
+function change_status(model){ 
+var data = $('#mainform'+model).serializeArray();
+$.each(data,function(){
+  let nameid = this.name;
+  nameid = nameid.replace(/[^a-zA-Z0-9_\s]/gi, '');
+  let idfield='form'+nameid+'';
+   $('#'+idfield).removeAttr('required');
+   
+});
+
+
+
+let jsonStr='".json_encode($json_parse_array, JSON_UNESCAPED_UNICODE)."';
+var obj= JSON.parse(jsonStr);
+
+let data_convert='".json_encode($data_convert, JSON_UNESCAPED_UNICODE)."';
+var data_c= JSON.parse(data_convert);
+var idstatus=$('#form".$model_config["status_name"]."').val();
+
+
+
+var YourObject = obj[data_c[idstatus]];
+YourObject.forEach(function(entry) {
+       console.log(entry);
+       $('#form'+entry).attr('required','45');
+});
+
+
+
+
+} 
+ </script>";   
+    
+    
+    
+    
+    
+    
+   // echo"<br>Обязательные поля на статусе $status_id_real";
+     foreach($required_fields as $field) {
+    //  echo " + ".$fields[$field];
+      $fieldRow["required"]=true;
+    }
+    
+    
+    $show_save_button=false;
+    foreach ($data as $fieldRow) {     
+     if(isset($related_fields[$fieldRow["field"]]))  $fieldRow["dependent_fields"] =$related_fields[$fieldRow["field"]];  
+
+       if(in_array($fieldRow["field"],$required_fields))  $fieldRow["required"]=true;
+     
+       if(!empty(@$access_array_this_status[$fieldRow[$uid_name]]) and $access_array_this_status[$fieldRow[$uid_name]]=="edit" ) $show_save_button=true;
+       form_field_print($fieldRow,$dataValues,$model);          
+    }     
+    
+echo'<tr><td>';
+
+
+if(!empty($dataValues) and !empty($access_action_array["delete"])) 
+echo'<a href="?id='.$id.'&model='.$model.'&delete=confirmDellete" onclick="return confirm(\'Вы действительно хотите удалить запись?\');" class="btn btn-sm btn-danger">удалить</a>';
+
+if(empty($dataValues)) $text_save="Добавить"; else $text_save='Сохранить';
+
+echo'</td><td>';
+
+
+//if(empty($name_field_status)) $show_save_button=true;
+
+if($show_save_button==true) { // если есть поля которые мы можем редактировать то показываем кнопку
+echo'<input type=hidden name=model value="'.$model.'">
+<button type=button class="btn btn-lg btn-success" onclick="event.preventDefault(); ajaxModelEntityUpdate(\''.$model.'\');return false;" value="'.$model.'" id="'.$model.'_save" name=save>'.$text_save.'</button>';
+}
+
+echo'</td></tr></tbody></table></div><div id="mess_info'.$model.'" class="mess_info'.$model.'"></div></form>';
+
+
+echo"<a href=\"/\" onclick=\"ajaxLogi('$model','".@$dataValues[$model_config["uid_name"]]."','status');return false;\" class=\"btn btn-sm btn-default\">ajaxLogi</a>
+<a href=\"/\" onclick=\"ajaxLogi('$model','".@$dataValues[$model_config["uid_name"]]."');return false;\" class=\"btn btn-sm btn-default\">изменения</a>
+<div id=ajaxLogi></div>";
+
+
+}     
+
+@$_CONFIG["jscss"] .='<script>';
+foreach($parent_fields as $parent => $children) {
+ @$_CONFIG["jscss"] .='function change_field_'.$parent.'() {    ';
+     foreach($children as $children_field) {
+         @$_CONFIG["jscss"] .='
+      $(\'#tdform'.$children_field.'\').html(\'<select id=form'.$children_field.' name='.$children_field.' class="form-select"></select>\');  
+     
+           get_select(\''.$children_field.'\',\''.$parent.'\'); ';
+     }
+     @$_CONFIG["jscss"] .=' }';
+  
+  }
+@$_CONFIG["jscss"] .='</script>';
+  
+@$_CONFIG["jscss"] .="<script>
+
+
+function get_select(field,parent) {
+$.ajax({
+       url: '/universal_model/ajax_get_select/',
+       method: 'POST',
+       data: '&field='+field+'&model=$model&table_name=$table_name&id=$id&parent='+parent+'&parent_value='+$('#form'+parent).val()+'',
+       success: function(data){
+       $('#tdform'+field).html(data);
+       }
+});
+}
+
+
+function ajaxSearch(field) {
+$.ajax({
+       url: '/universal_model/ajaxSearch/',
+       method: 'POST',
+       data: '&field='+field+'&model=$model&table_name=$table_name&id=$id&search='+$('#search_form'+field).val()+'',
+       success: function(data){
+       $('#form'+field).after('<div style=\"position:absolute;\">'+data+'</div>');
+       }
+});
+}
+
+function ajaxLogi(model,id,type='') {
+$.ajax({
+       url: '/universal_model/ajaxLogi/',
+       method: 'POST',
+       data: '&type='+type+'&model='+model+'&id='+id+'',
+       success: function(data){
+       $('#ajaxLogi').html(data);
+       }
+});
+}
+
+
+function ajaxModelEntityUpdate(model) {
+
+var data = $('#mainform'+model).serializeArray();
+var error = '';
+var error_text =''; 
+$.each(data,function(){
+  let nameid = this.name;
+  nameid = nameid.replace(/[^a-zA-Z0-9_\s]/gi, '');
+  let idfield='form'+nameid+'';
+  let val=$('#'+idfield).val(); 
+  let err = 0;
+  let req = $('#'+idfield).attr('required'); 
+   
+ if( req == 'required') {
+  if(val!=='') {
+       $('#'+idfield).removeClass('is-invalid'); 
+       $('#'+idfield).addClass('is-valid');     
+  }
+  if(val=='') {
+      $('#'+idfield).removeClass('is-valid'); 
+      $('#'+idfield).addClass('is-invalid');   
+      error = 1;
+       error_text =idfield;
+    }  
+   
+   } 
+
+   
+});
+
+
+ if(error == 1)  alert(error_text);
+ if(error == 0)  {
+       $.ajax({
+               url: '/universal_model/ajaxModelEntityUpdate/',
+               method: 'post',
+               dataType: 'html',
+               data: $('#mainform'+model).serialize(),
+               success: function(data){
+                       $('#mess_info'+model).html(data);
+               }
+       });
+ }     
+       
+       
+       
+}
+
+
+
+
+function unicum_value(field) {
+    var search=$('#form'+field+'').val();
+   $.ajax({
+       url: '/universal_model/ajax_get_unicum/',
+       method: 'POST',
+       data: '&field='+field+'&model=$model&table_name=$table_name&id=$id&search='+search+'',
+       success: function(data){
+       $('.unicum_value').remove();
+       $('#form'+field+'').after('<div class=\"unicum_value\">'+data+'</div>');
+       }
+});
+
+}";
+
+
+
+
+
+
+
+foreach($parent_fields as $parent => $children) {
+    
+ foreach($children as $children_field) {
+    $_CONFIG["jscss"]  .='
+    
+  $(\'#f2orm'.$parent.'\').on(\'change\', function (e) {
+    var optionSelected = $("option:selected", this);
+    var valueSelected = this.value;
+      $(\'#tdform'.$children_field.'\').html(\'<select id=form'.$children_field.' name='.$children_field.' class="form-select"></select>\');  
+      alert(\'val=\'+valueSelected);
+           get_select(\''.$children_field.'\',\''.$parent.'\');
+      
+  });
+    
+    $(\'#f3orm'.$parent.'\').change(function() {
+    
+    ';
+    
+ //  if($parent=='partner_company_id')   $_CONFIG["jscss"]  .='alert(\'dfdf\');'; 
+    
+     $_CONFIG["jscss"]  .=' 
+    if ($(\'#form'.$children_field.'\').length) {
+       $(\'#form'.$children_field.'\').html(\'\');
+       
+       
+    } else {
+    
+        
+         $(\'#tdform'.$children_field.'\').html(\'<select id=form'.$children_field.' name='.$children_field.' class="form-select"></select>\');  
+        
+    }
+    
+  
+     get_select(\''.$children_field.'\',\''.$parent.'\');
+
+   });';
+     
+ }
+}
+
+/*
+function change_all_select() { 
+'.$change.'
+}
+*/
+
+
+$_CONFIG["jscss"] .='</script>
+<style>table tbody tr td div.descr_info {display:none;}
+table tbody tr:hover td div.descr_info {display:block;}
+</style>';
+
+ if($show_design)  include_once("templates/bottom.php");   
+ else echo $_CONFIG["jscss"];
+}
\ No newline at end of file
diff --git a/erp24/inc/universal_model_old.php b/erp24/inc/universal_model_old.php
new file mode 100644 (file)
index 0000000..9baffb3
--- /dev/null
@@ -0,0 +1,116 @@
+<?
+
+
+function get_array_from_string($select="id,name", $table_name, $where="") {
+global $db;
+$where=str_replace(["{","}"],["'","'"],$where);
+$select_arr=explode(",",$select);
+try {
+  $data = $db::getRows("SELECT $select FROM $table_name $where");
+  $sel_group=[];
+foreach ($data as $row) $sel_group[$row[$select_arr[0]]] = $row[$select_arr[1]];
+} catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}
+
+ return $sel_group;    
+}
+
+
+function form_field_print($data,$dataValues) {
+global $db;       
+
+     if($data["type"]!="hidden")        echo '<tr><td class="w-30 text-right">'. $data["name"].'</td><td>';
+        echo form_field_type_print($data,$dataValues);
+        if($data["type"]!="hidden")  { 
+         if(!empty($data["html"]))   echo html_entity_decode($data["html"]);
+            echo'</td></tr>'; }
+       
+}
+
+function form_field_type_print($data,$dataValues) {
+global $db; 
+$attributes=' id=form'.$data["name_eng"].' class="form-control';
+if(!empty($data["class"])) $attributes .=' '.$data["class"].''; 
+$attributes .='"';
+
+if(!empty($data["style"])) $attributes .=' style="'.$data["style"].'"';
+if(!empty($data["placeholder"])) $attributes .=' placeholder="'.$data["placeholder"].'"';
+if(!empty($data["attr"])) $attributes .=' '.$data["attr"].'';
+if(!empty($data["required"])) $attributes .=' required';
+
+ if(is_file("inc/universal_model_types/".$data["type"].".php") ){
+   include "inc/universal_model_types/".$data["type"].".php";
+   return $html;
+ }
+}
+
+
+
+function universal_model_form_save($model,$table_name){
+global $db,$act;
+$data=$db::getRows("SELECT name,name_eng,tip,type FROM modules_uni_fields WHERE modul='$model' ORDER BY posit DESC");
+    if($_POST["save"][$model]){
+        $update=[];
+       foreach($data as $row) {
+
+         if(isset($_POST[$row["name_eng"]]) ) 
+          { 
+             $value=htmlentities($_POST[$row["name_eng"]]);
+             if($row["type"]=="multiple")  $value=implode(",",$_POST[$row["name_eng"]]);    
+             $update[$row["name_eng"]]=$value;
+        
+             }
+         }
+            try{ 
+            if(isset($update["id"]))    
+            $db::update($table_name,"id=:id LIMIT 1",$update); 
+            
+        } catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}   
+       
+     mess("Сохранили");
+    
+    }
+
+}
+
+
+// выводим форму FORM для заполнения данных для модели
+function universal_model_form($model,$table_name){
+global $db,$act;
+
+
+
+include_once("templates/top.php");
+
+if(!empty($_REQUEST["id"])) {
+    $id=(int)$_REQUEST["id"];
+    
+    
+    universal_model_form_save($model,$table_name); 
+    
+    try{ 
+    if(empty($table_name)) $table_name=$model;    
+    $dataValues=$db::getRow("SELECT * FROM $table_name WHERE id=?",[$id]);
+     } catch (Exception $e) {    echo 'Выброшено исключение: ',  $e->getMessage(), "\n";}
+     
+     
+    
+     
+}
+
+$data=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul='$model' ORDER BY posit DESC");
+if($data) {            
+echo'<form method=post role="form" enctype="multipart/form-data" class="form-horizontal" action="" autocomplete="off">
+<div class="table-responsive"><table class="table"><tbody>';
+    foreach ($data as $fieldRow) {     
+       
+        form_field_print($fieldRow,$dataValues);                
+                        
+    } 
+echo'</tbody></table>
+</div><button type=submit class="btn btn-lg btn-success" value=1 name=save['.$model.']>сохранить</button></form>';
+}     
+
+
+    
+ include_once("templates/bottom.php");   
+}
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/button.php b/erp24/inc/universal_model_types/button.php
new file mode 100644 (file)
index 0000000..a9115c4
--- /dev/null
@@ -0,0 +1,3 @@
+<?
+
+$html= '<button type=button name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'>'.$data["name"].'</button>';
diff --git a/erp24/inc/universal_model_types/checkbox.php b/erp24/inc/universal_model_types/checkbox.php
new file mode 100644 (file)
index 0000000..11af5f6
--- /dev/null
@@ -0,0 +1,3 @@
+<?
+$html= '<input type=checkbox name='.$data["input_name"].' '.$attributes.'';
+if(@$dataValues[$data["field"]]) $html .='checked';   $html .='> ';
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/created_at.php b/erp24/inc/universal_model_types/created_at.php
new file mode 100644 (file)
index 0000000..1719d77
--- /dev/null
@@ -0,0 +1,6 @@
+<?
+if(empty($dataValues[$data["field"]])) $dataValues[$data["field"]]=date("Y-m-d");
+$html= '<input type=datetime-local  name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
+
+
+
diff --git a/erp24/inc/universal_model_types/created_by.php b/erp24/inc/universal_model_types/created_by.php
new file mode 100644 (file)
index 0000000..80dc386
--- /dev/null
@@ -0,0 +1,3 @@
+<?
+
+include"search.php";
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/date.php b/erp24/inc/universal_model_types/date.php
new file mode 100644 (file)
index 0000000..4843fc0
--- /dev/null
@@ -0,0 +1,3 @@
+<?
+//if(($dataValues[$data["default_value"]])) $dataValues[$data["field"]]=date("Y-m-d");
+$html= '<input type=date  name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
diff --git a/erp24/inc/universal_model_types/hidden.php b/erp24/inc/universal_model_types/hidden.php
new file mode 100644 (file)
index 0000000..36e02dd
--- /dev/null
@@ -0,0 +1,5 @@
+<?
+
+$html= '<input type=hidden  name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
+
+//if(!empty($data["autoincriment"])) $html .= 'ID=<b>'.@$dataValues[$data["field"]].'</b>';
diff --git a/erp24/inc/universal_model_types/multiple.php b/erp24/inc/universal_model_types/multiple.php
new file mode 100644 (file)
index 0000000..e61e6c4
--- /dev/null
@@ -0,0 +1,22 @@
+<?
+$html = "";
+$html .="<select multiple=\"multiple\" size=5 name=".$data["input_name"]."[] ";  
+$class="";
+if(!empty($data["class"])) $class=$data["class"];
+if($class!="select2") $class="multi-select $class";    
+$classes=" $class";
+if(isset($data["removeclass"])) $classes=str_replace($data["removeclass"],'',$classes);        
+$html .="  $attributes class=\"form-control $classes\">";
+
+
+
+$data["val_arr"]=get_select_array_from_universal_model($data,$dataValues);
+
+if(!empty($data["val_arr"])) {  
+    foreach($data["val_arr"] as $vid =>$namev) { 
+    $html .="<option value=\"$vid\""; 
+      if(!empty($dataValues[$data["field"]]) and in_array($vid,$dataValues[$data["field"]])) $html .=" selected"; 
+        $html .=">$namev</option>";
+       }
+}                                                               
+$html .="</select>";
diff --git a/erp24/inc/universal_model_types/number.php b/erp24/inc/universal_model_types/number.php
new file mode 100644 (file)
index 0000000..4e031d2
--- /dev/null
@@ -0,0 +1,27 @@
+<?
+
+
+
+$html= ' ';
+
+$html= '<input type=number  name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
+
+/*
+//если поле с запросом к БД 
+if(!empty($data["sql_func"]) and !empty($dataValues[$data["field"]])) {
+$sql_z=explode(";",$data["sql_func"]); 
+$count_pole=explode(",",$sql_z[0]);    
+$select_arr=[];
+$where = $sql_z[2];
+if(!empty($data["parent_field"])) $where=str_replace('{{'.$data["parent_field"].'}}',$dataValues[$data["parent_field"]],$where);
+$where=str_replace('{{this}}',$dataValues[$data["field"]],$where);
+
+//$html .=' '.$where.' ';
+
+if(count($count_pole)==2)      $select_arr=get_array_from_string($sql_z[0],$sql_z[1],$where); 
+if(!empty($select_arr[$dataValues[$data["field"]]])) $html .= '<span class="btn btn-sm btn-warning" onclick="$(\'#form'.$data["field"].'\').toggle();"> '.$select_arr[$dataValues[$data["field"]]].'</span> ';
+ $html .= '<input type=number  name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'"  style="display:none;'.$data["style"].'" '.$attributes.'> ';
+
+} else $html= $html_input;
+
+*/
diff --git a/erp24/inc/universal_model_types/numeric.php b/erp24/inc/universal_model_types/numeric.php
new file mode 100644 (file)
index 0000000..284a568
--- /dev/null
@@ -0,0 +1,3 @@
+<?
+
+$html= '<input type=number  name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
diff --git a/erp24/inc/universal_model_types/password.php b/erp24/inc/universal_model_types/password.php
new file mode 100644 (file)
index 0000000..e005bea
--- /dev/null
@@ -0,0 +1,6 @@
+<?
+
+$html= '
+<div class="btn-group"><input type=password style="width:200px;" autocomplete=off name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> 
+
+<span class="btn btn-default" onclick="$(\'#form'.$data["field"].'\').attr(\'type\',\'text\');">показать пароль</span></div>';
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/search.php b/erp24/inc/universal_model_types/search.php
new file mode 100644 (file)
index 0000000..bb681df
--- /dev/null
@@ -0,0 +1,48 @@
+<?
+$html ='';
+$show_select=true; 
+if(!empty($data["parent_field"])) { 
+  if($dataValues[$data["parent_field"]])  $show_select=true; 
+  else $show_select=false;
+}
+
+
+
+if($show_select) {
+    
+
+ //$html .='!!!!! '.$data["field_model_alias"].' '.$dataValues[$data["field"]].' !!!';    
+
+
+if(!empty($dataValues[$data["field"]])) {}
+$nameP="";
+$query=get_query_field_model_alias($data["field_model_alias"]);
+
+
+if(!empty($query["get_name"])) {
+     try { 
+      $nameP=$db::getValue($query["get_name"]." LIMIT 1",[$dataValues[$data["field"]]]);
+     } catch (Exception $e) {    echo 'Ошибка  : '.$query["get_name"].' '.$dataValues[$data["field"]].' ',  $e->getMessage(), "\n";}
+
+}
+
+if(empty($nameP))     $nameP="-не указано-";
+
+$html .="
+<div style=\"width:auto;float:left;position:relative;z-index:99999;\">
+<button id=\"name_search_".$data["field"]."\"  style=\"float:left;\"  class=\"btn btn-default btnl-lg\" onclick=\"$('#search_form".$data["field"]."').toggle(); $('#search_".$data["field"]."').show();return false;\">
+".$nameP."</button><input onchange=\"ajaxSearch('".$data["field"]."');\" id=\"search_form".$data["field"]."\"   ";
+//if(!empty($data["required"])) $html .=" required";
+
+if(!empty($data["placeholder"])) $html .=" placeholder=\"".$data["placeholder"]."\"";
+if(!empty($data["attr"])) $html .=" ".$data["attr"];
+$html .="  style=\"display:none;".@$data["style"]."\" class=\"form-control ".@$data["class"]."\"  >
+<input type=hidden class=\"form-control\" name=\"".$data["input_name"]."\" id=\"form".$data["field"]."\"  value=\"".$dataValues[$data["field"]]."\"  onchange=\"$('.sk').hide();\" >
+<div id=\"search_div_".$data["field"]."\" style=\"position:absolute;z-index:9999\"></div></div>";
+
+
+    
+} else {
+    
+  $html .='<b>сначала нужно выбрать поле '.$data["parent_field"].'</b>';  
+}
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/select.php b/erp24/inc/universal_model_types/select.php
new file mode 100644 (file)
index 0000000..7d9c188
--- /dev/null
@@ -0,0 +1,35 @@
+<?
+$html ='';
+$show_select=true; 
+if(!empty($data["parent_field"])) { 
+  //  $html = '  '.$data["parent_field"].' = '.$dataValues[$data["parent_field"]];
+  if(@$dataValues[$data["parent_field"]])  $show_select=true; 
+  else $show_select=false;
+
+ if(!isset($dataValues[$data["parent_field"]]))  $show_select=false;
+  
+}
+
+if($show_select) {
+
+$data["val_arr"]=get_select_array_from_universal_model($data,$dataValues);
+
+$html .="<select name=\"".$data["input_name"]."\" onchange=\"change_field_".$data["field"]."();\" $attributes>";       
+
+if(!empty($data["val_arr"])) {  
+$detect=0;     
+    foreach($data["val_arr"] as $vid =>$namev) { 
+       $val="";
+     if(isset($dataValues[$data["field"]])) $val=$dataValues[$data["field"]];  
+     elseif(!empty($data["default_value"])) $val=$data["default_value"];       
+               
+     $html .="<option value=\"$vid\""; 
+      if($vid==$val) $html .=" selected";                                                         
+       $html .=">$namev</option>";
+       }
+}                                                               
+$html .="</select>";
+} else {
+    
+  $html .='<b>сначала нужно выбрать поле '.$data["parent_field"].'</b>';  
+}
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/status.php b/erp24/inc/universal_model_types/status.php
new file mode 100644 (file)
index 0000000..942ba54
--- /dev/null
@@ -0,0 +1,30 @@
+<?
+$html ='';
+$data["val_arr"]=$db::mapping("SELECT guid as id, name FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$model]);
+$data["val_arr_guid"]=$db::mapping("SELECT  id as name, guid as id FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$model]);
+
+$html .="
+<input type=hidden name=".$data["field"]."__old value=\"".@$dataValues[$data["field"]]."\" id=form".$data["field"]."__old>
+<select $attributes name=\"".$data["field"]."\" onchange=\"change_status('$model')\">";        
+
+if(!empty($data["val_arr"])) {  
+$detect=0;     
+    foreach($data["val_arr"] as $vid =>$namev) { 
+       $val="";
+     if(isset($dataValues[$data["field"]])) $val=$dataValues[$data["field"]];  
+     elseif(!empty($data["default_value"])) $val=$data["default_value"];
+     
+     
+     if($status_id_real) {
+           if(  @in_array(@$data["val_arr_guid"][$vid],@$model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]])  or $status_id_real==@$data["val_arr_guid"][$vid])    {
+            //  $html .="<option value=\"$vid\">$status_id_real ".print_r($model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]][$vid])."</option>";    
+           $html .="<option value=\"$vid\"";  if($vid==$val) $html .=" selected";       $html .=">$vid $namev</option>";
+          }
+     } else { $html .="<option value=\"$vid\"";  if($vid==$val) $html .=" selected";    $html .=">$vid $namev</option>"; }
+         
+     
+        
+        
+       }
+}                                                               
+$html .="</select>";
diff --git a/erp24/inc/universal_model_types/submit.php b/erp24/inc/universal_model_types/submit.php
new file mode 100644 (file)
index 0000000..81b2464
--- /dev/null
@@ -0,0 +1,3 @@
+<?
+
+$html= '<button type=submit name='.$data["field"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'>'.$data["name"].'</button>';
diff --git a/erp24/inc/universal_model_types/table.php b/erp24/inc/universal_model_types/table.php
new file mode 100644 (file)
index 0000000..35fe82b
--- /dev/null
@@ -0,0 +1,124 @@
+<?
+$html='';
+// для связи табличной части необходимо - ключ в таблтце ко которому связываем родительскую сущность на примере накладной это waybill_id в shipment_waybill_products
+$model_from_table=$data["field_model_alias"];
+$file="inc/universal_model_types/table_models/$model_from_table.php";
+if(is_file($file) )  { include $file;
+$fields_table0=get_universal_model_fields($model_from_table); 
+
+$fields_table=[];
+ foreach($fields_table0 as $field => $row) {
+    if(!empty($row["type"]) and !in_array($row["type"],["hidden"]))  {
+      
+     if(empty($access_array_this_status[$row["id"]]) or @$access_array_this_status[$row["id"]]=="edit") 
+     $fields_table[$field]=$row;
+        
+    }
+}
+
+
+//print_r($fields_table);
+
+echo'<table class="table table-sm table-stripped table-bordered"><thead><tr>';
+foreach($fields_table as $field => $row)   {
+    echo'<th>'.$row["name"].'</th>';  
+    
+}
+echo'</tr></thead><tbody>';
+
+$data2=$db::getRows($query,[$dataValues["id"]]);
+foreach($data2 as $row) {
+ echo'<tr ';
+$access_0="";
+if(!empty($access_array_this_status[@$data["id"]])) $access_0=$access_array_this_status[@$data["id"]];
+
+if($access_0=="edit")
+echo'onclick="edit_table_field(\''.$model_from_table.'\',\''.$row["id"].'\')"';
+ echo'>';   
+ foreach($fields_table as $fieldName => $array) {
+     if(isset($replace_field[$fieldName])) {
+       $value= ""; 
+       if(empty($row[$fieldName])) {
+           $row[$fieldName]=$row["product_id"]; 
+           $valuek= $row["product_id"]; 
+           
+          if($fieldName=="parent_id") {
+              $valuek=$replace_field[$fieldName][$valuek];
+              $value=$replace_field["category"][$valuek]; 
+          }  
+          
+          if($fieldName=="prices")   $value=$replace_field[$fieldName][$valuek];
+                
+       }
+       else {
+           
+           $value=$replace_field[$fieldName][$row[$fieldName]];
+           
+       }
+      }     else  $value=@$row[$fieldName];   
+    echo'<td';
+           if(!empty($fields_table[$fieldName]["class_block"])) echo' class="'.$fields_table[$fieldName]["class_block"].'"';   
+          if(!empty($fields_table[$fieldName]["style_block"])) echo' style="'.$fields_table[$fieldName]["style_block"].'"';
+          
+          echo'>'.$value.'</td>';  
+  }
+ echo'</tr>';
+}
+
+echo'</tbody></table>'; 
+} 
+/*
+echo'<table class="table table-sm table-stripped table-bordered"><thead><tr>';
+foreach($table_fields as $field) {
+  echo'<th>'.$model_table_fields[$field]["name"].'</th>';  
+}
+echo'</tr></thead><tbody>';
+$data=$db::getRows($query,[$dataValues["id"]]);
+
+foreach($data as $row) {
+ echo'<tr onclick="edit_table_field(\''.$data["field_model_alias"].'\',\''.$row["id"].'\')">';   
+ foreach($table_fields as $fieldName) {
+   $value=$row[$fieldName];   
+  if($fieldName=="name")  $value=$product_name[$row["product_id"]];
+  if($fieldName=="color")  $value=$product_colors[$row["product_id"]][$row["varietie"]];
+  if($fieldName=="varietie") $value=$products_varieties[$row["product_id"]][$row["varietie"]];
+ // if($fieldName=="price")   $value=$product_prices[$row["product_id"]];
+    echo'<td class="text-left">'.$value.'</td>';  
+  }
+ echo'</tr>';
+}
+echo'</tbody></table>'; 
+*/
+if($access_0=="edit") { 
+echo'<script>
+function edit_table_field(field_model_alias,id) {
+     $("#modal-7").modal(\'show\', {backdrop: \'static\'}); 
+     $.ajax({
+       url: "/universal_model/ajaxTableEdit/",
+       method: "post",       
+       dataType: "html",        
+       data: {id: id, field_model_alias: field_model_alias},  
+       success: function(data){  
+        $("#modal-7 .modal-body").html(data);  
+       }}); 
+}
+</script>';
+
+       echo'<!-- MODAL -->
+               <div class="modal fade " id="modal-7">
+                       <div class="modal-dialog modal-dialog-centered modal-lg text-center" role="document">
+                               <div class="modal-content modal-content-demo">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title">Редактирование</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body m-0 p-0">
+                               
+                                       </div>
+
+                               </div>
+                       </div>
+               </div>'; 
+}
diff --git a/erp24/inc/universal_model_types/table_function_row.php b/erp24/inc/universal_model_types/table_function_row.php
new file mode 100644 (file)
index 0000000..33f2660
--- /dev/null
@@ -0,0 +1,17 @@
+<?
+$html='';
+$model_children=$data["universal_catalog_alias"];
+$model_config_children=get_config_universal_model($model_children);
+$model_config=get_config_universal_model($model);
+
+$query=str_replace('{{'.$model_config["uid_name"].'}}',$dataValues[$model_config["uid_name"]],$data["query_sql"]);
+$summ=$db::getValue($query);
+//echo"$model_children  ";
+
+
+$update=[];
+$update[$data["field"]]=$summ;
+$update[$model_config["uid_name"]]=$dataValues[$model_config["uid_name"]];
+
+if($dataValues[$data["field"]] !=$summ ) $db::update($model_config["table"]," ".$model_config["uid_name"]."=:".$model_config["uid_name"]." LIMIT 1",$update);
+echo $summ;
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/table_models/money_transactions.php b/erp24/inc/universal_model_types/table_models/money_transactions.php
new file mode 100644 (file)
index 0000000..1389124
--- /dev/null
@@ -0,0 +1,36 @@
+<?
+
+$key_id=$dataValues["id"];
+
+$products_in=[];
+$query="SELECT * FROM money_transactions  WHERE 1 order by created_at DESC";
+$data=$db::getRows($query,[$key_id]);
+foreach($data as $row) {
+  
+    
+}
+//$products_in[]=$row["id"];    
+
+$replace_field=[];
+if(!empty($products_in)){
+$products_in=' IN (\''.implode("','",$products_in).'\')';
+//$replace_field["product_id"]=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products' AND id $products_in");
+//$replace_field["varietie_id"]=$db::mapping("SELECT id, CONCAT(name, ' (',color,')') as name FROM products_varieties  WHERE product_id $products_in");
+//$replace_field["parent_id"]=$db::mapping("SELECT id, parent_id as name FROM products_1c WHERE id $products_in");
+//$replace_field["prices"]=$db::mapping("SELECT product_id as id, price as name FROM prices WHERE product_id $products_in");
+
+$entity_in=' IN (\''.implode("','",$replace_field["parent_id"]).'\')';
+//$replace_field["category"]=$db::mapping("SELECT id, name FROM products_1c  WHERE tip='products_group' AND id $entity_in");
+
+
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/erp24/inc/universal_model_types/table_models/order_products.php b/erp24/inc/universal_model_types/table_models/order_products.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/erp24/inc/universal_model_types/table_models/shipment.php b/erp24/inc/universal_model_types/table_models/shipment.php
new file mode 100644 (file)
index 0000000..cf1a5b2
--- /dev/null
@@ -0,0 +1,20 @@
+<?
+
+//внешний ключ от главной сущности накладной
+$key_id=$dataValues["id"];
+
+   
+
+$replace_field=[];
+
+$replace_field["shipment_id"]=$db::mapping("SELECT id, name FROM store_orders WHERE  id=?",[$key_id]);
+
+
+
+
+
+
+
+
+
+
diff --git a/erp24/inc/universal_model_types/table_models/shipment_waybill_products.php b/erp24/inc/universal_model_types/table_models/shipment_waybill_products.php
new file mode 100644 (file)
index 0000000..68d0410
--- /dev/null
@@ -0,0 +1,67 @@
+<?
+/*
+$model_config=[  "name_key" => ["name"=>"waybill_id", "tip" =>"int"],
+     "table_fields" => 
+       [
+       "id"=>["field"=>"id","name"=>"id","type"=>"hidden","autoincriment"=>true],
+       "product_id"=>["field"=>"product_id","tip"=>"string","required"=>"required","type"=>"hidden",  "name"=>"product_id","style"=>"width:190px"],
+              "name"=>["field"=>"name","tip"=>"string","name"=>"Наименование","type"=>"from_sql"],   
+      
+       "varietie"=>["field"=>"varietie","tip"=>"int","name"=>"Сорт","type"=>"from_sql"],   
+             "color"=>["field"=>"color","tip"=>"string","name"=>"Цвет","type"=>"from_sql"],    
+       "quantity"=>["field"=>"quantity","tip"=>"int","name"=>"кол-во","type"=>"number"],    
+       "price"=>["field"=>"price","tip"=>"string","name"=>"цена","type"=>"number"],    
+       "purchase_price"=>["field"=>"purchase_price","tip"=>"string","name"=>"Закупочная цена","type"=>"number"]
+       ]
+];
+
+$model_table_fields=$model_config["table_fields"];
+$table_fields=[];
+foreach($model_table_fields as $field => $arr) {
+  if(!in_array($arr["type"],["hidden"])) $table_fields[]=$field;
+}
+*/
+/*
+$data=$db::getRows("SELECT product_id, id, name, color FROM products_varieties  WHERE product_id $products_in");
+$product_colors=[];
+foreach($data as $row) {
+     $products_varieties[$row["product_id"]][$row["id"]]=$row["name"];  
+     $product_colors[$row["product_id"]][$row["id"]]=$row["color"];   
+}
+$product_name=$db::mapping("SELECT id, name FROM products_1c  WHERE tip='products' AND id $products_in");
+$product_prices=$db::mapping("SELECT product_id as id, price as name FROM prices  WHERE product_id $products_in");
+$product_name=$db::mapping("SELECT id, name FROM products_1c  WHERE tip='products' AND id $products_in");
+*/
+//print_r($table_fields);
+
+//внешний ключ от главной сущности накладной
+$key_id=$dataValues["id"];
+
+$products_in=[];
+$query="SELECT * FROM shipment_waybill_products  WHERE waybill_id=? order by quantity DESC";
+$data2=$db::getRows($query,[$key_id]);
+foreach($data2 as $row) $products_in[]=$row["product_id"];    
+
+$replace_field=[];
+if(!empty($products_in)){
+$products_in=' IN (\''.implode("','",$products_in).'\')';
+$replace_field["product_id"]=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products' AND id $products_in");
+$replace_field["varietie_id"]=$db::mapping("SELECT id, CONCAT(name, ' (',color,')') as name FROM products_varieties  WHERE product_id $products_in");
+$replace_field["parent_id"]=$db::mapping("SELECT id, parent_id as name FROM products_1c WHERE id $products_in");
+$replace_field["prices"]=$db::mapping("SELECT product_id as id, price as name FROM prices WHERE product_id $products_in");
+
+$entity_in=' IN (\''.implode("','",$replace_field["parent_id"]).'\')';
+$replace_field["category"]=$db::mapping("SELECT id, name FROM products_1c  WHERE tip='products_group' AND id $entity_in");
+
+
+}
+
+
+
+
+
+
+
+
+
+
diff --git a/erp24/inc/universal_model_types/table_models/shipment_waybills_related.php b/erp24/inc/universal_model_types/table_models/shipment_waybills_related.php
new file mode 100644 (file)
index 0000000..a787ee8
--- /dev/null
@@ -0,0 +1,15 @@
+<?
+
+//внешний ключ от главной сущности накладной
+$key_id=$dataValues["id"];
+
+$entity_ids_in=[];
+$query="SELECT * FROM store_orders  WHERE related_order_id=?";
+$data=$db::getRows($query,[$key_id]);
+foreach($data as $row) $entity_ids_in[]=$row["id"];    
+
+$replace_field=[];
+if(!empty($entity_ids_in)){
+ $entity_ids_in=' IN (\''.implode("','",$entity_ids_in).'\')';
+// $replace_field["product_id"]=$db::mapping("SELECT id, name FROM store_orders  WHERE  id $entity_ids_in");
+}
diff --git a/erp24/inc/universal_model_types/tel.php b/erp24/inc/universal_model_types/tel.php
new file mode 100644 (file)
index 0000000..ec7e3b6
--- /dev/null
@@ -0,0 +1,3 @@
+<?
+
+$html= '<input type=tel  name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
\ No newline at end of file
diff --git a/erp24/inc/universal_model_types/text.php b/erp24/inc/universal_model_types/text.php
new file mode 100644 (file)
index 0000000..111b21c
--- /dev/null
@@ -0,0 +1,6 @@
+<?
+
+
+$html= '<input type=text name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'>
+<div class="invalid-feedback">Ведите поле '.$data["name"].'</div>
+<div class="valid-feedback">ok</div>';
diff --git a/erp24/inc/universal_model_types/textarea.php b/erp24/inc/universal_model_types/textarea.php
new file mode 100644 (file)
index 0000000..e7a6a98
--- /dev/null
@@ -0,0 +1,7 @@
+ <?
+
+$html='<textarea  name='.$data["input_name"].'  row=';
+
+if(!empty($data["row"])) $html .=@$data["row"]; else $html .=2;
+
+$html .=' '.$attributes.'>'.@$dataValues[$data["field"]].'</textarea>';
diff --git a/erp24/inc/universal_model_types/universal_lists/admin.php b/erp24/inc/universal_model_types/universal_lists/admin.php
new file mode 100644 (file)
index 0000000..1354d64
--- /dev/null
@@ -0,0 +1,13 @@
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM admin";
+
+
+$query["search"]="SELECT id, name FROM admin
+WHERE name LIKE ? order by name";
+
+$query["get_name"]="SELECT name FROM admin WHERE id=?";
+
+
+
diff --git a/erp24/inc/universal_model_types/universal_lists/admin_group.php b/erp24/inc/universal_model_types/universal_lists/admin_group.php
new file mode 100644 (file)
index 0000000..4acc160
--- /dev/null
@@ -0,0 +1,13 @@
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM admin_group";
+
+
+$query["search"]="SELECT id, name FROM admin_group
+WHERE name LIKE ? order by name";
+
+$query["get_name"]="SELECT name FROM admin_group WHERE id=?";
+
+
+
diff --git a/erp24/inc/universal_model_types/universal_lists/products.php b/erp24/inc/universal_model_types/universal_lists/products.php
new file mode 100644 (file)
index 0000000..dd88a0b
--- /dev/null
@@ -0,0 +1,6 @@
+<?
+
+// товары с ценами
+$query["search"]="SELECT id, name FROM products_1c  WHERE 1 AND tip='products' AND view=1 AND name LIKE ? order by name ASC";
+$query["all"]="SELECT id, name FROM products_1c  WHERE 1 AND tip='products' AND view=1 order by name ASC";
+$query["get_name"]="SELECT name FROM products_1c  WHERE id=?";
diff --git a/erp24/inc/universal_model_types/universal_lists/products_with_prices.php b/erp24/inc/universal_model_types/universal_lists/products_with_prices.php
new file mode 100644 (file)
index 0000000..967cbe0
--- /dev/null
@@ -0,0 +1,14 @@
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT p.id, p.parent_id, p.name, p.code,p.articule,prices.price FROM products_1c p, prices 
+WHERE p.id=prices.product_id AND p.tip='products' AND p.view=1 order by prices.price DESC";
+
+
+$query["search"]="SELECT p.id,  CONCAT ( p.name, ' <span>', prices.price ,' руб.</span>') as name FROM products_1c p, prices 
+WHERE p.id=prices.product_id AND p.tip='products' AND p.view=1 AND p.name LIKE ? order by prices.price DESC";
+
+$query["get_name"]="SELECT name FROM products_1c WHERE id=?";
+
+
+
diff --git a/erp24/inc/universal_model_types/universal_lists/shipment.php b/erp24/inc/universal_model_types/universal_lists/shipment.php
new file mode 100644 (file)
index 0000000..69e9de8
--- /dev/null
@@ -0,0 +1,11 @@
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM store_orders";
+
+
+$query["search"]="SELECT id, name FROM store_orders
+WHERE name LIKE ? order by name";
+
+$query["get_name"]="SELECT name FROM store_orders WHERE id=?";
+
diff --git a/erp24/inc/universal_model_types/universal_lists/shipment_waybills.php b/erp24/inc/universal_model_types/universal_lists/shipment_waybills.php
new file mode 100644 (file)
index 0000000..7e80c35
--- /dev/null
@@ -0,0 +1,13 @@
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM shipment_waybills WHERE 1";
+
+
+$query["search"]="SELECT  id,name FROM shipment_waybills
+WHERE  name LIKE ?";
+
+$query["get_name"]="SELECT name FROM shipment_waybills WHERE id=?";
+
+
+
diff --git a/erp24/inc/universal_model_types/universal_lists/supplier.php b/erp24/inc/universal_model_types/universal_lists/supplier.php
new file mode 100644 (file)
index 0000000..570bc15
--- /dev/null
@@ -0,0 +1,6 @@
+<?
+
+// поставщики
+$query["search"]="SELECT id, name FROM shipment_providers  WHERE  1 name LIKE ? order by name ASC";
+$query["all"]="SELECT id, name FROM shipment_providers  WHERE  1 order by name ASC";
+$query["get_name"]="SELECT name FROM shipment_providers  WHERE id=?";
diff --git a/erp24/inc/universal_model_view.php b/erp24/inc/universal_model_view.php
new file mode 100644 (file)
index 0000000..0bdd93a
--- /dev/null
@@ -0,0 +1,432 @@
+<?
+/*
+$view_fields_json=[ "field_id":{"posit":12,"name":"Имя","template":"шаблон"}]
+
+*/
+function universal_model_items($model_alias,$view_fields_json="") {
+global $db;
+$model_config=get_config_universal_model($model_alias);
+
+//массив с настройками какие поля показываем
+$json_params=json_decode($view_fields_json, true, 512, JSON_UNESCAPED_UNICODE);
+  
+  
+$fields_array=[];
+$field_table=[];
+$fields_all=[];
+$template_text_all=""; // будет содержать все шаблоны текстовые с переменными для замены - нужно чтобы выбрать из БД нужные поля
+$data = $db::getRows("SELECT * FROM universal_model_fields WHERE model=?",[$model_alias]); 
+foreach($data as $row) {
+$fields_all[$row["id"]]=$row;      
+if(!empty($json_params[$row["id"]]) or empty($view_fields_json) ){
+if(!empty($json_params[$row["id"]]["name"])) $row["name"]=$json_params[$row["id"]]["name"]; 
+$fields[$row["id"]]=$row;  
+$fields_array[$row["field"]]=$row;  
+    $json_params2=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+    if(!empty($json_params2)) {
+     foreach($json_params2 as $field => $value) {
+         if(!empty($value))  $fields[$row["id"]][$field]=$value; 
+      }
+     }
+//if(!empty($json_params[$row["id"]]["posit"])) $row["posit"]=$json_params[$row["id"]]["posit"];  
+if(!empty($json_params[$row["id"]]["template"])) { 
+    //$row["template"]=$json_params[$row["id"]]["template"]; 
+    $template_text_all .=$json_params[$row["id"]]["template"]; }
+}
+}
+
+if(!empty($view_fields_json))
+foreach($json_params as $field_id => $row) $field_table[$field_id]=$row;   
+else $field_table=$fields_all;   
+
+
+
+//echo json_encode($field_table,JSON_UNESCAPED_UNICODE);
+
+$date_format="%d.%m.%Y";
+$datetime_format="%d.%m.%Y в %H:%i";
+
+
+// поставщики
+$query=[];
+$field_model_aliases=[];
+$query["search"]="SELECT id, name FROM shipment_providers  WHERE  1 name LIKE ? order by name ASC";
+$query["all"]="SELECT id, name FROM shipment_providers  WHERE  1 order by name ASC";
+$query["get_name"]="SELECT name FROM shipment_providers  WHERE id=?";
+$query["mapping"]="SELECT id, name FROM shipment_providers  WHERE  id IN ";
+$field_model_aliases["supplier"]=$query;
+
+
+$query=[];
+$query["mapping"]="SELECT id, name FROM store_orders WHERE  id IN ";
+$field_model_aliases["shipment"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id, name FROM companies WHERE id IN ";
+$field_model_aliases["companies"]=$query;
+
+
+
+$query=[];
+$query["mapping"]="SELECT id, CONCAT(name,' инн:', inn) as name FROM companies_organizations WHERE id IN ";
+$field_model_aliases["organizations"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM admin WHERE id IN ";
+$field_model_aliases["admin"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM money_types WHERE id IN ";
+$field_model_aliases["money_types"]=$query;
+
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM money_cashboxes WHERE id IN ";
+$field_model_aliases["money_cashboxes"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM products_1c WHERE id IN ";
+$field_model_aliases["stores"]=$query;
+
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM universal_catalog_item WHERE id IN ";
+$field_model_aliases["stores_all"]=$query;
+
+$fields_table_sql=[];
+   try{  
+   $fields_table_data=$db::getRows("select COLUMN_NAME as field from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =?",[$model_config["table"]]);
+   foreach($fields_table_data as $rowf)   $fields_table_sql[]=$rowf["field"];   
+   }   catch (Exception $e) {             echo 'Выброшено исключение ошибка при выборке полей таблицы: ',  $e->getMessage(), "\n"; }  
+
+
+$universal_catalog_alias_arr=[];
+$fields_select=[];
+$search_values=[];
+$and_where=[];
+if(!empty($_GET["filter"])) {
+foreach($_GET["filter"] as $field_eng => $s_arr) {
+  if(is_array($s_arr)) {  
+      
+      
+     // если date   datetime
+     if(in_array($fields_array[$field_eng]["type"],["date","datetime"]))   {      
+      foreach($s_arr as $key => $val) {
+         if(!is_array($val) and !empty($val)) {      
+             // echo"<br> [$field_eng][$key] $field_eng =$val ".$fields_array[$field_eng]["type"]." ";  
+              if($key=="start")  $condition=">="; else $condition="<="; 
+              $and_where[]=["field"=>$field_eng, "condition"=>$condition, "value"=>"'$val'"];  
+              $search_values[$field_eng][$key]=htmlentities($val); 
+            }
+        } 
+      }
+      ////// multiple select search
+       if(in_array($fields_array[$field_eng]["type"],["multiple","select","search"])  and !empty($s_arr))   {
+        $and_where[]=["field"=>$field_eng, "condition"=>" IN ", "value"=>" ('".implode("','",$s_arr)."') "];   
+        $search_values[$field_eng]=$s_arr; 
+       } 
+     
+      ///////
+      
+      
+      
+    } else {
+           $search_values[$field_eng]=htmlentities($s_arr);  
+             if(in_array($fields_array[$field_eng]["type"],["text","textarea","hidden","number"])  and !empty($s_arr))   {
+               $and_where[]=["field"=>$field_eng, "condition"=>" LIKE ", "value"=>"'%".htmlentities($s_arr)."%'"];  
+             }
+        
+    } 
+    
+}
+}
+
+$and_where_search="";
+foreach($and_where as $wherearr)  $and_where_search .=" AND ".$wherearr["field"]." ".$wherearr["condition"]." ".$wherearr["value"]." ";
+
+echo"$and_where_search<table class=\"table table-sm table-hover table-stripped\"><thead><tr><form method=get action=\"\">";
+foreach($field_table as $field_id => $row) {
+    echo"<th>".$row["name"]."";
+    
+  $fields[$field_id]["style"]=""; 
+  
+  $fields[$field_id]["required"]="";    
+  $fields[$field_id]["change_type"]= $fields[$field_id]["type"]; 
+
+  $fields[$field_id]["change_field_name"]="filter[".$fields[$field_id]["field"]."]"; 
+  
+  $fields[$field_id]["attr"]="";  $fields[$field_id]["class"]="";  
+  if(in_array($fields[$field_id]["type"],["textarea","hidden","number"])) $fields[$field_id]["type"]="text";  
+  elseif(in_array($fields[$field_id]["type"],["select","search","status","created_by"])) {
+      $fields[$field_id]["type"]="multiple"; $fields[$field_id]["class"]="select2"; 
+      if(!empty($fields[$field_id]["query_sql_filter"])) $fields[$field_id]["query_sql"]=$fields[$field_id]["query_sql_filter"]; // заменяем запрос который идет для формы на запрос который идет для фильтра
+  }
+  if(in_array($fields[$field_id]["type"],["date","created_at"])) {
+     foreach(["start","end"] as $ent){  
+       $fields[$field_id]["change_field_name"]="filter[".$fields[$field_id]["field"]."][$ent]"; 
+       
+      $dataValues=[]; $data=[];
+      $fname=$fields[$field_id]["field"];
+      $data["field"]=$fname;
+      $data["default_value"]="";
+      
+      if(isset($search_values[$fname][$ent])) $dataValues[$fname]=$search_values[$fname][$ent];
+       
+        echo  get_form_field_type($fields[$field_id],$dataValues,$model_config["model"]); 
+     }
+      
+  } else {
+      $dataValues=[]; $data=[];
+      $fname=$fields[$field_id]["field"];
+      $data["field"]=$fname;
+      if(!in_array($fields_all[$field_id]["type"],["table","table_function_row"])){
+      if(isset($search_values[$fname])) $dataValues[$fname]=$search_values[$fname];
+     // echo"++ $fname = ".$search_values[$fname]."  +++ ".$dataValues[$fname]." ";
+       echo  get_form_field_type($fields[$field_id],$dataValues,$model_config["model"]); 
+      }
+      
+      
+  }
+    
+    
+    echo"</th>";
+
+}
+
+ echo"</tr>
+ <tr><td colspan=2><button type=submit class=\"btn btn-success btn-sm\" name=model_alias value=$model_alias>поиск</button></td></tr></form>
+</thead><tbody>";
+$fields_templates_select=[];
+ foreach($fields_all as $field_id => $row4) {
+   if(!empty($fields_all[$field_id]["universal_catalog_alias"]))  $universal_catalog_alias_arr[]=$fields_all[$field_id]["universal_catalog_alias"];
+         if(in_array($fields_all[$field_id]["field"],$fields_table_sql)) {
+         if($fields_all[$field_id]["type"]=="date") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$date_format."') as ".$fields_all[$field_id]["field"];
+         elseif($fields_all[$field_id]["type"]=="datetime") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$datetime_format."') as ".$fields_all[$field_id]["field"];
+         else $fields_select[]=$fields_all[$field_id]["field"];
+         
+         $fields_templates_select[]=$fields_all[$field_id]["field"];
+    }
+  }
+
+
+$uni_values=[];
+     try{
+      $fields_select_sql="";  
+      $order_by="";
+
+      
+if(!empty($fields_select)) { 
+          
+
+      // пагинация
+     $limit = 30;
+     $offset = !empty($_GET['p'])?(($_GET['p']-1)*$limit):0;
+     $offset=(int)$offset;
+     //получаем количество записей
+     $resultNum = $db::getRow("SELECT COUNT(*) as postNum FROM ".$model_config["table"]." WHERE 1 $and_where_search");
+     $rowCount = $resultNum['postNum'];
+     $pagConfig = [
+     'baseURL'=>'/universal_model/model_view_config/?model_alias='.$model_alias,
+     'totalRows'=>$rowCount,
+     'perPage'=>$limit ];
+     $pagination =  new Pagination($pagConfig);//инициализируем класс pagination
+
+     // если в шаблонах для отображения полей будет указано поле которое мы не выбрали из БД то его надо добавить - чтобы данные были полные при отображении. Ищем в тексте шалонов {{field}} - и убираем скобки - это и будут названия полей
+     $matches=[]; 
+     if(!empty($template_text_all)) {
+     preg_match_all("/\{{(.+?)\}}/", $template_text_all, $matches);
+     foreach($matches[0] as $pole) {
+         $field=str_replace(['{','}'],'',$pole);// убираем скобки 
+          if(in_array($field,$fields_table_sql))  $templ_field[]=$field; 
+          
+     }
+     $templ_field=array_unique($templ_field); 
+     $fields_select = array_merge($fields_select, $templ_field);
+   // print_r($fields_select);
+
+     }
+
+
+
+
+        $fields_templates=[]; 
+          
+   
+
+         foreach($fields_select as $field3) {
+           if(!in_array($field,$fields_table_sql)) unset($fields_select[$field3]);
+         } 
+        echo"!!!!";
+             print_r($fields_table_sql);
+     
+     echo $model_config["table"];
+         
+         foreach($fields_all as $field_id => $row4) {
+            if(in_array($fields_all[$field_id]["field"],$fields_select) and in_array($fields_all[$field_id]["field"],$fields_table_sql)) { 
+              if($fields_all[$field_id]["type"]=="date") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$date_format."') as ".$fields_all[$field_id]["field"];
+              elseif($fields_all[$field_id]["type"]=="datetime") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$datetime_format."') as ".$fields_all[$field_id]["field"];
+           }
+         }
+
+      
+         
+         
+         $fields_select_sql .=implode(",",$fields_select);  
+           echo"$fields_select_sql";
+          $sql_query="SELECT $fields_select_sql FROM ".$model_config["table"]." WHERE 1 $and_where_search $order_by LIMIT $offset, $limit";   
+          $data = $db::getRows($sql_query);
+  
+         } else error_mess("Не выбраны поля");
+      } catch (Exception $e) {    echo 'Ошибка: '.$sql_query.' ',  $e->getMessage(), "\n";}
+
+$alias_fields=[];
+$status_fields=[];
+$model_field_model_alias=[];
+foreach($data as $row) {
+   foreach($field_table as $field_id => $row2)  {  
+   if(!empty($fields[$field_id]["field_model_alias"])) {
+     if(!empty($row[$fields[$field_id]["field"]])){
+     $forarr=explode(",",$row[$fields[$field_id]["field"]]);
+     $alias_fields[$field_id]=$fields[$field_id]["field_model_alias"];
+     foreach($forarr as $provider_id) {
+     // if(!in_array($provider_id,@$model_field_model_alias[$fields[$field_id]["field_model_alias"]]))     
+      $model_field_model_alias[$fields[$field_id]["field_model_alias"]][$provider_id]=$provider_id;
+     }
+   }
+   }
+   
+   // если в поле хранится значение ID из универсального списка
+    if(!empty($fields[$field_id]["universal_catalog_alias"])) {
+        
+            if($fields[$field_id]["type"]=="multiple"){
+             $forarr=explode(",",$row[$fields[$field_id]["field"]]);
+               foreach($forarr as $pid) {
+                $uni_values[$fields[$field_id]["universal_catalog_alias"]][$pid]=$pid;
+               }   
+            }
+            
+             if(in_array($fields[$field_id]["type"],["select","search"]) and !empty($row[$fields[$field_id]["field"]])){
+               $pid=$row[$fields[$field_id]["field"]];
+               $uni_values[$fields[$field_id]["universal_catalog_alias"]][$pid]=$pid;
+              
+            }           
+     }
+     
+     // если поле статус - его значение складываем в массив и потом отдельно выведем как элемент универсального списка
+     if($model_config["status_name"]==$fields[$field_id]["field"]) {
+       $status_fields[$fields[$field_id]["field"]]=$fields[$field_id]["field"];
+      }
+   } 
+}
+
+
+$dataValues=[];
+foreach($alias_fields as $alias) {
+$model_field_model_alias[$alias] = array_unique($model_field_model_alias[$alias]);    
+$in=implode("','",$model_field_model_alias[$alias]);
+          try{
+           $dataValues[$alias]=$db::mapping($field_model_aliases[$alias]["mapping"]." ('$in')");
+           } catch (Exception $e) {    echo 'Ошибка '.$field_model_aliases[$alias]["mapping"].' (\''.$in.'\')": ',  $e->getMessage(), "\n";}
+}
+
+$status_fields = array_unique($status_fields);  
+foreach($status_fields as $field) {
+  $alias=$db::getValue("SELECT alias FROM universal_catalog WHERE id=?",[$model_config["statuses"]]);
+          try{
+           $dataValues[$model_config["statuses"]]=$db::mapping("SELECT guid as id,name FROM universal_catalog_item WHERE catalog_alias=?",[$alias]);
+           } catch (Exception $e) {    echo 'Ошибка: ',  $e->getMessage(), "\n";}
+}
+
+
+
+$uni_values = array_unique($uni_values);   
+//пробегаемся по массиву универсальных списков и достаем значения
+foreach($uni_values as $catalog_id => $v_arr) {
+   // foreach($v_arr as $v_id) echo"<br>+ $catalog_id ->  $v_id ";
+    $in=implode("','",$v_arr);
+    try{
+    $dataValues[$catalog_id]=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE id IN ('$in')");
+    } catch (Exception $e) {    echo 'Ошибка universal_catalog_item : ',  $e->getMessage(), "\n";}
+
+}
+
+
+
+foreach($data as $row) {
+echo"<tr>";
+// показываем только поля которые выбраны для отображения
+foreach($field_table as $field_id => $row2)  {
+   $value=""; 
+   if(isset($row[$fields[$field_id]["field"]])) $value=$row[$fields[$field_id]["field"]];
+     // если у поля указана модель алиаса в настройках поля то достаем значения по ID
+   if(!empty($fields[$field_id]["field_model_alias"])) {
+   if(isset($field_model_aliases[$fields[$field_id]["field_model_alias"]])) {
+    
+   if($fields[$field_id]["tip"]=="array"){
+
+     $forarr=explode(",",$value);
+    $value=[]; 
+     foreach($forarr as $p_id) {
+      if(!empty($p_id)) {
+        if(isset($dataValues[$fields[$field_id]["field_model_alias"]])) 
+       $value[]=$dataValues[$fields[$field_id]["field_model_alias"]][$p_id];   
+      }
+      }
+      $value=implode(',',$value);  
+    } else {
+       
+         if(!empty($value) and !empty($dataValues[$fields[$field_id]["field_model_alias"]][$value])) $value=$dataValues[$fields[$field_id]["field_model_alias"]][$value];      
+       
+      }
+      
+      }
+   }
+   
+    // если это значение универсального списка 
+  if(!empty($fields[$field_id]["universal_catalog_alias"]) and !empty($dataValues[$fields[$field_id]["universal_catalog_alias"]][$value]))  $value=$dataValues[$fields[$field_id]["universal_catalog_alias"]][$value];
+   
+
+    // если это значение статусного поля
+  elseif( $fields[$field_id]["field"]==$model_config["status_name"] and !empty($dataValues[$model_config["statuses"]][$value]))  $value=$dataValues[$model_config["statuses"]][$value];
+    
+    
+      // если это seelct c JSON значение универсального списка 
+  if(in_array($fields[$field_id]["type"],["select","multiple"]) and !empty($fields[$field_id]["select_array_json"][$value])) {
+    $value=$fields[$field_id]["select_array_json"][$value];
+  
+   
+  }    
+
+  
+  if(!empty($row2["template"])) {
+      
+         $value=str_replace("{{this}}",$value,$row2["template"]);
+
+ // $value=str_replace("{{comments}}",'1111',$value);
+      foreach($fields_templates_select as $field) {
+            $value=str_replace("{{".$field."}}",$row[$field],$value);
+          //  echo "<br>!".$field." =".$row[$field]; 
+            
+        }
+       $value=html_entity_decode($value);
+   
+    }
+    if(empty($value)) $value="";
+   
+    echo"<td>".$value."</td>";
+    
+    
+}
+
+echo"</tr>";
+}
+
+echo"</tbody></table>";
+
+
+  // Вывод меню если страниц больше одной
+ //получаем записи
+if(!empty($data)) echo $pagination->createLinks();
+
+}
index 935bafff4178f380dd2a49f45db3bca221fb1e68..ee27448f91c69d4e624fd8121312d8f6763f798c 100644 (file)
@@ -1,4 +1,4 @@
-<?php
+<?
 function upload_file($name,$check_id,$id,$param=array("path"=>"data/{name}","ext"=>array("jpg"),"resizeimg"=>array("image_sm"=>array("path"=>"data/{name}","width"=>1300,"height"=>1300)))) {
 global $_CONFIG_SITE, $db,$sql_table_image, $return_mess;    
 $error="";
index 995a91c04cc54cab8c318e7b5ef402f7311027dc..0cbbce3949c03a9b1d511d4a92fb49b688dcb97f 100644 (file)
@@ -6,6 +6,9 @@ include_once("inc/design_new.php");
 
 
 global $modul,$act;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
 $modul="bonus";
 $act="bonus_users";
 
@@ -42,7 +45,7 @@ echo" Мужчин (".$all_pol["man"].") <b>$men%</b>  Женщин (".$all_pol[
 
 //print_r($array_male); //
 $data=$db::getRows("SELECT name,name_name,pol, count(*) as cnt FROM `users` WHERE  name_name!='' AND (pol='none' or pol='')
-GROUP BY name_name ORDER BY cnt DESC LIMIT 50000");
+GROUP BY name_name, name, pol ORDER BY cnt DESC LIMIT 50000");
 foreach($data as $row) {
     $name=trim(mb_strtolower($row["name_name"], 'UTF-8'));
  echo" <br>$name ".$row["cnt"]." ";  
index 9462ba4497517dd4dd67c0c4fc07bab91369a8d1..86c93db56947ccca1d767eb36a817ae5cb53fba4 100644 (file)
@@ -5,6 +5,8 @@ include_once("inc/base_new.php");
 
 include"templates/top.php";
 
+error_reporting(E_ALL ^ E_NOTICE);
+
 $modul="sales_checks";
 $act="index";
 
@@ -56,8 +58,9 @@ $offset=(int)$offset;
 
 
 
-echo"<form method=post action=\"/$modul/$act/\">
-наименование чека  <input type=text name=search[number] value=\"".$search["number"]."\">
+echo"<form method=post>"
+    . '<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() . '" />' .
+"наименование чека  <input type=text name=search[number] value=\"".$search["number"]."\">
 
 Телефон <input type=text name=search[phone] value=\"".$search["phone"]."\">
 
diff --git a/erp24/modul/shipment/ajaxDivisionAutoHandStart.php b/erp24/modul/shipment/ajaxDivisionAutoHandStart.php
new file mode 100644 (file)
index 0000000..54478a7
--- /dev/null
@@ -0,0 +1,311 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+if(!empty($_REQUEST["id"])) { 
+$orderId=(int)$_REQUEST["id"]; 
+
+
+include"modul/shipment/functionsShipment.php";
+$FiledsData=getDataFiledsData($orderId);
+$storeOrderArray=getRelationshipCityStore();
+
+
+global $dataUpdate;
+$dataUpdate=[];
+
+// сохраняет в глобальный массив $dataUpdate результат распределние товаров по цветам - то что будкем сохранять в БД
+function doit($product_id,$color="NULL") { 
+global $db,$FiledsData,$prioritetStores,$storeOrderArray,$products, $dataUpdate,$orderStoresArrayRelation_in; 
+
+
+if(empty($prioritetStores)) {
+  $data=$db::getRows("SELECT store_id FROM store_orders_product_store_sort 
+  WHERE product_id=? AND view='1' AND store_id $orderStoresArrayRelation_in order by posit DESC",[$product_id]);
+  foreach($data as $row)   $prioritetStores[$row["store_id"]]=$row["store_id"];
+ }
+
+if(empty($FiledsData["min_lot"][$product_id]["NULL"]["NULL"])) echo"<font color=red>Мин. лот = 0 заполните минимальный лот у товара!!</font>";
+
+if(empty($prioritetStores)) echo"<span class=\"fs-4 color-red m-10\">У товара ".$products[$product_id]." нет
+<a href=\"/shipment/productStoresSort/?product_id=$product_id\" target=new class=\"btn btn-warning btn-sm\">сортировки по магазинам для 
+распределения</a> </span>";
+
+
+$quantity_warehouseman_fact=(int)$FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"][$color];
+$division_store_ratio=$FiledsData["division_store_ratio"][$product_id]["NULL"][$color];
+$division_store=(int)$FiledsData["division_store"][$product_id]["NULL"][$color];
+$division_store_hand=(int)$FiledsData["division_store_hand"][$product_id]["NULL"][$color];
+$division_store_summ=(int)$FiledsData["division_store_summ"][$product_id]["NULL"][$color];
+$storehouse_balance=(int)$FiledsData["storehouse_balance_store"][$product_id]["NULL"][$color];
+$min_lot=(int)$FiledsData["min_lot"][$product_id]["NULL"]["NULL"];
+$prioritetStoresN=$prioritetStores;
+
+$info="";
+if(!empty($quantity_warehouseman_fact)) {
+$table ="
+<table  class=\" m-0 p-0 w-100\" cellpadding=0 cellspacing=1 style=\"background:#dcdeff;\"><thead><th>Мин. лот</th><th>Получено по факту</th>
+<th>коэффицент деления</th>
+<th>авто-деление итого</th>
+<th>ручные добавки сумма</th>
+<th>остаток на складе</th>
+</thead>
+<tbody><tr><td>$min_lot</td>
+<td>$quantity_warehouseman_fact</td>
+<td>$division_store_ratio";
+if(empty($division_store_ratio)) $table .="<font color=red>Коэфицент деления 0!</font>";
+
+$table .="</td>
+<td>$division_store</td>
+<td>$division_store_hand</td>
+<td>$storehouse_balance</td></tr></tbody></table>";
+
+$j=1;
+if($storehouse_balance>0) {
+   // цикл начисления минимального лота  
+   
+
+$txt=[];
+$storeCnt=[];
+ do{
+  // echo"<b>1 этап: Насиляем магазинам кто в заявке указал свою потребность. Посность закрываем потребности магазинов</h3>";
+   foreach($prioritetStoresN as $storeId => $store) {
+       //потребность магазина
+      $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId][$color];
+      $division_store_summ=(int)$FiledsData["division_store_summ"][$product_id][$storeId][$color];
+      
+      
+      if($division_store_summ>$storeCnt[$storeId]) $maxlevel=$division_store_summ;
+      else $maxlevel=$storeCnt[$storeId];
+      
+      
+    // echo"<br> ".$storeOrderArray[$storeId]."  ($q >= $n  $q>0 && $division_store_summ<=$n ) + $min_lot  q=$q division_store_summ=$division_store_summ";
+     
+     // если магазин нуждается в начислении - его потребность не закрыта - то начисляем
+
+     if( $q >= ($maxlevel+$min_lot) && $q>0 && $division_store_summ<=($maxlevel+$min_lot)) { 
+          $storeCnt[$storeId] +=$min_lot;
+         $storehouse_balance -=$min_lot; 
+      echo"<br>$j) <b>".$storeOrderArray[$storeId]."</b> + $min_lot = <b>".$storeCnt[$storeId]."</b> шт. ";
+      $txt[$storeId] .=" +$min_lot ";
+                if($q==$n)   unset($prioritetStoresN[$storeId]);
+                 $j++;
+     } else  {
+         unset($prioritetStoresN[$storeId]);
+           //  echo"<br>$j) ".$storeOrderArray[$storeId]." нет потребности!";  
+     }
+    
+     if($storehouse_balance<=0 || empty($prioritetStoresN)) break;
+    }
+
+ if(empty($prioritetStoresN)) break;
+  $j=1;
+ } while($storehouse_balance>0 ||  empty($prioritetStoresN));  
+ foreach($storeCnt as $storeId => $cnt) {
+ if($color=="NULL") $colorInt=0;    else $colorInt=$color; 
+ $dataUpdate[$product_id][$storeId][$colorInt]=intval($cnt + $FiledsData["division_store_hand"][$product_id][$storeId][$color]);
+}
+ $table .='<table class=" m-0 p-0 w-100" cellpadding=0 cellspacing=1>
+ <thead style="background:#fffddc"><th>магазин</th><th>заказ от магазина</th><th>начисления по мин. лоту </th>
+</thead><tbody>';
+$n=0;
+   foreach($prioritetStores as $storeId => $store) {
+    $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId][$color];
+    if($q) {
+    $table .='<tr><td class="text-right">'.$storeOrderArray[$storeId].'</td>
+    <td>'.$q.'</td>
+    <td class="text-left w-60" style="color:green">'.$txt[$storeId].'</td>
+    </tr>   ';  
+    $n++;
+    }
+       
+   }
+$table .='</tbody></table>';  
+
+
+
+} //end balance
+
+} else $info="<span class=\"btn btn-sm btn-danger\">НЕТ НА СКЛАДЕ</span>";
+
+
+if(empty($n))  $info .="<span class=\"btn btn-sm btn-info\">нет потребности</span>";
+
+
+echo"<h3>".$products[$product_id]." $color $info</h3>"; 
+
+if($n) echo $table;
+
+}// end function doit
+$productsForeach=$products;
+if($_REQUEST["product_id"]) { // если в запросе только один товар то пробегаемся только понему
+    $product_id=htmlentities($_REQUEST["product_id"]); 
+    $productsForeach=[];
+    $productsForeach[$product_id]=$products[$product_id];
+}
+
+// пробегаемся по товарам в закупке
+foreach($productsForeach as $product_id => $nameProduct) {
+ // только те товары по корым пришел товар от кладовщика    
+ if($FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"]) {    
+    echo"<br> $nameProduct ";    
+  $doit_color=[];  // массив с цветами товара 
+  $doit_color=$productsColorsArray[$product_id];
+   $doit_color[]="NULL"; // элемент массива - без цветов - общее
+   foreach($doit_color as $color) {
+       doit($product_id,$color);  //начисляем
+   }   
+ }
+}
+
+$data_up=$dataUpdate;
+
+if(!empty($data_up)) insert_store_orders_fields($data_up,"division_store_hand"); 
+}
+
+/*
+
+
+
+if(0 and $storehouse_balance>0) {
+    
+
+    echo"<h3>2 этап: Если остался остаток на распределение после 1 этапа = $storehouse_balance шт.    Распределяем весь остаток согласно списка приоритетности по магазинам длоя этого товара    </h3>";
+$prioritetStoresN=$prioritetStores;
+    
+   // цикл начисления минимального лота  
+ do{
+  // echo"<br> Насиляем";
+   foreach($prioritetStoresN as $storeId => $store) {
+       //потребность магазина
+      $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId]["NULL"];
+      $division_store_summ=(int)$FiledsData["division_store_summ"][$product_id][$storeId]["NULL"];
+  //  echo"<br>@@@".$storeOrderArray[$storeId]."  +q= $q min_lot=$min_lot = ".$storeCnt[$storeId]." шт. ";
+    
+     // если магазин нуждается в начислении - его потребность не закрыта - то начисляем
+     $n=$storeCnt[$storeId]+$min_lot;
+     if( $q==0 && $division_store_summ<$n) { 
+          $storeCnt[$storeId] +=$min_lot;
+         $storehouse_balance -=$min_lot; 
+      echo"<br>$j) ".$storeOrderArray[$storeId]."  + $min_lot = ".$storeCnt[$storeId]." шт. ";
+                if($q==$n)   unset($prioritetStoresN[$storeId]);
+     } else  {
+         unset($prioritetStoresN[$storeId]);
+            // echo"<br>$j) ".$storeOrderArray[$storeId]." нет потребности!";  
+     }
+     $j++;
+     if($storehouse_balance<=0 || empty($prioritetStoresN)) break;
+    }
+
+ if(empty($prioritetStoresN)) break;
+  $j=1;
+ } while($storehouse_balance>0 ||  empty($prioritetStoresN));  
+}
+
+ $arrayFiledsUpdate=[
+"quantity_zakup_new",
+"sales_division_4weeks_cnt_avg",
+"division_store_ratio",
+"division_store",
+"division_store_hand",
+"division_store_summ",
+"storehouse_balance_store"]; 
+
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";    
+  if(is_file($f)) {
+     $data_up=[]; 
+      include_once($f); 
+     if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+     }
+  } 
+}
+
+
+
+
+//$sales_division_4weeks_cnt_avg=(int)$FiledsData[""][$product_id]["NULL"]["NULL"];
+
+//sales_4weeks_cnt
+/*
+echo"Массив сортировка по закупке";
+$sortStoreZakup=[];
+$positArray=[];
+$data=$db::getRows("SELECT store_id, value FROM store_orders_fields_data
+WHERE product_id=? AND order_id=?  AND field_name='quantity_zakup_new' AND store_id!='' AND color='' group by store_id order by value DESC",[$product_id,$orderId]);
+$k=1;
+foreach($data as $row) {
+ echo"<br> $k) ".$storeOrderArray[$row["store_id"]]." = ".(int)$row["value"]." ";  
+ $sortStoreZakup[]=$row["store_id"];
+ $positArray[$row["store_id"]]=1;
+ $k++;
+}
+echo"<br>Средние продажи от даты сейчас";
+$day_sales=7*4;
+$data2=$db::getRows("SELECT  s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id='$product_id'
+AND s.store_id $orderStoresArrayRelation_in
+AND s.date<=NOW() AND s.date>=NOW() -interval $day_sales day group BY  s.store_id order by sale_cnt DESC");    
+$k=1;
+  foreach($data2 as $row2) { 
+   $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+  echo"<br>$k)  ".$storeOrderArray[$row2["store_id"]]." = $cnt ";   
+   $k++;
+ }
+
+
+echo"<br> Статситика по магазинам по продажам за 4 недели среднее арифм. от даты деления - 28 дней по убыванию";
+$data=$db::getRows("SELECT store_id, value FROM store_orders_fields_data
+WHERE product_id=? AND order_id=?  AND field_name='sales_division_4weeks_cnt_avg' AND store_id!='' AND color='' group by store_id order by value DESC",[$product_id,$orderId]);
+$k=1;
+foreach($data as $row) {
+ echo"<br> $k) ".$storeOrderArray[$row["store_id"]]." = ".(int)$row["value"]." ";  
+ $sortStore[]=$row["store_id"];
+ $positArray[$row["store_id"]]++;
+ $k++;
+}
+
+arsort($positArray);
+
+echo"<br>Итоговый список сортировки";
+$k=1;
+foreach($positArray as $storeId => $vl) {
+  echo"<br> $k) ".$storeOrderArray[$storeId]." = $vl ";     
+   $k++;  
+}
+*/
+
+/*
+echo"<b>Начисление по минимальному лоту деления будет прохордить по порядку:</b><table class=\"zak\">
+<thead><th></th>
+<th>магазани</th>
+<th>заказ магазина</th>
+<th>деление итого</th>
+</thead>
+<tbody>";
+$k=1;
+foreach($prioritetStores as $storeId => $vl) {
+     $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId]["NULL"];
+     $division_store_summ=(int)$FiledsData["division_store_summ"][$product_id][$storeId]["NULL"];
+     if(empty($q)) $q="нет заявки";
+  echo"<tr><td> $k</td><td class=\"text-left\">".$storeOrderArray[$storeId]."</td><td>$q</td><td>$division_store_summ</td></tr>  ";     
+   $k++;  
+}
+echo"</tbody></table>";
+
+*/
+
+
+
+
+
diff --git a/erp24/modul/shipment/ajaxDivisionInfo.php b/erp24/modul/shipment/ajaxDivisionInfo.php
new file mode 100644 (file)
index 0000000..7254f48
--- /dev/null
@@ -0,0 +1,114 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+if(!empty($_REQUEST["id"])) { 
+$orderId=(int)$_REQUEST["id"]; 
+
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+include"modul/shipment/functionsShipment.php";
+
+
+if($_REQUEST["save"]){
+    
+    $quantity_zakup_new=intval($_REQUEST["quantity_zakup_new"]);
+    $quantity_warehouseman_fact=intval($_REQUEST["quantity_warehouseman_fact"]);
+    
+    $data_up=[];
+    $data_up[$product_id][0][0]=$quantity_warehouseman_fact;
+    insert_store_orders_fields($data_up,"quantity_warehouseman_fact"); 
+   
+     $data_up=[];
+    $data_up[$product_id][$store_id][0]=$quantity_zakup_new; 
+    insert_store_orders_fields($data_up,"quantity_zakup_new");   
+    
+$arrayFiledsUpdate=["quantity_zakup_new","division_store_ratio", "division_store","division_store_hand","division_store_summ"];
+ foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";    
+  if(is_file($f)) {
+     $data_up=[]; 
+          include_once($f); // получаем данные в массив  $data_up
+     if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+    }
+}
+}
+    
+    mess("Сохранили");
+    
+ exit();   
+}
+
+
+$FiledsData=getDataFiledsData($orderId);
+
+echo"<b>".$products[$product_id]." для  ".$storesArrayAll[$store_id]."</b>
+
+<div id=saver></div>
+<table class=\"table table-bordered table-stripped info\">
+<tr><td>
+<input type=numeric name=quantity_zakup_new 
+id=quantity_zakup_new value=\"".(int)$FiledsData["quantity_zakup_new"][$product_id][$store_id]["NULL"]."\"> шт </td>
+<td>Заказ магазина </td></tr> 
+<tr><td><b>".(int)$FiledsData["quantity_zakup_new"][$product_id]["NULL"]["NULL"]."</b> шт </td>
+<td>Общая потребность магазинов </td></tr> 
+<tr>
+<td><input type=numeric name=quantity_warehouseman_fact id=quantity_warehouseman_fact
+value=\"".(int)$FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"]["NULL"]."\"> шт </td>
+<td>Получено по факту </td></tr>";
+
+
+
+
+
+
+echo"
+<tr><td>".round($FiledsData["division_store_ratio"][$product_id]["NULL"]["NULL"],2)."  =
+".ceil($FiledsData["division_store_ratio"][$product_id]["NULL"]["NULL"] * 100)." % </td>
+<td>Коэфицент деления. Не более 100%. (Получено по факту/Общая потребность магазинов
+= ".(int)$FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"]["NULL"]."/".(int)$FiledsData["quantity_zakup_new"][$product_id]["NULL"]["NULL"]." )</td>
+
+</tr> 
+
+
+
+<tr><td><b>".(int)$FiledsData["division_store"][$product_id][$store_id]["NULL"]."</b> шт </td>
+<td>Деление на магазин </td></tr> 
+<tr><td><b>".(int)$FiledsData["division_store_hand"][$product_id][$store_id]["NULL"]."</b> шт </td>
+<td>Ручная добавка </td></tr> 
+<tr><td><b>".(int)$FiledsData["division_store_summ"][$product_id][$store_id]["NULL"]."</b> шт </td>
+<td>Сумма деления на магазин Итого </td></tr> 
+
+
+<tr><td></td>
+<td>Продажи для деления</td></tr> 
+
+</table>
+
+<button onclick=\"ajaxSave()\" class=\"btn btn-info\">сохранить</button>
+";
+
+
+echo"
+
+<script>
+function ajaxSave(){
+
+ $.ajax({
+       url: '/shipment/ajaxDivisionInfo/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, product_id: '$product_id', store_id: '$store_id', save: 1, 
+       'quantity_zakup_new': $('#quantity_zakup_new').val(),
+       'quantity_warehouseman_fact': $('#quantity_warehouseman_fact').val() },  
+       success: function(data){  
+    $('#saver').html(data);
+  
+       }}); 
+}
+</script>
+";
+
+
+}
diff --git a/erp24/modul/shipment/ajaxDivisionUpdate.php b/erp24/modul/shipment/ajaxDivisionUpdate.php
new file mode 100644 (file)
index 0000000..fa00180
--- /dev/null
@@ -0,0 +1,60 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+if(!empty($_REQUEST["id"]))  $orderId=(int)$_REQUEST["id"];  else exit("Укажите ID закупки");
+
+include"modul/shipment/functionsShipment.php";
+
+
+if(empty($orderCityId)) {
+   error_mess("Укажите город у закупки - новый метод расчета должен опираться на статистику по Городу!");
+   exit();
+} 
+
+
+ $arrayFiledsUpdate=[
+"quantity_zakup_new",
+"sales_division_4weeks_cnt_avg",
+"division_store_ratio",
+"division_store_hand",
+"division_store",
+"division_store_summ",
+//"purchase_fact_difference",
+"storehouse_balance",
+"storehouse_balance_store",
+]; 
+
+ob_start();
+
+echo"<table><tbody>";
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";    
+  if(is_file($f)) {
+     $data_up=[]; 
+     
+     echo"<tr><td colspan=2>";
+      include_once($f); // получаем данные в массив  $data_up
+      echo"</td></tr>";
+      
+     if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+     }
+     echo"<tr><td class=\"text-right\"> <span class=\"btn btn-sm btn-default\">".$fieldsRows[$Field]["name"]." ".$fieldsRows[$Field]["name_eng"]."</span> </td><td><span class=\"btn btn-sm btn-success\">посчитано</span>";
+     
+     if(empty($data_up))  echo"пусто";
+     echo"</td></tr> ";
+     
+  } else {
+      
+      echo"<tr><td colspan=2> !!нет файла $f</td></tr>";
+  }
+}
+echo"</tbody></table>";
+
+$output = ob_get_contents();
+ob_end_clean();
+
+if(in_array($_SESSION["group_id"],[1,10])) echo $output;
+//echo'<script> setTimeout(() => window.parent.location.reload(), 0);</script>';
diff --git a/erp24/modul/shipment/ajaxField.php b/erp24/modul/shipment/ajaxField.php
new file mode 100644 (file)
index 0000000..29294ec
--- /dev/null
@@ -0,0 +1,176 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+
+if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+$whereInProductsId=" in('$product_id') ";
+$products=[$product_id=>"товар"];
+
+
+//echo"$name_eng=$value $product_id $store_id";
+if(!empty($store_id)) {
+global $dependent_fields;    
+$data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1"); 
+foreach($data as $row) { 
+    $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);  
+    $fieldRows[$row["id"]]=$row["name_eng"];
+}    
+    
+global $arrayp;
+
+function recurs_depended($fieldId) {
+ global $dependent_fields,$arrayp;
+ $arrayp .=",".implode(",",$dependent_fields[$fieldId]);    
+ foreach($dependent_fields[$fieldId] as $fieldId2)          recurs_depended($fieldId2); 
+ return $arrayp;
+}    
+    
+    
+    
+    
+$row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]); 
+if(is_array($row)) { 
+    $tip=$row["tip"];
+    $fieldId=$row["id"];
+    
+if(1) {    
+$arrayp=recurs_depended($fieldId); 
+
+
+$arrayp = array_unique(explode(",",$arrayp));
+$arrayp = array_diff($arrayp, array(''));
+//echo "++++".print_r($arrayp)."  ";   
+
+
+$updateFieldsArray=[];
+//echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией   ";
+foreach($arrayp as $k) {
+    
+ if(is_numeric($k))  { echo"<br>---+++$k ".$fieldRows[$k].""; 
+  $updateFieldsArray[]=$fieldRows[$k];     
+     
+ }
+    
+}
+
+
+
+
+
+
+if(!empty($updateFieldsArray))
+{
+//include_once("inc/functionsFiedlsData.php");  
+    
+//updateProductArrayDataField($updateFieldsArray);
+}
+
+
+}
+
+if($tip=="string") $pole="value_text"; else $pole="value"; 
+
+if(empty($color)  or $color=='undefined' or $color=='NULL') $color='';
+if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
+
+
+
+$up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
+//if($_SESSION["group_id"]==1) echo $up;
+if(isset($value)) {
+if($name_eng=="quantity_zakup_new") {
+ $min_lot=1;
+ $min_lot=$db::getValue("SELECT min_lot FROM products_1c_options WHERE id=?",[$product_id]);
+ $value=(int)$value;
+  $a = $value/$min_lot;
+  $b = $a - floor($a); // $b = 0.5953
+    if($b>0 || $value < $min_lot) exit("вы ввели данные не краные минимальному лоту деления!");   
+}
+ //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+ //echo"удаление пустой записи";   
+    
+
+    
+$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=?
+AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);    
+$value_old=str_replace('.000','',$value_old);    
+$sql="INSERT IGNORE INTO store_orders_fields_data SET  ";
+  $up2 =" $pole='$value'"; 
+  $up .= ",".$up2; 
+$sql .="$up ON DUPLICATE KEY UPDATE $up2";
+$db::sql($sql);
+//echo'сохранили '.$name_eng.' store_id='.$store_id.' '.$name_eng.'  color='.$color.' value='.$value.'  ';
+  
+  
+
+$db::sql("INSERT INTO store_orders_fields_data_logi
+(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
+VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
+// обновляем данные для зависимых полей 
+ if(!empty($arrayp) and !empty($id)) {
+    
+//echo"Считаем Заивисимые поля";
+//print_r($arrayp);    
+ $orderId=(int)$id; 
+include_once("modul/shipment/functionsShipment.php");
+
+foreach($arrayp as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";    
+  if(is_file($f)) {
+     $data_up=[]; 
+       include_once($f); // получаем данные в массив  $data_up
+      if(!empty($data_up)) { 
+          
+        //  echo"<br>".$fieldsRows[$Field]["name"];
+          
+          //print_r($data_up);
+          insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+     }
+     
+}   
+
+}
+}//END обновляем данные для зависимых полей 
+   
+  
+}
+
+
+
+
+
+} else echo'Поля '.$name_eng.' нет в таблице ';
+
+}
+
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/ajaxFieldEdit.php b/erp24/modul/shipment/ajaxFieldEdit.php
new file mode 100644 (file)
index 0000000..0f012f8
--- /dev/null
@@ -0,0 +1,162 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+
+if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+$whereInProductsId=" in('$product_id') ";
+$products=[$product_id=>"товар"];
+
+
+//echo"$name_eng=$value $product_id $store_id";
+if(!empty($store_id)) {
+global $dependent_fields;    
+$data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1"); 
+foreach($data as $row) { 
+    $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);  
+    $fieldRows[$row["id"]]=$row["name_eng"];
+}    
+    
+global $arrayp;
+
+function recurs_depended($fieldId) {
+ global $dependent_fields,$arrayp;
+ $arrayp .=",".implode(",",$dependent_fields[$fieldId]);    
+ foreach($dependent_fields[$fieldId] as $fieldId2)          recurs_depended($fieldId2); 
+ return $arrayp;
+}    
+    
+    
+    
+    
+$row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]); 
+if(is_array($row)) { 
+    $tip=$row["tip"];
+    $fieldId=$row["id"];
+    
+if(1) {    
+$arrayp=recurs_depended($fieldId); 
+
+
+$arrayp = array_unique(explode(",",$arrayp));
+$arrayp = array_diff($arrayp, array(''));
+//echo "++++".print_r($arrayp)."  ";   
+
+
+$updateFieldsArray=[];
+//echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией   ";
+foreach($arrayp as $k) {
+    
+ if(is_numeric($k))  { echo"<br>---+++$k ".$fieldRows[$k].""; 
+  $updateFieldsArray[]=$fieldRows[$k];     
+     
+ }
+    
+}
+
+
+
+
+
+
+if(!empty($updateFieldsArray))
+{
+//include_once("inc/functionsFiedlsData.php");  
+    
+//updateProductArrayDataField($updateFieldsArray);
+}
+
+
+}
+
+if($tip=="string") $pole="value_text"; else $pole="value"; 
+
+if(empty($color)  or $color=='undefined' or $color=='NULL') $color='';
+if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
+
+
+$up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
+
+if(isset($value)) {
+ //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+ //echo"удаление пустой записи";   
+    
+//echo'сохранили '.$up.' '.$name_eng.' store_id='.$store_id.' '.$name_eng.'  color='.$color.' value='.$value.'  ';
+  
+    
+$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=?
+AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);    
+$value_old=str_replace('.000','',$value_old);    
+$sql="INSERT IGNORE INTO store_orders_fields_data SET  ";
+  $up2 =" $pole='$value'"; 
+  $up .= ",".$up2; 
+$sql .="$up ON DUPLICATE KEY UPDATE $up2";
+$db::sql($sql);
+
+  
+
+$db::sql("INSERT INTO store_orders_fields_data_logi
+(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
+VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
+// обновляем данные для зависимых полей 
+ if(!empty($arrayp) and !empty($id)) {
+    
+//echo"Считаем Заивисимые поля";
+//print_r($arrayp);    
+ $orderId=(int)$id; 
+include_once("modul/shipment/functionsShipment.php");
+
+foreach($arrayp as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";    
+  if(is_file($f)) {
+     $data_up=[]; 
+       include_once($f); // получаем данные в массив  $data_up
+      if(!empty($data_up)) { 
+          
+        //  echo"<br>".$fieldsRows[$Field]["name"];
+          
+          //print_r($data_up);
+          insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+     }
+     
+}   
+
+}
+}//END обновляем данные для зависимых полей 
+   
+  
+}
+
+
+} else echo'Поля '.$name_eng.' нет в таблице ';
+
+}
+
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/ajaxProductOption.php b/erp24/modul/shipment/ajaxProductOption.php
new file mode 100644 (file)
index 0000000..e9b1b7b
--- /dev/null
@@ -0,0 +1,65 @@
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+
+if(!empty($_POST["product_id"])) $product_id=htmlentities($_POST["product_id"]);
+if(!empty($_POST["action"])) $action=htmlentities($_POST["action"]);
+
+if(empty($action)) $action="add";
+
+if($action=="edit") {
+    
+if(!empty($_POST["id"])) $id=intval($_POST["id"]);
+
+$rowValue=$db::getRow("SELECT * FROM shipment_waybill_products WHERE id=?",[$id]);
+$product_id=$rowValue["product_id"];
+echo  "<input type=hidden id=waybill_product_id name=waybill_product_id value=\"$id\">";
+}
+
+
+
+$nameProduct=$db::getValue("SELECT name FROM products_1c WHERE id=?",[$product_id]);
+
+$data=$db::getRows("SELECT id,color,name FROM products_varieties WHERE product_id=? order by color ASC, name ASC",[$product_id]);
+foreach($data as $row) {
+ $products_varieties[$row["id"]] = $row["name"];   
+ $products_color[$row["id"]] = $row["color"];   
+}
+
+   echo"<b>$nameProduct</b> 
+   
+<table class=\"table table-sm\">
+ <input type=hidden id=product_id name=product_id value=\"$product_id\">";
+if($products_varieties) { 
+ echo"<tr><td class=\"w-20 text-right\"> Сорт </td><td><select name=varietie_id id=varietie_id class=\"select-control form-control\" style=\"width:200px;\">";
+    echo"<option value=\"0\">-не указано-</option>";  
+        foreach($products_varieties as $idn => $name){ 
+        echo "<option value=\"$idn\" "; if($rowValue["varietie_id"]==$idn) echo" selected"; echo">$name (".$products_color[$idn].")</option>"; 
+    
+     } 
+    echo"</select></td></tr>";
+   
+ }
+    echo"
+  <tr><td class=\"w-20 text-right\"> Кол-во </td><td> <input type=numeric class=\"form-control\" name=quantity id=quantity value=\"".$rowValue["quantity"]."\"></td></tr>    
+  <tr><td class=\"w-20 text-right\"> Цена закупки </td><td> <input type=text class=\"form-control\" name=price  id=price value=\"".$rowValue["price"]."\"></td></tr>
+   <tr><td class=\"w-20 text-right\"> Цена логистики </td><td> <input type=text class=\"form-control\" name=price_logistic  id=price_logistic value=\"".$rowValue["price_logistic"]."\"></td></tr>
+   
+  
+     
+</table>
+<button class=\"btn btn-lg btn-success\" value=$action name=save>Добавить</button>   ";
+
+if($action=="edit") {
+echo" <button class=\"btn btn-sm btn-danger\" value=dell name=save>удалить</button>  ";
+  
+    
+}
+
+    
+    
+    
\ No newline at end of file
index 0383a22eef08aa531c6db17c7dd76ae27d2fda11..e093223da1159f077c88117d48ceb91fb0fa812c 100644 (file)
@@ -4,7 +4,9 @@ include_once("inc/db.php");
 include_once("inc/base_new.php");
 include_once("inc/design_new.php");
 
-
+ini_set('error_reporting', E_ALL);
+ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
 global $products, // массив с товарами производителя прикрепленного к этой закупке
 $orderId, // id- заказа
 $store_id, // GUID магазина
@@ -47,7 +49,7 @@ exit();
 
 
 //$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_ratio' or field_name='division_auto' or field_name='storehouse_balance') AND order_id='$orderId'");    
-$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");    
+//$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");    
 
 include_once("inc/shipment.php");
 include"inc/functionsFiedlsData.php";
@@ -182,9 +184,9 @@ $orders_where=" AND order_id in($orders_where) AND order_id!='$orderId'";
   $orders_where group by order_id, product_id,color");
      foreach($data as $row) {
        if(empty($row["color"])) $color="NULL"; else $color=$row["color"];    
-       $data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
+       @$data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
      
-       $titleArr[$row["product_id"]]["NULL"][$color] .="
+       @$titleArr[$row["product_id"]]["NULL"][$color] .="
        id=".$row["order_id"]." ".$store_orders[$row["order_id"]]."=".(int)$row["value"]." шт."; 
        
        
@@ -503,7 +505,7 @@ foreach($products as $productId =>$nameProduct) {
 
 
 
-
+exit("===");
 
 insert_store_orders_fields($FiledsData["division_hand_summ"],"division_hand_summ");  
 insert_store_orders_fields($FiledsData["division_auto_all"],"division_auto_all");  
diff --git a/erp24/modul/shipment/ajaxUpdateStoreZakup.php b/erp24/modul/shipment/ajaxUpdateStoreZakup.php
new file mode 100644 (file)
index 0000000..b9b54b3
--- /dev/null
@@ -0,0 +1,286 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+if(!empty($_REQUEST["id"]))  $orderId=(int)$_REQUEST["id"];  else exit("Укажите ID закупки");
+
+
+
+
+include"modul/shipment/functionsShipment.php";
+
+
+if(empty($orderCityId)) {
+    
+    
+    error_mess("Укажите город у закупки - новый метод расчета должен опираться на статистику по Городу!");
+
+   exit();
+} 
+
+// переключатель между статусами - задаем массивы с полями которые считаем на каждом статусе
+switch($status_order_id){
+    
+  case "1":    // новый
+    $arrayFiledsUpdate=[
+"min_lot",
+"min_order",
+"purchase_price",
+"purchase_summ",
+"price_zakup_summ",
+"quantity",
+"quantity_fact",
+"quantity_zakup_new", 
+"sales_cnt",
+"sales_amount",
+"sales_4weeks_cnt",
+"write_offs_4week_cnt_avg",
+"write_offs_4week_sum",
+"write_downs",
+"write_offs_4week_cnt_avg",
+"write_offs_comments",
+"quantity_rejection",
+"write_offs_sum",
+"order_supplier_sum",
+"delta_sales4week_supplier",
+"delta_sales4week_supplier_percent",
+"delta_sales4week_supplier_summ",
+"delta_sales7_and_supplier",
+"delta_sales7_and_supplier_percent",
+"entrance_cnt_7days",
+"scheduled_delivery_cnt",
+"goods_in_transit",
+"quantity_storage",
+"auto_purchase_formula",
+"auto_purchase_formula_all",
+"quantity_warehouseman_fact",
+"storehouse_balance","purchase_logistic"]; 
+  break;   
+  
+   case "2":    // в работе
+     $arrayFiledsUpdate=[
+"min_lot",
+"min_order"
+,         
+"purchase_price",
+
+"purchase_summ",
+"price_zakup_summ",
+
+"quantity",
+"quantity_fact",
+"quantity_zakup_new", 
+"sales_cnt",
+"sales_amount",
+"sales_4weeks_cnt",
+
+"write_offs_4week_cnt_avg",
+"write_offs_4week_sum",
+"write_downs",
+
+"write_offs_sum",
+"write_offs_4week_cnt_avg",
+"order_supplier_sum",
+"delta_sales4week_supplier",
+"delta_sales4week_supplier_percent",
+"delta_sales4week_supplier_summ",
+"delta_sales7_and_supplier",
+"delta_sales7_and_supplier_percent",
+
+"entrance_cnt_7days",
+"scheduled_delivery_cnt",
+
+"goods_in_transit",
+"quantity_storage",
+"auto_purchase_formula",
+"auto_purchase_formula_all",
+"quantity_warehouseman_fact",
+"storehouse_balance","purchase_logistic"
+]; 
+  break;  
+   case "3":    // данные внесены
+    $arrayFiledsUpdate=[
+    "min_lot",
+    "min_order",    
+    "auto_purchase_formula_all",
+    "auto_purchase_formula",
+    "quantity_zakup",
+    "auto_purchase_summ",
+    "write_downs",
+    "purchase_price",
+    "quantity",
+    "quantity_fact",
+    "sales_cnt",
+    "quantity_storage",
+    "order_supplier_sum","purchase_logistic"   
+    ]; 
+  break;   
+  
+   case "4":    // закупка заказа
+    $arrayFiledsUpdate=["sales_cnt",
+    "order_supplier_sum",
+    "quantity",
+    "purchase_price_zakup",    
+    "quantity_zakup_fact_sum",
+    "price_zakup_summ",
+    "delta_zakup",
+    "write_offs_4week_cnt_avg",
+    "write_offs_4week_sum",
+    "write_downs",
+    "storage_days","purchase_logistic"]; 
+  break;   
+  
+     case "5":    // товар в пути
+         $arrayFiledsUpdate=[
+         "goods_in_transit",
+         "sales_cnt",
+         "purchase_price_zakup",
+         "order_supplier_sum",
+         "quantity_zakup_fact_sum",
+         "price_zakup_summ",
+         "delta_zakup",
+         "division_auto_need",
+         "division_auto_need_all",
+         "division_ratio",
+         "division_auto",
+         "division_auto_all",
+         "division_hand",
+         "division_summ",
+         "division_summ_all",  
+         "division_price_summ",
+         "storage_days"
+         ]; 
+
+     
+  break;   
+  
+
+case "6":    // деление по магазинам
+ $arrayFiledsUpdate=[
+"min_lot",
+"min_order",  
+"write_offs_division",
+"write_offs_comments",
+"sales_division_4weeks_cnt_avg",
+
+"quantity_rejection",
+"write_offs_sum",
+"order_supplier_sum",
+"scheduled_delivery_cnt",
+"goods_in_transit",
+"quantity_storage",
+"sales_7day_division",
+"sales_7day_amount_division",
+"color_percent",
+"division_auto_need",
+"division_auto_need_all",
+"quantity_warehouseman_fact",
+
+"division_ratio",
+"division_auto",
+"division_auto_all",
+"division_hand",
+"division_summ",
+"division_summ_all",
+"division_price_summ",
+"quantity_zakup_new", 
+"division_store_ratio",
+"division_store",
+"division_store_hand",
+"division_store_summ",
+"quantity_warehouseman_fact_related",
+"quantity_warehouseman_fact_defective_related",
+"quantity_warehouseman_fact_summ",
+"quantity_zakup_fact_summ",
+"purchase_fact_difference",
+"storehouse_balance",
+"storehouse_balance_store"
+/**/];  break; 
+
+  default: $arrayFiledsUpdate=[
+"purchase_price",
+"quantity",
+"quantity_fact",
+"quantity_zakup_new", 
+"sales_cnt",
+"sales_amount",
+"sales_4weeks_cnt",
+"write_offs_4week_cnt_avg",
+"write_offs_4week_sum",
+"write_downs",
+//"write_offs_division",
+"write_offs_4week_cnt_avg",
+"write_offs_comments",
+"quantity_rejection",
+"write_offs_sum",
+"order_supplier_sum",
+"delta_sales4week_supplier",
+"delta_sales4week_supplier_percent",
+"delta_sales4week_supplier_summ",
+"delta_sales7_and_supplier",
+"delta_sales7_and_supplier_percent",
+"entrance_cnt_7days",
+"scheduled_delivery_cnt",
+"goods_in_transit",
+"quantity_storage",
+//"sales_7day_division",
+//"sales_7day_amount_division",
+//"division_auto_need",
+//"division_auto_need_all",
+//"division_summ",
+//"division_hand",
+"color_percent",
+"auto_purchase_formula",
+"quantity_warehouseman_fact",
+"quantity_warehouseman_fact_related",
+"quantity_warehouseman_fact_defective_related",
+"storehouse_balance"
+]; //
+    
+    
+}
+
+/* подключайем файлы с расчетом данных по каждому полю по магазину и по другим условиям выборки и записываем эти данные в общую таблицу файлы вынесены по названию в папку modul/shipment/fields/ - по названию поля
+
+Сичитаем данные опираясь на ID закупки - связанный с этой закупкой город CityID - Поставщиков которые будут в э той закупке - > массив с товарами которые будут участвовать в расчетах  $products
+
+фильтруем по магазинам, по товарам
+
+*/
+
+
+ob_start();
+
+echo"<table><tbody>";
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";    
+  if(is_file($f)) {
+     $data_up=[]; 
+     
+     echo"<tr><td colspan=2>";
+      include_once($f); // получаем данные в массив  $data_up
+      echo"</td></tr>";
+      
+     if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+     }
+     echo"<tr><td class=\"text-right\"> <span class=\"btn btn-sm btn-default\">".$fieldsRows[$Field]["name"]." ".$fieldsRows[$Field]["name_eng"]."</span> </td><td><span class=\"btn btn-sm btn-success\">посчитано</span>";
+     
+     if(empty($data_up))  echo"пусто";
+     echo"</td></tr> ";
+     
+  } else {
+      
+      echo"<tr><td colspan=2> !!нет файла $f</td></tr>";
+  }
+}
+echo"</tbody></table>";
+
+$output = ob_get_contents();
+ob_end_clean();
+
+if(in_array($_SESSION["group_id"],[1,10])) echo $output;
+else echo'<script> setTimeout(() => window.parent.location.reload(), 0);</script>';
index adfc17e6186ea916a2a5411ff316797e599378f6..f7dcce465b68b65be74e4a55be6c4e585233ca73 100644 (file)
@@ -8,7 +8,7 @@ include"templates/top.php";
 
 //if($_SESSION["group_id"]>2) exit("У вас нет дступа");
 
-$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1 or id=10");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
 
 
 
@@ -20,21 +20,11 @@ $fields=array("show"=>array("name"=>"Просмотр"),
 
 );
 
-/*
-$_CONFIG["zakup_status"]=array(0=>"новый",1=>"в работе",2=>"данные внесены", "3"=>"Закупается - закупщиком",4=>"товар в пути", 5=>"Деление по магазинам",
-6 =>"Приход товара на склад"
-,7 =>"Наборка товара" ,8 =>"Выписка товара"
-,11 =>"Передано в бухгалтерию"
-,12 =>"Бухгалтерия приняла"
-,13 =>"Бухгалтерия сделала корректировки"
-
-);
-*/
 
 
 //$store_orders_statuses=$db::mapping("SELECT * FROM store_orders_statuses");
 
-$data3=$db::getRows("SELECT * FROM store_orders_statuses order BY posit DESC");
+$data3=$db::getRows("SELECT * FROM store_orders_statuses  WHERE posit>0  order BY posit DESC");
 foreach($data3 as $row) {
 $store_orders_statuses[$row["id"]]=$row["name"];   
 $statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
@@ -135,7 +125,7 @@ $status_json=array();
  
  
 mess("Сохранили!!"); 
-$data3=$db::getRows("SELECT * FROM store_orders_statuses  WHERE 1 order by posit DESC");
+$data3=$db::getRows("SELECT * FROM store_orders_statuses  WHERE posit>0 order by posit DESC");
 foreach($data3 as $row) {
 $store_orders_statuses[$row["id"]]=$row["name"];   
 $statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
@@ -147,7 +137,7 @@ $statuses_stores_show[$row["id"]]=$row["stores_show"];
 
 
         /////////
-$data=$db::getRows("SELECT id,fields_sort,fields_hide FROM store_orders_statuses");
+$data=$db::getRows("SELECT id,fields_sort,fields_hide FROM store_orders_statuses WHERE posit>0 ");
 foreach($data as $row) {
     
 $sort=$row["fields_sort"];
index 8620ef7c3828587cf3609a50c4a8241583f3e784..606787cde4a171c0b8aa9a34807db0b83b0f3b57 100644 (file)
@@ -8,7 +8,7 @@ include"templates/top.php";
 
 //if($_SESSION["group_id"]>2) exit("У вас нет доступа");
 
-$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1 or id=10");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE  id in ('1','10','7','51','9','17','70','50')");
 
 
 $data=$db::getRows("SELECT * FROM store_orders_fields");
diff --git a/erp24/modul/shipment/divisionClone.php b/erp24/modul/shipment/divisionClone.php
new file mode 100644 (file)
index 0000000..64100d9
--- /dev/null
@@ -0,0 +1,97 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include"templates/top.php";
+if(!empty($_REQUEST["id"])) { 
+$orderId=(int)$_REQUEST["id"]; 
+
+echo"<h2>Копирование закупки id=$orderId -> частичная пос тавка -> Это будет часть номер 1 от поставки id=$orderId</h2>
+
+<p>В результате копирования будет скопирована поставка с данными необходимыми для деления.
+
+Нужно взять неудовлетворенную потребность по магазинам и записать ее а потом заполнить - разнести согласно списку сортировки остаток склада.
+
+1) Заказа магазина по позиции в этой поставке - сумма деления (после разнесения того что пришло по факту) = остаток заказа магазина. поле quantity_zakup_new
+2) Поставка ставится в статус в Товар в пути - потом по приезду кладовщик проставляет сколько товара приедет - Получено кладовщиком на складе во второй части поставки. 
+3) Новая поставка связывается в поле related_order_id
+4) Пересчитывается остаток склада. Суммарная потребность по магазинам.
+</p>
+
+
+<a href=\"/shipment/divisionClone/?id=$orderId&clone=true\" class=\"btn btn-warning btn-lg\">Копировать закупку </a>";
+
+
+if(!empty($_REQUEST["clone"])) {
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT *, if(update_html!='','','') as update_html  FROM store_orders WHERE id=?",[$orderId]);
+
+
+
+$OrderDataNew=$OrderData;
+unset($OrderDataNew["id"]);
+$OrderDataNew["related_order_id"]=$orderId;
+$OrderDataNew["parent_id"]=$orderId;
+$OrderDataNew["name"] .=" (часть от поставки id=$orderId)";
+$OrderDataNew["date_add"]=date("Y-m-d",time()); //дата добавления сейчас
+$OrderDataNew["price_logistic"]=0;
+$OrderDataNew["status"]=5; // ставим товар в пути
+$OrderDataNew["admin_id"]=$_SESSION["admin_id"]; // ставим товар в пути
+$OrderDataNew["status_logi"]=""; 
+$OrderDataNew["comments"]="остаточная часть от поставки id=$orderId ".$OrderData["name"]; 
+
+$db::insert("store_orders",$OrderDataNew);
+$orderIdNew = $db -> lastInsertId();
+
+if($orderIdNew) {
+include"modul/shipment/functionsShipment.php";
+
+$FiledsData=getDataFiledsData($orderId);
+
+
+$fieldName="quantity_zakup_new";
+$data_up=[];
+foreach($FiledsData[$fieldName] as $productId => $arrayp) {
+    
+    echo"<h2>".$products[$productId]."</h2>";
+    foreach($FiledsData[$fieldName][$productId] as $storeId => $arr2) {
+       echo"<br> <h4>".$storesArray[$storeId]."</h4> ";
+       foreach($FiledsData[$fieldName][$productId][$storeId] as $color => $value) {
+           $value=(int)$value;
+                $quantity_zakup_new=intval($value-$FiledsData["division_store_summ"][$productId][$storeId][$color]);
+                
+                if($quantity_zakup_new>0) {
+                echo", color=$color value= $value
+                 
+                 -  ".(int)$FiledsData["division_store_summ"][$productId][$storeId][$color]."
+                 
+                 = остаток потребности $quantity_zakup_new
+                 
+                 ";
+                 $data_up[$productId][$storeId][$color]=$quantity_zakup_new;
+                }
+          
+             
+         }
+    }     
+    
+}
+
+$orderId=$orderIdNew;
+echo"ID новой поставки клона = $orderIdNew";
+   if(!empty($data_up))  insert_store_orders_fields($data_up,$fieldName); // вносим данные в таблицу
+  
+
+}
+
+}
+
+}
+
+
+
+include"templates/bottom.php"; 
\ No newline at end of file
diff --git a/erp24/modul/shipment/divisionStore.php b/erp24/modul/shipment/divisionStore.php
new file mode 100644 (file)
index 0000000..e2d0f8e
--- /dev/null
@@ -0,0 +1,485 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+//include_once("inc/shipment.php");
+include"templates/top.php";
+if(!empty($_REQUEST["id"])) { 
+$orderId=(int)$_REQUEST["id"]; 
+
+include"modul/shipment/functionsShipment.php";
+
+
+
+if($OrderData["status"]==6) {
+
+
+
+
+ $arrayFiledsUpdate=[
+"quantity_zakup_new",
+"sales_division_4weeks_cnt_avg",
+"division_store_ratio",
+"division_store",
+"division_store_hand",
+"division_store_summ",
+//"purchase_fact_difference",
+//"storehouse_balance",
+"storehouse_balance_store"
+]; 
+
+
+$dateup=$db::getRow("SELECT UNIX_TIMESTAMP(date_update) as date_update,   date_update as date_update2
+ FROM store_orders_fields_data WHERE 
+order_id=? AND field_name IN ('quantity_zakup_new','division_store_ratio','division_store','division_store_hand','division_store_summ','storehouse_balance_store')
+AND value!=0 order by date_update DESC LIMIT 1",[$orderId]);
+
+
+
+if($dateup["date_update"] > $_SESSION["date_update_$orderId"])  { 
+    
+echo"<br> date_update = {$dateup["date_update"]} {$dateup["date_update2"]} последний раз ".$_SESSION["date_update_$orderId"]."";
+echo" пересчет";
+
+ob_start();
+echo"<table><tbody>";
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";    
+  if(is_file($f)) {
+     $data_up=[]; 
+     
+     echo"<tr><td colspan=2>";
+      include_once($f); // получаем данные в массив  $data_up
+      echo"</td></tr>";
+      
+     if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+     }
+     echo"<tr><td class=\"text-right\"> <span class=\"btn btn-sm btn-default\">".$fieldsRows[$Field]["name"]." ".$fieldsRows[$Field]["name_eng"]."</span> </td><td><span class=\"btn btn-sm btn-success\">посчитано</span>";
+     
+     if(empty($data_up))  echo"пусто";
+     echo"</td></tr> ";
+     
+  } else {
+      
+      echo"<tr><td colspan=2> !!нет файла $f</td></tr>";
+  }
+}
+echo"</tbody></table>";
+$_SESSION["date_update_$orderId"]=time();
+$output = ob_get_contents();
+ob_end_clean();
+
+}
+
+$FiledsData=getDataFiledsData($orderId);
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+$kustArray[$row2["parent_id"]][]=$row2["id"];   
+$kustArrayReverse[$row2["id"]]=$row2["parent_id"];   
+}
+
+$kustBackground[1]="#AFEEEE";   
+$kustBackground[2]="#87CEFA";   
+$kustBackground[3]="#EEE8AA"; 
+$kustBackground[5]="#ff9595";
+
+  $storeOrderArray2=getRelationshipCityStore();
+  $storeOrderArray=[];  
+  foreach($kustArray as $kustId =>$massiv) {
+    foreach($massiv as $storeId)   {
+      if(isset($storeOrderArray2[$storeId]))   $storeOrderArray[$storeId]=$storeOrderArray2[$storeId];
+    }
+  } 
+
+echo'
+<a href="/shipment/" class="btn btn-sm btn-info"><- в закупки</a>
+<h2><span class="btn btn-sm btn-warning">'. $store_orders_statuses[$OrderData["status"]] .' </span> '.$OrderData["name"].' id='.$OrderData["id"].'</h2> 
+Новая версия деления основанная на division_store_summ = division_store - заказ магазина на основе предзаказа магазина + ручная добавка к делению 
+для магазина <b>division_store_hand</b>.
+
+
+На основании полученного товара <b>"quantity_warehouseman_fact"</b> - который вбивает кладовщик по каждой позиции и цвету 
+расчитывается автоделение по магазину <b>"division_store"</b> - и записывается в ячейку.
+Товары которые не приехали quantity_warehouseman_fact =0 не показываются в общем списке чтобы не выводить лишнюю информацию
+
+
+Коэффицент деления считается = сумма заказов всех магазинов в этой закупке "quantity_zakup_new"  = "quantity_zakup_new_all". 
+
+<b>division_store_ratio</b>=quantity_warehouseman_fact/quantity_zakup_new (Считается по каждому товару и каждому цвету свой коэффицент).
+
+<b>division_store</b> = Заказ магазина (потребность) * division_store_ratio (кэффицент). Коэффицент не может быть более 1. Не более 100% удовлетворяем потребности магазина. Если пришло  более чем заказывали.
+
+
+<b>division_store</b> - получаем деление на магазин на основе заказов магазинов.
+
+
+
+
+Корректировать деление по магазину можно через ячейку <b>"division_store_hand"</b> 
+ ручная добавка для нового деления для магазина. Сумма двух ячеек  <b>division_store + division_store_hand = division_store_summ</b> (Конечный результат деления на магазин)
+Делается по цветам. 
+';
+printRelatedOrders();
+
+
+echo"<div id=\"edit_div\"></div><div class=\"table-responsive\">
+<table class=\"table-hover zak\"><thead><tr class=\"zag\">
+
+<th class=\"td_product\">
+<br> 
+ <span onclick='ajaxDivisionUpdate();' class='btn btn-blue btn-sm me-2'>обновить</span>
+
+наименование</th><th><b>мин-ый лот деления шт.</b></th>
+<th><b>Суммарный заказ магазинов шт.</b></th>
+<th><b>Получено на складе шт.</b></th>
+<th><b>Коэффицент деления</b></th>
+
+";
+   foreach($storeOrderArray as $storeId=>$namestore){
+       echo"<th style=\"background:".$kustBackground[$kustArrayReverse[$storeId]]."\"><b>$namestore</b></td> ";
+
+   }
+echo"<th>Товар</th>
+<th><b>итого</b></th><th><b>получено на складе</b></th><th><b>разница</b></th>
+</tr></thead><tbody>"; 
+
+
+
+  foreach($products as $productId=>$nameProduct){
+      
+      
+  if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]>0) {      
+  
+   echo'<tr id="tr__'.$productId.'" class="trproduct">
+    <td class="td_product producted">
+    <span class="fs-6">'.$nameProduct.'</span>
+    
+    <a class="btn btn-sm btn-info" href="/shipment/productStoresSort/?product_id='.$productId.'" target=new>s</a>
+    </td>
+    <td class="tdinf0">'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>
+     <td class="tdinf0">'.intval($FiledsData["quantity_zakup_new"][$productId]["NULL"]["NULL"]).'</td>  
+     <td class="tdinf0 tdinf_fact">'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]).'</td>  
+     <td class="tdinf0">'.round($FiledsData["division_store_ratio"][$productId]["NULL"]["NULL"],2).'</td>   
+    
+    ';    
+$divisionCnt=0;    
+   foreach($storeOrderArray as $storeId=>$namestore){
+            echo'<td>';
+            $v=(int) $FiledsData["division_store_summ"][$productId][$storeId]["NULL"];
+            $division_store =(int)$FiledsData["division_store"][$productId][$storeId]["NULL"]; 
+            $division_store_hand =(int)$FiledsData["division_store_hand"][$productId][$storeId]["NULL"]; 
+            $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId]["NULL"];
+            $division_store_ratio=round($FiledsData["division_store_ratio"][$productId]["NULL"]["NULL"],2);
+            
+            $divisionCnt += $v; 
+          echo'<span class="info" onclick="ajaxShowInfo(\''.$storeId.'\',\''.$productId.'\')" 
+          title="Потребность '.$quantity_zakup_new.' * коэф '.$division_store_ratio.'
+          -> округляем по минимальному лоту  '.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).' = '.$division_store.'">';
+          
+          
+         if(!empty($quantity_zakup_new))  echo'<span class=qz title="Заказ магазина">'.$quantity_zakup_new.'</span>';
+          
+          echo '<font title="авто-деление на магазин + ручная добавка">';
+          
+          if(!empty($division_store)) echo $division_store;
+          if(!empty($division_store_hand)) echo '+'.$division_store_hand;
+          
+           echo'</font><br></span>
+             <span  onclick="ShowInput(\'division_store_hand\',\''.$storeId.'\',\''.$productId.'\',\'\',\'\',\''.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'\',\''.$v.'\',\''.$division_store_hand.'\' )" 
+    id="division_store_hand'.$storeId.''.$productId.'"  title="Деление сумма для магазина">';
+    
+   echo $v;
+    echo'</span>'; 
+             
+             
+             echo'</td>';
+
+     }
+     
+     echo'  <td class="td_product producted">
+    '.$nameProduct.'
+<span class="btn btn-sm btn-info" onclick="ajaxDivisionAutoHandStart(\''.$productId.'\')">@</span></td><td>'.intval($divisionCnt).'</td>';
+    echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]).'</td>';
+     $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$divisionCnt;
+    echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"]["NULL"].'</td>';
+     
+ echo" </tr>";
+   $colorsCnt=0;
+
+
+    $colorAllSumm=0;  $colorAllFact=0;
+     foreach($productsColorsArray[$productId] as $color) {
+          $divisionCnt=0;  
+          
+          
+         if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]>0) {
+          $colorsCnt++;
+              $colorAllSumm +=(int)$FiledsData["quantity_zakup_new"][$productId]["NULL"][$color];
+              $colorAllFact +=(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+           echo'<tr id="tr__'.$productId.'_color_'.md5($color).'" class="tr_product">
+        <td class="td_color">
+       '.$color.'</td>
+       <td class="tdinf">'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>
+    <td class="tdinf">'.intval($FiledsData["quantity_zakup_new"][$productId]["NULL"][$color]).'</td>   
+    <td class="tdinf tdinf_fact">'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]).'</td>  
+    <td class="tdinf">'.round($FiledsData["division_store_ratio"][$productId]["NULL"][$color],2).'</td>   ';     
+        foreach($storeOrderArray as $storeId=>$namestore){
+            
+      // $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
+     
+      //  if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
+           $v=(int)$FiledsData["division_store_summ"][$productId][$storeId][$color]; 
+           $division_store=(int)$FiledsData["division_store"][$productId][$storeId][$color]; 
+           $division_store_hand=(int)$FiledsData["division_store_hand"][$productId][$storeId][$color]; 
+           $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId][$color];
+         $ostatok[$productId][$storeId] +=$v; 
+         $divisionCnt +=$v;
+             echo'<td>
+             <span class="info'; if($_SESSION["group_id"]==-1) echo' d-block'; echo'">';
+               if(!empty($quantity_zakup_new))  echo'<span class=qz title="Заказ магазина">'.$quantity_zakup_new.'</span>';
+             ;
+          if(!empty($division_store)) echo $division_store;
+          if(!empty($division_store_hand)) echo '+'.$division_store_hand;
+          
+           echo'</span>
+             <span onclick="ShowInput(\'division_store_hand\',\''.$storeId.'\',\''.$productId.'\',\''.$color.'\',\''.md5($color).'\',\''.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'\',\''.$v.'\',\''.$division_store_hand.'\' )"
+    id="division_store_hand'.$storeId.''.$productId.''.md5($color).'">'.$v.'</span>';   
+            
+            
+             echo'</td>';
+
+          }
+          
+         echo'  <td class="td_product producted">
+    <span class="fs-6">'.$color.'</span> </td><td>'.intval($divisionCnt).'</td>';
+    echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]).'</td>';
+     $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]-$divisionCnt;
+    echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>
+        
+        '.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"][$color].' </td>';      
+       // ('.(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color].' - '.(int)$FiledsData["division_store_summ"][$productId]["NULL"][$color].'   ( '.(int)$FiledsData["division_store"][$productId]["NULL"][$color].' + '.(int)$FiledsData["division_store_hand"][$productId]["NULL"][$color].')
+       
+   echo"</tr>"; 
+         }
+    } // end colors
+    
+    // сумма по цветам товара
+     if(!empty($colorsCnt)) {
+     echo'<tr>
+        <td class="td_product producted">
+       остаток по цветам</td>
+       <td>'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>';
+       
+              $ostcolor=$FiledsData["quantity_zakup_new"][$productId]["NULL"]["NULL"]-$colorAllSumm;
+              $ostf=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$colorAllFact;
+       echo'<td class="';
+ if($ostcolor==0) echo'bg-success';
+ elseif($ostcolor>0) echo'bg-indigo'; 
+ elseif($ostcolor<0) echo'bg-danger';   
+   echo'">'.$ostcolor.'</td>
+   <td class="';
+ if($ostf==0) echo'bg-success';
+ elseif($ostf>0) echo'bg-indigo'; 
+ elseif($ostf<0) echo'bg-danger';   
+   echo'">';
+
+   echo $colorAllFact;
+   
+   echo'</td><td></td>';     
+        foreach($storeOrderArray as $storeId=>$namestore){
+            
+            $ost=$FiledsData["division_store_summ"][$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
+   
+   echo'<td class="';
+ if($ost==0) echo'bg-success';
+ elseif($ost>0) echo'bg-indigo'; 
+ elseif($ost<0) echo'bg-danger';   
+   echo'">'.(int)$ost.'</td>';   
+            
+    
+
+          }
+    
+   echo'  <td class="td_product producted">
+    '.$nameProduct.' </td><td><td></td><td></td>';          
+          
+   echo"</tr>"; 
+  } // end summ colors
+      
+  } // end if wherehouse_fact 
+  }
+
+echo"</tbody></table></div>";
+
+
+$_CONFIG["jscss"] .='
+<script>';
+
+
+$_CONFIG["jscss"] .="
+function ajaxShowInfo(store_id,product_id)
+{ 
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Информация по магазину');  
+ $.ajax({
+       url: '/shipment/ajaxDivisionInfo/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, store_id: store_id, product_id: product_id },  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+  
+       }}); 
+
+
+}";
+
+$_CONFIG["jscss"] .='
+function ajaxEditColor(name_eng,store_id,product_id,color,colormd5)
+{ 
+
+var v =$(\'#input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\').val();
+var name_id=\'input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+
+$.ajax({
+       url: \'/shipment/ajaxFieldEdit/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  
+       name_eng: name_eng, 
+       store_id: store_id,
+       product_id: product_id,
+       color: color,
+       value: v},  
+       success: function(data){  
+   $(\'#\'+name_id+\'\').after(\'<span class="okk">\'+data+\'</span>\');
+   $(\'#\'+name_id+\'\').addClass(\'greener\');
+       }
+    
+}); 
+
+setTimeout(function(){$(\'.okk\').remove();$(\'#\'+name_id+\'\').removeClass(\'greener\');}, 3000); 
+
+}
+
+
+function ShowInput(name_eng,store_id,product_id,color,colormd5,step,value,value_hand) {
+var name_id=\'\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+if($(\'#\'+name_id+\'\').html()==\'\' || $(\'#\'+name_id+\'\').html()==value || $(\'#\'+name_id+\'\').html()==0) {
+
+$(\'#\'+name_id+\'\').html(\'<input type=number class="editColor" onchange=ajaxEditColor("\'+name_eng+\'","\'+store_id+\'","\'+product_id+\'","\'+color+\'","\'+colormd5+\'") id=input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'  name=colorHand[\'+store_id+\'][\'+product_id+\'][\'+color+\'] value="\'+value_hand+\'" step="\'+step+\'">\');
+}
+
+}
+';
+
+$_CONFIG["jscss"] .="
+function ajaxDivisionUpdate(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxDivisionUpdate/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+  
+       }}); 
+}
+
+
+function ajaxDivisionAutoHandStart(product_id){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные для авто-добавки деления');  
+ $.ajax({
+       url: '/shipment/ajaxDivisionAutoHandStart/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, product_id: product_id},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+  
+       }}); 
+}
+
+";
+
+//.zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
+$_CONFIG["jscss"] .='
+
+
+</script>
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
+.zak th, .zak td {     border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
+.app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right; font-size:1rem;}
+.zak td.td_product:hover {}
+.zak  tr td.pr,.zak tr td.ost{text-align:center;}
+.zak  tr td.pr{background:#ddd}
+.zak  tr td.ost{background:#e6e6e6}
+.zak td{text-align:center;  vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+.zak  tr td .info{font-size:0.5rem;color:#cdcdcd;display:none;}
+.zak  tr:hover td .info{font-size:0.7rem;color:blue;display:block;}
+.zak td span.qz{text-align:center;font-size:0.7rem; color:white; background:blue; display:block; margin: 0 auto; float:center;}
+table.info td{text-align:left; font-size:1rem;}
+.zak tr td.tdinf0 {background:#f7ef67;color:#736e17}
+
+.zak tr td.tdinf {background:#fffbbf;color:#7b7625}
+.zak tr td.tdinf_fact {background:#dab31e;}
+
+input.greener{border:2px green solid;}
+input.editColor{width:auto;max-width:70px;}
+
+
+
+</style>'; 
+
+
+       $_CONFIG["jscss"] .='<!-- MODAL -->
+               <div class="modal fade" id="modal-7">
+                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
+                               <div class="modal-content">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body p-0">
+                               
+                                       </div>
+                       
+                               </div>
+</div>
+</div>'; 
+
+  } else mess("Статус не деление");
+ } else mess("Укажите ID закупки");
+
+include"templates/bottom.php"; 
+
+
diff --git a/erp24/modul/shipment/divisionStorePrint.php b/erp24/modul/shipment/divisionStorePrint.php
new file mode 100644 (file)
index 0000000..99ecc5a
--- /dev/null
@@ -0,0 +1,257 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+//include_once("inc/shipment.php");
+include"templates/top.php";
+if(!empty($_REQUEST["id"])) { 
+$orderId=(int)$_REQUEST["id"]; 
+
+include"modul/shipment/functionsShipment.php";
+
+
+
+if($OrderData["status"]>=6) {
+
+
+
+
+$FiledsData=getDataFiledsData($orderId);
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+$kustArray[$row2["parent_id"]][]=$row2["id"];   
+$kustArrayReverse[$row2["id"]]=$row2["parent_id"];   
+}
+
+$kustBackground[1]="#AFEEEE";   
+$kustBackground[2]="#87CEFA";   
+$kustBackground[3]="#EEE8AA"; 
+$kustBackground[5]="#ff9595";
+
+  $storeOrderArray2=getRelationshipCityStore();
+  $storeOrderArray=[];  
+  foreach($kustArray as $kustId =>$massiv) {
+    foreach($massiv as $storeId)   {
+      if(isset($storeOrderArray2[$storeId]))   $storeOrderArray[$storeId]=$storeOrderArray2[$storeId];
+    }
+  } 
+
+echo'
+<h2><span class="btn btn-sm btn-warning">'. $store_orders_statuses[$OrderData["status"]] .' </span> '.$OrderData["name"].' id='.$OrderData["id"].'</h2> 
+
+';
+
+
+
+echo"<div id=\"edit_div\"></div><div class=\"table-responsive\">
+<table class=\"table-hover zak\"><thead><tr class=\"zag\">
+
+<th class=\"td_product\">
+
+
+наименование</th><th><b>мин-ый лот деления шт.</b></th>
+";
+   foreach($storeOrderArray as $storeId=>$namestore){
+       echo"<th style=\"background:".$kustBackground[$kustArrayReverse[$storeId]]."\"><b>$namestore</b></td> ";
+
+   }
+echo"
+<th><b>итого</b></th>
+</tr></thead><tbody>"; 
+
+
+
+  foreach($products as $productId=>$nameProduct){
+      
+      
+  if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]>0) {      
+  
+   echo'<tr id="tr__'.$productId.'" class="trproduct">
+    <td class="td_product producted">
+    <span class="fs-6">'.$nameProduct.'</span><td>'.(int)$FiledsData["min_lot"][$productId]["NULL"]["NULL"].'</td>
+    </td>
+  
+    
+    ';    
+$divisionCnt=0;    
+   foreach($storeOrderArray as $storeId=>$namestore){
+            echo'<td>';
+            $v=(int) $FiledsData["division_store_summ"][$productId][$storeId]["NULL"];
+            $division_store =(int)$FiledsData["division_store"][$productId][$storeId]["NULL"]; 
+            $division_store_hand =(int)$FiledsData["division_store_hand"][$productId][$storeId]["NULL"]; 
+            $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId]["NULL"];
+            $division_store_ratio=round($FiledsData["division_store_ratio"][$productId]["NULL"]["NULL"],2);
+            
+            $divisionCnt += $v; 
+   
+    
+   echo $v;
+
+             
+             
+             echo'</td>';
+
+     }
+     
+     echo'  <td>'.intval($divisionCnt).'</td>';
+ /*   echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]).'</td>';
+     $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$divisionCnt;
+    echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"]["NULL"].'</td>';
+*/     
+ echo" </tr>";
+   $colorsCnt=0;
+
+
+    $colorAllSumm=0;  $colorAllFact=0;
+     foreach($productsColorsArray[$productId] as $color) {
+          $divisionCnt=0;  
+          
+          
+         if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]>0) {
+          $colorsCnt++;
+              $colorAllSumm +=(int)$FiledsData["quantity_zakup_new"][$productId]["NULL"][$color];
+              $colorAllFact +=(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+           echo'<tr id="tr__'.$productId.'_color_'.md5($color).'" class="tr_product">
+        <td class="td_color">
+       '.$color.'</td>
+       <td class="tdinf">'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>
+    ';     
+        foreach($storeOrderArray as $storeId=>$namestore){
+            
+      // $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
+     
+      //  if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
+           $v=(int)$FiledsData["division_store_summ"][$productId][$storeId][$color]; 
+           $division_store=(int)$FiledsData["division_store"][$productId][$storeId][$color]; 
+           $division_store_hand=(int)$FiledsData["division_store_hand"][$productId][$storeId][$color]; 
+           $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId][$color];
+         $ostatok[$productId][$storeId] +=$v; 
+         $divisionCnt +=$v;
+             echo'<td>
+            '.$v.'</td>';
+
+          }
+          
+         echo'<td>'.intval($divisionCnt).'</td>';
+         /*
+    echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]).'</td>';
+     $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]-$divisionCnt;
+    echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>
+        
+        '.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"][$color].' </td>';      
+       // ('.(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color].' - '.(int)$FiledsData["division_store_summ"][$productId]["NULL"][$color].'   ( '.(int)$FiledsData["division_store"][$productId]["NULL"][$color].' + '.(int)$FiledsData["division_store_hand"][$productId]["NULL"][$color].')
+       
+ */
+   echo"</tr>"; 
+         }
+    } // end colors
+    
+    // сумма по цветам товара
+    /*
+     if(!empty($colorsCnt)) {
+     echo'<tr>
+        <td class="td_product producted">
+       остаток по цветам</td>
+       <td>'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>';
+       
+              $ostcolor=$FiledsData["quantity_zakup_new"][$productId]["NULL"]["NULL"]-$colorAllSumm;
+              $ostf=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$colorAllFact;
+       echo'<td class="';
+ if($ostcolor==0) echo'bg-success';
+ elseif($ostcolor>0) echo'bg-indigo'; 
+ elseif($ostcolor<0) echo'bg-danger';   
+   echo'">'.$ostcolor.'</td>
+   <td class="';
+ if($ostf==0) echo'bg-success';
+ elseif($ostf>0) echo'bg-indigo'; 
+ elseif($ostf<0) echo'bg-danger';   
+   echo'">';
+
+   echo $colorAllFact;
+   
+   echo'</td><td></td>';     
+        foreach($storeOrderArray as $storeId=>$namestore){
+            
+            $ost=$FiledsData["division_store_summ"][$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
+   
+   echo'<td class="';
+ if($ost==0) echo'bg-success';
+ elseif($ost>0) echo'bg-indigo'; 
+ elseif($ost<0) echo'bg-danger';   
+   echo'">'.(int)$ost.'</td>';   
+            
+    
+
+          }
+    
+   echo'  <td class="td_product producted">
+    '.$nameProduct.' </td><td><td></td><td></td>';          
+          
+   echo"</tr>"; 
+  } // end summ colors
+    */  
+  } // end if wherehouse_fact 
+  }
+
+echo"</tbody></table></div>";
+
+
+
+
+
+//.zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
+$_CONFIG["jscss"] .='
+
+
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
+.zak th, .zak td {     border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
+.app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right; font-size:1rem;}
+.zak td.td_product:hover {}
+.zak  tr td.pr,.zak tr td.ost{text-align:center;}
+.zak  tr td.pr{background:#ddd}
+.zak  tr td.ost{background:#e6e6e6}
+.zak td{text-align:center;  vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+.zak  tr td .info{font-size:0.5rem;color:#cdcdcd;display:none;}
+.zak  tr:hover td .info{font-size:0.7rem;color:blue;display:block;}
+.zak td span.qz{text-align:center;font-size:0.7rem; color:white; background:blue; display:block; margin: 0 auto; float:center;}
+
+
+input.greener{border:2px green solid;}
+input.editColor{width:auto;max-width:70px;}
+
+
+
+</style>'; 
+
+
+
+  } else mess("Статус не деление");
+ } else mess("Укажите ID закупки");
+
+include"templates/bottom.php"; 
+
+
index 3506b764f60b30a36a692563da5a06a4da35c1e9..b98ca581333b9f55cd3c1d4580a1323bae0e316e 100644 (file)
@@ -28,10 +28,10 @@ $providers_arr=implode(",",$_REQUEST["providers_arr"]);
 $comments=htmlentities($_REQUEST["comments"]);
 $name=htmlentities($_REQUEST["name"]);
   $db::sql("UPDATE store_orders SET name=?, comments=?, providers_arr=?, price_logistic=?, division_hours=?,
-  division_date=?, delivery_date=?, delivery_date_fact=?, date_start=? WHERE id=? LIMIT 1",
+  division_date=?, delivery_date=?, delivery_date_fact=?, date_start=?, city_id=? WHERE id=? LIMIT 1",
    [$name, $comments, $providers_arr, htmlentities($_REQUEST["price_logistic"]),
    intval($_REQUEST["division_hours"]), htmlentities($_REQUEST["division_date"]), htmlentities($_REQUEST["delivery_date"]),
-   htmlentities($_REQUEST["delivery_date_fact"]),    htmlentities($_REQUEST["date_start"]), $id]);
+   htmlentities($_REQUEST["delivery_date_fact"]),    htmlentities($_REQUEST["date_start"]), (int)$_REQUEST["city_id"], $id]);
 }
 
 
@@ -70,9 +70,19 @@ echo'</td><td>
 <tr><td class="text-right">Время Час до которого надо сделать деление число</td>
 <td><input type=number name=division_hours class="form-control" style="width:70px;" value="'.$row["division_hours"].'" >
 </td></tr>
-<tr><td class="text-right">Затраты на логистику в рублях</td><td><input type=number  style="width:120px;" name=price_logistic class="form-control" value="'.$row["price_logistic"].'" >
-</td></tr>
+<tr><td class="text-right">Затраты на логистику в рублях</td><td><input type=number  style="width:120px;" name=price_logistic class="form-control" value="'.$row["price_logistic"].'" ></td></tr>
+
+
+<tr><td class="text-right">Город</td><td>
+<select class="" name=city_id>';
+$cities=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='cities' ");
 
+$cities[0]="-выбрать город-";
+foreach($cities as $st =>$name) {
+echo'<option value="'.$st.'"'; 
+if($st==$row["city_id"]) echo' selected'; echo'>'.$name.'</option>';
+}
+echo'</select></td></tr>
 
 <tr><td class="text-right">Поставщики</td><td>
 <select class="multi-select" name=providers_arr[] multiple=multiple >';
@@ -82,17 +92,11 @@ echo'<option value="'.$st.'"';
 if(in_array($st,$in)) echo' selected';
 echo'>'.$name.'</option>';
 }
-echo'</select>
-</td></tr>
-
-<tr><td class="text-right">
-Комментарий:</td><td>
-<textarea rows=1 placeholder="комментарий" name=comments class="form-control">'.$comments.'</textarea>
-</td></tr>
-<tr><td></td><td>
-<button class="btn btn-success btn-lg" name="edit_status" value=1>сохранить</button></td></tr></table></form>';
-
+echo'</select></td></tr>
 
+<tr><td class="text-right">Комментарий:</td><td>
+<textarea rows=1 placeholder="комментарий" name=comments class="form-control">'.$comments.'</textarea></td></tr>
+<tr><td></td><td><button class="btn btn-success btn-lg" name="edit_status" value=1>сохранить</button></td></tr></table></form>';
 echo'<h2>Инвойсы <a href="/shipment/files/?order_id='.$id.'" class="btn btn-success btn-sm">+ добавить файл</a></h2>';
 printStoreOrderFiles($id);
 
diff --git a/erp24/modul/shipment/fields/auto_purchase_formula.php b/erp24/modul/shipment/fields/auto_purchase_formula.php
new file mode 100644 (file)
index 0000000..36de484
--- /dev/null
@@ -0,0 +1,75 @@
+<?
+// округляет до определенного числа
+function ceilCoef($number, $rate = 1)
+{
+       // если число дробное, то округляем его до целого
+       $number = round($number);
+       // разделим число на коэффициент, а результат округлим в большую сторону. Потом умножим число на округленный коэффициент
+       $rest = round($number / $rate) * $rate;
+       return $rest;
+}
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? AND color=''
+AND field_name IN ('entrance_cnt_7days','sales_cnt','quantity','quantity_fact','min_order','min_lot')
+",[$orderId]);
+foreach($dataF as $row) { 
+$FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+
+//print_r($FiledsData);
+$storesArray[0]="Всего";
+foreach($products as $product_id => $name) {
+    
+     $min_order  = $FiledsDataArray["min_order"][$product_id][""];   
+     $min_lot=$FiledsDataArray["min_lot"][$product_id][""]; 
+
+    
+     echo"<div>
+     <h6 class=\"fs-3\">$name</h6>
+     <b> минимальный заказ $min_order шт., квант (мин. лот деления) = $min_lot</b> ";
+
+     if(empty($min_lot)) $min_lot=1;
+ echo"<div class=\"table-responsive\"><table class=\"table table2 table-sm table-bordered table-hover table-striped\">
+ <thead class=\"table-light\"><tr><td>магазин</td><td>полнограмма</td><td>факт</td><td>продажи 7 дней</td>
+ <td>запас 2 дня</td><td>товар едет</td>
+ <td>автозаказ по формуле</td></tr></thead><tbody>";
+  foreach($orderStoresArrayRelation as $storeId) {  
+      
+
+   $sale_7day = $FiledsDataArray["sales_cnt"][$product_id][$storeId];   
+    $quantity = $FiledsDataArray["quantity"][$product_id][$storeId];   
+   $quantity_fact =$FiledsDataArray["quantity_fact"][$product_id][$storeId];
+   $entrance_cnt_7days =$FiledsDataArray["entrance_cnt_7days"][$product_id][$storeId];  
+ // считаем запас на 2 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact +  $entrance_cnt_7days;
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ; 
+$zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
+}
+else { 
+  $zakaz= $sale_7day + $sale_2day +  $quantity ;    
+}
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+$ceil=ceilCoef($zakaz,$min_lot);
+echo"<tr><td>".$storesOrderArray[$storeId]."</td><td>$quantity</td><td>$quantity_fact</td><td>$sale_7day</td>
+<td>$sale_2day</td>
+<td>$entrance_cnt_7days</td><td>";
+if(!empty($ceil)) echo"<span class=\"btn btn-sm btn-success\">$ceil</span>";
+   
+ $data_up[$product_id][$storeId][0]=$ceil;   
+        
+   
+echo'</td></tr>';    
+  }
+echo'</tbody></table></div></div>';       
+}
diff --git a/erp24/modul/shipment/fields/auto_purchase_formula_all.php b/erp24/modul/shipment/fields/auto_purchase_formula_all.php
new file mode 100644 (file)
index 0000000..e00aaf2
--- /dev/null
@@ -0,0 +1,9 @@
+<?
+
+  $data=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE 
+  field_name='auto_purchase_formula' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId' AND color='' AND store_id!='' group by product_id");
+     foreach($data as $row) {
+       $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+     }  
diff --git a/erp24/modul/shipment/fields/color_percent.php b/erp24/modul/shipment/fields/color_percent.php
new file mode 100644 (file)
index 0000000..babf1ad
--- /dev/null
@@ -0,0 +1,59 @@
+<?
+
+$massivSQLColor=[];
+$inProduct=[];
+$store_planogram=[];
+$store_planogram_colors=[];
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram 
+WHERE quantity>0 
+AND product_id $whereInProductsId
+AND store_id $orderStoresArrayRelation_in");
+foreach($data as $row) {
+  if(empty($row["color"]))  $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"]; 
+  else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"]; 
+    
+}    
+
+
+$data4=$db::getRows("SELECT id,colors  FROM products_1c_options WHERE provider_id>0 AND colors!='' 
+AND id $whereInProductsId group by id order by id");
+
+ foreach($data4 as $row2) { 
+  $colors=explode(";",$row2["colors"]);
+  $productId=$row2["id"];
+ if(!in_array($productId,$inProduct)) {
+     
+     $html .="<h3>".$products[$productId]."</h3>";
+     $inProduct[]=$productId;
+     
+ }
+  $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+  <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+  
+  
+   foreach($colors as $color) {
+    $color=trim($color); 
+      // пробегаемся по каждому магазинам
+         foreach($orderStoresArrayRelation as $storeId) {
+             
+      
+                if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color]))   {  
+                 //получаем процент цвета в полнограмме
+                  if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<=$store_planogram[$productId][$storeId])
+                   $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+                  else $percentColor=0;
+                 // округляем до сотых
+                  $percentColor=round($percentColor,2);
+                $data_up["color_percent"][$productId][$storeId][$color]=$percentColor;
+                 $html .="<tr><td>$color</td><td>".$storesArrayAll[$storeId]."</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+                  <td>$percentColor</td></tr>";
+                  
+                }  
+        }
+ }
+  $html .="</tbody></table>";
+}
+
+echo "$html";
diff --git a/erp24/modul/shipment/fields/cost_price_auto.php b/erp24/modul/shipment/fields/cost_price_auto.php
new file mode 100644 (file)
index 0000000..1ee7d22
--- /dev/null
@@ -0,0 +1,10 @@
+ <?
+ $data=$db::getRows("SELECT sum(value) as value,color FROM store_orders_fields_data WHERE 
+  field_name='purchase_logistic' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId'  AND store_id=''  group by color");
+     foreach($data as $row) {
+        if(empty($row["color"])) $row["color"]=0;
+        $data_up[0][0][$row["color"]] +=(int)$row["value"];        
+        $data_up[0][0][0] +=(int)$row["value"];
+     }  
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/cost_price_summ.php b/erp24/modul/shipment/fields/cost_price_summ.php
new file mode 100644 (file)
index 0000000..1a5f301
--- /dev/null
@@ -0,0 +1,43 @@
+<?
+// считаем сумму в долларах куплено по факту
+ $FiledsDataArray=[];
+$dataF=$db::getRows("SELECT  product_id, value, if(color='',0,color) as color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id=''
+AND field_name IN ('quantity_zakup_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray["quantity_zakup_fact"][$row["product_id"]][0][$row["color"]] += (int)$row["value"];
+}
+
+$dataF=$db::getRows("SELECT   product_id, value, if(color='',0,color) as color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id=''
+AND field_name IN ('cost_price')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray["cost_price"][$row["product_id"]][0][$row["color"]] = round($row["value"],2);
+}
+
+
+
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+    
+         $s = $FiledsDataArray["cost_price"][$productId][0][0] * $FiledsDataArray["quantity_zakup_fact"][$productId][0][0];
+         $data_up[$productId][0][0] =$s ;     
+    
+        foreach($productsColorsArray[$productId] as $color) {
+         $color=trim($color);    
+         $s = $FiledsDataArray["quantity_zakup_fact"][$productId][0][$color] * $FiledsDataArray["cost_price"][$productId][0][$color];
+         $data_up[$productId][0][$color] +=$s ; 
+        }
+        
+        
+
+}
+
+
diff --git a/erp24/modul/shipment/fields/delta_sales4week_supplier.php b/erp24/modul/shipment/fields/delta_sales4week_supplier.php
new file mode 100644 (file)
index 0000000..578007f
--- /dev/null
@@ -0,0 +1,34 @@
+<?
+
+$data_sales4week_summ=[];
+  $data=$db::getRows("SELECT product_id, store_id,
+  sum(if(field_name='quantity_zakup_new',value,0)) as quantity_zakup_new,
+    sum(if(field_name='sales_4weeks_cnt',value,0)) as sales_4weeks_cnt
+    FROM store_orders_fields_data WHERE field_name in('quantity_zakup_new','sales_4weeks_cnt') AND value>0
+  AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,store_id");
+     foreach($data as $row) {
+      if($row["sales_4weeks_cnt"]>0) { 
+          
+          $delta=$row["quantity_zakup_new"]-$row["sales_4weeks_cnt"];
+          $data_up[$row["product_id"]][$row["store_id"]][0] +=$delta;
+          $data_up[$row["product_id"]][0][0] +=$delta;   
+          
+          
+          $delta_percent=round(($row["quantity_zakup_new"]/$row["sales_4weeks_cnt"])*100);
+          $data_up[$row["product_id"]][$row["store_id"]][0] +=$delta_percent;
+        
+          
+          
+          
+          if($row["sales_4weeks_cnt"]){
+          $data_sales4week_summ_val=ceil($row["sales_4weeks_cnt"]*$prices[$row["product_id"]]);
+          $data_sales4week_summ[$row["product_id"]][$row["store_id"]][0] +=$data_sales4week_summ_val;    
+          $data_sales4week_summ[$row["product_id"]][NULL][0] +=$data_sales4week_summ_val;             
+            
+          //  echo"<br> ".$row["product_id"]." = ".$row["sales_4weeks_cnt"]."  * ".$prices[$row["product_id"]]." = $data_sales4week_summ_val";
+            }
+        }
+          
+  }  
+insert_store_orders_fields($data_up,"delta_sales4week_supplier_percent");  
+insert_store_orders_fields($data_sales4week_summ,"sales_4weeks_sum");  
diff --git a/erp24/modul/shipment/fields/delta_sales7_and_supplier.php b/erp24/modul/shipment/fields/delta_sales7_and_supplier.php
new file mode 100644 (file)
index 0000000..7412a9b
--- /dev/null
@@ -0,0 +1,20 @@
+<?
+
+  $data=$db::getRows("SELECT product_id, store_id,
+  sum(if(field_name='quantity_zakup_new',value,0)) as quantity_zakup_new,
+    sum(if(field_name='sales_cnt',value,0)) as sales_cnt
+    FROM store_orders_fields_data WHERE field_name in('quantity_zakup_new','sales_cnt') AND value>0
+  AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,store_id");
+     foreach($data as $row) {
+      $delta_percent=round(($row["quantity_zakup_new"]/$row["sales_cnt"])*100);
+        $data_up[$row["product_id"]][$row["store_id"]]["0"] =$delta_percent;
+        $data_up[$row["product_id"]][0][0] +=$delta_percent;    //  echo"<br> ".$row["product_id"]." =  $z";  
+       $delta=round($row["quantity_zakup_new"]-$row["sales_cnt"]);
+        $data_up[$row["product_id"]][$row["store_id"]]["0"] =$delta;
+        $data_up[$row["product_id"]][0][0] +=$delta;    //  echo"<br> ".$row["product_id"]." =  $z";          
+
+        
+        
+  }  
+
+insert_store_orders_fields($data_up,"delta_sales7_and_supplier_percent");  
diff --git a/erp24/modul/shipment/fields/delta_zakup.php b/erp24/modul/shipment/fields/delta_zakup.php
new file mode 100644 (file)
index 0000000..5108004
--- /dev/null
@@ -0,0 +1,19 @@
+<?
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND color=''
+AND store_id='',
+AND field_name IN ('quantity_zakup_fact','quantity_zakup')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+   $data_up[$productId][0][0]= round($FiledsDataArray["quantity_zakup_fact"][$productId] / $FiledsDataArray["quantity_zakup"][$productId],2);
+
+}
diff --git a/erp24/modul/shipment/fields/division_auto.php b/erp24/modul/shipment/fields/division_auto.php
new file mode 100644 (file)
index 0000000..3ba94e1
--- /dev/null
@@ -0,0 +1,69 @@
+<?
+// округляет до определенного числа
+function ceilCoef($number, $rate = 1)
+{
+       // если число дробное, то округляем его до целого
+       $number = round($number);
+       // разделим число на коэффициент, а результат округлим в большую сторону. Потом умножим число на округленный коэффициент
+       $rest = round($number / $rate) * $rate;
+       return $rest;
+}
+
+
+//echo"<br>division_auto $whereInProductsId";
+
+$min_lot=[];
+$data=$db::getRows("SELECT id,min_lot FROM products_1c_options WHERE id $whereInProductsId");
+foreach($data as $row)  $min_lot[$row["id"]]=$row["min_lot"]; 
+
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND field_name IN ('division_auto_need')
+ AND value!=0
+ AND color=''
+ AND store_id!=''
+",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND field_name IN ( 'division_ratio')
+AND store_id='' AND color=''
+AND value!='0'",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+  
+}
+
+
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+  //    echo"<br> <h2>$name</h2>";
+  foreach($orderStoresArrayRelation as $storeId ) {  
+      
+    $division_ratio=$FiledsDataArray["division_ratio"][$productId];
+    if(empty($division_ratio)) $division_ratio=1;
+        $d=$FiledsDataArray["division_auto_need"][$productId][$storeId] * $division_ratio; 
+        $data_up[$productId][$storeId][0]=ceilCoef($d,$min_lot[$productId]);
+        
+        
+ //   echo"<br>$name  division_auto_need=".$FiledsDataArray["division_auto_need"][$productId][$storeId]."   * division_ratio=".$division_ratio." d=$d min_lot=".$min_lot[$productId]."  ";
+  }
+ // $data_up[$productId][0][0] +=$FiledsData["division_auto"][$productId][0][0]; 
+  
+
+}
+
+
+
diff --git a/erp24/modul/shipment/fields/division_auto_all.php b/erp24/modul/shipment/fields/division_auto_all.php
new file mode 100644 (file)
index 0000000..5ebfe85
--- /dev/null
@@ -0,0 +1,18 @@
+<?
+
+  $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE 
+  field_name='division_auto' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId'  AND store_id!='' group by product_id");
+     foreach($data as $row) {
+         
+       if(empty($row["color"]))  {
+       $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+       }
+       else {
+        $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];   
+           
+       }
+       
+       
+     }  
diff --git a/erp24/modul/shipment/fields/division_auto_need.php b/erp24/modul/shipment/fields/division_auto_need.php
new file mode 100644 (file)
index 0000000..21e51f3
--- /dev/null
@@ -0,0 +1,69 @@
+<?
+
+echo"<h1>division_auto_need</h1>";
+
+// округляет до определенного числа
+function roundCoefficientLot($number, $rate = 1)
+{
+       $rest = $rate * floor($number / $rate);
+       
+       return $rest;
+}
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? AND color=''
+AND field_name IN ('entrance_cnt_7days','sales_cnt','quantity','quantity_fact','min_lot','min_order')
+",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+
+//print_r($FiledsData);
+$storesArray[0]="Всего";
+foreach($products as $product_id => $name) {
+     $min_order  = $FiledsDataArray["min_order"][$product_id][""];   
+     $min_lot=$FiledsDataArray["min_lot"][$product_id][""]; 
+     echo"<div>
+     <h6 class=\"fs-3\">$name</h6>  формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+     <b> минимальный заказ $min_order шт., квант (мин. лот деления) = $min_lot</b> ";
+
+     if(empty($min_lot)) $min_lot=1;
+ echo"<div class=\"table-responsive\"><table class=\"table table2 table-sm table-bordered table-hover table-striped\">
+ <thead class=\"table-light\"><tr><td>магазин</td><td>продажи 7 дней</td> <td>запас 2 дня</td>
+ <td>полнограмма</td> <td>потребность</td></tr></thead><tbody>";
+  foreach($orderStoresArrayRelation as $storeId) {  
+    $sale_7day = $FiledsDataArray["sales_cnt"][$product_id][$storeId];   
+   $quantity = $FiledsDataArray["quantity"][$product_id][$storeId];   
+   $quantity_fact =$FiledsDataArray["quantity_fact"][$product_id][$storeId];
+  // считаем запас на 2 дня
+   $sale_2day=ceil(2*($sale_7day/7));
+    // если факт продаж будет больше чем факт - перприсваеиваем
+      if(($quantity_fact-$sale_7day)>0) {
+       $saleweek1=$quantity_fact-$sale_7day ; 
+       $zakaz= $sale_7day + $sale_2day +  $quantity - $saleweek1;       
+       }
+      else  $zakaz= $sale_7day + $sale_2day +  $quantity ;    
+
+     $zakaz=roundCoefficientLot($zakaz, $min_lot);
+     if($zakaz<0) $zakaz=0;
+     if(empty($sale_2day)) $sale_2day="";
+     if(empty($sale_7day)) $sale_7day="";
+     if(empty($zakaz)) $zakaz=$quantity;
+     
+
+       $data_up[$product_id][$storeId][0] =$zakaz;
+       $data_up[$product_id][0][0] +=$zakaz; 
+
+// формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+     echo"<tr><td>".$storesOrderArray[$storeId]."</td><td>$sale_7day</td>
+     <td>$sale_2day</td><td>$quantity</td><td>";
+     if(!empty($zakaz)) echo"<span class=\"btn btn-sm btn-wating\">$zakaz</span>";
+   
+     echo'</td></tr>';    
+   }
+ echo'</tbody></table></div></div>';       
+}
+
diff --git a/erp24/modul/shipment/fields/division_auto_need_all.php b/erp24/modul/shipment/fields/division_auto_need_all.php
new file mode 100644 (file)
index 0000000..57b56b2
--- /dev/null
@@ -0,0 +1,18 @@
+<?
+
+  $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE 
+  field_name='division_auto_need' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId'  AND store_id!='' group by product_id");
+     foreach($data as $row) {
+         
+       if(empty($row["color"]))  {
+       $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+       }
+       else {
+        $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];   
+           
+       }
+       
+       
+     }  
diff --git a/erp24/modul/shipment/fields/division_hand.php b/erp24/modul/shipment/fields/division_hand.php
new file mode 100644 (file)
index 0000000..a6cc0eb
--- /dev/null
@@ -0,0 +1,11 @@
+<?
+
+  $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE 
+  field_name='division_hand' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId'  AND store_id!=''  group by product_id, store_id,color");
+     foreach($data as $row) {
+        if(empty($row["color"])) $row["color"]=0;
+        $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];        
+        $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+     }  
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/division_price_summ.php b/erp24/modul/shipment/fields/division_price_summ.php
new file mode 100644 (file)
index 0000000..624115d
--- /dev/null
@@ -0,0 +1,46 @@
+<?
+
+$prices=[];
+
+$dataF=$db::getRows("SELECT  product_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND color=''
+AND store_id=''
+AND field_name IN ('purchase_price')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $prices[$row["product_id"]]=$row["value"];
+}
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND color=''
+AND store_id!=''
+AND field_name IN ('division_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=$row["value"];
+}
+
+
+
+
+
+
+
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+      foreach($orderStoresArrayRelation as $storeId ) {  
+        $division_summ=$FiledsDataArray["division_summ"][$productId][$storeId];
+
+        $s=round($prices[$productId] * $division_summ);
+        $data_up[$productId][0][0] +=$s ;
+        $data_up[$productId][$storeId][0] =$s ;        
+      }
+
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/division_ratio.php b/erp24/modul/shipment/fields/division_ratio.php
new file mode 100644 (file)
index 0000000..95dcb50
--- /dev/null
@@ -0,0 +1,50 @@
+<?
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id=''
+AND field_name IN ('division_auto_need_all','quantity_warehouseman_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  if(empty($row["color"])) $row["color"]=0; 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]]=(int)$row["value"];
+}
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsDataArray["division_auto_need_all"][$productId][0];
+ $quantity_warehouseman_fact=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0];
+
+
+$html .="<br><b>$name</b>  division_auto_need_all=".$FiledsDataArray["division_auto_need_all"][$productId][0]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";  
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsDataArray["division_ratio"][$productId][0]." ";    
+    
+}
+ $data_up[$productId][0][0] =$division_ratio;
+        foreach($productsColorsArray[$productId] as $color) {
+         $color=trim($color);  
+           $division_ratio=1;
+           if($FiledsDataArray["division_auto_need_all"][$productId][$color] > $FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]) { 
+              $division_ratio=round($FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]/$FiledsDataArray["division_auto_need_all"][$productId][$color],2);    
+          }
+          $data_up[$productId][0][$color] =$division_ratio ; 
+      }
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+}
+
+echo"$html";
+
diff --git a/erp24/modul/shipment/fields/division_store.php b/erp24/modul/shipment/fields/division_store.php
new file mode 100644 (file)
index 0000000..b7cfad3
--- /dev/null
@@ -0,0 +1,79 @@
+<?
+$FiledsDataArray=[];
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id=''
+AND field_name IN ('division_store_ratio','min_lot')
+AND value!=0 group by field_name, product_id ",[$orderId]);
+foreach($dataF as $row) { 
+  if(empty($row["color"])) $row["color"]=0;   
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][0][$row["color"]]=$row["value"];
+}
+
+
+// округляет до определенного числа
+function roundCoefficientLot2($number, $rate = 1)
+{
+    if(empty($number)) $number=0;
+    if(empty($rate)) $rate=1;
+       $rest = $rate * floor($number / $rate);
+       
+       return $rest;
+}
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND store_id!=''
+AND field_name IN ('quantity_zakup_new')
+AND value!=0 ",[$orderId]);
+foreach($dataF as $row) { 
+  if(empty($row["color"])) $row["color"]=0;   
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]][$row["color"]] +=(int)$row["value"];
+}
+
+
+
+
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+ // цикл по магазинам    
+  foreach($orderStoresArrayRelation as $storeId ) {  
+  // $s = $FiledsDataArray["division_store"][$productId][$storeId][0];
+   
+   $ceil=$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][0]  * $FiledsDataArray["division_store_ratio"][$productId][0][0];
+   //округляем до мини мального лота деления
+   $ceil=roundCoefficientLot2($ceil,$FiledsDataArray["min_lot"][$productId][0][0]);
+   
+    $data_up[$productId][$storeId][0] =$ceil;  
+ if(!empty($FiledsDataArray["quantity_zakup_new"][$productId][$storeId][0]))  
+ //echo"<br> $name   $storeId min_lot=".$FiledsDataArray["min_lot"][$productId][0][0]." заказ магазина=".$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][0]."     * division_store_ratio=".$FiledsDataArray["division_store_ratio"][$productId][0][0]." = $ceil";
+    
+    $data_up[$productId][0][0] +=$ceil ; 
+      // цикл по цвету товара
+       foreach($productsColorsArray[$productId] as $color) {
+       $color=trim($color);   
+       
+      $ceil=$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][$color]  * $FiledsDataArray["division_store_ratio"][$productId][0][$color];
+      //округляем до мини мального лота деления
+      $ceil=roundCoefficientLot2($ceil,$FiledsDataArray["min_lot"][$productId][0][$color]);
+      $data_up[$productId][$storeId][$color] = $ceil;
+    /*  
+       echo"<br> $name  $color $storeId  min_lot =
+       ".$FiledsDataArray["min_lot"][$productId][0][$color]."
+       ".$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][$color]."  
+   * ".$FiledsDataArray["division_store_ratio"][$productId][0][$color]." = $ceil";
+   */
+      }
+    
+  }
+}
diff --git a/erp24/modul/shipment/fields/division_store_hand.php b/erp24/modul/shipment/fields/division_store_hand.php
new file mode 100644 (file)
index 0000000..915fae5
--- /dev/null
@@ -0,0 +1,22 @@
+<?
+  $data=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE 
+  field_name='division_store_hand' AND value!=0
+  AND store_id $orderStoresArrayRelation_in
+  AND color=''
+  AND order_id=?  AND store_id!='' group by product_id",[$orderId]);
+     foreach($data as $row) {
+       $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+   }  
+     
+     
+  $data=$db::getRows("SELECT product_id,sum(value) as value, color FROM store_orders_fields_data WHERE 
+  field_name='division_store_hand' AND value!=0
+  AND store_id $orderStoresArrayRelation_in
+  AND color!=''
+  AND order_id=?  AND store_id!='' group by product_id,color",[$orderId]);
+     foreach($data as $row) {
+       $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];  
+       $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+       
+       echo"<br>  +".$products[$row["product_id"]]."  ".$row["color"]." = ".(int)$row["value"]."  ";
+     }  
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/division_store_ratio.php b/erp24/modul/shipment/fields/division_store_ratio.php
new file mode 100644 (file)
index 0000000..ab736a4
--- /dev/null
@@ -0,0 +1,58 @@
+<?
+
+
+//echo"<h5>Коэффицент деления division_stpore_ratio</h5>";
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value,color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  if(empty($row["color"])) $row["color"]=0; 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]]=(int)$row["value"];
+}
+
+
+$potreb=[];
+  $data=$db::getRows("SELECT product_id, value,color FROM store_orders_fields_data WHERE 
+  field_name='quantity_zakup_new' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId'  
+  AND store_id!=''");
+     foreach($data as $row) {
+       if(empty($row["color"])) $row["color"]=0; 
+       $potreb[$row["product_id"]][$row["color"]] +=(int)$row["value"];
+     }  
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+ $potreb_all=$potreb[$productId][0];
+ $quantity_warehouseman_fact=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0];
+
+
+$html .="<br><b>$name</b> потребность =".$potreb_all."шт., получено по факту=".$quantity_warehouseman_fact."шт.";  
+
+$division_store_ratio=1;
+if($potreb_all > $quantity_warehouseman_fact) { 
+$division_store_ratio=round($quantity_warehouseman_fact/$potreb_all,2);    
+}
+$html .="коэффициент <font color=red>$division_store_ratio</font>";   
+ $data_up[$productId][0][0] =$division_store_ratio;
+        foreach($productsColorsArray[$productId] as $color) {
+         $color=trim($color);  
+           $division_store_ratio=1;
+           if($potreb[$productId][$color] > $FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]) { 
+              $division_store_ratio=round($FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]/$potreb[$productId][$color],2);    
+          }
+          $data_up[$productId][0][$color] =$division_store_ratio ; 
+        }
+
+}
+
+//echo"$html";
+
diff --git a/erp24/modul/shipment/fields/division_store_summ.php b/erp24/modul/shipment/fields/division_store_summ.php
new file mode 100644 (file)
index 0000000..8aa1e3e
--- /dev/null
@@ -0,0 +1,72 @@
+<?
+$data_up=[];
+ $FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND store_id!=''
+AND color!=''
+AND field_name IN ('division_store','division_store_hand')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+ // if(empty($row["color"])) $row["color"]=0;   
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]][$row["color"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+ // echo"<br> <h2>$name</h2>";
+  foreach($orderStoresArrayRelation as $storeId ) {  
+  //  $s = $FiledsDataArray["division_store"][$productId][$storeId][0] + $FiledsDataArray["division_store_hand"][$productId][$storeId][0];
+  //  $data_up[$productId][$storeId][0] +=$s ; 
+   // $data_up[$productId][0][0] +=$s ; 
+    
+       foreach($productsColorsArray[$productId] as $color) {
+       $color=trim($color);   
+       $s = $FiledsDataArray["division_store"][$productId][$storeId][$color] + $FiledsDataArray["division_store_hand"][$productId][$storeId][$color];
+       $data_up[$productId][$storeId][$color] +=$s ; 
+       $data_up[$productId][0][$color] +=$s ; 
+       
+      
+      
+      
+    //  if($color=="белый" and !empty($s))  echo"<br> $color =$s ";
+       
+       
+       
+      }
+    
+  }
+
+}
+
+//print_r($data_up["0f42fcb0-f647-11e9-a2be-b42e991aff6c"][0]);
+
+//insert_store_orders_fields($data_up,"division_store_summ",[], true);
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND store_id!=''
+AND color=''
+AND field_name IN ('division_store','division_store_hand')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]][0] = +(int)$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+//  echo"<br> <h2>$name</h2>";
+  foreach($orderStoresArrayRelation as $storeId ) {  
+  $s = $FiledsDataArray["division_store"][$productId][$storeId][0] + $FiledsDataArray["division_store_hand"][$productId][$storeId][0];
+  $data_up[$productId][$storeId][0] +=(int)$s ; 
+  $data_up[$productId][0][0] +=(int)$s ; 
+  }
+}
+
+
+
diff --git a/erp24/modul/shipment/fields/division_summ.php b/erp24/modul/shipment/fields/division_summ.php
new file mode 100644 (file)
index 0000000..93d1af1
--- /dev/null
@@ -0,0 +1,33 @@
+<?
+
+ $FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND color=''
+AND store_id!=''
+AND field_name IN ('division_auto','division_hand')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+//  echo"<br> <h2>$name</h2>";
+  foreach($orderStoresArrayRelation as $storeId ) {  
+    
+
+      
+     $s = $FiledsDataArray["division_auto"][$productId][$storeId] + $FiledsDataArray["division_hand"][$productId][$storeId];
+    $data_up[$productId][$storeId][0] +=$s ; 
+    $data_up[$productId][0][0] +=$s ; 
+    
+
+    
+  }
+  
+// echo" <br>  =".$data_up[$productId][0][0]." "; 
+  
+}
diff --git a/erp24/modul/shipment/fields/division_summ_all.php b/erp24/modul/shipment/fields/division_summ_all.php
new file mode 100644 (file)
index 0000000..7657af5
--- /dev/null
@@ -0,0 +1,11 @@
+<?
+  $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE 
+  field_name='division_summ' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId'  
+  AND store_id!='' group by product_id");
+     foreach($data as $row) {
+         
+      if(empty($row["color"])) $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+      else $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];
+     }  
diff --git a/erp24/modul/shipment/fields/entrance_cnt_7days.php b/erp24/modul/shipment/fields/entrance_cnt_7days.php
new file mode 100644 (file)
index 0000000..87781ab
--- /dev/null
@@ -0,0 +1,24 @@
+<?
+
+/*date_start - 7 day получили период поставок
+Выбираем закупки входящие в этот период по дате старта продаж 
+По этому товару со статусами деление по магазинам или более  
+Поле division_summ по каждому магазину -> Получено за 7 дней entrance_cnt_7day*/
+
+$data=$db::getRows("SELECT id FROM store_orders WHERE status>=6 AND date_start <='$date_start_sale' AND date_start>='$date_start_sale' -interval 7 day");
+$whereInOrderId=""; $i=0;
+foreach($data as $row) {
+  $whereInOrderId .=" '".$row["id"]."' ";
+    if($i<(count($data)-1)) $whereInOrderId .=" , ";
+     $i++;   
+}
+
+
+if(!empty($whereInOrderId)) {
+$data=$db::getRows("SELECT product_id, store_id, value FROM store_orders_fields_data WHERE  order_id IN ($whereInOrderId) AND product_id $whereInProductsId AND field_name='division_summ' AND color='' AND value>0 group by product_id, store_id");
+  foreach($data as $row) {
+  $data_up[$row["product_id"]][$row["store_id"]]["0"]=$row["value"];
+  $data_up[$row["product_id"]][0]["0"] +=$row["value"];     
+  
+  }
+}
diff --git a/erp24/modul/shipment/fields/goods_in_transit.php b/erp24/modul/shipment/fields/goods_in_transit.php
new file mode 100644 (file)
index 0000000..de2dea8
--- /dev/null
@@ -0,0 +1,27 @@
+<?
+
+if($order_date_add!='000-00-00') {
+$dataOrders2=$db::getRows("SELECT  id FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");    
+
+//echo"<b>Товар в пути участвуют заказы:</b>";
+$k=0; $w_orders="";
+foreach($dataOrders2 as $row) { 
+  if($k>0) $w_orders.=" ,";    $w_orders.= "'".$row["id"]."'";  $k++; 
+  //  echo"<br> id=".$row["id"]."  дата старта:".$row["date_add"]." ".$row["name"]."";
+  }
+
+if(!empty($w_orders)) { 
+$w_orders=" AND order_id IN($w_orders) AND order_id!='$orderId'";  
+
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, if(color='',0,color) as color 
+ FROM store_orders_fields_data 
+ WHERE field_name='quantity_zakup_fact' AND value>0 
+ $w_orders group by product_id,color");
+      foreach($data2 as $row2) {
+        $data_up[$row2["product_id"]][0][$row2["color"]]=$row2["value"];   
+      //   echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
+   }   
+}
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/min_lot.php b/erp24/modul/shipment/fields/min_lot.php
new file mode 100644 (file)
index 0000000..02f6de1
--- /dev/null
@@ -0,0 +1,5 @@
+<?
+$data=$db::getRows("SELECT id,min_lot FROM products_1c_options WHERE id $whereInProductsId");
+foreach($data as $row) {
+ $data_up[$row["id"]][0][0]=$row["min_lot"]; 
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/min_order.php b/erp24/modul/shipment/fields/min_order.php
new file mode 100644 (file)
index 0000000..ab0316f
--- /dev/null
@@ -0,0 +1,5 @@
+<?
+$data=$db::getRows("SELECT id,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($data as $row) {
+ $data_up[$row["id"]][0][0]=$row["min_order"]; 
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/order_supplier_sum.php b/erp24/modul/shipment/fields/order_supplier_sum.php
new file mode 100644 (file)
index 0000000..5bb31ff
--- /dev/null
@@ -0,0 +1,14 @@
+<?
+
+  $prices=[];
+  $data=$db::getRows("SELECT product_id, value FROM store_orders_fields_data WHERE  field_name='purchase_price' AND value>0  AND order_id='$orderId'  AND store_id='' AND color='' group by product_id");
+     foreach($data as $row) $prices[$row["product_id"]]=$row["value"];
+
+  $data=$db::getRows("SELECT product_id,sum(value) as value, store_id FROM store_orders_fields_data WHERE field_name='quantity_zakup_new' AND value>0
+  AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,store_id");
+     foreach($data as $row) {
+       $s=intval($row["value"] * $prices[$row["product_id"]]);
+      //  echo"<br> ".$row["product_id"]."  ".$row["value"]." * ".$prices[$row["product_id"]]." = $s ";
+       $data_up[$row["product_id"]][$row["store_id"]][0] =$s;
+       $data_up[$row["product_id"]][0][0] +=$s;
+   }  
diff --git a/erp24/modul/shipment/fields/price_zakup_summ.php b/erp24/modul/shipment/fields/price_zakup_summ.php
new file mode 100644 (file)
index 0000000..34b2281
--- /dev/null
@@ -0,0 +1,17 @@
+<?
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data 
+WHERE order_id=? AND color='' AND store_id=''
+AND field_name IN ('purchase_price_zakup','quantity_zakup_fact')",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+}
+
+
+foreach($products as $product_id => $name){
+           $data_up[$product_id][0][0] = round($FiledsDataArray["purchase_price_zakup"][$product_id] * $FiledsDataArray["quantity_zakup_fact"][$product_id],2);
+
+}  
+
+
diff --git a/erp24/modul/shipment/fields/purchase_fact_difference.php b/erp24/modul/shipment/fields/purchase_fact_difference.php
new file mode 100644 (file)
index 0000000..a7c826c
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND color=''
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','quantity_zakup_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+  //    echo"<br> <h2>$name</h2>";
+  foreach($orderStoresArrayRelation as $storeId ) {  
+      
+    $data_up[$productId][0][0] = ( $FiledsDataArray["quantity_warehouseman_fact"][$productId] - $FiledsDataArray["quantity_zakup_fact"][$productId] ); 
+  }
+  
+}
diff --git a/erp24/modul/shipment/fields/purchase_logistic.php b/erp24/modul/shipment/fields/purchase_logistic.php
new file mode 100644 (file)
index 0000000..9f550b0
--- /dev/null
@@ -0,0 +1,12 @@
+<?
+/*
+  $data=$db::getRows("SELECT sum(value) as value,color FROM store_orders_fields_data WHERE 
+  field_name='purchase_logistic' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId'  AND store_id=''  group by color");
+     foreach($data as $row) {
+        if(empty($row["color"])) $row["color"]=0;
+        $data_up[0][0][$row["color"]] +=(int)$row["value"];        
+        $data_up[0][0][0] +=(int)$row["value"];
+     }  
+     */
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/purchase_price.php b/erp24/modul/shipment/fields/purchase_price.php
new file mode 100644 (file)
index 0000000..e2b7cfb
--- /dev/null
@@ -0,0 +1,7 @@
+<?
+
+$data=$db::getRows("SELECT product_id, price FROM prices WHERE product_id $whereInProductsId");    
+  foreach($data as $row)  {
+     // $prices[$row["product_id"]]=$row["price"]; 
+      $data_up[$row["product_id"]][0][0]=$row["price"]; 
+  }      
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/purchase_price_zakup.php b/erp24/modul/shipment/fields/purchase_price_zakup.php
new file mode 100644 (file)
index 0000000..37e27ae
--- /dev/null
@@ -0,0 +1,13 @@
+<?
+/*
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? AND color=''
+AND field_name IN ('cost_price')
+",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]][0]=(int)$row["value"];
+}
+
+*/
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/purchase_summ.php b/erp24/modul/shipment/fields/purchase_summ.php
new file mode 100644 (file)
index 0000000..51e5c35
--- /dev/null
@@ -0,0 +1,18 @@
+<?
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data 
+WHERE order_id=? AND color='' AND store_id=''
+AND field_name IN ('purchase_price','quantity_zakup_fact')",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+}
+
+
+foreach($products as $product_id => $name){
+     // розничная цена в рублях на сумму закупки по факту закупщиком
+           $data_up[$product_id][0][0] = round($FiledsDataArray["purchase_price"][$product_id] * $FiledsDataArray["quantity_zakup_fact"][$product_id]);
+
+}  
+
+
diff --git a/erp24/modul/shipment/fields/quantity.php b/erp24/modul/shipment/fields/quantity.php
new file mode 100644 (file)
index 0000000..904a22e
--- /dev/null
@@ -0,0 +1,9 @@
+<?
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color
+FROM store_planogram WHERE quantity>0 
+AND product_id  $whereInProductsId
+AND store_id $orderStoresArrayRelation_in group by product_id, color, store_id");
+ foreach($store_planogram as $row) {
+    $data_up[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    $data_up[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+    }
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/quantity_fact.php b/erp24/modul/shipment/fields/quantity_fact.php
new file mode 100644 (file)
index 0000000..acd21ea
--- /dev/null
@@ -0,0 +1,11 @@
+<?
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 
+AND date_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND product_id $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+   $data_up[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+    $data_up[$row["product_id"]][0][$row["color"]] +=$row["quantity"];    
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/quantity_rejection.php b/erp24/modul/shipment/fields/quantity_rejection.php
new file mode 100644 (file)
index 0000000..675e765
--- /dev/null
@@ -0,0 +1,2 @@
+<?
+
diff --git a/erp24/modul/shipment/fields/quantity_rejection_delta.php b/erp24/modul/shipment/fields/quantity_rejection_delta.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/erp24/modul/shipment/fields/quantity_storage.php b/erp24/modul/shipment/fields/quantity_storage.php
new file mode 100644 (file)
index 0000000..acbc9db
--- /dev/null
@@ -0,0 +1,9 @@
+<?
+
+$data2=$db::getRows("SELECT product_id,store_id,quantity FROM balances WHERE quantity>0 
+AND  product_id $whereInProductsId 
+AND store_id $orderStoresArrayRelation_in");
+foreach($data2 as $row2) {
+$data_up[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+$data_up[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/quantity_warehouseman_fact.php b/erp24/modul/shipment/fields/quantity_warehouseman_fact.php
new file mode 100644 (file)
index 0000000..16c821e
--- /dev/null
@@ -0,0 +1,9 @@
+<?
+
+  $data2=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE 
+  field_name='quantity_warehouseman_fact' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND order_id='$orderId' AND color='' AND store_id!='' group by product_id");
+     foreach($data2 as $row2) {
+       $data_up[$row2["product_id"]][0][0] +=(int)$row2["value"];
+     }  
diff --git a/erp24/modul/shipment/fields/quantity_warehouseman_fact_defective_related.php b/erp24/modul/shipment/fields/quantity_warehouseman_fact_defective_related.php
new file mode 100644 (file)
index 0000000..3be8cc2
--- /dev/null
@@ -0,0 +1,24 @@
+<?
+
+// считаем получено по факту кладовщиком от закупок частей.
+$data=$db::getRows("SELECT id FROM store_orders WHERE related_order_id='$orderId'");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+  $whereInOrderId .=" '".$row["id"]."' ";
+    if($i<(count($data)-1)) $whereInOrderId .=" , ";
+     $i++;   
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT order_id,product_id, sum(value) value, color FROM store_orders_fields_data WHERE 
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId 
+AND field_name='quantity_warehouseman_defective' AND store_id=''  AND value>0 group by order_id,product_id,color");
+  foreach($data as $row) {
+  if(!empty($row["color"])) $data_up[$row["product_id"]][0][$row["color"]] +=$row["value"];
+  if(empty($row["color"]))   $data_up[$row["product_id"]][0][0] +=$row["value"];     
+   //echo"<br> order=".$row["order_id"]."  ".$products[$row["product_id"]]." =  ".$row["color"]." =   ".$row["value"]."";   
+  
+  }
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/quantity_warehouseman_fact_related.php b/erp24/modul/shipment/fields/quantity_warehouseman_fact_related.php
new file mode 100644 (file)
index 0000000..d540a78
--- /dev/null
@@ -0,0 +1,26 @@
+<?
+
+// считаем получено по факту кладовщиком от закупок частей.
+$data=$db::getRows("SELECT id FROM store_orders WHERE related_order_id='$orderId'");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+  $whereInOrderId .=" '".$row["id"]."' ";
+    if($i<(count($data)-1)) $whereInOrderId .=" , ";
+     $i++;   
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT product_id, sum(value) value, if(color='',0,color) as color FROM store_orders_fields_data WHERE 
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId 
+AND field_name='quantity_warehouseman_fact' AND store_id=''  AND value>0 group by product_id,color");
+  foreach($data as $row) {
+      
+  $data_up[$row["product_id"]][0][$row["color"]]=$row["value"];
+  if(empty($row["color"])) $data_up[$row["product_id"]][0][0] +=$row["value"]; 
+  
+  // echo"<br> ".$row["product_id"]." =  store_id=".$row["store_id"]."  ".$row["value"]."";   
+  
+  }
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/quantity_warehouseman_fact_summ.php b/erp24/modul/shipment/fields/quantity_warehouseman_fact_summ.php
new file mode 100644 (file)
index 0000000..36d3896
--- /dev/null
@@ -0,0 +1,33 @@
+<?
+
+// считаем получено по факту кладовщиком от закупок частей.
+$data=$db::getRows("SELECT id FROM store_orders WHERE related_order_id='$orderId'");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+  $whereInOrderId .=" '".$row["id"]."' ";
+    if($i<(count($data)-1)) $whereInOrderId .=" , ";
+     $i++;   
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT order_id,product_id, sum(value) value, color FROM store_orders_fields_data WHERE 
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId 
+AND field_name in('quantity_warehouseman_defective','quantity_warehouseman_fact') AND store_id=''  AND value>0 group by order_id,product_id,color");
+  foreach($data as $row) {
+  if(!empty($row["color"])) $data_up[$row["product_id"]][0][$row["color"]] +=$row["value"];
+  if(empty($row["color"]))   $data_up[$row["product_id"]][0][0] +=$row["value"];     
+   //echo"<br> order=".$row["order_id"]."  ".$products[$row["product_id"]]." =  ".$row["color"]." =   ".$row["value"]."";   
+    }
+}
+
+
+$data=$db::getRows("SELECT order_id,product_id, sum(value) value, color FROM store_orders_fields_data WHERE 
+order_id=? AND product_id $whereInProductsId 
+AND field_name in('quantity_warehouseman_defective','quantity_warehouseman_fact') AND store_id=''  AND value>0 group by order_id,product_id,color",[$orderId]);
+  foreach($data as $row) {
+  if(!empty($row["color"])) $data_up[$row["product_id"]][0][$row["color"]] +=$row["value"];
+  if(empty($row["color"]))   $data_up[$row["product_id"]][0][0] +=$row["value"];     
+   //echo"<br> order=".$row["order_id"]."  ".$products[$row["product_id"]]." =  ".$row["color"]." =   ".$row["value"]."";   
+    }
diff --git a/erp24/modul/shipment/fields/quantity_zakup_fact.php b/erp24/modul/shipment/fields/quantity_zakup_fact.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/erp24/modul/shipment/fields/quantity_zakup_fact_sum.php b/erp24/modul/shipment/fields/quantity_zakup_fact_sum.php
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/erp24/modul/shipment/fields/quantity_zakup_fact_summ.php b/erp24/modul/shipment/fields/quantity_zakup_fact_summ.php
new file mode 100644 (file)
index 0000000..9b45e4a
--- /dev/null
@@ -0,0 +1,22 @@
+<?php
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND color=''
+AND store_id=''
+AND field_name IN ('quantity_zakup_fact','purchase_price')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+  //    echo"<br> <h2>$name</h2>";
+  foreach($orderStoresArrayRelation as $storeId ) {  
+          $data_up[$productId][0][0] = round( $FiledsDataArray["purchase_price"][$productId] * $FiledsDataArray["quantity_zakup_fact"][$productId] ); 
+  }
+  
+}
diff --git a/erp24/modul/shipment/fields/quantity_zakup_new.php b/erp24/modul/shipment/fields/quantity_zakup_new.php
new file mode 100644 (file)
index 0000000..5d77bdc
--- /dev/null
@@ -0,0 +1,24 @@
+<?
+
+  $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE 
+  field_name='quantity_zakup_new' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND store_id!=''
+  AND order_id=? AND color!='' AND store_id!='' group by product_id,store_id,color",[$orderId]);
+     foreach($data as $row) {
+       $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];  
+     //  $data_up[$row["product_id"]][0][0] +=(int)$row["value"];   
+   //   echo"<br>Всего quantity_zakup_new ".$products[$row["product_id"]]." = ".$row["value"]."  ";
+     }  
+     
+     
+  $data=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE 
+  field_name='quantity_zakup_new' AND value>0
+  AND store_id $orderStoresArrayRelation_in
+  AND store_id!=''
+  AND order_id=? AND color='' AND store_id!='' group by product_id",[$orderId]);
+     foreach($data as $row) {
+       $data_up[$row["product_id"]][0][0] +=(int)$row["value"];   
+
+     }       
diff --git a/erp24/modul/shipment/fields/sales_4weeks_cnt.php b/erp24/modul/shipment/fields/sales_4weeks_cnt.php
new file mode 100644 (file)
index 0000000..fe58a81
--- /dev/null
@@ -0,0 +1,20 @@
+<?
+$day_sales=7*4;
+$data_up=[];
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  $whereInProductsId
+
+AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c ");    
+  foreach($data2 as $row2) { 
+   $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+    if(!empty($cnt)) {
+      $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+      $data_up[$row2["product_id"]][0][0] +=$cnt; 
+      
+    //  echo"<br> ".$products[$row2["product_id"]]." ".$row2["store_id"]." =$cnt ";
+   }
+ }
+
+
diff --git a/erp24/modul/shipment/fields/sales_7day_amount_division.php b/erp24/modul/shipment/fields/sales_7day_amount_division.php
new file mode 100644 (file)
index 0000000..6ea118b
--- /dev/null
@@ -0,0 +1,28 @@
+<?
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+//echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {      
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id 
+AND i.product_id in($whereInProductsId_in) 
+AND s.store_id_1c $orderStoresArrayRelation_in
+ AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");    
+foreach($data2 as $row2) { 
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_up[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_up[$row2["product_id"]][0][0] +=$sale; 
+}
+}
+}
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/sales_7day_division.php b/erp24/modul/shipment/fields/sales_7day_division.php
new file mode 100644 (file)
index 0000000..bdaa8dc
--- /dev/null
@@ -0,0 +1,33 @@
+<?
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$day_sales=$configGroupProducts[$group]["day_sales"];
+//echo"<br>+++ <h1>$group дней $day_sales</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {    
+    
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt,
+sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  in($whereInProductsId_in)  
+AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_division 00:00:00'
+AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_up[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+      $data_up[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
+} 
+
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/sales_amount.php b/erp24/modul/shipment/fields/sales_amount.php
new file mode 100644 (file)
index 0000000..049c660
--- /dev/null
@@ -0,0 +1,38 @@
+<?
+
+//массив с товарами из данной закупки разнесенных по категориям
+foreach($productGroupArray as $group =>$pArray) {   
+
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {
+    
+    if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {   
+$day_sales=$configGroupProducts[$group]["day_sales"]; // массив группы товаров с данными за какоц период считать статистику в днях
+}
+}
+
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.summ,0)) as sale_cnt, sum(if(s.operation='Возврат',i.summ,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  
+i.product_id $whereInProductsId
+AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id_1c  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+      $data_up[$row2["product_id"]][0][0] +=$cnt; 
+      
+    //  echo"<br> sales_amount ".$products[$row2["product_id"]]." ".$row2["store_id"]." $cnt ";
+   }
+ }
+
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/sales_cnt.php b/erp24/modul/shipment/fields/sales_cnt.php
new file mode 100644 (file)
index 0000000..f3edda1
--- /dev/null
@@ -0,0 +1,17 @@
+<?
+$data_up=[];
+$day_sales=7;
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  $whereInProductsId
+ AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c  ");    
+  foreach($data2 as $row2) { 
+   $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+   $cnt=(int)$cnt;
+    if(!empty($cnt)) {
+      $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+      $data_up[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
diff --git a/erp24/modul/shipment/fields/sales_division_4weeks_cnt_avg.php b/erp24/modul/shipment/fields/sales_division_4weeks_cnt_avg.php
new file mode 100644 (file)
index 0000000..56db81f
--- /dev/null
@@ -0,0 +1,15 @@
+<?
+$day_sales=7*4;
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id  $whereInProductsId
+
+AND store_id $orderStoresArrayRelation_in
+AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id ");    
+  foreach($data2 as $row2) { 
+   $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+    if(!empty($cnt)) {
+      $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+      $data_up[$row2["product_id"]][0][0] +=$cnt; 
+   }
+ }
diff --git a/erp24/modul/shipment/fields/scheduled_delivery_cnt.php b/erp24/modul/shipment/fields/scheduled_delivery_cnt.php
new file mode 100644 (file)
index 0000000..fbc2259
--- /dev/null
@@ -0,0 +1,25 @@
+<?
+/* scheduled_delivery_cnt
+«Плановая поставка» новая ячейка
+Берем закупки со статусом «Товар в пути» - с этим товаром - на каждый магазин сколько заказа магазин из ячееки «Заказ закупщика NEW»  AND date_start <='$date_start_sale' AND date_start>='$date_start_sale' -interval 27 day
+*/
+$data=$db::getRows("SELECT id FROM store_orders WHERE status=5");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+  $whereInOrderId .=" '".$row["id"]."' ";
+    if($i<(count($data)-1)) $whereInOrderId .=" , ";
+     $i++;   
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT product_id, store_id, value FROM store_orders_fields_data WHERE 
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId 
+AND field_name='quantity_zakup_new' AND color='' AND value>0 group by product_id, store_id");
+  foreach($data as $row) {
+  $data_up[$row["product_id"]][$row["store_id"]]["0"]=$row["value"];
+  $data_up[$row["product_id"]][0]["0"] +=$row["value"];     // echo"<br> ".$row["product_id"]." =  store_id=".$row["store_id"]."  ".$row["value"]."";   
+  
+  }
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/score.php b/erp24/modul/shipment/fields/score.php
new file mode 100644 (file)
index 0000000..32bb394
--- /dev/null
@@ -0,0 +1,73 @@
+<?
+
+ $scoreArr=[];
+$dataF=$db::getRows("SELECT  product_id, store_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND color=''
+AND store_id!=''
+AND field_name IN ('score')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $scoreArr[$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+//  echo"<br> <h2>$name</h2>";
+$scoreall=0; $cnt=0;
+  foreach($orderStoresArrayRelation as $storeId ) {  
+    if($scoreArr[$productId][$storeId]>0) {  
+    $scoreall += $scoreArr[$productId][$storeId];
+    $cnt++;
+    }
+  }
+if($scoreall>0) $data_up[$productId][0][0] =round($scoreall/$cnt,2) ;   
+
+
+}
+
+
+
+
+ $scoreArr=[];
+$dataF=$db::getRows("SELECT  product_id, store_id, value,color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND store_id $orderStoresArrayRelation_in
+AND color!=''
+AND store_id!=''
+AND field_name IN ('score')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+  $scoreArr[$row["product_id"]][$row["store_id"]][$row["color"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+//  echo"<br> <h2>$name</h2>";
+
+   foreach($productsColorsArray[$productId] as $color) {
+     $color=trim($color);
+     $scoreall=0; $cnt=0;
+     foreach($orderStoresArrayRelation as $storeId ) {  
+      
+       if($scoreArr[$productId][$storeId][$color]>0) {  
+         $scoreall += $scoreArr[$productId][$storeId][$color];
+          $cnt++;
+       }
+      }
+      if($scoreall>0) $data_up[$productId][0][$color]=round($scoreall/$cnt,2) ;   
+
+    }
+
+
+}
+
+   
+
+
+
+
+
+
diff --git a/erp24/modul/shipment/fields/storehouse_balance.php b/erp24/modul/shipment/fields/storehouse_balance.php
new file mode 100644 (file)
index 0000000..71a76dc
--- /dev/null
@@ -0,0 +1,27 @@
+<?
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value, color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','division_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+    if(!$row["color"]) $row["color"]=0;
+     $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]] +=(int)$row["value"];
+}
+
+
+//echo"<h1>Storehouse_balance</h1>";
+foreach($products as $productId => $nameProduct) {
+   // echo"<br>$nameProduct ".$FiledsDataArray["quantity_warehouseman_fact"][$productId][0] ." -  ".$FiledsDataArray["division_store_summ"][$productId][0]."";
+   $data_up[$productId][0][0]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0] -  $FiledsDataArray["division_summ"][$productId][0];
+         foreach($productsColorsArray[$productId] as $color) {
+         $color=trim($color);  
+         $data_up[$productId][0][$color]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][$color] -  $FiledsDataArray["division_summ"][$productId][$color];
+         } 
+
+} 
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/storehouse_balance_store.php b/erp24/modul/shipment/fields/storehouse_balance_store.php
new file mode 100644 (file)
index 0000000..843b922
--- /dev/null
@@ -0,0 +1,47 @@
+<?
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND color=''
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','division_store_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+     $FiledsDataArray[$row["field_name"]][$row["product_id"]][0] =(int)$row["value"];
+}
+
+
+//echo"<h1>Storehouse_balance</h1>";
+foreach($products as $productId => $nameProduct) {
+         $data_up[$productId][0][0]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0] -  $FiledsDataArray["division_store_summ"][$productId][0];
+} 
+
+
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value, color
+FROM store_orders_fields_data WHERE 
+order_id=? 
+AND color!=''
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','division_store_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) { 
+     $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]] =(int)$row["value"];
+}
+
+
+//echo"<h1>Storehouse_balance</h1>";
+foreach($products as $productId => $nameProduct) {
+          foreach($productsColorsArray[$productId] as $color) {
+         $color=trim($color);  
+         $data_up[$productId][0][$color]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][$color] -  $FiledsDataArray["division_store_summ"][$productId][$color];
+         } 
+
+} 
+
diff --git a/erp24/modul/shipment/fields/write_downs.php b/erp24/modul/shipment/fields/write_downs.php
new file mode 100644 (file)
index 0000000..e8f9ac2
--- /dev/null
@@ -0,0 +1,19 @@
+<?
+
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+$periodDaysStats=7;
+if(!empty($orderStoresArrayRelation_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' 
+AND p.product_id $whereInProductsId 
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2)   { 
+  $a=round($row2["cnt"]);   
+   if(!empty($a)) {
+   $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$a;
+   $data_up[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+ }
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/write_offs_4week_cnt_avg.php b/erp24/modul/shipment/fields/write_offs_4week_cnt_avg.php
new file mode 100644 (file)
index 0000000..f53647e
--- /dev/null
@@ -0,0 +1,22 @@
+<?
+
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+$periodDaysStats=28;
+if(!empty($orderStoresArrayRelation_in)) {   
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  
+AND w.type='Брак' 
+AND p.product_id $whereInProductsId 
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00' 
+AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2) { 
+  $a=round($row2["cnt"]/4);   
+   if(!empty($a)) {
+   $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   $data_up[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/write_offs_4week_sum.php b/erp24/modul/shipment/fields/write_offs_4week_sum.php
new file mode 100644 (file)
index 0000000..2f64f96
--- /dev/null
@@ -0,0 +1,20 @@
+<?
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю в рублях
+$periodDaysStats=28;
+if(!empty($orderStoresArrayRelation_in)) {   
+$data2=$db::getRows("SELECT p.product_id,p.summ, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' 
+AND p.product_id $whereInProductsId 
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00' 
+AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2)   { 
+  $a=round ($row2["summ"]/4) ;   
+   if(!empty($a)) {
+   $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   $data_up[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/write_offs_comments.php b/erp24/modul/shipment/fields/write_offs_comments.php
new file mode 100644 (file)
index 0000000..a985429
--- /dev/null
@@ -0,0 +1,32 @@
+<?
+
+foreach($productGroupArray as $group =>$pArray) {   
+  $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+   //echo"<br>+++  <h1>Списание $group дней $periodDaysStats</h1> "; 
+  //собираем условие по выборке товаров
+  $whereInProductsId_in="";
+  $j=0;
+ foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+  if(!empty($whereInProductsId_in)) {     
+    if($periodDaysStats==7) $periodDaysStats_where=14;
+     else $periodDaysStats_where=$periodDaysStats;
+    
+     $date_start_sale2=date("Y-m-d");
+        $data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+        FROM write_offs as w, write_offs_products as p,  write_offs_comments as c
+        WHERE p.write_offs_id=w.id  
+        AND w.type='Брак' 
+        AND c.write_offs_id=p.write_offs_id 
+        AND p.product_id=c.product_id AND c.quantity>0 
+        AND p.product_id in($whereInProductsId_in) 
+        AND w.store_id $orderStoresArrayRelation_in
+        AND w.date<='$date_start_sale2 00:00:00' 
+        AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
+        group BY p.product_id,w.store_id, c.comment_id");
+       foreach($data2 as $row2) { 
+            $a=$row2["comment_id"]."=".$row2["cnt"]."шт. ";  
+           if(!empty($a))  $data_up[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+     }
+    }
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/write_offs_division.php b/erp24/modul/shipment/fields/write_offs_division.php
new file mode 100644 (file)
index 0000000..9c743bd
--- /dev/null
@@ -0,0 +1,29 @@
+<?
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {   
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+//echo"<br>+++ <h1>$group дней $periodDaysStats</h1> "; 
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=",";      $whereInProductsId_in .="'$prodId'";   $j++;}  
+
+if(!empty($whereInProductsId_in)) {      
+ $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+ FROM write_offs as w, write_offs_products as p 
+ WHERE p.write_offs_id=w.id  AND w.type='Брак' 
+ AND   p.product_id in($whereInProductsId_in) 
+ AND w.store_id $orderStoresArrayRelation_in
+ AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) { 
+ $a=ceil($row2["cnt"]);   
+ if(!empty($a)) {
+   $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+     $data_up[$row2["product_id"]][0][0] +=$a; 
+  }
+ }
+}
+}
\ No newline at end of file
diff --git a/erp24/modul/shipment/fields/write_offs_sum.php b/erp24/modul/shipment/fields/write_offs_sum.php
new file mode 100644 (file)
index 0000000..feb806b
--- /dev/null
@@ -0,0 +1,19 @@
+<?
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+
+
+if(!empty($orderStoresArrayRelation_in) and !empty($date_start_sale) and !empty($products)) {
+ $periodDaysStats=7;   
+    
+$data2=$db::getRows("SELECT p.product_id, p.summ, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  AND w.type='Брак' 
+AND p.product_id  $whereInProductsId 
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2)   { 
+  $a=$row2["summ"];   
+   $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+   $data_up[$row2["product_id"]][0][0] +=$a; 
+ }
+ }
\ No newline at end of file
diff --git a/erp24/modul/shipment/fieldsConfig.php b/erp24/modul/shipment/fieldsConfig.php
new file mode 100644 (file)
index 0000000..30ffb77
--- /dev/null
@@ -0,0 +1,22 @@
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/uni.php");
+
+
+
+global $modul, $act,$fields_edit,$h1;
+$modul="shipments";
+$act="fieldsConfig";
+$fields_edit=1;
+$h1="Поля для закупок";
+
+construct_form_fields();
+
+
+
+
+
+?>
\ No newline at end of file
index c9a4e0243a694f7e7e8a9d8e2ff4856c87455c65..4627729372cfb08c0aeb800b3367a970335b05b3 100644 (file)
@@ -1,11 +1,13 @@
-<?
+<?php
 include_once("startup.php");
 include_once("inc/db.php");
 include_once("inc/base_new.php");
 include_once("inc/design_new.php");
 //include_once("inc/shipment.php");
 include"templates/top.php";
-
+//ini_set('error_reporting', E_ALL);
+//ini_set('display_errors', 1);
+//ini_set('display_startup_errors', 1);
 //if($_SESSION["group_id"]>2) exit("У вас нет дступа");
 global $products, // массив с товарами производителя прикрепленного к этой закупке
 $orderId, // id- заказа
@@ -63,7 +65,7 @@ mess("Статус изменен");
 
 include"inc/functionsFiedlsData.php";
 
-$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
+$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
 
 
 
@@ -107,6 +109,7 @@ echo'
 <span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
 
 
+<span onclick="ajaxUpdateStoreZakup();" class="btn btn-blue me-2">2) обновить сумму запок по всем магазинам</span>
 
 
 <span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
@@ -122,7 +125,6 @@ echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderDa
 <span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span>  ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
 
 
-
 // панель с магазинами
 showOrderStoresPanel();
 
@@ -206,8 +208,8 @@ if(!empty($sort)) $sort="ORDER BY   FIELD(`id`, $sort) ";
  $data=$db::getRows("SELECT * FROM store_orders_fields  $sort");
 }
 foreach($data as $row) {
-$dostup=$dostup_fields[$row["id"]];
-$bg=$bg_fields[$row["id"]];
+@$dostup=$dostup_fields[$row["id"]];
+@$bg=$bg_fields[$row["id"]];
 if($dostup=="edit" or $dostup=="show") {
 
 
@@ -225,7 +227,12 @@ echo ''.$thead.'<tbody>';
 
 
 
-//$FiledsData=getDataFiledsData();
+$FiledsData=[];
+
+$FiledsData=getDataFiledsData();
+
+
+//print_r($FiledsData);
 
 
 // полнограммы по всем магазинам
@@ -256,7 +263,7 @@ echo'<tr';
 if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
 
 
-if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid][0][0]) and $status_order_id >= 6) { echo' class="bg-danger"';
 
  echo' style="opacity:0.5"';
 }
@@ -271,12 +278,13 @@ echo''.$name.'';
 
 
 //узнаем категорибю товара
-$categoryId=$ProductsOptions[$pid]["parent_id"];
+@$categoryId=$ProductsOptions[$pid]["parent_id"];
 // по категории узнаем тип товара горшечка или упаковка
-$tip=$products_class[$categoryId];
+@$tip=$products_class[$categoryId];
 
 
-if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+if(isset($productsColorsArray[$pid]) and count($productsColorsArray[$pid])>0)
+echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
 echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
 echo'</td>';
 
@@ -286,6 +294,7 @@ echo'</tr>';
 
 
 //begin colors
+if(isset($productsColorsArray[$pid])) {
 foreach($productsColorsArray[$pid] as $color) {
   $color=trim($color);    
    if(!empty($color))  { 
@@ -306,6 +315,7 @@ echo'</div>';
      echo"</tr>"; 
   }
     
+}
 }
 //end colors
 
@@ -315,8 +325,8 @@ echo'</div>';
 
 echo'<tr class="bg-success zg"><td class="text-right"></td>';
 foreach($data as $row) {
-$dostup=$dostup_fields[$row["id"]];
-$bg=$bg_fields[$row["id"]];
+@$dostup=$dostup_fields[$row["id"]];
+@$bg=$bg_fields[$row["id"]];
 if($dostup=="edit" or $dostup=="show") {      
 echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
 }
@@ -324,7 +334,7 @@ echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'">
 echo'</tr>
 <tr class="bg-success"><td class="text-right">итого</td>';
 foreach($data as $row) {
-$dostup=$dostup_fields[$row["id"]];
+@$dostup=$dostup_fields[$row["id"]];
 if($dostup=="edit" or $dostup=="show") {   
  $s="";   
 if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]]; 
@@ -336,7 +346,66 @@ echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
 echo'</tr></tbody>';
 echo'</table>
 
-<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+<style>table tr td.bg-lime{background:lime;color:#fff;}
+
+table tr.border td{ border-bottom:1px #cdcdcd solid; color:#fff;}
+</style>';
+
+
+
+
+echo'<h3 class="text-center mt-2">Итого сумма по столбцам</h3>
+<table class="table-stripped width-auto">
+<tbody><tr>';
+foreach($data as $row) {
+@$dostup=$dostup_fields[$row["id"]];
+@$bg=$bg_fields[$row["id"]];
+$s="";   
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount" and isset($rowArraySum[$row["id"]]))   $s=$rowArraySum[$row["id"]]; 
+
+if($fieldsRows[$row["name_eng"]]["summ"]==1 and !empty($s) and ($dostup=="edit" or $dostup=="show")) {  
+
+
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]); 
+      
+  // ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')  
+echo'<tr><td class="text-right" title="'.$row["name_full"].' '.$row["name_eng"].'">'.$row["name"].'</td>
+<td class="text-left"><b>'.$s.'</b></td></tr>';
+
+
+}
+}
+
+echo'</tbody></table>';
+
+
+$shipments_group_products=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='shipments_group_products' order by name ASC");
+
+
+//массив с полями по которым будем собирать данные
+$fieldsStatsArray[]=["sales_4weeks_cnt","sales_4weeks_sum","sales_cnt","sales_amount","quantity_zakup_new","order_supplier_sum"];
+
+
+foreach($products as $product_id => $name) {
+
+if(!empty($ProductsOptions[$product_id]["shipments_group_id"])) {
+ // получаем массив со значением по полю
+ $valueArray=getValueFieldTrue("quantity_zakup_new",$product_id,0,0);
+    
+    echo" <br> $name  =  ".$shipments_group_products[$ProductsOptions[$product_id]["shipments_group_id"]]."  
+   = ".$valueArray["value"]."  "; 
+    
+   @$shipment_group_products[$ProductsOptions[$product_id]["shipments_group_id"]] +=1;   
+    
+}
+
+
+    
+}
+
+
+
 /*
 $db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
 
@@ -438,6 +507,20 @@ jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title
        }}); 
 }
 
+function ajaxUpdateStoreZakup(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStoreZakup/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
 
 function ajaxUploadAutoPurchase(){
  $('#modal-7 .modal-body').html('Считаем данные');
@@ -502,11 +585,11 @@ jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title
 </div>
 </div>'; 
  
+$jss="";
 
 
 
-
-include"templates/bottom.php";
+include("templates/bottom.php");
 
 
 
diff --git a/erp24/modul/shipment/fieldsData2.php b/erp24/modul/shipment/fieldsData2.php
new file mode 100644 (file)
index 0000000..5e60bd3
--- /dev/null
@@ -0,0 +1,608 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/shipment.php");
+include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+$orderId, // id- заказа
+$store_id, // GUID магазина
+$storesArray, // массив с магазинами
+$group_id, // ID группы авторизованного сотрудника
+$fieldsRows, // массив с данными по полями - ключ name_eng
+$date_start_sale, // дата старта продаж от которой считаемстатистику
+$whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12') 
+$FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+$FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+$FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам  
+$status_order_id, // ID текущего статуса закупаки
+$store_orders_statuses, // массим со статсами закупок
+$statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
+$status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
+$store_orders_status_description, // - массив с описанием стутса
+$dostup_fields,
+$bg_fields,
+$ProductsOptions;
+
+$act='fieldsData'; // часть url action
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+
+
+
+
+if(!empty($_REQUEST["group_id"])) { 
+    $group_id=(int)$_REQUEST["group_id"];
+    $_SESSION["group_id_init"]=$group_id;
+}
+
+
+
+$time = strtotime('this week monday, 00:00');  // текущий понедельник  в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time);  // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+$db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+$db::sql("INSERT IGNORE INTO  store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+mess("Статус изменен");    
+}
+
+
+
+include"inc/functionsFiedlsData.php";
+
+$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
+
+
+
+echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+Описание статуса: '.$store_orders_status_description[$status_order_id].'
+
+';
+
+echo"Под кем будем просматривать ";
+foreach($data as $gid => $nameGroup) {
+
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
+
+if($gid==$group_id) echo"success"; else echo"outline-info";
+
+echo"\">$nameGroup</a>";    
+    
+}
+echo'
+<br>
+
+Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
+Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
+
+
+
+
+
+
+<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+<span onclick="ajaxUpdateStoreZakup();" class="btn btn-blue me-2"> обновить по полям !</span>
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>';
+
+//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
+<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span>  ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
+
+
+// панель с магазинами
+showOrderStoresPanel();
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if($status_order_id==1) {
+    
+    
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";    
+    
+    
+if(!empty($_REQUEST["load"])) {    
+$data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
+$data_uper=[]; 
+foreach($products as $productId => $nameProduct) {
+echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]."  закуп ".$ProductsOptions[$productId]["price_zakup"]." ";  
+$price=$productsPrices[$productId];
+$data_uper[$productId]["NULL"]["NULL"]=$price;
+
+
+$db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
+
+} 
+
+//розничная цена
+insert_store_orders_fields($data_uper,"purchase_price");  
+
+
+$data_uper=[]; 
+foreach($products as $productId => $nameProduct) {
+$price=$ProductsOptions[$productId]["price_zakup"];   
+ $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];   
+ $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+} 
+insert_store_orders_fields($data_uper,"purchase_price_zakup");  
+
+//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
+}
+    
+    
+}
+
+
+$products_varieties=[];
+$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+
+
+
+//если выбран магазин то 
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right w-10">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника    
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+$sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+if(!empty($sort)) $sort="ORDER BY      FIELD(`id`, $sort) ";
+
+ $data=$db::getRows("SELECT * FROM store_orders_fields  $sort");
+}
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+
+
+    
+$html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'"  onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:110px;">
+<b>'.$row["name"].'</b></th>';
+$thead .=$html;
+$head_td .=$html;
+}
+
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' 
+AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"]; 
+}    
+
+$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"]; 
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+if($trCount==20) {    
+  $trCount=0;   
+  echo  $head_td; 
+ }
+$trCount++;    
+    
+echo'<tr';
+
+
+if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+
+ echo' style="opacity:0.5"';
+}
+
+
+
+echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+if(empty($statuses_stores_show[$status_order_id]))  {      echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>';   }
+echo''.$name.'';
+
+if($ProductsOptions[$pid]["shipments_group_id"]) echo"**";
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+
+
+if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+echo'</td>';
+
+foreach($data as $row)   printFieldTd($row["name_eng"],$pid,$store_id); 
+
+echo'</tr>';
+
+
+//begin colors
+foreach($productsColorsArray[$pid] as $color) {
+  $color=trim($color);    
+   if(!empty($color))  { 
+      echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;">
+      
+      <td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>'; 
+  
+if(!empty($products_varieties[$pid][$color])) {  
+    echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';  
+foreach($products_varieties[$pid][$color] as $k => $var) {
+echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";  
+}      
+echo'</div>';      
+}     
+      
+      foreach($data as $row) {
+      printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+      } 
+     echo"</tr>"; 
+  }
+    
+}
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {      
+echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+}
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {   
+ $s="";   
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]]; 
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]); 
+  
+echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+}
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}
+
+table tr.border td{ border-bottom:1px #cdcdcd solid; color:#fff;}
+</style>';
+
+
+
+
+echo'<h3 class="text-center mt-2">Итого сумма по столбцам</h3>
+<table class="table-stripped width-auto">
+<tbody><tr>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+$s="";   
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]]; 
+
+if($fieldsRows[$row["name_eng"]]["summ"]==1 and !empty($s) and ($dostup=="edit" or $dostup=="show")) {  
+
+
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]); 
+      
+  // ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')  
+echo'<tr><td class="text-right" title="'.$row["name_full"].' '.$row["name_eng"].'">'.$row["name"].'</td>
+<td class="text-left"><b>'.$s.'</b></td></tr>';
+
+
+}
+}
+
+echo'</tbody></table>';
+
+
+$shipments_group_products=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='shipments_group_products' order by name ASC");
+
+
+//массив с полями по которым будем собирать данные
+//$fieldsStatsArray[]=["sales_4weeks_cnt","sales_4weeks_sum","sales_cnt","sales_amount","quantity_zakup_new","order_supplier_sum"];
+
+
+$field_stats_array=["sales_cnt","sales_4weeks_sum","sales_4weeks_cnt","write_offs_sum","write_downs","write_offs_4week_sum","write_offs_4week_cnt_avg"];
+
+$field_stats_array_in=implode("','",$field_stats_array);
+
+$data_field=[];
+  $data=$db::getRows("SELECT field_name, sum(value) as value,product_id FROM store_orders_fields_data WHERE 
+  field_name in('$field_stats_array_in') AND value>0
+  AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,field_name");
+     foreach($data as $row) {
+            $shipments_group_id=$ProductsOptions[$row["product_id"]]["shipments_group_id"];
+            $data_field[$row["field_name"]][$shipments_group_id] +=$row["value"];
+   }  
+
+
+
+  echo"<div class=\"table-responsive mt-3\"><table class=\"zak\">
+     <thead class=\"table-darck\"><tr class=\"zg\"><th>категория</th>";
+   foreach($field_stats_array as $fieldN) {
+    echo"<th style=\"max-width:120px;\"><b>".$fieldsRows[$fieldN]["name"]."</b></th>";
+   }
+
+
+  echo"</tr></thead><tbody>";
+   foreach($shipments_group_products as $shipments_group_id => $name) {
+      if($data_field["sales_4weeks_cnt"][$shipments_group_id]) {
+     echo"<tr><td>$name</td>";
+      foreach($field_stats_array as $fieldN)   echo"<td>".$data_field[$fieldN][$shipments_group_id]."</td>"; 
+    echo"</tr>";
+       }
+
+   }
+ echo"</tbody></table>";  
+
+
+
+
+/*
+$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+  $all=0;
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $all =$all+$summ;
+    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+  //  if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");} 
+   
+  }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");} 
+
+
+}
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+  
+  
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";  
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+    
+}    
+
+*/
+
+
+
+$_CONFIG["jscss"] .="<script>
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');  
+ $.ajax({
+       url: '/shipment/ajaxFieldInfo/',
+       method: 'post',       
+       dataType: 'html',        
+       data: {id: id},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateFieldsData/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function ajaxUpdateStoreZakup(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStoreZakup/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUploadAutoPurchase/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+    
+    if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, deleteAll:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+}
+
+
+</script>"; 
+
+       $_CONFIG["jscss"] .='<!-- MODAL -->
+               <div class="modal fade" id="modal-7">
+                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
+                               <div class="modal-content">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body p-0">
+                               
+                                       </div>
+                       
+                               </div>
+</div>
+</div>'; 
+
+
+
+
+include"templates/bottom.php";
+
+
+
+
+
+       
+
+
diff --git a/erp24/modul/shipment/fieldsData_____.php b/erp24/modul/shipment/fieldsData_____.php
new file mode 100644 (file)
index 0000000..2155c8d
--- /dev/null
@@ -0,0 +1,519 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/shipment.php");
+include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+$orderId, // id- заказа
+$store_id, // GUID магазина
+$storesArray, // массив с магазинами
+$group_id, // ID группы авторизованного сотрудника
+$fieldsRows, // массив с данными по полями - ключ name_eng
+$date_start_sale, // дата старта продаж от которой считаемстатистику
+$whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12') 
+$FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+$FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+$FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам  
+$status_order_id, // ID текущего статуса закупаки
+$store_orders_statuses, // массим со статсами закупок
+$statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
+$status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
+$store_orders_status_description, // - массив с описанием стутса
+$dostup_fields,
+$bg_fields,
+$ProductsOptions;
+
+$act='fieldsData'; // часть url action
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+
+
+ini_set('error_reporting', E_ALL);
+ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
+
+if(!empty($_REQUEST["group_id"])) { 
+    $group_id=(int)$_REQUEST["group_id"];
+    $_SESSION["group_id_init"]=$group_id;
+}
+
+
+
+$time = strtotime('this week monday, 00:00');  // текущий понедельник  в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time);  // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+$db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+$db::sql("INSERT IGNORE INTO  store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+mess("Статус изменен");    
+}
+
+
+
+include"inc/functionsFiedlsData.php";
+
+$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
+
+
+
+echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+Описание статуса: '.$store_orders_status_description[$status_order_id].'
+
+';
+
+echo"Под кем будем просматривать ";
+foreach($data as $gid => $nameGroup) {
+
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
+
+if($gid==$group_id) echo"success"; else echo"outline-info";
+
+echo"\">$nameGroup</a>";    
+    
+}
+echo'
+<br>
+
+Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
+Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
+
+
+
+
+
+
+<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>';
+
+//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
+<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span>  ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
+
+
+
+// панель с магазинами
+showOrderStoresPanel();
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if($status_order_id==1) {
+    
+    
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";    
+    
+    
+if(!empty($_REQUEST["load"])) {    
+$data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
+$data_uper=[]; 
+foreach($products as $productId => $nameProduct) {
+echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]."  закуп ".$ProductsOptions[$productId]["price_zakup"]." ";  
+$price=$productsPrices[$productId];
+$data_uper[$productId]["NULL"]["NULL"]=$price;
+
+
+$db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
+
+} 
+
+//розничная цена
+insert_store_orders_fields($data_uper,"purchase_price");  
+
+
+$data_uper=[]; 
+foreach($products as $productId => $nameProduct) {
+$price=$ProductsOptions[$productId]["price_zakup"];   
+ $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];   
+ $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+} 
+insert_store_orders_fields($data_uper,"purchase_price_zakup");  
+
+//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
+}
+    
+    
+}
+
+
+$products_varieties=[];
+$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+
+
+
+//если выбран магазин то 
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника    
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+$sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+if(!empty($sort)) $sort="ORDER BY      FIELD(`id`, $sort) ";
+
+ $data=$db::getRows("SELECT * FROM store_orders_fields  $sort");
+}
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+
+
+    
+$html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'"  onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:90px;">
+<b>'.$row["name"].'</b></th>';
+$thead .=$html;
+$head_td .=$html;
+}
+
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' 
+AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"]; 
+}    
+
+$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"]; 
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+if($trCount==20) {    
+  $trCount=0;   
+  echo  $head_td; 
+ }
+$trCount++;    
+    
+echo'<tr';
+
+
+if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+
+ echo' style="opacity:0.5"';
+}
+
+
+
+echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+if(empty($statuses_stores_show[$status_order_id]))  {      echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>';   }
+echo''.$name.'';
+
+
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+
+
+if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+echo'</td>';
+
+foreach($data as $row)   printFieldTd($row["name_eng"],$pid,$store_id); 
+
+echo'</tr>';
+
+
+//begin colors
+foreach($productsColorsArray[$pid] as $color) {
+  $color=trim($color);    
+   if(!empty($color))  { 
+      echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;"><td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>'; 
+  
+if(!empty($products_varieties[$pid][$color])) {  
+    echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';  
+foreach($products_varieties[$pid][$color] as $k => $var) {
+echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";  
+}      
+echo'</div>';      
+}     
+      
+      foreach($data as $row) {
+      printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+      } 
+     echo"</tr>"; 
+  }
+    
+}
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {      
+echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+}
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {   
+ $s="";   
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]]; 
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]); 
+  
+echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+}
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+/*
+$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");      
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+  $all=0;
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {    
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $all =$all+$summ;
+    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+  //  if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");} 
+   
+  }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;  
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");} 
+
+
+}
+
+//пробегаемся по всем продуктам 
+foreach($products as $productId => $name) {
+  
+  
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";  
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) { 
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);    
+    
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";    
+    
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+    
+}    
+
+*/
+
+
+
+$_CONFIG["jscss"] .="<script>
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');  
+ $.ajax({
+       url: '/shipment/ajaxFieldInfo/',
+       method: 'post',       
+       dataType: 'html',        
+       data: {id: id},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateFieldsData/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUploadAutoPurchase/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+    
+    if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, deleteAll:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+}
+
+
+</script>"; 
+
+       $_CONFIG["jscss"] .='<!-- MODAL -->
+               <div class="modal fade" id="modal-7">
+                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
+                               <div class="modal-content">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body p-0">
+                               
+                                       </div>
+                       
+                               </div>
+</div>
+</div>'; 
+
+
+
+
+include"templates/bottom.php";
+
+
+
+
+
+       
+
+
diff --git a/erp24/modul/shipment/functionsShipment.php b/erp24/modul/shipment/functionsShipment.php
new file mode 100644 (file)
index 0000000..25815d0
--- /dev/null
@@ -0,0 +1,783 @@
+<?php
+
+
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+$orderId, // id- заказа
+$store_id, // GUID магазина
+$storesArray, // массив с магазинами
+$group_id, // ID группы авторизованного сотрудника
+$fieldsRows, // массив с данными по полями - ключ name_eng
+$whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12') 
+$FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+$status_order_id, // ID текущего статуса закупаки
+$store_orders_statuses, // массим со статсами закупок
+$statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
+$status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
+$dostup_fields,
+$bg_fields,
+$ProductsOptions,
+ $storesArrayAll, $orderCityId,
+$orderStoresArrayRelation, // массив с гуидами магазинов закупки по которым считаем статистику,
+$orderStoresArrayRelation_in //  SQL условие для выборки по магазинам IN('store_id')
+, $productGroupArray // массив с ID подгруппы группы товаров для автозакупки Короткие розы
+,$related_order_id; 
+
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+ $FiledsData=[];  
+
+$k=0;
+$whereGuid="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+if(!empty($guid)) {  if($k!=0) $whereGuid .=",";    $whereGuid .=" '$guid' ";  $k++;    }
+}
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
+
+//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1  or id=10");
+
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
+
+//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+//$products_varieties=[];
+//$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+//foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+//$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC"); 
+//foreach($data as $row)     $fieldsPropertyArray[$row["field_id"]][]=$row;
+ /*
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+    $date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
+} else {
+ // иначе идем к родителю и узнаем дату матери к которой будем привязываться   
+ $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);   
+}
+
+*/
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+// статусы закупок - массивы с доступами к полям 
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];   
+$store_orders_status_description[$row["id"]]=$row["description"];   
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
+$statuses_stores_show[$row["id"]]=$row["stores_show"]; 
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);   
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);  
+}
+
+
+
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC"); 
+foreach($data as $row) { 
+    $fieldsRows[$row["name_eng"]]=$row;
+   // $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];   
+    $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]);     //считаем поля и зависимые поля рекурсивно
+    if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT *, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,    DATE_FORMAT(date_add, '%Y-%m-%d') as date_add, 
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"]; 
+$date_update=$OrderData["date_update"]; 
+$date_start_division=$OrderData["division_date"]; 
+$order_date_add=$OrderData["date_add"]; 
+$orderCityId=$OrderData["city_id"]; 
+$related_order_id=$OrderData["related_order_id"]; 
+
+
+
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];   
+}
+
+
+
+//$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$orderStoresArrayRelation_in="";
+$orderStoresArrayRelation=[];
+
+$k=0; $wr="";
+foreach($data as $row) {
+ $orderStoresArrayRelation[]=$row["store_id"];
+   if($k!=0) $wr .=","; $wr .="'".$row["store_id"]."'";
+      $k++;  
+}
+
+if(!empty($wr)) $orderStoresArrayRelation_in=" IN ($wr)";
+
+// формируем условие выборки вхождение IN для запросов к таблицам - на выходе строка с условием product_id 
+function getWhereInProductsSqlText() {
+global $db,$providersIdInThisOrder,$ProductsOptions,$products;   
+    
+    // формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+
+ //пробегаемся по провайдерам    
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+    
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id, o.shipments_group_id FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) { 
+  if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+   $products[$row["id"]]=$row["name"];
+ //  $prov[$row["id"]]=$row["provider_id"];
+   $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+   $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+   $ProductsOptions[$row["id"]]["shipments_group_id"]=$row["shipments_group_id"];   
+   
+   $k++;    
+ } 
+$whereInProductsId .=")"; 
+return $whereInProductsId;
+}
+
+$whereInProductsId=getWhereInProductsSqlText();
+
+// массив с группами и продуктами в группе Группы нужны для подсчета статистики продаж списаний будет использоваться при подсчете канкретных полей
+function getProductGroupArray($products) {
+    global $db,$ProductsOptions;
+    
+$products_class=[]; // получаем массив категория товаров - к какой группе относится 
+$data=$db::getRows("SELECT category_id,tip FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"]; 
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId]; 
+// если это срезка у нее нет группы 
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории  
+ $productGroupArray["flowers"][]=$pid;
+}elseif($tip=="potted") {  $daysCounterSales=14; $daysCounterWriteOffs=14;  $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30;  $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip  $categoryId";
+} 
+    
+return $productGroupArray;    
+    
+}
+
+//$productGroupArray=getProductGroupArray($products);
+
+
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p 
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) { 
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+} 
+
+
+
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">")  if($value>$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]==">=")  if($value>=$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="=")  if($value==$row["value"])  $valueCss=$row["style_class"];
+ if($row["type"]=="<=")  if($value<=$row["value"])  $valueCss=$row["style_class"]; 
+ if($row["type"]=="<")  if($value<$row["value"])  $valueCss=$row["style_class"]; 
+
+}  
+}
+ return $valueCss;   
+} 
+
+
+function getDataFiledsData($orderId) {
+global $db;
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT field_name,product_id,store_id,if(value_text!='',value_text,value) as value,color FROM store_orders_fields_data
+WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) { 
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ if(empty($row["color"])) $row["color"]="NULL";
+   $FiledsData[$row["field_name"]][$row["product_id"]][$row["store_id"]][$row["color"]] = $row["value"];
+  //  if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+  }
+return $FiledsData;    
+}
+
+
+
+//показываем части закупок привязанные к закупке
+function printRelatedOrders(){
+global $db, $related_order_id,$orderId;
+$store_orders=$db::mapping("SELECT id,name FROM store_orders WHERE id!=? AND
+((related_order_id=? and related_order_id>0) or id=? or (related_order_id=? and related_order_id>0) )
+",[$orderId,$related_order_id,$related_order_id,$orderId]);
+ if(!empty($store_orders)) {
+   echo"связанные закупки: ";
+   foreach($store_orders as $id => $name) {
+    echo'<a href="/shipment/'.$act.'/?id='.$id.'" class="btn btn-sm btn-warning m-1">'.$name.'</a>';
+   }
+  }
+}
+
+
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $related_order_id, $status_order_id, $status_edit_dostup, $orderCityId, $store_orders_status_description, $storesArray, $store_id, $whereInProductsId, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id;  
+
+
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) { 
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';   
+    
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
+
+echo'</table></form>';
+
+
+$nameCity=$db::getValue("SELECT name FROM universal_catalog_item WHERE id=?",[$orderCityId]);
+//echo '<div style="border-bottom:1px #cdcdcd solid; background:#e6e6e6; margin-bottom:2rem;">  ';
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$storesArrayRelation=[];
+$orderStoresArrayRelation_in=" IN (";
+$k=1;
+foreach($data as $row) {
+ $storesArrayRelation[]=$row["store_id"];
+ $orderStoresArrayRelation_in .="'".$row["store_id"]."'";
+ if($k!=count($data))  $orderStoresArrayRelation_in .=",";
+ $k++;
+}
+
+$orderStoresArrayRelation_in .=")";
+//echo'</div>';
+
+
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id])  { 
+
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' AND id $orderStoresArrayRelation_in  order by name ASC");
+$stores_cnt=count($stores_arr);
+
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status 
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
+
+
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];   
+
+
+
+if($vnesli>0)
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
+
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>"; 
+
+echo'<div class="row"><div class="col-12">';
+
+$group_show_percent_array=[50,11]; 
+
+// считаем только если нам необходимо. выполнено условия что это нужная группа пользхвоателя
+if(in_array($_SESSION["group_id"],$group_show_percent_array) ) {
+
+$data=$db::getRows("SELECT product_id FROM store_orders_fields_data WHERE  
+order_id=? AND product_id $whereInProductsId AND field_name='sales_cnt' AND color='' AND store_id='' AND value>0 group by product_id",[$orderId]);
+$whereInProductSaleId="";
+$productsIds=[];
+$i=0;
+foreach($data as $row) {
+  $whereInProductSaleId .=" '".$row["product_id"]."' ";
+  $productsIds[]=$row["product_id"];
+     if($i<(count($data)-1)) $whereInProductSaleId .=" , ";
+     $i++;   
+}
+
+
+
+//echo"<br>Всего товаров ".count($productsIds)."  = $orderId";
+
+if($whereInProductSaleId) {
+$storeCount=[];
+$data=$db::getRows("SELECT product_id, store_id FROM store_orders_fields_data WHERE 
+order_id=? AND product_id IN ($whereInProductSaleId) AND field_name='quantity_zakup_new' AND color='' AND store_id!='' AND value>0 group by product_id, store_id",[$orderId]);
+  foreach($data as $row) {
+   $storeCount[$row["store_id"]] +=1;
+  
+  }
+  
+$storeCount2=[];
+   foreach($storeCount as $sid => $cnt) {
+   $storeCount2[$sid]=round(($cnt/count($productsIds))*100);
+ }   
+}
+
+}
+
+echo'
+<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">Весь заказ '.$nameCity.'</a>';
+
+foreach($storesArray as $strid=>$namestore){
+    
+    
+if(in_array($strid,$storesArrayRelation) or empty($orderCityId)) {    
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-sm btn-";
+
+if($store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success";     } else echo"info";  echo" m-1\"> ";
+if($store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore ";
+// массив с группами-ролями тех кто может просматривать заполеннность по магазинам
+if($status_order_id==2 and in_array($_SESSION["group_id"],$group_show_percent_array) and !empty($storeCount2[$strid])) { 
+    
+    echo" <span class=\"btn btn-info btn-sm ml-1\" title=\"".$storeCount[$strid]." из ".count($productsIds)."\">".$storeCount2[$strid]."%</span>";
+}
+echo"</a>"; 
+} else {
+  
+//  echo'<span class="btn btn-danger">к городу нет доступа '.$namestore.'</span>';  
+    
+}
+
+
+
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+    
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO  store_order_status SET   order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=?  ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}    
+    
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\"  href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+
+
+printRelatedOrders();
+
+}
+
+
+
+
+
+// получаем занчение перменнй по ее названию   товару и магазину и цвету
+function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $FiledsData, $fieldsRows, $orderId;  
+
+   if(empty($storeId)) $storeId="NULL";
+   if(empty($color)) $color="NULL";    
+   
+   $colorFirst=$color;
+     $type_field=$fieldsRows[$field_name]["field_type"];
+
+// глобальные данные без привязки к магазину
+ if(in_array($field_name,
+ ["division_ratio","division_store_ratio",
+ "purchase_price",
+ "division_auto_need_all"
+   ,"quantity_zakup_fact"
+   ,"quantity_warehouseman_fact"
+   ,"storehouse_balance"
+   ,"min_lot"
+   ,"min_order"    
+   ,"purchase_fact_difference"   
+   ,"division_hand_summ"  
+    ,"division_auto_all" 
+    ,"division_summ_all"     
+    ,"delta_zakup"  
+    ,"quantity_zakup" 
+    ,"quantity_zakup_fact_summa"     
+    ,"comment_zakup"  
+    ,"quantity_zakup_info" 
+    ,"purchase_kust_summ"  
+    ,"quantity_zakup_fact_week"  
+    ,"quantity_purchase_summ"  
+    ,"delta_rejection"  
+    ,"quantity_warehouseman_defective"  
+    ,"write_offs_comments_all"  
+    ,"goods_in_transit"        
+    ,"auto_purchase_formula_all"     
+    ,"quantity_storage"])     
+ ) {$storeId="NULL"; $color="NULL";  }
+ if(in_array($field_name,["quantity_zakup_fact","quantity_warehouseman_fact","delta_zakup","quantity_zakup",
+  "purchase_logistic",
+ "cost_price_auto",
+ "cost_price_summ",
+ "quantity_zakup_fact","quantity_zakup_info","additional_quantity","quantity_warehouseman_defective","quantity_warehouseman_fact_related",
+ "quantity_warehouseman_fact_defective_related","quantity_warehouseman_fact_summ"])
+ ) {$storeId="NULL"; $color=$colorFirst;  }
+  
+
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];  
+//$value=$field_name;
+ $tip=$fieldsRows[$field_name]["tip"];  
+
+ if($field_name=="color_percent") {
+     //$tip="string"; 
+ //$value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];  
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);  
+  }  
+   
+  
+$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
+//$value_title=" $field_name $productId $storeId $color ";
+  
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
+
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];   
+  
+return $array;    
+}
+
+
+// вывод значения в ячейке будто-то текст или полее ввода
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData ;  
+
+
+      $value=$valueArray["value"];
+      $value_title=$valueArray["title"];  
+
+      $colorName=trim(str_replace(['\\','/'],['',''],$color));
+      $md5Color=md5($color);
+      $show=1;  
+      
+      //   if($storeId=="" and in_array($fieldName,["quantity_zakup_new"])) {   $show=0; }
+      
+    if(!empty($color) and $color!='NULL') {
+          $nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';  
+          $idInput=''.$fieldName.''.$productId.''.$md5Color.'';
+          $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';  
+          if(!empty($storeId)) { 
+              if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1;  else $show=0; 
+              
+             if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"]))  $show=1; 
+              
+              
+          }
+     }   
+     else {
+          $nameInput=''.$fieldName.'['.$productId.']';  
+          $idInput=''.$fieldName.''.$productId.'';
+          $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';   
+         
+     }  
+        
+    if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {    
+        echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
+          if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+          if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+         if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+       echo'>';
+    } 
+    elseif($fieldsRows[$fieldName]["type"]=="textarea") {   
+        echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'"  name='.$nameInput.' class="form-control"';
+       if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+        echo'>'.$value.'</textarea>';       
+      }
+      else {
+          if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+           else   echo $value;    
+      }
+
+}
+
+
+// вывод ячейки таблицы с примочками и настройками
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$bg_fields,$fieldsRows, $rowArraySum,  $FiledsData;  
+
+//print_r($dostup_fields); exit();
+
+     $fieldId=$fieldsRows[$fieldName]["id"];  
+     $dostup=$dostup_fields[$fieldId];
+     $bg=$bg_fields[$fieldId];  
+   // $dostup="edit"; 
+       
+
+
+if($dostup=="edit" or $dostup=="show") {   
+    
+    //можно ли это поле в принципе редактировать
+    $edit=$fieldsRows[$fieldName]["field_edit"]; 
+    //можно ли это поле редактировать если выбран магазин
+    if($storeId!="NULL" and !empty($storeId)) { 
+    $edit=$fieldsRows[$fieldName]["field_store_edit"]; 
+    $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+    } else {
+    $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина 
+    
+    
+   if($fieldsRows[$fieldName]["field_type"]=="stats_store_hand") $edit=0;
+        
+    }
+  // data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'"  
+  echo'<td data-bs-placement="top"  class="p-1 text-center ';
+
+
+      $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+      
+      
+   // $value=$FiledsData[$fieldName][$productId][$storeId][$color];    
+
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];  
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";   
+///$valueArray["value"]=$value;   
+//$valueArray["title"]=$value_title;   
+
+     $value=$valueArray["value"];
+     $value_title=$valueArray["title"]; 
+
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++;  }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value;   }
+}
+
+
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
+
+
+  if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';   
+  
+  // показываем поле настройки поля позволяют.
+  if($store_show==1) {
+
+   if($dostup=="edit" and $edit==1) {
+       
+    //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";   
+       printFieldType($valueArray,$fieldName,$productId,$storeId,$color);   
+       
+   }
+   else {
+   if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+    else {
+        
+  //  if($color!="NULL" and $fieldName=="quantity_warehouseman_fact")   echo"11$dostup  $edit";  
+        echo $value;   
+    }
+    }
+   }
+   else { //если значение поля не нужно выводить то показвываем заглушку
+       
+      echo'XXX'; 
+       
+   }
+   echo'</td>';  
+}    
+    
+     
+     
+}
+
+
+ function getRelationshipCityStore(){
+ global $db, $orderCityId,$storesArrayAll;
+  $data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+  $storesArrayRelation=[];
+  foreach($data as $row)   $storesArrayRelation[$row["store_id"]]=$storesArrayAll[$row["store_id"]]; 
+   return $storesArrayRelation;   
+ }
+
+
+
+
+//вставляем данные в таблицу дашборда
+
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsData;
+
+$field_id=$fieldsRows[$field_name]["id"];
+$type=$fieldsRows[$field_name]["type"];
+
+$divisionFieldsArray=["division_store","division_store_hand","division_store_summ"];
+
+if(in_array($field_name,$divisionFieldsArray)) {
+$db::sql("DELETE FROM store_orders_fields_data WHERE order_id=? AND field_name=? AND (store_id='' or value='0.000' ) ",[$orderId,$field_name]);   
+}
+
+
+foreach($massivSQL as $productId =>$array) {
+   foreach($array as $storeId =>$valueArr) { 
+       foreach($valueArr as $color =>$value) { 
+        //  if(empty($color) or $storeId=="NULL") $color="";   
+         if($color=="NULL") $color="";         
+          
+            if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL')  $storeId=$storeIdToGuidArray[$storeId];
+           if(empty($storeId) or $storeId=="NULL") $storeId="";  
+           
+    if($type=="string")  {$value_text=$value;  $value="";}
+    else { $value_text=""; }
+
+      try {
+       if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+         $oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+       //  $oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+         
+       //   if($print==true)  echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle  $title"; 
+       
+       if(($type!="string") or ($type=="string" and $value_text!="")) {   
+         
+         $title=$massivTitle[$productId][$storeIdData][$colorData];    
+         
+         
+       //  echo"<br> ++ productId = $productId order_id=$orderId field_name=$field_name storeId=$storeId value=$value";
+         $Insert=true;  
+      //  if(in_array($field_name,$divisionFieldsArray) and ($value==0 and empty($oldvalue)))  $Insert=false;
+        
+        
+            
+       if($Insert) $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)       
+          VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",     
+          [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+          
+          
+      }
+    
+          if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+            if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+             
+        // echo"<br>По этому товару не обновляем так ка значение старое уже есть";    
+        
+         }
+         
+         if(((empty($value)  or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and  $type!="string") or ($type=="string" and $value_text=="")) {
+    
+         } 
+         else {
+        //  if($print==true)  echo"<br>!!! $field_name =$value";
+      //     $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)                 VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",              [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $title, $value, $value_text , $title]);  
+         }
+          
+         // if(empty($storeId)) $storeIdData="NULL"; else  $storeIdData=$storeId;
+         //if(empty($color)) $colorData="NULL"; else  $colorData=$color; 
+          
+        //  echo"<br>$field_name pid=$productId color=$color  =$value valuetext=$value_text   ";
+         
+        
+         }
+      
+           
+      } catch (Exception $e) 
+       {
+           echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+       }
+     
+       }
+     }
+   } 
+}
+
+
+
+
+
+
+
+
+
+
+
index 97b65d82ae0f02c42d9364e79e71f949c1d0960c..43765dfaf2d6eb7f1823667a00bd5b8c812b78d8 100644 (file)
@@ -6,10 +6,12 @@ include_once("inc/shipment.php");
 include_once("templates/top.php");
 $modul="shipment";
 
+error_reporting(E_ALL ^ E_NOTICE);
 
-
-$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-
+//$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$citiesAll=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='cities'");
+$citiesAll[""]="Без города";
+$citiesAll[0]="Без города";
 
 
 $data3=$db::getRows("SELECT * FROM store_orders_statuses");
@@ -23,82 +25,101 @@ $status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,
 
 
 
-echo'<h1 class="mt-2">Список закупок <a href="/shipment/add/" class="btn btn-success">+ добавить закупку</a></h3>';
+echo'<h1 class="mt-2">Список закупок ';
+if(in_array($_SESSION["group_id"],[1,21,70,10])) echo'<a href="/shipment/add/" class="btn btn-success">+ добавить закупку</a>';
+echo'</h3>';
 
 
 
 $data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start
-FROM store_orders WHERE parent_id!=0 AND date_start>=NOW() - INTERVAL 70 DAY order by delivery_date   DESC LIMIT 30");
+FROM store_orders WHERE parent_id!=0 AND date_start>=NOW() - INTERVAL 70 DAY order by delivery_date   DESC LIMIT 430");
 foreach($data as $row) $dozakupka[$row["parent_id"]][]=$row;    
    
 
-
 $data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start 
 FROM store_orders WHERE parent_id=0 AND date_start>=NOW() - INTERVAL 70 DAY  order by delivery_date  DESC LIMIT 30");
 foreach($data as $row) {
 $in=explode(",",$row["providers_arr"]);  
 // bg-'.$store_orders_statusesbg[$row["status"]].' $(\'#tr___'.$row["id"].'\').show();
-echo'<div class="expanel expanel-default">
-<div class="expanel-heading">
+echo'<div class="bg-white p-0 m-1">
+<div class="m-0 p-0">';
 
-<span class="btn btn-light me-1"  onclick="$(\'#external__'.$row["id"].'\').toggle();">показать дозакупки</span> 
-<a href=/'.$modul.'/fieldsData/?id='.$row["id"].' class="btn btn-default fs-5">
-<span class="btn btn-outline-info">'.$row["id"].'</span> '.$row["name"].'</a>
+$time = strtotime($row["date_start"]);
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+$date2=date('Y-m-d 00:00:00', $time-86400);
+$in=explode(",",$row["providers_arr"]);
+$w="";
+$k=0;
+foreach($in as $pid) { if($k!=0) $w .=", ";  $w .="'$pid'"; $k++; }
+$k=0;
+$wnere="";
+foreach($dozakupka[$row["id"]] ?? [] as $rows) {
+if($k!=0) $wnere .=",";  $wnere .="'".$rows["id"]."'"; $k++;    
+}    
 
 
+$waybills=$db::getRows("SELECT id,name,status_id,comment FROM shipment_waybills,shipment_waybills_related WHERE
+shipment_waybills_related.order_id=? AND shipment_waybills_related.shipment_waybill_id=shipment_waybills.id ",[$row["id"]]);
+foreach($waybills as $waybill) {
+    echo'<a href="shipment/shipment_waybill/?id='.$waybill["id"].'" class="btn btn-sm btn-info">'.$waybill["name"].'</a>';
+}
+
+
+
+if($dozakupka[$row["id"]])
+echo'<span class="btn btn-light me-1"  onclick="$(\'#external__'.$row["id"].'\').toggle();">показать дозакупки ('.count($dozakupka[$row["id"]]).')</span>';
+
+echo'<a href=/'.$modul.'/shipment/?id='.$row["id"].' class="btn btn-default fs-6">
+<span class="btn btn-outline-info">'.$row["id"].'</span> '.$row["name"].'</a>
+<span class="me-2 btn btn-sm bg-'; if(empty($row["city_id"])) echo'danger'; else echo'blue'; echo'">'.$citiesAll[$row["city_id"]].'</span> 
+
 <div class="d-inline-block dropdown me-2"> <button type="button" class="btn bg-dark-transparent dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">действия</button> 
-<div class="dropdown-menu" style="">
-<a class="dropdown-item" href="/shipment/add/?id='.$row["id"].'">правка</a>
+<div class="dropdown-menu" style="">';
+
+
+if($_SESSION["group_id"]!=50) echo'<a class="dropdown-item" href="/shipment/add/?id='.$row["id"].'">правка</a>';
+
+/*<!--
 <a class="dropdown-item" href=/'.$modul.'/view/?id='.$row["id"].'>старый интерфейс</a>
 <a class="dropdown-item" href=/'.$modul.'/view2/?id='.$row["id"].'>новый интерфейс</a>
-<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$row["id"].' >новый интерфейс2</a>
 <a class="dropdown-item" href=/'.$modul.'/division/?id='.$row["id"].'>деление</a>
-<a class="dropdown-item" href=/'.$modul.'/purchase/?id='.$row["id"].'>цвета для кустовых при заказе</a>
+<a class="dropdown-item" href=/'.$modul.'/purchase/?id='.$row["id"].'>цвета для кустовых при заказе</a>-->*/
+echo'
+<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$row["id"].' >старый интерфейс (не актуально)</a>
+<a class="dropdown-item" href=/'.$modul.'/shipment/?id='.$row["id"].' >новый интерфейс</a>
+<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$row["id"].'>деление - по цветам (старое с 3 февраля не актульно)</a>';
 
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$row["id"].'>деление - печать на складе</a>
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$row["id"].'>деление - по цветам</a>
 
-<!--division-print-editdivisionPrintEdit-->
 
+if($row["status"]>=6) echo'<a class="dropdown-item" href=/shipment/divisionStore/?id='.$row["id"].'>деление - на основе заказа магазина <sup class="btn btn-sm btn-success">new</sup></a>
+<a class="dropdown-item" href=/shipment/divisionStorePrint/?id='.$row["id"].'>Печать деления для кладовщика <sup class="btn btn-sm btn-success">new</sup></a>';
 
-
-</div> </div>
-<a href="/shipment/edit/?id='.$row["id"].'" class="btn btn-warning btn-sm me-2">'.$store_orders_statuses[$row["status"]].'</a>
-<small>дата продаж: '.$row["date_start"].', создано '.$row["date_add"].'  <i>'.$row["comment"].'</i></small>
+if(in_array($_SESSION["group_id"],[1,70,10])) {
+    echo'<a class="dropdown-item" href=/shipment/divisionClone/?id='.$row["id"].'>копировать закупку для частичной поставки <sup class="btn btn-sm btn-success">new</sup></a>';  
+}
 
 
+if($row["status"]>=6) echo'
+<a class="dropdown-item" href=/shipment/storeOrderScore/?id='.$row["id"].'>Оценка качества цветка в поставке <sup class="btn btn-sm btn-success">new</sup></a>';
 
 
+echo'</div> </div>
+<span class="btn btn-warning btn-sm me-2">'.$store_orders_statuses[$row["status"]].'</span>
+<small>дата продаж: '.$row["date_start"].', создано:'.$row["date_add"].'  <i>'.$row["comment"].'</i></small>
 </div> 
 
 <div class="expanel-body" id="external__'.$row["id"].'" style="display:none;"> ';
 
-printStoreOrderFiles($row["id"]);
+//printStoreOrderFiles($row["id"]);
 //foreach($in as $pid) echo'<span class="tag m-1">'.$providers[$pid].'</span>';
 
 
-$time = strtotime($row["date_start"]);
-$date1=date('Y-m-d 00:00:00', $time-86400*8);
-$date2=date('Y-m-d 00:00:00', $time-86400);
-$in=explode(",",$row["providers_arr"]);
-$w="";
-$k=0;
-foreach($in as $pid) { if($k!=0) $w .=", ";  $w .="'$pid'"; $k++; }
-
-
-
-
-$k=0;
-$wnere="";
-foreach($dozakupka[$row["id"]] as $rows) {
-if($k!=0) $wnere .=",";  $wnere .="'".$rows["id"]."'"; $k++;    
-}    
 
 
 if(!empty($wnere)) $wnere ="'".$row["id"]."', $wnere"; else $wnere="'".$row["id"]."'";
 
-
-//$data6=$db::getRows("SELECT  sum(quantity_purchase) as quantity_purchase FROM store_orders_item WHERE  order_id in ($wnere) group by order_id ");    
+/*
+$data6=$db::getRows("SELECT  sum(quantity_purchase) as quantity_purchase FROM store_orders_item WHERE  order_id in ($wnere) group by order_id ");    
 foreach($data6 as $row6) { 
  $data_values["quantity_purchase"] = $sum_p+$row6["quantity_purchase"];
 }
@@ -118,7 +139,7 @@ foreach($data5 as $row55) {
  //echo' quantity_zakup_all= '.$row55["quantity_zakup_all"].'  summa_all= '.$row55["summa_all"].' ';    
 }
 //echo "заказано штук всего закупщиком $q_all шт. <br>куплено по факту $quantity_zakup_fact_all сумма всего по рознице $s_all кустовые заказ всего в ".$data_values["quantity_purchase"]." шт.  ";
-
+*/
 /*
 $data2=$db::getRows("SELECT p.id, p.name, o.provider_id FROM products_1c_options as o, products_1c as p WHERE o.provider_id in ($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
 $k=0; $w2="";
@@ -153,26 +174,60 @@ $data_values["sales_amount"]=$sale;
 //echo 'sales_cnt='.$data_values["sales_cnt"].' sales_amount='.$data_values["sales_amount"].' ';  bg-'.$store_orders_statusesbg[$rows["status"]].'
 
 echo'<div class="row">';
+if (isset($dozakupka[$row["id"]]))
 foreach($dozakupka[$row["id"]] as $rows) {
 echo'<div class="col-12">
-<div class="ml-4">
- <a href=/'.$modul.'/fieldsData/?id='.$rows["id"].' class="btn btn-white fs-6 me-3">
- <span class="btn btn-outline-info fs-6 me-2">'.$rows["id"].'</span>'.$rows["name"].'
-<span class="me-2 btn btn-sm bg-warning">'.$store_orders_statuses[$rows["status"]].'</span> 
+<div class="ml-4">';
+
+if($wnere) {
+$waybills=$db::getRows("SELECT id,name,status_id,comment FROM shipment_waybills,shipment_waybills_related WHERE
+shipment_waybills_related.order_id=? AND shipment_waybills_related.shipment_waybill_id=shipment_waybills.id ",[$rows["id"]]);
+foreach($waybills as $waybill) {
+    echo'<a href="shipment/shipment_waybill/?id='.$waybill["id"].'" class="btn btn-sm btn-info">'.$waybill["name"].'</a>';
+}
+}
+
+
+echo'
+ <a href=/'.$modul.'/shipment/?id='.$rows["id"].' class="btn btn-white fs-6 me-1">
+ <span class="btn btn-outline-info fs-6 me-1">'.$rows["id"].'</span>'.$rows["name"].'
+ <span class="me-1 btn btn-sm bg-'; if(empty($row["city_id"])) echo'danger'; else echo'blue'; echo'">'.$citiesAll[$rows["city_id"]].'</span> 
+
+<span class="me-1 btn btn-sm bg-warning">'.$store_orders_statuses[$rows["status"]].'</span> 
 </a>
 <div class="dropdown d-inline-block"> <button type="button" class="btn bg-dark-transparent dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">действия </button> 
-<div class="dropdown-menu" style="">
-<a class="dropdown-item" href="/shipment/add/?id='.$rows["id"].'">правка</a>
+<div class="dropdown-menu" style="">';
+
+
+if($_SESSION["group_id"]!=50)
+echo'<a class="dropdown-item" href="/shipment/add/?id='.$rows["id"].'">правка</a>';
+/*<!--
 <a class="dropdown-item" href=/'.$modul.'/view/?id='.$rows["id"].'>старый интерфейс</a>
 <a class="dropdown-item" href=/'.$modul.'/view2/?id='.$rows["id"].'>новый интерфейс</a>
-<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$rows["id"].' >новый интерфейс2</a>
 <a class="dropdown-item" href=/'.$modul.'/division/?id='.$rows["id"].'>деление</a>
 <a class="dropdown-item" href=/'.$modul.'/purchase/?id='.$rows["id"].'>цвета для кустовых при заказе</a>
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$rows["id"].'>деление - печать на складе</a>
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$rows["id"].'>деление - по цветам</a>
-</div> </div>
+-->*/
+echo'
+
+<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$rows["id"].' >старый интерфейс (не актуально)</a>
+<a class="dropdown-item" href=/'.$modul.'/shipment/?id='.$row["id"].' >новый интерфейс</a>
+<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$rows["id"].'>деление - по цветам (старое - с 3 февраля не актуально)</a>';
+
+if($rows["status"]>=6)
+echo'<a class="dropdown-item" href=/shipment/divisionStore/?id='.$rows["id"].'>деление - на основе заказа магазина <sup class="btn btn-sm btn-success">new</sup></a>
+<a class="dropdown-item" href=/shipment/divisionStorePrint/?id='.$row["id"].'>Печать деления для кладовщика <sup class="btn btn-sm btn-success">new</sup></a>';
+
+if(in_array($_SESSION["group_id"],[1,70,10])) {
+    echo'<a class="dropdown-item" href=/shipment/divisionClone/?id='.$row["id"].'>копировать закупку для частичной поставки <sup class="btn btn-sm btn-success">new</sup></a>';  
+}
+if($row["status"]>=6) echo'
+<a class="dropdown-item" href=/shipment/storeOrderScore/?id='.$row["id"].'>Оценка качества цветка в поставке <sup class="btn btn-sm btn-success">new</sup></a>';
+
+
+echo'</div> </div>
 <i>'.$rows["comment"].'</i>';
-printStoreOrderFiles($rows["id"]);
+//printStoreOrderFiles($rows["id"]);
 echo'</div></div>'; 
     }
 
@@ -220,11 +275,7 @@ $_CONFIG["jscss"] .='<style>
 table.zakupka{ margin:0 0 0.2rem 0; border:1px #cdcdcd solid;}
 table.zakupka tbody td{ padding:0.2rem;}
 table.zakupka tbody td big{ font-weight:bolder; font-size:1.3rem;}
-table.zakupka td a:hover{text-decoration:underline;}
-
-
-
-</style>';
+table.zakupka td a:hover{text-decoration:underline;}</style>';
        
 
 include"templates/bottom.php"; 
diff --git a/erp24/modul/shipment/poisk-item.php b/erp24/modul/shipment/poisk-item.php
new file mode 100644 (file)
index 0000000..471bd4f
--- /dev/null
@@ -0,0 +1,45 @@
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+$tip="product";
+if(!empty($_POST["search"])) $s=htmlentities($_POST["search"]);
+if(!empty($_POST["id"])) $id=intval($_POST["id"]);
+
+if(strlen($s)>2){
+  
+echo'<table class="table table-hover skr" id=iddd'.$id.' onclick="$(this).hide();" style="background:#fff;max-height:300px; z-index:3333; overflow:scroll; width:auto; min-width:200px;">
+<tbody>';
+echo "<tr><td onclick=\"$('.skr').hide();\">закрыть </td></tr>";   
+
+
+if($tip=="product") { 
+//$wher=" AND p.parent_id!='df5ff636-541f-11ec-a5bf-b42e991aff6c' AND p.parent_id!='df5ff634-541f-11ec-a5bf-b42e991aff6c' AND p.parent_id!='bcdf8025-4e44-11ea-a8ff-b42e991aff6c'  " ;    
+$data=$db::getRows("SELECT * FROM products_1c WHERE tip='products_group' ");
+foreach($data as $row) $group[$row["id"]]=$row["name"];  
+
+
+$data=$db::getRows("SELECT p.id, p.parent_id, p.name, p.code,p.articule,prices.price FROM products_1c p, prices 
+WHERE p.id=prices.product_id AND p.tip='products' AND p.view=1 AND p.name LIKE '%$s%' order by prices.price DESC LIMIT 20");
+
+} //
+
+//echo "SELECT id,  name FROM products_1c  WHERE tip=?  AND name LIKE $s order by name ";
+foreach($data as $row) {
+echo "<tr onclick=\"show_new_inputs('div_new_inputs','".$row["id"]."');\"><td>".$row["name"]."";
+
+if(!empty($group[$row["parent_id"]])) {
+echo"<small class=\"btn btn-info btn-sm\">(".$group[$row["parent_id"]].")</small>";
+}
+
+if(!empty($row["price"])) echo" <small>".round($row["price"],2)."руб</small>";
+
+echo"</td></tr>";   
+    
+}
+
+
+
+echo'</tbody></table>';
+}
diff --git a/erp24/modul/shipment/productStoresSort.php b/erp24/modul/shipment/productStoresSort.php
new file mode 100644 (file)
index 0000000..64345e2
--- /dev/null
@@ -0,0 +1,295 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
+
+$product_id=htmlentities($_REQUEST["product_id"]);
+
+if(empty($product_id)) exit("Укажите к какому товары вы хотите применить сортировку");
+$productName=$db::getValue("SELECT name FROM products_1c WHERE id=?",[$product_id]);
+
+
+
+echo'<h4 class="page-title mb-0 text-primary">Сортировка '.$productName.'</h4>
+<p>Приоритет по магазину для деления расставляет назначенный человек или коллектив. СОгласно этого списка сверху вниз будут начисляться товары по инимальному лоту деления. 
+Пока потребность каждого магазина не будет заполнена.  Галочка рядом с магазином включает магазин в распределение товара.
+
+Вспомогательный столбец по числу средних продаж за неделю за последние 28 дней помогает понять какой магазин стабильнее всего продает товар.
+И на основе этих данных перемещать в очереди магазин. Цвет указывает на принадлежность к кусту.
+</p>
+';
+
+
+
+
+
+if(!empty($_POST["posit"]) and !empty($product_id)) {
+$i=count($_POST["posit"]);
+foreach($_POST["posit"] as $storeId =>$p)      {
+$storeId=htmlentities($storeId);
+$view=htmlentities($_POST["view"][$storeId]);  
+if($view=="on") $view=1; else $view=0;
+
+
+$db::sql("INSERT IGNORE INTO  store_orders_product_store_sort SET product_id=?, store_id=?,  posit=?, view=?   ON DUPLICATE KEY UPDATE posit=?, view=?",[$product_id, $storeId,$i,$view,$i,$view]);
+$i--;
+}
+mess("Сохранили!"); 
+}
+
+
+$kustArrayReverse=[];
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+$kustArrayReverse[$row2["id"]]=$row2["parent_id"];   
+}
+
+$kustBackground[1]="#AFEEEE";   
+$kustBackground[2]="#87CEFA";   
+$kustBackground[3]="#EEE8AA"; 
+
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view=1 order by name ASC");
+$view=[];
+$storesArray2=$storesArray;
+foreach($storesArray2 as $storeId => $cnt3)  {
+    $storesArray2[$storeId]=0;  
+  
+}
+    
+
+
+
+$ctnS=0;
+$data=$db::getRows("SELECT store_id,posit,view FROM store_orders_product_store_sort WHERE product_id=? ",[$product_id]);
+foreach($data as $row) {
+$ctnS++;
+$posit[$row["store_id"]]=$row["posit"];
+$view[$row["store_id"]]=$row["view"];
+$storesArray2[$row["store_id"]]=$row["posit"];
+}
+
+
+if(empty($ctnS)) {
+    
+echo"<font color=red>По этому товару еще небыла определена сортировка приориетов по магазинам. 
+Нажмите сохранить чтобы отсортироват согласно средним продажам за последние 4 недели.
+Потом можете поменять сортировку вручную
+</font>";    
+    
+$day_sales=7*4;
+$data2=$db::getRows("SELECT  s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id=?
+AND s.store_id 
+AND s.date<=NOW() AND s.date>=NOW() -interval $day_sales day group BY  s.store_id order by sale_cnt DESC",[$product_id]);    
+$k=1;
+  foreach($data2 as $row2) { 
+   $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+   $storesArray2[$row2["store_id"]]=$cnt;
+   $storesSales[$row2["store_id"]]=$cnt;
+  $view[$row2["store_id"]]=1; 
+   echo"<br>$k)  ".$storesArray[$row2["store_id"]]." = $cnt ";   
+   $k++;
+ }
+
+}
+
+else {
+    
+  $day_sales=7*4;
+$data2=$db::getRows("SELECT  s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i 
+WHERE s.id=i.check_id AND  i.product_id=?
+AND s.date<=NOW() AND s.date>=NOW() -interval $day_sales day group BY  s.store_id order by sale_cnt DESC",[$product_id]);    
+  foreach($data2 as $row2) { 
+   $storesSales[$row2["store_id"]]=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+ }  
+}
+
+
+$storesWriteOffs=[];
+$data2=$db::getRows("SELECT sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p 
+WHERE p.write_offs_id=w.id  
+AND w.type='Брак' 
+AND p.product_id=? 
+AND w.date<=NOW()
+AND w.date>=NOW() -interval $day_sales day group BY w.store_id",[$product_id]);
+  foreach($data2 as $row2) { 
+   $storesWriteOffs[$row2["store_id"]]=round($row2["cnt"]/4);
+ }  
+
+
+ arsort($storesArray2);
+
+echo'<form method=post action="/shipment/productStoresSort/?product_id='.$product_id.'">
+
+<div class="table-responsive">
+<table class="table" id="recipeTable">
+<thead><tr><th>перетащить</th><th>ср. продажи шт.</th>
+<th>списание шт.</th>
+<th>вкл.</th><th style="width:90%">Магазин</th></tr></thead>
+<tbody id=draganddropTable>';
+foreach($storesArray2 as $storeId => $name) {
+    
+echo'<tr><td class="drag-handler"></td><td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'" class="fs-6 text-center">
+'.$storesSales[$storeId].'</td>
+<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'" class="fs-6 text-center">
+'.$storesWriteOffs[$storeId].'</td>
+
+<td>
+<input type=checkbox name=view['.$storeId.'] '; if($view[$storeId]==1) echo ' checked=checked'; echo'">
+</td><td>
+
+'.$storesArray[$storeId].'
+<input type=hidden name=posit['.$storeId.'] value="'.$posit[$storeId].'">
+
+
+</td></tr>';   
+    
+}
+
+
+
+
+
+echo'</tbody></table><button class="btn btn-success" name="save_config" value=1>сохранить</button></div></form>';
+
+
+
+
+$_CONFIG["jscss"]=' <script src="https://sortablejs.github.io/Sortable/Sortable.js"></script>
+<script>
+
+$(document).ready(function () {
+
+    
+  var $tableBody = $("#draganddropTable");
+
+  Sortable.create(
+        $tableBody[0],
+        {
+            animation: 250,
+            scroll: true,
+            handle: ".drag-handler",
+            onEnd: function () {
+               
+            }
+        }
+    );
+    
+});
+</script>      
+<style>
+
+.recipe__ingredients {
+  float: left;
+}
+.recipe-table {
+  position: relative;
+  padding:  1em;
+  border: 1px solid #DDD;
+  box-shadow: 0 15px 10px -10px rgba(31, 31, 31, 0.5);
+  z-index: 10;
+}
+
+.recipe-table__cell {
+  vertical-align: top;
+  padding: 3px 5px;
+  border-bottom:1px #e6e6e6 solid;
+}
+.recipe__text-field {
+  margin:0;
+  padding: .45em 0.92em;
+  font-size: 1em;
+  line-height: 1.4;
+  color: #555555;
+  background-color: #FFF;
+  background-image: none;
+  border: 1px solid #CCC;
+  border-left:1px solid #CCC;
+}
+.recipe-table__add-row {
+  margin-top: 0;
+  position: relative;
+  border-top: 1px solid #EEE;
+  z-index: 8;
+}
+
+.recipe-table__add-row-btn {
+  display: block;
+  cursor: pointer;
+  position: absolute;
+  right: 0;
+  left: 0;
+  width: 4em;
+  margin: 0 auto;
+  -webkit-transition: all .2s easy-in;
+  transition: all .2s easy-in;
+  text-align: center;
+  opacity: 0.5;
+  color: #fff;
+  border: 1px solid #16A085;
+  border-bottom-right-radius: 1em;
+  border-bottom-left-radius: 1em;
+  background: #16A085;
+  height: 1.5em;
+  line-height: 1.5em;
+}
+.recipe-table__add-row-btn:hover {
+  opacity: 1;
+}
+
+.recipe-table__del-row-btn {
+  cursor: pointer;
+  display: inline-block;
+  padding: .45em 0.92em;
+  font-size: 1em;
+  line-height: 1.4;
+  border: 1px solid #F39C12;
+  color: #F39C12;
+  text-decoration: none;
+  transition: all .3s;
+  text-align: center;
+  background-color: #fff;
+}
+.recipe-table__del-row-btn:hover {
+  background: #F39C12;
+  color: #fff;
+}
+
+
+.drag-handler {
+  width: 1.4em;
+  position: relative;
+  background-color: #E4E6EB;
+  background-image: linear-gradient(45deg, #E4E6EB, #E4E6EB 2px, #fff 2px, #fff 4px, #E4E6EB 4px, #E4E6EB 9px, #fff 9px, #fff 11px, #E4E6EB 11px, #E4E6EB 16px, #fff 16px, #fff 18px, #E4E6EB 18px, #E4E6EB 22px);
+  background-size: 10px 20px; 
+  cursor: move;
+  border-top: 2px solid #FFF;
+  border-bottom: 2px solid #FFF;
+}
+
+.drag-handler:active {
+  background-image: linear-gradient(45deg, #bab86c, #bab86c 2px, #fff 2px, #fff 4px, #bab86c 4px, #bab86c 9px, #fff 9px, #fff 11px, #bab86c 11px, #bab86c 16px, #fff 16px, #fff 18px, #bab86c 18px, #bab86c 22px);
+  background-size: 10px 20px; 
+}
+#recipeTable tr th{font-size:0.7rem;}
+
+</style>
+
+
+
+';
+
+
+include"templates/bottom.php"; 
+       
+
+
diff --git a/erp24/modul/shipment/shipment.php b/erp24/modul/shipment/shipment.php
new file mode 100644 (file)
index 0000000..06c533c
--- /dev/null
@@ -0,0 +1,487 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+
+$time = strtotime('this week monday, 00:00');  // текущий понедельник  в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time);  // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+$db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+$db::sql("INSERT IGNORE INTO  store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+mess("Статус изменен");    
+}
+
+
+
+include"modul/shipment/functionsShipment.php";
+
+include"templates/top.php";
+
+
+
+
+//<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span> 
+//$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
+echo'<h3 class="page-title mb-0 text-primary">
+<a href="/shipment/" class="btn me-2 btn-light">❮ назад в закупки</a>
+Заказ товара '.$OrderData["name"].' id='.$orderId.'</h3>
+<p> ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b>
+<span onclick="deleteAll();" class="btn btn-danger btn-sm me-2">очистить данные у этой закупки</span>
+</p>';
+
+
+// панель с магазинами
+showOrderStoresPanel();
+
+
+/*<span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span><span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>*/
+
+//если выбран магазин то  
+echo'<div id=edit_div></div>';
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right w-10">наименование 
+
+<span onclick="ajaxUpdateStoreZakup();" class="btn btn-blue btn-sm me-2">пересчитать данные</span>';
+
+if(in_array($_SESSION["group_id"],[1,11,7])) {
+echo'<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>';
+}
+
+echo'</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника    
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+$sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+if(!empty($sort)) $sort="ORDER BY      FIELD(`id`, $sort) ";
+$data=$db::getRows("SELECT id,name_eng,name,name_full FROM store_orders_fields  $sort");
+ // получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData($orderId);
+
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+$html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'"  onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:110px;">
+<b>'.$row["name"].'</b></th>';
+$thead .=$html;
+$head_td .=$html;
+}
+
+}
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' 
+AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"]; 
+}    
+
+$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"]; 
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+if($trCount==20) {    
+  $trCount=0;   
+  echo  $head_td; 
+ }
+// есловие при котором сччитает счетчик товаров-строк для того чтобы вывести шапку после 20 товаров. Так как если товаров много шапка уходит на верх и непонятно какой столбей отображается
+//if(!empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id == 6)
+//$trCount++;    
+    
+echo'<tr';
+
+
+if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 7) { echo' class="bg-danger"';
+
+ echo' style="opacity:0.5; display:none;"';
+}
+
+
+
+echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+//if(empty($statuses_stores_show[$status_order_id]))  {       echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>';   }
+echo''.$name.'';
+if(!$ProductsOptions[$pid]["shipments_group_id"]) echo"*";
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+
+
+
+if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+echo'</td>';
+
+foreach($data as $row)   printFieldTd($row["name_eng"],$pid,$store_id); 
+
+echo'</tr>';
+
+
+//begin colors
+
+foreach($productsColorsArray[$pid] as $color) {
+  $color=trim($color);    
+   if(!empty($color))  { 
+      echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;">
+      
+      <td class="text-right"><span class="btn btn-sm btn-warning me-1">'.$color.'</span>'; 
+  
+if(!empty($products_varieties[$pid][$color])) {  
+    echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';  
+foreach($products_varieties[$pid][$color] as $k => $var) {
+echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";  
+}      
+echo'</div>';      
+}     
+      
+      foreach($data as $row) {
+      printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+      } 
+     echo"</tr>"; 
+  }
+    
+}
+
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {      
+echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+}
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {   
+ $s="";   
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]]; 
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]); 
+  
+echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+}
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}
+
+table tr.border td{ border-bottom:1px #cdcdcd solid; color:#fff;}
+</style>';
+
+
+
+
+echo'<h3 class="text-center mt-2">Итого сумма по столбцам</h3>
+<table class="table-stripped width-auto">
+<tbody><tr>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+$s="";   
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]]; 
+
+if($fieldsRows[$row["name_eng"]]["summ"]==1 and !empty($s) and ($dostup=="edit" or $dostup=="show")) {  
+
+
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]); 
+      
+  // ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')  
+echo'<tr><td class="text-right" title="'.$row["name_full"].' '.$row["name_eng"].'">'.$row["name"].'</td>
+<td class="text-left"><b>'.$s.'</b></td></tr>';
+
+
+}
+}
+
+echo'</tbody></table>';
+
+
+$shipments_group_products=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='shipments_group_products' order by name ASC");
+
+
+//массив с полями по которым будем собирать данные
+//$fieldsStatsArray[]=["sales_4weeks_cnt","sales_4weeks_sum","sales_cnt","sales_amount","quantity_zakup_new","order_supplier_sum"];
+
+
+$field_stats_array=["sales_cnt","sales_4weeks_sum","sales_4weeks_cnt","write_offs_sum","write_downs","write_offs_4week_sum","write_offs_4week_cnt_avg","order_supplier_sum"];
+$field_stats_array_in=implode("','",$field_stats_array);
+$data_field=[];
+  $data=$db::getRows("SELECT field_name, sum(value) as value,product_id FROM store_orders_fields_data WHERE 
+  field_name in('$field_stats_array_in') AND value>0
+  AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,field_name");
+     foreach($data as $row) {
+            $shipments_group_id=$ProductsOptions[$row["product_id"]]["shipments_group_id"];
+            $data_field[$row["field_name"]][$shipments_group_id] +=$row["value"];
+   }  
+
+
+
+  echo"<div class=\"table-responsive mt-3\"><table class=\"table\">
+     <thead class=\"table-darck\"><tr class=\"zg\"><th>категория</th>";
+   foreach($field_stats_array as $fieldN) {
+    echo"<th style=\"max-width:120px;\"><b>".$fieldsRows[$fieldN]["name"]."</b></th>";
+   }
+
+
+  echo"</tr></thead><tbody>";
+   foreach($shipments_group_products as $shipments_group_id => $name) {
+      if($data_field["sales_4weeks_cnt"][$shipments_group_id]) {
+     echo"<tr><td>$name</td>";
+      foreach($field_stats_array as $fieldN)   echo"<td>".$data_field[$fieldN][$shipments_group_id]."</td>"; 
+    echo"</tr>";
+       }
+
+   }
+ echo"</tbody></table>";  
+
+
+
+
+$_CONFIG["jscss"] .="<script>
+
+function ajaxUpdateStoreZakup(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStoreZakup/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+  
+       }}); 
+}
+
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+    
+    if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, deleteAll:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+     window.parent.location.reload();
+       }}); 
+}
+}
+
+
+</script>"; 
+
+       $_CONFIG["jscss"] .='<!-- MODAL -->
+               <div class="modal fade" id="modal-7">
+                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
+                               <div class="modal-content">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body p-0">
+                               
+                                       </div>
+                       
+                               </div>
+</div>
+</div>'; 
+
+
+
+
+$_CONFIG["jscss"] .='
+<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal;  max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+    padding: 0.05rem;
+    background-color: 1px;
+    box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+       border-collapse: collapse;
+       border-spacing: 0;
+       overflow: hidden;
+}
+.zak th, .zak td {
+       border: 1px solid #e6e6e6;
+       padding: 0.1rem;
+       vertical-align: middle;
+       position: relative;
+}
+
+.zak td:hover:before { 
+       background-color: #e3e3e3;
+       content: \'\';  
+       height: 100%;
+       left: -5000px;
+       position: absolute;  
+       top: 0;
+       width: 10000px;   
+       z-index: -2;        
+}
+.zak td:hover:after { 
+       background-color: #cdcdcd;
+       content: \'\';  
+       height: 10000px;    
+       left: 0;
+       position: absolute;  
+       top: -5000px;
+       width: 100%;
+       z-index: -1;        
+}
+
+
+
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+  vertical-align: bottom;
+  line-height: normal;
+}
+table.zak thead b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+  
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+    font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+    padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+
+
+</style>
+<script>
+
+function changef(id,typeint)
+{ 
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\')  uname = uname.replace(/[^0-9.\s]/gi, \'\'); 
+if(typeint==\'int\')  uname = uname.replace(/[^0-9\s]/gi, \'\'); 
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+function ajaxEditFieldValue(name_eng,product_id,color)
+{ 
+$.ajax({
+       url: \'/shipment/ajaxField/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+
+    setTimeout(function(){ $(\'.okk\').remove();}, 10000);
+    
+       }}); 
+
+}
+
+
+
+
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{ 
+
+$.ajax({
+       url: \'/shipment/ajaxField/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$orderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },  
+       success: function(data){  
+    $(\'#edit_div\').html(data);
+       }}); 
+
+}
+
+</script>';
+
+
+
+
+include"templates/bottom.php";
+
+
+
+
+
+       
+
+
diff --git a/erp24/modul/shipment/shipmentEdit.php b/erp24/modul/shipment/shipmentEdit.php
new file mode 100644 (file)
index 0000000..63f4021
--- /dev/null
@@ -0,0 +1,11 @@
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/universal_model.php");
+
+universal_model_form("shipment","store_orders"); 
+
+
+
diff --git a/erp24/modul/shipment/shipment_waybill_products.php b/erp24/modul/shipment/shipment_waybill_products.php
new file mode 100644 (file)
index 0000000..5c720e3
--- /dev/null
@@ -0,0 +1,195 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+
+$time = strtotime('this week monday, 00:00');  // текущий понедельник  в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time);  // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_REQUEST["id"])) { $id=(int)$_REQUEST["id"]; } else exit("Укажите ID инвойса");
+
+include"templates/top.php";
+
+$waybill=$db::getRow("SELECT * FROM shipment_waybills  WHERE id=?",[$id]);
+
+
+if(!empty($_POST["save"])) {
+ @$waybill_product_id=htmlentities($_POST["waybill_product_id"]);       
+ $action=htmlentities($_POST["save"]);   
+ $product_id=htmlentities($_POST["product_id"]);
+ $varietie_id=intval($_POST["varietie_id"]);  
+ $quantity=intval($_POST["quantity"]);  
+ $waybill_id=$id;
+ $price=htmlentities($_POST["price"]); 
+ $price_logistic=htmlentities($_POST["price_logistic"]);  
+    if($action=="add"){ 
+       if(!empty($product_id) and !empty($waybill_id) and !empty($quantity))  { 
+           
+        $cnt=$db::getValue("SELECT count(*) FROM shipment_waybill_products WHERE waybill_id='$waybill_id' AND product_id='$product_id' AND varietie_id='$varietie_id'");  
+        if($cnt==0) {
+         $sql="INSERT INTO shipment_waybill_products  (quantity,waybill_id,product_id,varietie_id,price,price_logistic) 
+         VALUES ('$quantity','$waybill_id','$product_id','$varietie_id','$price','$price_logistic')";
+        $db::sql($sql);
+         mess("Добавили");
+        } else error_mess("Такой продукт с таким сортом уже есть в накладной");
+         
+         
+         
+       }
+    }
+    
+    if($action=="edit"){ 
+       if(!empty($waybill_product_id) and !empty($product_id) and !empty($waybill_id) and !empty($quantity))  { 
+         $sql="UPDATE  shipment_waybill_products  SET quantity='$quantity',
+         product_id='$product_id', varietie_id='$varietie_id', price='$price', price_logistic='$price_logistic') 
+         WHERE id='$waybill_product_id'        ";
+        $db::sql($sql);
+       mess("Отредактировано");
+       }
+    }    
+    
+        if($action=="dell"){ 
+          if(!empty($waybill_product_id))  { 
+           $sql="DELETE FROM  shipment_waybill_products WHERE id='$waybill_product_id' AND waybill_id='$waybill_id'";
+           $db::sql($sql);
+           mess("Удалили");
+        }
+    } 
+    
+    
+}
+
+
+
+echo '<h5>'.$waybill["name"].'</h5>
+<div class="p-2 m-1">
+ комментарий '.$waybill["comment"].'
+ Наша организация от кого платим  '.$waybill["org_id"].'
+ Поставщик '.$waybill["company_id"].'
+ Организация поставщика '.$waybill["partner_org_id"].'
+ Тип накладной '.$waybill["type"].'    сумма '.$waybill["summ"].'   статус='.$waybill["status"].'</div>';
+
+
+
+$products=$db::mapping("SELECT id,name FROM products_1c  WHERE tip='products' ");
+$products_varieties=[]; $products_color=[];
+$data=$db::getRows("SELECT id,product_id,color, name FROM products_varieties WHERE 1 order by posit desc");
+foreach($data as $row) {
+ $products_varieties[$row["product_id"]][$row["id"]] = $row["name"];   
+ $products_color[$row["product_id"]][$row["id"]] = $row["color"];   
+}
+
+
+
+echo'<table><td>Добавить новый товар</td><td> <input type=text class="form-control form-control-lg poisk-item" placeholder="Поиск по товарам... начините вводить" 
+id=std_10 data-id=10  name=exp[10] value=""></td></table>
+<form method=post action="/shipment/shipment_waybill/?id='.$id.'"> 
+<div id=div_new_inputs></div>
+</form>';
+
+
+$data=$db::getRows("SELECT * FROM shipment_waybill_products  WHERE waybill_id=?",[$id]);
+echo'<table class="table table-sm">
+<thead><tr><th>Наименование</th><th>Цвет</th><th>Сорт</th><th>Кол-во</th><th>Цена закупки</th><th>цена логистики</th><th>цена</th></tr>
+</thead><tbody>';
+    foreach($data as $row) {
+      echo'<tr onclick="waybill_products_edit(\''.$row["id"].'\');">
+      <td>'.$products[$row["product_id"]].'</td>
+     <td>'.$products_color[$row["product_id"]][$row["varietie_id"]].'</td>
+     <td>'.$products_varieties[$row["product_id"]][$row["varietie_id"]].'</td>
+     <td>'.$row["quantity"].'</td>
+    <td>'.$row["purchase_price"].'</td>
+    <td>'.$row["price_logistic"].'</td>
+    <td>'.$row["price"].'</td>    
+    </tr>';
+   
+}
+echo'</tbody></table>';
+
+
+$_CONFIG["jscss"]='
+               <link href="/azea/assets/plugins/select2/select2.min.css" rel="stylesheet" />
+               <script src="/azea/assets/plugins/select2/select2.full.min.js"></script>
+               <script src="/azea/assets/js/select2.js"></script>';
+$_CONFIG["jscss"] .="
+<script>
+
+
+
+function waybill_products_edit(id) {
+$.ajax({
+       url: '/shipment/ajaxProductOption/',
+       method: 'POST',
+       data: '&id='+id+'&action=edit',
+       success: function(data){
+       $('#div_new_inputs').html(data);
+       }
+});
+}
+
+
+function show_new_inputs(id,product_id) {
+$.ajax({
+       url: '/shipment/ajaxProductOption/',
+       method: 'POST',
+       data: '&product_id='+product_id+'',
+       success: function(data){
+       $('#'+id+'').html(data);
+       }
+});
+}
+
+
+$(function(){
+
+  $('td.tdd').each(function (index, element) {
+  input_search($(element).attr('id'),$(element).attr('data-id'));
+  });
+  
+  
+$('.poisk-item').change(function() {
+var id=$(this).attr('data-id');
+get_select_search(id);
+});
+
+
+$('.guid_input').change(function() {
+var id=$(this).attr('id-data');
+var val=$(this).val();
+ajaxLogSave(id,val);
+});
+
+
+$('.poisk-item').click(function() {
+var id=$(this).attr('data-id');
+if($(this).val()!=='' && $(this).val()!==' ') get_select_search(id);
+});
+
+
+function get_select_search(id) {
+$.ajax({
+       url: '/shipment/poisk-item/',
+       method: 'POST',
+       data: '&id='+id+'&search='+$('#std_'+id).val()+'',
+       success: function(data){
+       $('#std_'+id).after('<div style=\"position:absolute;\">'+data+'</div>');
+       }
+});   
+    
+}
+
+});
+</script>
+
+
+<style>.bg-danger2{background:#ffd8d8}</style>";               
+               
+
+
+
+
+include"templates/bottom.php";
\ No newline at end of file
diff --git a/erp24/modul/shipment/shipment_waybills.php b/erp24/modul/shipment/shipment_waybills.php
new file mode 100644 (file)
index 0000000..3c0deed
--- /dev/null
@@ -0,0 +1,22 @@
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/uni.php");
+include_once("inc/uni2.php");
+
+global $h1,$group_menu,$uni_fields, $forma_sql_table;
+$h1="Добавить "; $group_menu=0; $uni_fields=0;
+$modul="shipment_waybills";
+$forma_sql_table="shipment_waybills";
+$act="add";
+$h1="Добавить инвойс";
+
+
+include"templates/top.php";
+
+construct_modul_form_azea($modul); 
+
+
+
diff --git a/erp24/modul/shipment/shipment_waybills_edit.php b/erp24/modul/shipment/shipment_waybills_edit.php
new file mode 100644 (file)
index 0000000..6630206
--- /dev/null
@@ -0,0 +1,11 @@
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/universal_model.php");
+
+universal_model_form("shipment_waybills","shipment_waybills"); 
+
+
+
diff --git a/erp24/modul/shipment/stats.php b/erp24/modul/shipment/stats.php
new file mode 100644 (file)
index 0000000..1ddff7f
--- /dev/null
@@ -0,0 +1,171 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("templates/top.php");
+$modul="shipment";
+
+$citiesAll=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='cities'");
+
+$productsAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='products'");
+echo'<h1 class="mt-2">Мониторинг закупок (30 дней от даты добавления)</h3>';
+
+$date1=date("Y-m-d",time()-86400*30);
+$date2=date("Y-m-d",time());
+if(!empty($_REQUEST["date1"])) $date1=htmlentities($_REQUEST["date1"]);
+if(!empty($_REQUEST["date2"])) $date2=htmlentities($_REQUEST["date2"]);
+$where="  date_add>='$date1' AND date_add<='$date2 23:59:59'";
+
+echo"<form method=post role=\"form\" class=\"form-horizontal\" action=\"\">
+<table><tbody>
+<td><input type=date style=\"width:150px;\" class=\"form-control datetime\" value=\"$date1\" name=date1></td>
+<td><input type=date  style=\"width:150px;\" class=\"form-control datetime\" value=\"$date2\" name=date2></td>
+<td><button type=submit class=\"btn btn-success\" name=show>собрать статистику</button></td></tbody></table></form>";
+
+$orders=[];
+$data=$db::getRows("SELECT id,name,parent_id, related_order_id, providers_arr, city_id, status
+FROM store_orders WHERE status in('7','6','8') AND $where order by date_start  DESC LIMIT 430");
+foreach($data as $row) $orders[$row["id"]]=$row;    
+
+$in_orders="";
+$k=1;
+foreach($orders as $id => $order) {
+ $in_orders .="'$id'";
+ if($k<count($orders)) $in_orders .=", ";
+ $k++;
+}
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, sum(value) as value
+FROM store_orders_fields_data WHERE 
+order_id in ($in_orders) AND color='' AND store_id='' 
+AND field_name IN ('quantity_zakup_new','quantity','quantity_fact','quantity_warehouseman_fact','quantity_warehouseman_fact_related',
+'quantity_warehouseman_fact_defective_related','quantity_warehouseman_fact_defective') group by field_name,product_id");
+foreach($dataF as $row) { 
+$FiledsDataArray[$row["field_name"]][$row["product_id"]]=(int)$row["value"];
+$products[$row["product_id"]]=$productsAll[$row["product_id"]];
+}
+
+
+echo'<table class="zak">
+<thead><tr><th class="td_product">товар</th><th><b>потребность магазинов</b></th>
+<th><b>закуплено</b></th>
+<th><b>quantity_fact</b></th>
+<th><b>получено по факту</b></th><th><b>процент получено %</b></th>
+<th><b>процент брака %</b></th></tr></thead>
+<tbody>';
+
+foreach($products as $productId => $nameProduct) {
+ if($FiledsDataArray["quantity_zakup_new"][$productId]) {  
+     
+     $q=$FiledsDataArray["quantity_zakup_new"][$productId];
+     $wall=$FiledsDataArray["quantity_warehouseman_fact"][$productId] + $FiledsDataArray["quantity_warehouseman_fact_related"][$productId];
+     $brak=$FiledsDataArray["quantity_warehouseman_fact_defective"][$productId] + $FiledsDataArray["quantity_warehouseman_fact_defective_related"][$productId];
+      if($q) $wall_per=round(100*($wall/$q),2); else $q="";
+     
+     if($wall_per>100) $wall_per=100;
+    if( ($brak+$wall) >0 )   $brak_per=round(100*($brak/($brak+$wall)),2);  else $brak_per="";
+    
+    echo'<tr><td class="td_product">'.$nameProduct.'</td>
+   <td>'.$q.'</td>
+   <td>'.$FiledsDataArray["quantity"][$productId].'</td><td>'.$FiledsDataArray["quantity_fact"][$productId].'</td>
+   <td>'.$wall.'</td>
+    <td class="bg-';
+    if($wall_per>=90) echo'default';
+    else echo'danger';
+   echo'">'.$wall_per.'</td>
+    <td class="bg-';
+    if($brak_pe<=5) echo'default';
+    else echo'danger';
+   echo'">'.$brak_per.'</td>
+   </tr>';  
+   $arrayCnt["percent_purchase"] +=$wall_per;
+   $arrayCnt["percent_brak"] +=$wall_per;   
+   
+   $cnt++;
+   
+}
+
+    
+}
+echo'<tr><td></td><td></td>
+<td></td><td></td><td></td>
+<td>'.round($arrayCnt["percent_purchase"]/$cnt,2).'</td><td>'.round($arrayCnt["percent_brak"]/$cnt,2).'</td>';
+
+echo'</tbody></table>';
+
+
+$_CONFIG["jscss"] .='<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal;  max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+    padding: 0.05rem;
+    background-color: 1px;
+    box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+       border-collapse: collapse;
+       border-spacing: 0;
+       overflow: hidden;
+}
+.zak th, .zak td {
+       border: 1px solid #e6e6e6;
+       padding: 0.1rem;
+       vertical-align: middle;
+       position: relative;
+}
+
+.zak td:hover:before { 
+       background-color: #e3e3e3;
+       content: \'\';  
+       height: 100%;
+       left: -5000px;
+       position: absolute;  
+       top: 0;
+       width: 10000px;   
+       z-index: -2;        
+}
+.zak td:hover:after { 
+       background-color: #cdcdcd;
+       content: \'\';  
+       height: 10000px;    
+       left: 0;
+       position: absolute;  
+       top: -5000px;
+       width: 100%;
+       z-index: -1;        
+}
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+  vertical-align: bottom;
+  line-height: normal;
+}
+table.zak thead b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+  
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+    font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+    padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:right;}
+.zak td.td_product, .zak th.td_product  {background:#fff;}
+</style>';
+include"templates/bottom.php"; 
\ No newline at end of file
index 4044adbb5e5e6543bf77be3519891a3f8a921bd5..c85939e1a08034eac8c032574124c93f88d460c0 100644 (file)
@@ -6,13 +6,14 @@ include_once("inc/design_new.php");
 
 include"templates/top.php";
 
-//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
+//if($_SESSION["group_id"]>2) exit("У вас нет доступа");  id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1 or id=10
 
-$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1 or id=10");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id in (7,30,17,70,71,9,51,1,10,50)");
 
-$data3=$db::getRows("SELECT * FROM store_orders_statuses order by posit desc");
+$data3=$db::getRows("SELECT * FROM store_orders_statuses WHERE posit>0 order by posit desc");
 foreach($data3 as $row) {
-$store_orders_statuses[$row["id"]]=$row["name"];   
+$store_orders_statuses[$row["id"]]=$row["name"]; 
+$statuses[$row["id"]]=$row;   
 $statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
 $statuses_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);   
 }
@@ -57,7 +58,9 @@ $statuses_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSO
 echo'<form method=post action="/shipment/statuses_edit/">';
 foreach($store_orders_statuses as $status_id => $status) 
 {
-    echo"<br> <h2>$status - <a href=\"/shipment/statusFieldsSort/?status_id=$status_id\" class=\"btn btn-warning\">сортировка полей на статусе</a></h2>";
+    echo"<h2> <span class=\"btn btn-white\">".$statuses["$status_id"]["number"]."</span> $status 
+    <a href=\"/shipment/statusFieldsSort/?status_id=$status_id\" class=\"btn btn-warning btn-sm\">сортировка полей на статусе</a></h2>
+    <div style=\"display:block;background:#c8fff3;border:1px #e6e6e6 solid\" class=\"p-2\">".$statuses["$status_id"]["description"]."</div>";
     
     echo'<table>';
     foreach($statuses_groups[$status_id] as $gid) {
@@ -85,7 +88,7 @@ foreach($store_orders_statuses as $status_id => $status)
    }
    echo'</table>';
 }
-echo'<button class="btn btn-success" name="save" value=1>сохранить</button></div></form>';
+echo'<button class="btn btn-success btn-lg m-4" name="save" value=1>сохранить</button></div></form>';
 
 
 
diff --git a/erp24/modul/shipment/storeOrderScore.php b/erp24/modul/shipment/storeOrderScore.php
new file mode 100644 (file)
index 0000000..8109333
--- /dev/null
@@ -0,0 +1,150 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("templates/top.php");
+$modul="shipment";
+global $act;
+$act="storeOrderScore";
+$group_id=(int)$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+include_once"modul/shipment/functionsShipment.php";
+
+
+
+
+if(!empty($_POST["save"]) and !empty($store_id))  {
+ $data_up=[];   
+ foreach($_POST["score"] as $product_id => $score) {
+ $product_id=htmlentities($product_id);
+ $score=(int)$score;
+ if(!empty($products[$product_id]) and $score>0)  
+ $data_up[$product_id][$store_id][0]=$score;
+    
+  }
+  
+  
+   foreach($_POST["score_color"] as $product_id => $scoreAr) {
+ $product_id=htmlentities($product_id);
+ foreach($scoreAr as $color => $score) {
+ $score=(int)$score;
+   if(!empty($products[$product_id]) and $score>0)  
+    $data_up[$product_id][$store_id][$color]=$score;
+    }
+    
+  } 
+  
+  
+  
+  if(!empty($data_up)) insert_store_orders_fields($data_up,"score"); 
+  
+  mess("Сохранено");
+  
+ // print_r($data_up);
+  $f="modul/shipment/fields/score.php";    
+  if(is_file($f))  {
+     $data_up=[]; 
+     include_once($f); 
+     if(!empty($data_up)) insert_store_orders_fields($data_up,"score"); // вносим данные в таблицу
+  }
+  
+}
+
+echo'<h3 class="page-title mb-0 text-primary">
+<a href="/shipment/" class="btn me-2 btn-light">❮ назад в закупки</a>
+Оцените '.$OrderData["name"].' id='.$orderId.'</h3>';
+
+showOrderStoresPanel();
+
+$FiledsData=getDataFiledsData($orderId);
+
+// проголусуйте от лица магазина
+if(!empty($store_id)) {
+echo'<div class="table-responsive mt-3">
+<form method=post action=""><table class="zak">';
+echo'<thead><tr class="zg"><th>ваша оценка</th><th class="text-right w-10">наименование</th><th>получено при делении шт.</th><th>общая средняя оценка</th></tr></thead>
+<tbody>';
+foreach($products as $productId => $productName){
+$q=(int)$FiledsData["division_summ"][$productId]["NULL"]["NULL"];
+$s=(int)$FiledsData["score"][$productId][$store_id]["NULL"];
+$avg=round($FiledsData["score"][$productId]["NULL"]["NULL"],1);
+
+if($q>0) {    
+echo'<tr><td class="text-right"><b>'.$productName.'</b></td>
+<td><select name=score['.$productId.'] class="form-select">';
+echo'<option value=0'; if($s=="") echo' selected'; echo'>-</option>';
+for($i=1;$i<=5;$i++){
+    echo'<option value='.$i.''; 
+if($s==$i) echo' selected'; 
+echo'>'.$i.'</option>';
+}
+
+
+echo'</select></td>
+<td>'.$q.'</td><td>'.$avg.'</td></tr>';  
+
+
+        foreach($productsColorsArray[$productId] as $color) {
+         $color=trim($color);  
+         $q=(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+         $s=(int)$FiledsData["score"][$productId][$store_id][$color];
+         $avg=round($FiledsData["score"][$productId]["NULL"][$color],1);
+
+if($q>0) {    
+   echo'<tr><td class="text-right">+<span class="btn btn-sm btn-warning">'.$color.'</span></td>
+   <td><select name=score_color['.$productId.']['.$color.'] class="form-select">';
+  echo'<option value=0'; if($s=="") echo' selected'; echo'>-</option>';
+  for($i=1;$i<=5;$i++){
+    echo'<option value='.$i.''; 
+   if($s==$i) echo' selected'; 
+   echo'>'.$i.'</option>';
+  }
+
+
+echo'</select></td>
+   <td>'.$q.'</td><td>'.$avg.'</td></tr>';  
+}
+         
+         
+         
+         
+        }
+
+
+
+}
+    
+}
+
+
+
+echo'</tbody></table>
+<button class="btn btn-success btn-lg" type=submit name=save value=true>сохранить</botton>
+</form>';
+
+
+} else {
+    
+    mess("проголусуйте от магазина - выберите свой магазин");
+    
+}
+
+
+
+
+echo'</tbody></table></div>';
+
+
+
+
+
+
+include"templates/bottom.php"; 
+       
+
+
diff --git a/erp24/modul/shipment/storeOrders.php b/erp24/modul/shipment/storeOrders.php
new file mode 100644 (file)
index 0000000..eb6c53a
--- /dev/null
@@ -0,0 +1,142 @@
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/shipment.php");
+include_once("templates/top.php");
+$modul="shipment";
+
+
+
+$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+
+
+
+$data3=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data3 as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];   
+$store_orders_statusesbg[$row["id"]]=$row["background"];   
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);  
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);   
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);   
+}
+
+
+
+echo'<h3 class="mt-2">Список закупок для магазинов</h3>';
+
+
+
+$data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start
+FROM store_orders WHERE parent_id!=0 AND date_start>=NOW() - INTERVAL 70 DAY
+
+AND status in ('1','2')
+order by delivery_date   DESC LIMIT 330");
+foreach($data as $row) $dozakupka[$row["parent_id"]][]=$row;    
+   
+
+
+$data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start 
+FROM store_orders WHERE parent_id=0 AND date_start>=NOW() - INTERVAL 70 DAY 
+AND status in ('1','2') 
+order by delivery_date  DESC LIMIT 30");
+foreach($data as $row) {
+$in=explode(",",$row["providers_arr"]);  
+
+echo'<div class="expanel expanel-default m-1 p-1">
+<div class="expanel-heading m-0 p-0">';
+
+if(!empty($dozakupka[$row["id"]])) echo'<span class="btn btn-light me-1"  onclick="$(\'#external__'.$row["id"].'\').toggle();">+</span>'; 
+
+echo'
+<a href=/'.$modul.'/shipment/?id='.$row["id"].' class="btn btn-default fs-6">
+<span class="btn btn-outline-info">'.$row["id"].'</span>
+<span class="btn btn-warning btn-sm me-2">'.$store_orders_statuses[$row["status"]].'</span>
+'.$row["name"].'</a>
+
+<span class="dt">дата продаж: '.$row["date_start"].', создано '.$row["date_add"].'  <i>'.$row["comment"].'</i></span>
+</div> 
+
+<div class="expanel-body m-0 p-0';
+if(empty($dozakupka[$row["id"]])) echo' d-none';
+echo'" id="external__'.$row["id"].'"> ';
+
+//printStoreOrderFiles($row["id"]);
+//foreach($in as $pid) echo'<span class="tag m-1">'.$providers[$pid].'</span>';
+
+
+$time = strtotime($row["date_start"]);
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+$date2=date('Y-m-d 00:00:00', $time-86400);
+$in=explode(",",$row["providers_arr"]);
+$w="";
+$k=0;
+foreach($in as $pid) { if($k!=0) $w .=", ";  $w .="'$pid'"; $k++; }
+
+$k=0;
+$wnere="";
+foreach($dozakupka[$row["id"]] as $rows) {
+if($k!=0) $wnere .=",";  $wnere .="'".$rows["id"]."'"; $k++;    
+}    
+
+
+if(!empty($wnere)) $wnere ="'".$row["id"]."', $wnere"; else $wnere="'".$row["id"]."'";
+foreach($data6 as $row6) { 
+ $data_values["quantity_purchase"] = $sum_p+$row6["quantity_purchase"];
+}
+
+
+$q_all=0;
+$s_all=0;
+foreach($data5 as $row55) { 
+ $data_values["quantity_zakup"] +=$row55["quantity_zakup"];
+ $data_values["quantity_purchase_summ"] +=$row55["quantity_purchase_summ"]; 
+ $data_values["quantity_zakup_fact"] +=$row55["quantity_zakup_fact"];
+ $data_values["quantity_zakup_summ"] +=$row55["quantity_zakup"]*$row55["purchase_price"]; 
+ $data_values["quantity_zakup_fact_summ"] +=$row55["quantity_zakup_fact"]*$row55["quantity_zakup_fact"];  
+ //echo' quantity_zakup_all= '.$row55["quantity_zakup_all"].'  summa_all= '.$row55["summa_all"].' ';    
+}
+
+
+echo'<div class="row">';
+foreach($dozakupka[$row["id"]] as $rows) {
+echo'<div class="col-12">
+<div class="ml-4">
+ <a href=/'.$modul.'/shipment/?id='.$rows["id"].' class="btn btn-white fs-6 me-3">
+ <span class="btn btn-outline-info fs-6 me-2">'.$rows["id"].'</span>
+ <span class="me-2 btn btn-sm bg-warning">'.$store_orders_statuses[$rows["status"]].'</span> 
+ '.$rows["name"].'
+
+</a>
+
+
+<i>'.$rows["comment"].'</i>';
+//printStoreOrderFiles($rows["id"]);
+echo'</div></div>'; 
+    }
+
+echo'</div>
+
+</div>
+</div>';
+
+
+}
+
+
+$_CONFIG["jscss"] .='<style>
+
+.dt{color:#7175b1}
+
+
+</style>';
+       
+
+include"templates/bottom.php"; 
+       
+
+
index af57c3553aef7f05299c7fc234339c3671fd73af..568ac8e8dfcee285f130494b1fd5d95d5d89a0e8 100644 (file)
@@ -1,4 +1,6 @@
-                                                   
+<?php
+ if (Yii::$app) return;
+?>
                        
 
                                        </div>
index 2fe076883c406559327d2d15c73beff31f9f2ce7..2fb974855271eebc308299708fb480f66a261fd4 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+if (Yii::$app)return;
 if(empty($_SESSION["admin_id"])) { header("Location: /login/login2/"); exit(); }
 global $tstart,$light,$modul,$act, $db, $CONFIG_SETKA,$_CONFIG;
 
diff --git a/erp24/views/bonus/sex.php b/erp24/views/bonus/sex.php
new file mode 100644 (file)
index 0000000..9a843c9
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+
+chdir(__DIR__ . '/../../');
+
+include 'modul/bonus/sex.php';
\ No newline at end of file
diff --git a/erp24/views/sales-checks/index.php b/erp24/views/sales-checks/index.php
new file mode 100644 (file)
index 0000000..8e4780c
--- /dev/null
@@ -0,0 +1,5 @@
+<?php
+
+chdir(__DIR__ . '/../../');
+
+include 'modul/sales_checks/index.php';
diff --git a/erp24/views/shipment/add.php b/erp24/views/shipment/add.php
deleted file mode 100644 (file)
index 44ac6b3..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/uni.php");
-include_once(dirname(__DIR__, 2) . "/inc/uni2.php");
-
-global $h1,$group_menu,$uni_fields, $forma_sql_table, $modul, $act;
-$h1="Добавить "; $group_menu=0; $uni_fields=0;
-$modul="shipment";
-$forma_sql_table="store_orders";
-$act="add";
-$h1="Добавить закупку";
-if(empty($_REQUEST["id"])) {
-    if(!empty($_SESSION["cat_id"]))   $catid=(int)$_SESSION["cat_id"];
-
-
-}
-if(!empty($_REQUEST["cat_id"]))  { $catid=(int)$_REQUEST["cat_id"];  $_SESSION["default_".$modul."_cat_id"]=$catid; $_SESSION["cat_id"]=$catid;
-    $_SESSION["default"][$modul]["cat_id"]=$catid;
-}
-
-
-
-//include"templates/top.php";
-echo "<div class='m-5'>";
-construct_modul_form_azea($modul);
-echo "</div>";
-
-
-$_CONFIG["jscss"]='
-<link href="/azea/assets/plugins/fileupload/css/fileupload.css" rel="stylesheet" type="text/css" />
-<script src="/azea/assets/js/file-upload.js"></script>         
-';
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file
diff --git a/erp24/views/shipment/ajax-admin-online.php b/erp24/views/shipment/ajax-admin-online.php
deleted file mode 100644 (file)
index 4d1ac44..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-
-header("Content-Type: application/json; charset=UTF-8");
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-
-if(!empty($_REQUEST["modul"])) {
-    $modul=htmlentities($_REQUEST["modul"]);
-    $action=htmlentities($_REQUEST["action"]);
-    $entity_id=htmlentities($_REQUEST["entity_id"]);
-
-//echo "$modul $action $entity_id";
-
-    $db::sql("INSERT INTO admin_online_page (modul, action, entity_id, admin_id, date) VALUES ('$modul', '$action' ,'$entity_id','".$_SESSION["admin_id"]."', NOW()) ON DUPLICATE KEY UPDATE date=NOW()");
-
-
-
-    $data=$db::getRows("SELECT p.admin_id, a.name FROM admin_online_page as p, admin as a
-WHERE p.modul=? AND p.action=?  AND p.entity_id=? AND p.admin_id=a.id AND p.date>=NOW() - INTERVAL 2 minute",[$modul,$action,$entity_id]);
-    $division = [];
-    foreach($data as $row) {
-        $division[$row["admin_id"]]=$row["name"];
-
-    }
-    echo json_encode($division,JSON_UNESCAPED_UNICODE);
-
-}
\ No newline at end of file
diff --git a/erp24/views/shipment/ajax-division.php b/erp24/views/shipment/ajax-division.php
deleted file mode 100644 (file)
index 673cba0..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-header("Content-Type: application/json; charset=UTF-8");
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-
-if(!empty($_SESSION["order_id"]))  $order_id=(int)$_SESSION["order_id"];
-else $order_id=1;
-
-if(!empty($_SESSION["fieldIdThisDivision"]))  $this_field_id=(int)$_SESSION["fieldIdThisDivision"];
-
-if(empty($this_field_id)) $this_field_id=20;
-
-
-$db::sql("INSERT INTO admin_online_page (modul, action, entity_id, admin_id, date) VALUES ('shipment', 'division' ,'$order_id','".$_SESSION["admin_id"]."', NOW()) ON DUPLICATE KEY UPDATE date=NOW()");
-
-
-
-$data=$db::getRows("SELECT division_fact,store_id,product_id FROM store_orders_item WHERE order_id=? AND store_id!='' AND division_fact>0",[$order_id]);
-$division = [];
-foreach($data as $row) {
-    $division[$row["product_id"]][$row["store_id"]]["division_fact"]=(int)$row["division_fact"];
-}
-
-
-$data=$db::getRows("SELECT product_id,color,sum(quantity) as quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
-and field_id=? and store_id!='0' group by product_id, store_id, color",[$order_id,$this_field_id]);
-foreach($data as $row) {
-    $division[$row["product_id"]][$row["store_id"]]["color"][md5($row["color"])]=$division2[$row["product_id"]][$row["store_id"]]["color"][md5($row["color"])]+$row["quantity"];
-}
-
-echo json_encode($division,JSON_UNESCAPED_UNICODE);
-
-
diff --git a/erp24/views/shipment/ajax-edit-field-value.php b/erp24/views/shipment/ajax-edit-field-value.php
deleted file mode 100644 (file)
index e1582a9..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-<?php
-
-use \yii_app\records\StoreOrdersFields;
-use \yii_app\records\StoreOrdersFieldsData;
-use \yii_app\records\StoreOrdersFieldsDataLogi;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$id=(int)$_REQUEST["id"];
-$product_id=htmlentities($_REQUEST["product_id"]);
-$store_id=htmlentities($_REQUEST["store_id"]);
-$name_eng=htmlentities($_REQUEST["name_eng"]);
-$value=htmlentities($_REQUEST["value"]);
-$provider_id=intval($_REQUEST["provider_id"]);
-$color=htmlentities($_REQUEST["color"]);
-
-
-
-if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
-
-    $id=(int)$_REQUEST["id"];
-    $product_id=htmlentities($_REQUEST["product_id"]);
-    $store_id=htmlentities($_REQUEST["store_id"]);
-    $name_eng=htmlentities($_REQUEST["name_eng"]);
-    $value=htmlentities($_REQUEST["value"]);
-    $provider_id=intval($_REQUEST["provider_id"]);
-    $color=htmlentities($_REQUEST["color"]);
-
-
-
-    $whereInProductsId=" in('$product_id') ";
-    $products=[$product_id=>"товар"];
-
-
-//echo"$name_eng=$value $product_id $store_id";
-    if(!empty($store_id)) {
-        global $dependent_fields;
-        $data = StoreOrdersFields::find()->select(['id', 'dependent_fields', 'name_eng'])->asArray()->all();
-//        $data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1");
-        foreach($data as $row) {
-            $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);
-            $fieldRows[$row["id"]]=$row["name_eng"];
-        }
-
-        global $arrayp;
-
-        function recurs_depended($fieldId) {
-            global $dependent_fields,$arrayp;
-            $arrayp .=",".implode(",",$dependent_fields[$fieldId]);
-            foreach($dependent_fields[$fieldId] as $fieldId2)          recurs_depended($fieldId2);
-            return $arrayp;
-        }
-
-
-
-        $row = StoreOrdersFields::find()->select(['id', 'tip'])->where(['name_eng' => $name_eng])->asArray()->one();
-//        $row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]);
-        if(is_array($row)) {
-            $tip=$row["tip"];
-            $fieldId=$row["id"];
-
-
-
-            if(0) {
-                $arrayp=recurs_depended($fieldId);
-
-
-                $arrayp = array_unique(explode(",",$arrayp));
-                $arrayp = array_diff($arrayp, array(''));
-//echo "++++".print_r($arrayp)."  ";
-
-
-                $updateFieldsArray=[];
-                echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией   ";
-                foreach($arrayp as $k) {
-
-                    if(is_numeric($k))  { echo"<br>---+++$k ".$fieldRows[$k]."";
-
-                        $updateFieldsArray[]=$fieldRows[$k];
-
-                    }
-
-                }
-
-
-
-
-
-
-                if(!empty($updateFieldsArray))
-                {
-//include_once("inc/functionsFiedlsData.php");
-
-//updateProductArrayDataField($updateFieldsArray);
-                }
-
-
-            }
-//print_r($updateFieldsArray);
-
-
-
-
-            if($tip=="string") $pole="value_text"; else $pole="value";
-
-            if(empty($color)  or $color=='undefined' or $color=='NULL') $color='';
-            if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
-
-
-            $up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
-
-            if(isset($value)) {
-
-
-                //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
-                //echo"удаление пустой записи";
-
-
-
-                $value_old_pole = StoreOrdersFieldsData::find()->select([$pole])->where(['product_id' => $product_id, 'order_id' => $id, 'store_id' => $store_id, 'field_name' => $name_eng, 'field_id' => $fieldId, 'color' => $color])->asArray()->one();
-                $value_old = $value_old_pole[$pole];
-                //$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
-                $value_old=str_replace('.000','',$value_old);
-
-                $storeOrdersFieldsData = StoreOrdersFieldsData::find()->where(['order_id' => $id, 'product_id' => $product_id,
-                    'store_id' => $store_id, 'field_id' => $fieldId, 'field_name' => $name_eng, 'color' => $color])->one();
-                if (!$storeOrdersFieldsData) {
-                    $storeOrdersFieldsData = new StoreOrdersFieldsData;
-                    $storeOrdersFieldsData->order_id = $id;
-                    $storeOrdersFieldsData->product_id = $product_id;
-                    $storeOrdersFieldsData->store_id = $store_id;
-                    $storeOrdersFieldsData->field_id = $fieldId;
-                    $storeOrdersFieldsData->field_name = $name_eng;
-                    $storeOrdersFieldsData->color = $color;
-                }
-                $storeOrdersFieldsData->$pole = $value;
-                $storeOrdersFieldsData->save();
-//                $sql="INSERT IGNORE INTO store_orders_fields_data SET  ";
-//                $up2 =" $pole='$value'";
-//                $up .= ",".$up2;
-//                $sql .="$up ON DUPLICATE KEY UPDATE $up2";
-//                $db::sql($sql);
-//echo'сохранили '.$name_eng.' store_id='.$store_id.' '.$name_eng.'  color='.$color.' value='.$value.'  ';
-
-                $storeOrdersFieldsDataLogi = new StoreOrdersFieldsDataLogi;
-                $storeOrdersFieldsDataLogi->product_id = $product_id;
-                $storeOrdersFieldsDataLogi->field_id = $fieldId;
-                $storeOrdersFieldsDataLogi->order_id = $id;
-                $storeOrdersFieldsDataLogi->store_id = $store_id;
-                $storeOrdersFieldsDataLogi->color = $color;
-                $storeOrdersFieldsDataLogi->value = $value;
-                $storeOrdersFieldsDataLogi->value_old = $value_old;
-                $storeOrdersFieldsDataLogi->date_add = date('Y-m-d H:i:s');
-                $storeOrdersFieldsDataLogi->admin_id = $_SESSION["admin_id"];
-                $storeOrdersFieldsDataLogi->save();
-
-//                $db::sql("INSERT INTO store_orders_fields_data_logi
-//(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
-//VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
-
-            }
-
-
-        } else echo'Поля '.$name_eng.' нет в таблице ';
-
-    }
-
-}
\ No newline at end of file
diff --git a/erp24/views/shipment/ajax-update-fields-data.php b/erp24/views/shipment/ajax-update-fields-data.php
deleted file mode 100644 (file)
index 9ef2a70..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-
-
-global $products, // массив с товарами производителя прикрепленного к этой закупке
-       $orderId, // id- заказа
-       $store_id, // GUID магазина
-       $storesArray, // массив с магазинами
-       $group_id, // ID группы авторизованного сотрудника
-       $fieldsRows, // массив с данными по полями - ключ name_eng
-       $date_start_sale, // дата старта продаж от которой считаемстатистику
-       $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
-       $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
-       $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
-       $FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам
-       $status_order_id, // ID текущего статуса закупаки
-       $store_orders_statuses, // массим со статсами закупок
-       $statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
-       $status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
-       $store_orders_status_description, // - массив с описанием стутса
-       $dostup_fields,
-       $bg_fields,
-       $ProductsOptions;
-
-
-if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
-
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-
-
-
-
diff --git a/erp24/views/shipment/ajax-update-step.php b/erp24/views/shipment/ajax-update-step.php
deleted file mode 100644 (file)
index ae0b289..0000000
+++ /dev/null
@@ -1,634 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-global $products, // массив с товарами производителя прикрепленного к этой закупке
-       $orderId, // id- заказа
-       $store_id, // GUID магазина
-       $storesArray, // массив с магазинами
-       $group_id, // ID группы авторизованного сотрудника
-       $fieldsRows, // массив с данными по полями - ключ name_eng
-       $date_start_sale, // дата старта продаж от которой считаемстатистику
-       $order_date_add,
-       $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
-       $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
-       $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
-       $FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам
-       $status_order_id, // ID текущего статуса закупаки
-       $store_orders_statuses, // массим со статсами закупок
-       $statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
-       $status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
-       $store_orders_status_description, // - массив с описанием стутса
-       $dostup_fields,
-       $bg_fields,
-       $ProductsOptions;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
-
-$whereDeleteData="";
-// параметр указывает на то что осток после деления распределяем автоматически в ячейки для ручной добавки к делению
-$foreachSalesHand=false;
-if($_REQUEST["foreachSalesHand"]==1) { $foreachSalesHand=true; $whereDeleteData .=",'division_hand'"; }
-
-
-if($_REQUEST["deleteAll"]==1) {
-    $db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId'");
-
-    mess("Данные удалены");
-
-    exit();
-}
-
-
-
-
-//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_ratio' or field_name='division_auto' or field_name='storehouse_balance') AND order_id='$orderId'");
-$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");
-
-include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-/*
-
-if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
-
-
-// создаем массив со свойствами подсветки ячеек store_orders_fields_property
-$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
-foreach($data as $row) {
-    $fieldsPropertyArray[$row["field_id"]][]=$row;
- }
-
- // достаем поля в массив
-$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
-foreach($data as $row) {
-    $fieldsRows[$row["name_eng"]]=$row;
-    $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
-    $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]);     //считаем поля и зависимые поля рекурсивно
-    if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
- }
-
-
-// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
-$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,
-DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
-$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
-$status_order_id=$OrderData["status"];
-$date_start_sale=$OrderData["date_start"];
-$date_update=$OrderData["date_update"];
-$date_start_division=$OrderData["division_date"];
-
-
-$whereProvidersId="";
-$k=0;
-foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
-
-
-$whereInProductsId=" in (";
-$z="SELECT p.id, p.name, o.provider_id, o.price_zakup FROM products_1c_options as o, products_1c as p WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
-$data2=$db::getRows($z);
-$k=0;
- foreach($data2 as $row) {
-  if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
-   $products[$row["id"]]=$row["name"];
-   $prov[$row["id"]]=$row["provider_id"];
-   $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
-
-   $k++;
- }
-$whereInProductsId .=")";
-
-
-*/
-
-// вычисляем массив по цветам привязанным к товару
-$colorsProduct=[];
-$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
-foreach($data4 as $row) {
-    $colors=explode(";",$row["colors"]);
-    foreach($colors as $color) {
-        $color=trim($color);
-        $colorsProduct[$row["id"]][$color]=$color;
-    }
-}
-
-
-
-
-
-$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id 
-FROM sales as s, sales_products as p 
-WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id $whereInProductsId  AND s.date>=? - INTERVAL 14 day  group BY p.product_id, s.store_id_1c order by 
-squantity DESC",[$date_start_division]);
-foreach($data as $row){
-    $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
-
-}
-
-
-
-// товар в пути  date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day
-
-$data=$db::getRows("SELECT  id,name,providers_arr FROM store_orders WHERE  date_add>='$order_date_add' - interval 7 day  AND date_add<='$order_date_add' ");
-
-
-$j=0;
-$orders_where="";
-foreach($data as $row) {
-
-    $store_orders[$row["id"]]=$row["name"];
-    $providersIdInThisOrder2=explode(",",$row["providers_arr"]);
-    $whereProvidersId2="";
-    $k=0;
-    foreach($providersIdInThisOrder2 as $pid) { if($k!=0) $whereProvidersId2 .=","; $whereProvidersId2 .="'$pid'"; $k++; }
-
-    if($j>0) $orders_where .=",";
-
-    $orders_where .="'".$row["id"]."' ";
-    $j++;
-
-
-
-
-// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
-    $whereInProductsId_is=" in (";
-    $z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p 
-WHERE o.provider_id in($whereProvidersId2) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
-    $data2=$db::getRows($z);
-    $k=0;
-    foreach($data2 as $row3) {   if($k!=0) $whereInProductsId_is .=","; $whereInProductsId_is .="'".$row3["id"]."'";$k++;}
-    $whereInProductsId_is .=")";
-
-
-    echo" ".$row["id"].") ".$row["name"]."  убираем информацию по остальным товарам<br>";
-    if(!empty($whereInProductsId_is) and $k>0) $db::sql("DELETE FROM store_orders_fields_data WHERE product_id NOT $whereInProductsId_is  AND order_id='".$row["id"]."'");
-}
-$data_up=[];
-$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name='goods_in_transit' AND order_id='$orderId'");
-
-
-if(!empty($orders_where))
-{
-
-
-    $orders_where=" AND order_id in($orders_where) AND order_id!='$orderId'";
-    $data=$db::getRows("SELECT order_id,product_id,value,color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0
-  $orders_where group by order_id, product_id,value,color");
-    foreach($data as $row) {
-        if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
-        $data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
-
-        $titleArr[$row["product_id"]]["NULL"][$color] .="
-       id=".$row["order_id"]." ".$store_orders[$row["order_id"]]."=".(int)$row["value"]." шт.";
-
-
-    }
-    insert_store_orders_fields($data_up,"goods_in_transit",$titleArr);
-}
-
-
-
-
-$data_up2=[];
-foreach($products as $productId =>$nameProduct) {
-
-    echo"<br><b>$nameProduct</b>";
-
-    $data_up=[];
-    $massivTitle=[];
-    foreach($storesArrayAll as $storeId => $nameStore) {
-
-//echo"<br>$nameStore ";
-
-        $colorsProductsArray[$productId]["NULL"]="NULL";
-
-        foreach($colorsProductsArray[$productId] as $color) {
-
-            $arrs2=returnFormula("division_auto_need",  $productId, $storeId, $color);
-// echo "$color=".$arrs2["value"]." "; // title=".$arrs2["title"]."
-
-            $FiledsData["division_auto_need"][$productId][$storeId][$color]=$arrs2["value"];
-            if($color=="NULL")   {
-                $data_up[$productId][$storeId][$color]=$arrs2["value"];
-                $division_auto_need_all[$productId] +=$arrs2["value"];
-                $massivTitle[$productId][$storeId][$color] =$arrs2["title"];
-
-            }
-
-        }
-    }
-
-
-    insert_store_orders_fields($data_up,"division_auto_need",$massivTitle);
-
-
-
-    echo"<br>Итого division_auto_need_all=".$division_auto_need_all[$productId]." 
-
-старый коэфф=".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]."
-
-куплено по факту=".$FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"]."";
-
-    $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
-    $data_up2[$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
-}
-
-
-
-
-insert_store_orders_fields($data_up2,"division_auto_need_all");
-
-
-
-
-$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact   quantity_zakup_fact
-$data_up=[];
-foreach($products as $productId => $nameProduct) {
-    $massivSQL=array();
-    $FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-//+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]
-
-    if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]) {
-        $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
-    }
-    else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"],3);
-    echo"<br>$nameProduct = division_ratio  ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
-
-    $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-}
-
-insert_store_orders_fields($data_up,"division_ratio");
-
-
-
-
-$data_up=[]; $datau=[]; $data_hand=[];
-foreach($products as $productId =>$nameProduct) {
-    $division_auto_all2=[];
-    echo"<br><b>$nameProduct - division_auto  $rowFactName=".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."</b>";
-    foreach($storesArrayAll as $storeId => $nameStore) {
-        echo"<br>$nameStore ";
-
-        $colorsProductsArray[$productId]["NULL"]="NULL";
-        foreach($colorsProductsArray[$productId] as $color) {
-            $division_auto=$FiledsData["division_auto_need"][$productId][$storeId][$color] * $FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-
-            if(empty($FiledsData["min_lot"][$productId]))  $min_lot=1; else $min_lot=$FiledsData["min_lot"][$productId];
-            $division_auto_ceil=ceilCoefficient($division_auto,$min_lot);
-
-
-            $title=" ".$FiledsData["division_auto_need"][$productId][$storeId][$color]." *  ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." = $division_auto ->$division_auto_ceil  ";
-
-
-            echo $title;
-
-
-            if($color=="NULL" and $storeId!="NULL")   $storehouse_balance1=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all2[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
-
-
-
-            $storehouse_balance0=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-            if($division_auto_ceil<=$storehouse_balance0 and $storehouse_balance1<0) { $storehouse_balance1=1;
-                if($color=="NULL" and $storeId!="NULL")   $division_auto_all2[$productId] +=$division_auto_ceil;
-                echo"!!!!вносим все равно $storehouse_balance0";
-
-            }
-
-
-            if($storehouse_balance1<0) {
-
-                $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
-                echo" !баланс! $storehouse_balance ";
-
-                echo"<span class=\"btn btn-danger\">не вносим</span>";
-
-            }
-            else {
-                if($color=="NULL" and $storeId!="NULL")  {
-                    $division_auto_all[$productId] +=$division_auto_ceil;
-                    $division_auto_all2[$productId] +=$division_auto_ceil;
-
-                }
-
-                $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
-                echo" баланс $storehouse_balance ";
-                $value=$division_auto_ceil;
-                $field_name="division_auto";
-                $field_id=$fieldsRows[$field_name]["id"];
-
-                if($storehouse_balance>=0) {
-                    if($color=="NULL") {
-                        $color="";
-                        try {
-                            $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update,title)       
-          VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
-                                [$productId, $orderId, $storeId, $field_name, $field_id, $value, "",  $color, $title, $value, "",$title]);
-                        }
-                        catch (Exception $e)
-                        {
-                            echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
-                        }
-
-
-                        $hand=$FiledsData["division_hand"][$productId][$storeId][$color];
-                        if(empty($hand)) $hand=0;
-
-                        $data_up[$productId][$storeId][$color]=$value+$hand;
-                        $datau[$productId][$storeId][$color]="$value+".$hand;
-                    }
-                }  else {
-
-                    echo"--не вносим--";
-                }
-
-
-
-            }
-
-
-            echo "all=".$division_auto_all2[$productId]." ";
-
-
-        }
-
-
-
-
-
-    }
-
-
-    $product_counter++;
-    insert_store_orders_fields($data_up,"division_summ",$datau);
-
-
-
-    $min_lot=$FiledsData["min_lot"][$productId];
-    $division_hand_summ=$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
-    $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
-    // $data_up3=[];
-    // $data_up3[$productId]["NULL"]["NULL"]=$storehouse_balance;
-    // insert_store_orders_fields($data_up3,"storehouse_balance");
-
-    $field_name="storehouse_balance";
-    $field_id=$fieldsRows[$field_name]["id"];
-    $storeId="";
-    $color="";
-    $value=$storehouse_balance;
-
-
-    try {
-        $s="INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update)       
-          VALUES (?,?,?,?,?,?,?,?,'-1',NOW())  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW()";
-        $db::sql($s,            [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $value, $value_text]);
-
-    }
-    catch (Exception $e)
-    {
-        echo 'Ошибка вставки данных  error='. $e->getMessage();
-    }
-
-
-    echo"<br>Итого division_auto_all=".$division_auto_all[$productId]." division_hand_summ=$division_hand_summ storehouse_balance=<b>$storehouse_balance</b> min_lot=$min_lot ";
-    $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
-
-
-// добавляем деление ручное по магазину по циклу - по рейтингу магазина
-
-    if($foreachSalesHand==true and $min_lot <=$storehouse_balance and $storehouse_balance>0){
-
-        echo"<br><b>Запускаем цикл начисления согласно продажам</b>";
-
-        $j=1;
-        $new_balance=0;
-        $nb=0;
-        do {
-            foreach($productsArrayStores[$productId] as $storeId =>$quantity) {
-                $new_balance=$storehouse_balance-$min_lot;
-
-                if( $new_balance>=0) {
-                    $nb = $FiledsData["division_hand"][$productId][$storeId]["NULL"] + $min_lot;
-                    $storehouse_balance=$storehouse_balance-$min_lot;
-
-                    echo"<br><font color=blue> ".$storesArrayAll[$storeId]." =>$quantity</font> $storehouse_balance-$min_lot new_balance=$new_balance 
- + hand=$min_lot
-  hand_old=".$FiledsData["division_hand"][$productId][$storeId]["NULL"]." 
-  hand_new=".$nb." ";
-
-                    $FiledsData["division_hand"][$productId][$storeId]["NULL"] += $min_lot;
-                    $data_hand[$productId][$storeId]["NULL"] +=$min_lot;
-                }
-
-                if( $new_balance<=0)  break;
-
-
-            }
-            $j++;
-        } while($new_balance>0);
-
-
-
-        foreach($data_hand[$productId] as $storeId => $arr) {
-            echo"<br>data_up=".$storesArrayAll[$storeId]."= ".$arr["NULL"]."  ";
-        }
-
-    }
-
-
-
-    if($product_counter>1) { echo"<font color=red>Выход из цикла!!!!</font>"; break;}
-
-
-}
-
-
-
-
-if($foreachSalesHand==true) {
-    insert_store_orders_fields($data_hand,"division_hand");
-    insert_store_orders_fields($data_hand,"division_auto_hand");
-
-
-}
-
-
-
-
-
-
-
-// деление по магазину
-$datau=[];
-$FiledsData["division_auto_all"]=[];
-$FiledsData["auto_purchase_formula_all"]=[];
-foreach($products as $productId =>$nameProduct) {
-    foreach($storesArrayAll as $storeId => $nameStore) {
-        // деление ручное сумма по магазину
-        $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] += $FiledsData["auto_purchase_formula"][$productId][$storeId]["NULL"];
-        $FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"] += $FiledsData["division_hand"][$productId][$storeId]["NULL"];
-        $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"] += $FiledsData["division_auto"][$productId][$storeId]["NULL"];
-        $datau["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"]."+". $FiledsData["division_hand"][$productId][$storeId]["NULL"];
-        $FiledsData["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
-        $FiledsData["division_delta"][$productId][$storeId]["NULL"]=round(100*($FiledsData["division_hand"][$productId][$storeId]["NULL"]/($FiledsData["division_auto"][$productId][$storeId]["NULL"] + 0.0001)));
-        $FiledsData["division_summ"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
-        $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
-        $FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] - $FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"];
-        $FiledsData["delta_zakup"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + 0.0001),0);
-        $FiledsData["delta_rejection"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + $FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"] + 0.0001 ),0);
-
-
-
-    }
-}
-
-
-foreach($products as $productId =>$nameProduct) {
-    $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"]-$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"] ;
-
-
-    $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"];
-
-}
-
-
-
-
-
-insert_store_orders_fields($FiledsData["division_hand_summ"],"division_hand_summ");
-insert_store_orders_fields($FiledsData["division_auto_all"],"division_auto_all");
-insert_store_orders_fields($FiledsData["division_summ"],"division_summ",$datau["division_summ"], false);
-insert_store_orders_fields($FiledsData["division_summ_all"],"division_summ_all");
-insert_store_orders_fields($FiledsData["division_delta"],"division_delta");
-insert_store_orders_fields($FiledsData["purchase_fact_difference"],"purchase_fact_difference","", false);
-insert_store_orders_fields($FiledsData["delta_zakup"],"delta_zakup","", false);
-insert_store_orders_fields($FiledsData["delta_rejection"],"delta_rejection","", false);
-insert_store_orders_fields($FiledsData["auto_purchase_formula_all"],"auto_purchase_formula_all","", false);
-insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
-
-
-
-foreach($products as $productId =>$nameProduct) {
-    foreach($storesArrayAll as $storeId => $nameStore) {
-        foreach($colorsProduct[$productId] as $color) {
-            // echo"<br>  $color ";
-            $summ=$FiledsData["division_auto"][$productId][$storeId][$color] + $FiledsData["division_hand"][$productId][$storeId][$color];
-            if(!empty($summ)) $FiledsData["division_summ"][$productId][$storeId][$color]=$summ;
-        }
-
-    }
-}
-insert_store_orders_fields($FiledsData["division_summ"],"division_summ","", false);
-
-
-//////////// остаток склада вновь считаем
-/*
-$datau=[];
-$data_storehouse_balance=[];
-foreach($products as $productId =>$nameProduct) {
-    $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-    $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ( ".$division_auto_all[$productId]."+".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]." ) ";
-    echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]."  ";
-    $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
-    $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
-}
-insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
-*/
-////////////
-
-$FiledsData["storehouse_balance"]=[];
-$datau=[];
-$data_storehouse_balance=[];
-$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=0;
-foreach($products as $productId =>$nameProduct) {
-    echo"<br><h4>$nameProduct</h4>";
-    $alld=0;
-    foreach($storesArrayAll as $storeId => $nameStore) {
-        // деление ручное сумма по магазину
-        $alld+=($FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"]);
-
-        echo"<br> $nameStore divauto=".$FiledsData["division_auto"][$productId][$storeId]["NULL"]." ".$FiledsData["division_hand"][$productId][$storeId]["NULL"]." =$alld ";
-
-
-    }
-
-    $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-$alld;
-    echo" <br> $nameProduct fact ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ".$alld."   = ".$storehouse_balance." ";
-    $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." -  $alld ";
-    echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]."  ";
-    $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
-    $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
-
-}
-insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
-
-
-// автоформула
-foreach($products as $productId =>$nameProduct) {
-    $param["sale_7day"]=0;     $param["quantity"]=0;     $param["quantity_fact"]=0;
-    foreach($storesArrayAll as $storeId => $nameStore) {
-        $param["sale_7day"] +=$FiledsData["sales_cnt"][$productId][$storeId]["NULL"];
-        $param["quantity"] +=$FiledsData["quantity"][$productId][$storeId]["NULL"];
-        $param["quantity_fact"] +=$FiledsData["quantity_fact"][$productId][$storeId]["NULL"];
-    }
-
-    echo"<br>Считаем автозаказ Продажи 7 дней ".$param["sale_7day"]." или ( ".$FiledsData["sales_cnt"][$productId]["NULL"]["NULL"].") 
-
-quantity=".$param["quantity"]." или (".$FiledsData["quantity"][$productId]["NULL"]["NULL"].")  
-
-quantity_fact=".$param["quantity_fact"]."  или (".$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"].")   ";
-
-
-
-// считаем запас на 3 дня
-    $FiledsData["auto_purchase_formula"]=[];
-    $sale_2day=ceil(3*($param["sale_7day"]/7));
-    $goods_in_transit=(int)$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
-    $quantity_fact=$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"];
-    $quantity=$FiledsData["quantity"][$productId]["NULL"]["NULL"];
-    $fact=$quantity_fact +  $goods_in_transit;
-    $fact_sale=$param["sale_7day"];// если факт продаж будет больше чем факт - перприсваеиваем
-
-    if(($fact-$fact_sale)>0) {
-        $saleweek1=$fact-$fact_sale ;
-        $zakaz= $param["sale_7day"] + $sale_2day +  $quantity - $saleweek1;
-
-        echo 'sale_7day + sale_2day +  quantity - $saleweek1 ';
-    }
-    else {
-        $zakaz= $param["sale_7day"] + $sale_2day +  $quantity ;
-
-        echo" если";
-    }
-// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
-
-    if($zakaz<0) $zakaz=0;
-//округлить до минимального лота деления
-    $ceil=ceilCoefficient($zakaz,$FiledsData["min_lot"][$productId]);
-    echo"<br><b>++Авто-заказ = $ceil (товар в пути $goods_in_transit)</b>";
-    $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"]=$ceil;
-}
-
-insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
-
-
-
-
-$data2=$db::getRows("SELECT product_id, sum(quantity) as quantity FROM balances WHERE quantity>0 AND store_id!=''  AND   product_id $whereInProductsId GROUP BY product_id");
-foreach($data2 as $row2) {
-    $FiledsData["quantity_storage"][$row2["product_id"]]["NULL"]["NULL"]=$row2["quantity"];
-}
-
-insert_store_orders_fields($FiledsData["quantity_storage"],"quantity_storage","", false);
-
-
diff --git a/erp24/views/shipment/division-print-edit.php b/erp24/views/shipment/division-print-edit.php
deleted file mode 100644 (file)
index 0664e4f..0000000
+++ /dev/null
@@ -1,491 +0,0 @@
-<?php
-
-use yii\base\DynamicModel;
-use yii\widgets\ActiveForm;
-use kartik\select2\Select2;
-
-use yii_app\helpers\PrintBlockHelper;
-
-/* @var $storeAll array */
-/* @var $products array */
-/* @var $colorsCnt array */
-/* @var $quantity_warehouseman_fact array */
-/* @var $orderId string */
-/* @var $productsMinLot array */
-/* @var $dataFieldsValues array */
-/* @var $storeGroups array */
-/* @var $filterModel DynamicModel */
-/* @var $division_name string */
-/* @var $division_date string */
-/* @var $products_colors array */
-/* @var $dataColor array */
-/* @var $dataHand array */
-
-$this->registerJsFile('/js/shipment/division-print-edit.js', ['position' => \yii\web\View::POS_END]);
-
-$storeGroupOptions = [-1 => 'Не выбран'];
-foreach ($storeGroups as $gIndex) {
-    $storeGroupOptions[$gIndex] = $gIndex;
-}
-
-$printOrientationOptions = [
-    'portrait' => 'Портретная',
-    'landscape' => 'Альбомная',
-];
-
-?>
-
-<div class="m-5">
-    <h5 class="page-title mb-0 text-primary">Деление по магазинам <?= $division_name ?> Дата деления <?= $division_date ?> id=<?= $orderId ?></h5>
-    <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
-        <div class="row">
-            <div class="col-1 text-right">Печатать цвет:</div>
-            <div class="col-1"><?= $filterForm->field($filterModel, 'printColor')->checkbox(['value' => 1, 'uncheckValue' => 0,
-                    'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
-            <div class="col-2 text-right">Печатать ручных добавок:</div>
-            <div class="col-1"><?= $filterForm->field($filterModel, 'printHand')->checkbox(['value' => '1', 'uncheckValue' => '0',
-                    'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
-            <div class="col-2 text-right">Показать столбцы итого:</div>
-            <div class="col-1"><?= $filterForm->field($filterModel, 'printSumm')->checkbox(['value' => '1', 'uncheckValue' => '0',
-                    'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
-        </div>
-        <?php PrintBlockHelper::printBlock('Выберите куст', $filterForm->field($filterModel, 'groupIndex')->widget(Select2::class, [
-            'data' => $storeGroupOptions,
-            'language' => 'ru',
-            'options' => ['placeholder' => 'Куст...'],
-            'pluginOptions' => [
-                'allowClear' => true,
-            ],
-            'pluginEvents' => [
-                'change' => 'function(e) {
-                    $("#filter-form").get(0).submit();
-                }'
-            ],
-        ])->label(false)); ?>
-        <?php PrintBlockHelper::printBlock('Ориентация', $filterForm->field($filterModel, 'printOrientation')->widget(Select2::class, [
-            'data' => $printOrientationOptions,
-            'language' => 'ru',
-            'options' => ['placeholder' => 'Ориентация...'],
-            'pluginOptions' => [
-                'allowClear' => true,
-            ],
-            'pluginEvents' => [
-                'change' => 'function(e) {
-                    $("#filter-form").get(0).submit();
-                }'
-            ],
-        ])->label(false)); ?>
-    <?php ActiveForm::end() ?>
-    <div class="col-1">
-        <button id="shipmentPrintButton" class="btn btn-primary btn-lg" onclick="printTable();">Print</button>
-    </div>
-    <div class="table-responsive">
-        <table class="table-hover zak">
-            <thead>
-                <tr class="zg">
-                    <th class="td_product">наименование</th>
-                    <th><b>мин-ый лот деления шт.</b></th>
-                    <?php foreach($storeAll as $store): ?>
-                        <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
-                            <th><b><?= $store->name ?></b></th>
-                            <?php if ($filterModel->groupIndex != -1): ?>
-                                <th style="min-width: 40px"></th>
-                            <?php endif; ?>
-                        <?php endif; ?>
-                    <?php endforeach; ?>
-                    <th><b>итого</b></th>
-                    <th><b>куплено</b></th>
-                    <th><b>разница</b></th>
-                </tr>
-            </thead>
-            <tbody>
-                <?php
-                    $colorsCounter = [];
-                    $ostatok = [];
-                ?>
-                <?php foreach($products as $productId => $productName): ?>
-                    <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
-                        <tr id="tr__<?= $productId ?>" class="trproduct">
-                            <td class="td_product producted">
-                                <span class="fs-6">
-                                    <a href="/shipment/divisionPrintEditProduct/?productId=<?= $productId ?>&id=<?= $orderId ?>"
-                                       target=new><?= $productName ?></a>
-                                </span>
-                            </td>
-                            <td><?= $productsMinLot[$productId] ?></td>
-                            <?php $divisionCnt = 0; ?>
-                            <?php foreach($storeAll as $store): ?>
-                                <?php
-                                    $value = ceil($dataFieldsValues[$productId][$store->id]["NULL"] ?? 0);
-                                    $ostatok[$productId][$store->id] = $value;
-                                    $divisionCnt += $value;
-                                    if (empty($value)) {
-                                        $value = "";
-                                    }
-                                ?>
-                                <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
-                                    <td>
-                                        <?= $value ?>
-                                        <?php if (!empty($dataHand[$productId][$store->id]['NULL']) && $filterModel->printHand == 1): ?>
-                                            <sup style="color:green; font-size:0.5rem"><?= intval($dataHand[$productId][$store->id]["NULL"]) ?></sup>
-                                        <?php endif; ?>
-                                    </td>
-                                    <?php if ($filterModel->groupIndex != -1): ?>
-                                        <td style="min-width: 40px"></td>
-                                    <?php endif; ?>
-                                <?php endif; ?>
-                            <?php endforeach; ?>
-                            <td><?= intval($divisionCnt) ?></td>
-                            <td><?= intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]) ?></td>
-                            <?php $r2 = $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] - $divisionCnt; ?>
-                            <td <?= ($r2 != 0 ? 'class="bg-danger"' : '') ?> ><?= $r2 ?></td>
-                        </tr>
-                    <?php endif; ?>
-                    <?php if ($filterModel->printColor == 1): ?>
-                        <?php if (!empty($products_colors[$productId])): ?>
-                            <?php foreach($products_colors[$productId] as $colorName): ?>
-                                <?php
-                                    $colorName = trim($colorName);
-                                    $colorAllCnt = 0;
-                                ?>
-                                <?php if (!empty($dataColor[$productId][$colorName])): ?>
-                                    <tr>
-                                        <td class="tr"><?= $colorName ?>(<?= $dataColor[$productId][$colorName] ?> шт.)</td>
-                                        <td></td>
-                                        <?php
-                                            $colorsCounter[$productId]++;
-                                            $newHand = [];
-                                        ?>
-                                        <?php foreach($storeAll as $store): ?>
-                                            <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
-                                                <?php
-                                                    $value = ceil($dataFieldsValues[$productId][$store->id][$colorName] ?? 0);
-                                                    $ostatok[$productId][$store->id] -= $value;
-                                                    $colorAllCnt += $value;
-                                                ?>
-                                                <td <?= $value % ($productsMinLot[$productId] ?? 1) != 0 ? 'class="bg-danger"' : '' ?>
-                                                        onclick="ShowInput('division_hand',
-                                                                '<?= $store->id ?>',
-                                                                '<?= $productId ?>',
-                                                                '<?= $colorName ?>',
-                                                                '<?= md5($colorName) ?>',
-                                                                '<?= $productsMinLot[$productId] ?>',
-                                                                '<?= $value ?>')"
-                                                    id="division_hand<?= $store->id ?><?= $productId ?><?= md5($colorName) ?>" >
-                                                    <?= $value ?>
-                                                </td>
-                                                <?php if ($filterModel->groupIndex != -1): ?>
-                                                    <td style="min-width: 40px"></td>
-                                                <?php endif; ?>
-                                            <?php endif; ?>
-                                        <?php endforeach; ?>
-                                        <?php if ($filterModel->printSumm == 1): ?>
-                                            <?php $difColor = $dataColor[$productId][$colorName] - $colorAllCnt; ?>
-                                            <td><?= $colorAllCnt ?></td>
-                                            <td><?= $dataColor[$productId][$colorName] ?></td>
-                                            <td <?= $difColor != 0 ? 'class="bg-danger"' : '' ?>><?= $difColor ?></td>
-                                        <?php endif; ?>
-                                    </tr>
-                                <?php endif; ?>
-                            <?php endforeach; ?>
-                        <?php endif; ?>
-                        <?php if (!empty($colorsCounter[$productId])): ?>
-                        <tr class="bg-success">
-                            <td class="tr">остаток</td>
-                            <td></td>
-                            <?php foreach($storeAll as $store): ?>
-                                <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
-                                    <?php $value = $ostatok[$productId][$store->id]; ?>
-                                    <td <?= $value < 0 ? 'class="bg-danger"' : '' ?> ><?= $value ?></td>
-                                    <?php if ($filterModel->groupIndex != -1): ?>
-                                        <td style="min-width: 40px"></td>
-                                    <?php endif; ?>
-                                <?php endif; ?>
-                            <?php endforeach; ?>
-                            <?php if ($filterModel->printSumm == 1): ?>
-                                <td></td>
-                                <td></td>
-                                <td class="bg-danger"></td>
-                            <?php endif; ?>
-                        </tr>
-                    <?php endif; ?>
-                    <?php endif; ?>
-                    <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
-                        <?php if ($filterModel->groupIndex == -1): ?>
-                            <tr class="trproduct">
-                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
-                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
-                                <?php foreach($storeAll as $store): ?>
-                                    <td class="td_product"><span class="fs-6">&nbsp;</span></td>
-                                <?php endforeach; ?>
-                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
-                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
-                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
-                            </tr>
-                        <?php endif; ?>
-                    <?php endif; ?>
-                <?php endforeach; ?>
-            </tbody>
-        </table>
-    </div>
-</div>
-
-<script>
-    function printTable() {
-        const landscape = '<?= $filterModel->printOrientation ?>' === 'landscape';
-        const css = '@page { ' + (landscape ? 'size: landscape;' : '') + ' margin: 0;  } #shipmentPrintButton, #filter-form {display: none;}' +
-            'a[href]:after { content: "" !important;}',
-            head = document.head || document.getElementsByTagName('head')[0],
-            style = document.createElement('style');
-
-        style.media = 'print';
-        style.appendChild(document.createTextNode(css));
-
-        head.appendChild(style);
-
-        window.print();
-
-        head.removeChild(style)
-    }
-</script>
-
-<style>
-    table tbody tr td {
-        border: 3px solid black !important;
-    }
-
-    table.table tbody tr:hover td {
-        background: #cdcdcd
-    }
-
-    .zak tbody tr:hover td {
-        background: #cdcdcd
-    }
-
-    .zak > thead > tr > th, .zak tr.zg th, .zak tr.zg td {
-        font-size: 0.7rem;
-        min-width: 30px;
-        text-align: center;
-        font-weight: normal;
-        max-height: 60px;
-        overflow: hidden
-    }
-
-    .zak > thead > tr > th b {
-        font-weight: normal;
-    }
-
-    .zak > :not(caption) > * > * {
-        padding: 0.05rem;
-        box-shadow: none;
-    }
-
-    .zak td.fs-5 {
-        text-align: left;
-        padding: 0.3rem 1rem;
-    }
-
-    .zak {
-        border-collapse: collapse;
-        border-spacing: 0;
-        overflow: hidden;
-    }
-
-    .zak th, .zak td {
-        border: 1px solid #e6e6e6;
-        padding: 0.1rem;
-        vertical-align: middle;
-        position: relative;
-    }
-
-    .zak td:hover:before {
-        background-color: #e3e3e3;
-        content: '';
-        height: 100%;
-        left: -5000px;
-        position: absolute;
-        top: 0;
-        width: 10000px;
-        z-index: -2;
-    }
-
-    .zak td:hover:after {
-        background-color: #cdcdcd;
-        content: '';
-        height: 10000px;
-        left: 0;
-        position: absolute;
-        top: -5000px;
-        width: 100%;
-        z-index: -1;
-    }
-
-    .zak tbody td input.form-control {
-        font-size: 0.8rem;
-        min-width: 70px;
-        max-width: 100px;
-        font-weight: bold;
-        border: 0;
-        border-radius: 0;
-        color: #333;
-        padding: 0.2rem;
-        margin: 0;
-    }
-
-    .zak tbody td input.form-control:focus {
-        border: 2px #cd0202 solid;
-        background: #ffccdb
-    }
-
-    .zak td.bg-danger, .zak td.bg-indigo, .zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo {
-        color: #fff;
-    }
-
-    table.zak thead th:not(:first-child), table.zak tr.zg th th:not(:first-child) {
-        vertical-align: bottom;
-        line-height: normal;
-    }
-
-    table.zak thead b {
-        writing-mode: vertical-rl;
-        transform: scale(-1);
-    }
-
-    table.zak tr.zg th b, table.zak tr.zg td b {
-        writing-mode: vertical-rl;
-        transform: scale(-1);
-        font-weight: normal;
-        font-size: 0.6rem;
-    }
-
-    .zak tr th .th_p_summ {
-        text-align: center;
-        font-weight: bold;
-    }
-
-    .app-content .side-app {
-        padding: 25px 0.5rem 0 0.5rem;
-    }
-
-    .zak tbody tr td.td_product, .zak td.td_product {
-        tex-align: left;
-    }
-
-    .zak td.td_product:hover {
-        background: #fff;
-    }
-</style>
-<style>
-    .zak tbody tr:hover:not(.no-hover) td {
-        background: #cdcdcd
-    }
-
-    .zak > thead > tr > th, .zak tr.zg th {
-        font-size: 0.7rem;
-        min-width: 30px;
-        max-width: 40px;
-        text-align: center;
-        font-weight: normal;
-        overflow: hidden
-    }
-
-    .zak > thead > tr > th b, .zak > thead > tr > td b {
-        font-weight: normal;
-    }
-
-    .zak > :not(caption) > * > * {
-        padding: 0.05rem;
-        box-shadow: none;
-    }
-
-    .zak td.fs-5 {
-        text-align: left;
-        padding: 0.3rem 1rem;
-    }
-
-    .zak {
-        border-collapse: collapse;
-        border-spacing: 0;
-        overflow: hidden;
-    }
-
-    .zak th, .zak td {
-        border: 1px solid #e6e6e6;
-        padding: 0.1rem;
-        vertical-align: middle;
-        position: relative;
-    }
-
-    table.zak thead th, table.zak tr.zg th th, table.zak tr.zg td td {
-        vertical-align: bottom;
-        line-height: normal;
-    }
-
-    table.zak thead b, table.zak tbody b {
-        writing-mode: vertical-rl;
-        transform: scale(-1);
-    }
-
-    table.zak tr.zg th b, table.zak tr.zg td b {
-        writing-mode: vertical-rl;
-        transform: scale(-1);
-        font-weight: normal;
-        font-size: 0.6rem;
-    }
-
-    .app-content .side-app {
-        padding: 25px 0.5rem 0 0.5rem;
-    }
-
-    .zak tbody tr td.td_product, .zak td.td_product {
-        text-align: right;
-    }
-
-    .zak td.td_product:hover {
-        background: #fff;
-    }
-
-    .zak tr td.pr, .zak tr td.ost {
-        text-align: center;
-    }
-
-    .zak tr td.pr {
-        background: #ddd
-    }
-
-    .zak tr td.ost {
-        background: #e6e6e6
-    }
-
-    .zak td {
-        text-align: center;
-        vertical-align: bottom;
-    }
-
-    .zak td.lf {
-        text-align: left;
-        background: #fff
-    }
-
-    .zak td.tr {
-        text-align: right;
-    }
-
-    .zak td, .zak thead th {
-        color: #000;
-    }
-
-    .zak tr.trproduct td {
-        font-size: 1rem;
-        font-weight: bold;
-    }
-
-    input.greener {
-        border: 2px green solid;
-    }
-
-    input.editColor {
-        width: auto;
-        max-width: 70px;
-    }
-</style>
diff --git a/erp24/views/shipment/division-print-edit2.php b/erp24/views/shipment/division-print-edit2.php
deleted file mode 100644 (file)
index d2d6848..0000000
+++ /dev/null
@@ -1,541 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-global $products;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$act='division-print-edit2';
-$modul='shipment';
-$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
-if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
-
-$OrderId=$id;
-
-
-$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
-$in=explode(",",$row["providers_arr"]);
-$status_order_id=$row["status"];
-$division_date=$row["division_date"];
-
-$k=0;
-$printColor=1;
-if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
-
-
-$printHand=0;
-if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
-
-
-$printSumm=0;
-if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
-
-
-$printPercentMatrix=0;
-if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
-
-
-
-
-$kustArray=array();
-$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
-foreach($data2 as $row2) {
-    $kustArray[$row2["parent_id"]][]=$row2["id"];
-    $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
-}
-
-$kustBackground[1]="#AFEEEE";
-$kustBackground[2]="#87CEFA";
-$kustBackground[3]="#EEE8AA";
-
-
-
-
-
-//sort($kustArray);
-
-$sortStoreId="";
-$i=0;
-foreach($kustArray as $kustId =>$massiv) {
-    foreach($massiv as $storeGuid) {
-        if($i>0) $sortStoreId .=",";
-        $sortStoreId .=$storeGuid;
-        $sortStore[]=$storeGuid;
-        $i++;
-    }
-    echo'</p>';
-}
-
-
-
-
-
-echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
-echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info  btn-sm  me-1">без цветов</a>
-
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info  btn-sm me-1 ">показать ручные добавки</a>
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info  btn-sm me-1 ">показать столбцы итого</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info  btn-sm me-1 ">показать % от матрицы в цвете</a>
-
-
-
-
-<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
-
-
-
-$data=$db::getRows("SELECT * FROM store_planogram WHERE 1");
-foreach($data as $row) {
-    if(empty($row["color"])) $row["color"]="NULL";
-    $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["min"]=$row["quantity"];
-    $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["max"]=$row["quantity_max"];
-}
-
-
-
-
-$colorSort=[];
-$data=$db::getRows("SELECT product_id, store_id, color,posit FROM store_planogram_colors_sort WHERE 1  order by product_id ASC, posit ASC");
-foreach($data as $row) $colorSort[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["posit"];
-
-
-
-$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
-foreach($da as $r) {
-    $providers[$r["id"]]=$r["name"];
-    $providers_valuta[$r["id"]]=$r["valuta"];
-}
-
-
-
-$k=0;$w="";
-$privedrs_htm="";
-foreach($in as $pid) {
-//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
-    if($k!=0) $w .=",";  $w .="'$pid'"; $k++; }
-
-$w2="";
-
-$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p 
-WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) {
-//if($k!=0) $w2 .=" OR ";
-//$w2 .="i.id_1c='".$row["id"]."'";
-    $products[$row["id"]]=$row["name"];
-    $productsMinLot[$row["id"]]=$row["min_lot"];
-    $prov[$row["id"]]=$row["provider_id"];
-    $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
-    if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
-    $k++;
-}
-
-$division=array(); //division_summ =50
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
-$ColorsCnt = [];
-$dataFiedlsValuesColorsCnt = [];
-foreach($data as $row) {
-    if(empty($row["color"])) $row["color"]="NULL";
-    if(empty($row["store_id"])) $row["store_id"]="NULL";
-    $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-    if($row["store_id"]!="NULL") {
-        $ColorsCnt[$row["product_id"]] +=$row["value"];
-        $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-$division=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
-foreach($data as $row) {
-    if(empty($row["color"])) $row["color"]="NULL";
-    if(empty($row["store_id"])) $row["store_id"]="NULL";
-    $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-    if($row["store_id"]!="NULL") {
-        $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-
-
-
-$quantity_warehouseman_fact=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
-foreach($data as $row) {
-    if(empty($row["color"])) $row["color"]="NULL";
-    if(empty($row["store_id"])) $row["store_id"]="NULL";
-    $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-
-    if($row["store_id"]=="NULL") {
-        $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
-    }
-}
-
-
-$colorPercent=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value,field_name FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and color!='' and field_name in('color_percent','division_hand')",[$OrderId]);
-foreach($data as $row) {
-    if($row["store_id"]!="NULL") {
-        if($row["field_name"]=="color_percent") $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
-        if($row["field_name"]=="division_hand") $divisionHand[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
-
-
-    }
-}
-
-
-
-echo'<div id="edit_div"></div><div class="table-responsive">
-<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
-
-$head="";
-foreach($sortStore as $storeId) {
-    echo'<th  style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
-    $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
-}
-if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
-
-echo'</tr></thead><tbody>';
-
-
-$i=0;
-foreach($products as $productId =>$nameProduct) {
-//echo $nameProduct;
-    if(!empty($ColorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
-
-        if($i==20) { echo'<tr  class="zg"><td class="td_product">наименование</td>
-<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
-
-
-            if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
-            echo'</tr>'; $i=0;    }
-
-
-        echo'<tr id="tr__'.$productId.'" class="trproduct"';
-        echo'><td class="td_product producted"><span class="fs-6"><a href="/shipment/divisionPrintEditProduct/?productId='.$productId.'&id='.$OrderId.'" target=new>'.$nameProduct.'</a></span> ';
-        if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
- onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
-        echo' </td><td>'.$productsMinLot[$productId].'</td>';
-
-        $divisionCnt=0;
-        foreach($sortStore as $storeId) {
-            $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
-            $divisionCnt=$divisionCnt + $value;
-            if(empty($value)) $value="";
-            echo'<td  class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
-
-            if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1)  echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
-            echo'</td>';
-        }
-
-        if($printSumm==1) {
-            echo'<td>'.intval($divisionCnt).'</td>';
-
-            echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
-            $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
-
-            echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
-        }
-        $colspan=count($sortStore)+1;
-        echo'</tr>';
-
-//$ostatok[$productId]=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"];
-
-        if($printColor==1) {
-//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
-            $kk=0;
-// цвета
-            foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
-                $colorName=trim($colorName);
-                $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
-                if(1)//if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
-                {
-
-
-
-                    /*
-                    echo'<tr '; if($printColor!=1) echo'style="display:none;"';
-                    echo' class="tr__'.md5($productId).' ';
-
-                    // если не завезли такой цвет
-                    if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
-
-
-                    if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
-                    echo'>
-                    <td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)  в %';
-
-
-                    echo'</td><td></td>';
-                    $colorCounter=0;
-                      foreach($sortStore as $storeId) {
-                          $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
-
-                          $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
-
-                        // if(!empty($value)) $value .="%";
-
-                          if(empty($value)) $value="";
-
-
-                          $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
-                          $newcolorcnt=$value_real*($value/100);
-
-                         // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
-
-                            $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
-                            $colorData[$productId][$storeId][$colorName2]=$colorcnt;
-
-                            $colorCounter +=$colorcnt;
-
-                          echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="'.$value_real.' -> '.$value.'%">'.$colorcnt.'';
-
-                          if(!empty($value) and $printPercentMatrix==1) echo'<br>
-                          <small style="color:green">'.$value.'%</small>';
-
-                          echo'
-                          </td>';
-                     }
-
-
-                    if($printSumm) {
-
-                    $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
-                    $znak="";
-                    if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
-
-                    $difference[$productId][$colorName]=$colorDifference;
-
-
-                    echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
-                    <td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
-
-                    }
-
-
-                    echo'</tr>';
-
-                    */
-
-
-////////////// class="bg-secondary"
-
-
-                    $colorAllcnt=0;
-                    if(!empty($dataColor[$productId][$colorName])) {
-                        echo'<tr><td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)</td><td></td>';
-                        $ColorsCounter[$productId]++;
-                        $foreachBegin=$difference[$productId][$colorName];
-                        $minLot=$productsMinLot[$productId];
-                        $newHand=[];
-                        foreach($sortStore as $storeId) {
-                            //$colorData[$productId][$storeId][$colorName2]
-                            if($colorData[$productId][$storeId][$colorName]>0 and $colorData[$productId][$storeId][$colorName]>=$minLot) {
-                                if($foreachBegin>0) {
-                                    $foreachBegin -=$minLot;
-                                    $newHand[$storeId] +=-$minLot;
-
-
-
-                                } else break;
-                            }
-
-
-                        }
-
-
-
-                        foreach($sortStore as $storeId) {
-                            $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
-
-                            if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
-
-                            $ostatok[$productId][$storeId] +=$newColorInt; //'.$newHand[$storeId].'= $(\'#input_division_hand'.$storeId.''.$productId.''.md5($colorName).'\').toggle();
-                            echo'<td><span onclick="ShowInput(\'division_hand\',\''.$storeId.'\',\''.$productId.'\',\''.$colorName.'\',\''.md5($colorName).'\',\''.$productsMinLot[$productId].'\',\''.$newColorInt.'\')"
-   id="division_hand'.$storeId.''.$productId.''.md5($colorName).'">'.$newColorInt.'</span>
- </td>';
-
-                            $colorAllcnt +=$newColorInt;
-
-                            //   <input style="display:none;" type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'division_hand\',\''.$productId.'\',\''.$storeId.'\',\''.$colorName.'\',\''.md5($colorName).'\');" class="" id="input_division_hand'.$storeId.''.$productId.''.md5($colorName).'">
-//  <sup>'.$store_planogram[$productId][$storeId][$colorName]["min"].'-'.$store_planogram[$productId][$storeId][$colorName]["max"].'</sup>
-                        }
-
-
-                        if($printSumm) {
-
-//$colorDifference=$colorCounter-$dataColor[$productId][$colorName];
-                            $znak="";
-
-
-                            $difcolor=$dataColor[$productId][$colorName]-$colorAllcnt;
-
-//if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";  '.$colorCounter.' '.$dataColor[$productId][$colorName].'
-                            echo'<td>'.$colorAllcnt.'</td><td>'.$dataColor[$productId][$colorName].'</td>
-<td '; if($difcolor!=0) echo' class="bg-danger"'; echo'>'.$difcolor.'</td>';
-
-                        }
-
-                        echo'</tr>';
-                    }
-/////////////////
-
-                }
-
-
-            }// end color
-
-
-//////////////
-
-
-            if(!empty($ColorsCounter[$productId])) {
-                echo'<tr class="bg-success"><td class="tr">остаток</td><td></td>';
-                foreach($sortStore as $storeId) {
-
-
-                    $ost=$dataFiedlsValues[$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
-                    //'.$ostatok[$productId][$storeId].'
-                    echo'<td class="';
-                    if($ost==0) echo'bg-success';
-                    elseif($ost>0) echo'bg-indigo';
-                    elseif($ost<0) echo'bg-danger';
-                    echo'">'.$ost.'</td>';
-                }
-
-
-                if($printSumm) {
-
-                    echo'<td></td><td></td>
-<td '; if($colorDifferenc1) echo' class="bg-danger"'; echo'></td>';
-
-                }
-
-                echo'</tr>';
-            }
-/////////////////
-
-
-
-
-
-        } // end if color
-
-
-
-    }
-
-
-
-}
-
-
-echo'</tbody></table></div>';
-//var onch=\'onchange="ajaxEditColor( \'\'+name_eng+\'\' , \'\'+store_id+\'\', \'\'+product_id+\'\', \'\'+color+\'\', \'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');"\';
-
-
-//   $(\'#\'+name_id).after(\'<input type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'\'+name_eng+\'\',\'\'+product_id+\'\',\'\'+store_id+\'\',\'\'+color+\'\',\'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');
-// class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'"
-$_CONFIG["jscss"] .='
-
-
-
-<script>
-
-function editz(name_eng)
-{ 
-
-alert(\' \'+name_eng+\'\');
-}
-
-
-function ajaxEditColor(name_eng,store_id,product_id,color,colormd5)
-{ 
-
-var v =$(\'#input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\').val();
-var name_id=\'input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
-
-
-
-
-$.ajax({
-       url: \'/shipment/ajaxEditFieldValue/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { id: '.$OrderId.',  
-       name_eng: name_eng, 
-       store_id: store_id,
-       product_id: product_id,
-       color: color,
-       value: v},  
-       success: function(data){  
-   $(\'#\'+name_id+\'\').after(\'<span class="okk">\'+data+\'</span>\');
-   $(\'#\'+name_id+\'\').addClass(\'greener\');
-       }
-    
-}); 
-
-setTimeout(function(){$(\'.okk\').remove();$(\'#\'+name_id+\'\').removeClass(\'greener\');}, 3000); 
-
-}
-
-
-function ShowInput(name_eng,store_id,product_id,color,colormd5,step,value) {
-var name_id=\'\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
-
-
-if($(\'#\'+name_id+\'\').html()==value) {
-$(\'#\'+name_id+\'\').html(\'<input type=number class="editColor" onchange=ajaxEditColor("\'+name_eng+\'","\'+store_id+\'","\'+product_id+\'","\'+color+\'","\'+colormd5+\'") id=input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'  name=colorHand[\'+store_id+\'][\'+product_id+\'][\'+color+\'] value="\'+value+\'" step="\'+step+\'">\');
-}
-
-}
-
-</script>
-
-<style>
-.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
-.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
-.zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak { border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
-.zak th, .zak td {     border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
-table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
-table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
-table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
-.app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
-.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
-.zak td.td_product:hover {background:#fff;}
-.zak  tr td.pr,.zak tr td.ost{text-align:center;}
-.zak  tr td.pr{background:#ddd}
-.zak  tr td.ost{background:#e6e6e6}
-.zak td{text-align:center;  vertical-align: bottom;}
-.zak td.lf{text-align:left; background:#fff}
-.zak td.tr{text-align:right;}
-.zak td, .zak thead th{color:#000;}
-.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
-
-
-input.greener{border:2px green solid;}
-input.editColor{width:auto;max-width:70px;}
-</style>';
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
-
diff --git a/erp24/views/shipment/division-print.php b/erp24/views/shipment/division-print.php
deleted file mode 100644 (file)
index a52c3c5..0000000
+++ /dev/null
@@ -1,348 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-global $products;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$act='division-print';
-$modul='shipment';
-$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
-if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
-
-$OrderId=$id;
-
-
-$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
-$in=explode(",",$row["providers_arr"]);
-$status_order_id=$row["status"];
-$division_date=$row["division_date"];
-
-$k=0;
-$printColor=1;
-if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
-
-
-$printHand=0;
-if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
-
-
-$printSumm=0;
-if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
-
-
-$printPercentMatrix=0;
-if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
-
-
-$kustArray=array();
-$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
-foreach($data2 as $row2) {
-    $kustArray[$row2["parent_id"]][]=$row2["id"];
-    $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
-}
-
-$kustBackground[1]="#AFEEEE";
-$kustBackground[2]="#87CEFA";
-$kustBackground[3]="#EEE8AA";
-
-//sort($kustArray);
-
-$sortStoreId="";
-$i=0;
-foreach($kustArray as $kustId =>$massiv) {
-    foreach($massiv as $storeGuid) {
-        if($i>0) $sortStoreId .=",";
-        $sortStoreId .=$storeGuid;
-        $sortStore[]=$storeGuid;
-        $i++;
-    }
-    echo'</p>';
-}
-
-
-
-
-
-echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
-echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info  btn-sm  me-1">без цветов</a>
-
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info  btn-sm me-1 ">показать ручные добавки</a>
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info  btn-sm me-1 ">показать столбцы итого</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info  btn-sm me-1 ">показать % от матрицы в цвете</a>
-
-
-
-
-<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
-
-
-
-$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
-foreach($da as $r) {
-    $providers[$r["id"]]=$r["name"];
-    $providers_valuta[$r["id"]]=$r["valuta"];
-}
-
-
-
-$k=0;$w="";
-$privedrs_htm="";
-foreach($in as $pid) {
-//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
-    if($k!=0) $w .=",";  $w .="'$pid'"; $k++; }
-
-$w2="";
-
-$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p 
-WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) {
-//if($k!=0) $w2 .=" OR ";
-//$w2 .="i.id_1c='".$row["id"]."'";
-    $products[$row["id"]]=$row["name"];
-    $productsMinLot[$row["id"]]=$row["min_lot"];
-    $prov[$row["id"]]=$row["provider_id"];
-    $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
-    if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
-    $k++;
-}
-
-$division=array(); //division_summ =50
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
-foreach($data as $row) {
-    if(empty($row["color"])) $row["color"]="NULL";
-    if(empty($row["store_id"])) $row["store_id"]="NULL";
-    $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-    if($row["store_id"]!="NULL") {
-        $ColorsCnt[$row["product_id"]] +=$row["value"];
-        $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-$division=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
-foreach($data as $row) {
-    if(empty($row["color"])) $row["color"]="NULL";
-    if(empty($row["store_id"])) $row["store_id"]="NULL";
-    $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-    if($row["store_id"]!="NULL") {
-        $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-
-
-
-$quantity_warehouseman_fact=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
-foreach($data as $row) {
-    if(empty($row["color"])) $row["color"]="NULL";
-    if(empty($row["store_id"])) $row["store_id"]="NULL";
-    $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-
-    if($row["store_id"]=="NULL") {
-        $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
-    }
-}
-
-
-$colorPercent=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and color!='' and field_name='color_percent'",[$OrderId]);
-foreach($data as $row) {
-    if($row["store_id"]!="NULL") {
-        $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-    }
-}
-
-
-
-echo'<div class="table-responsive">
-<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
-
-$head="";
-foreach($sortStore as $storeId) {
-    echo'<th  style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
-    $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
-}
-if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
-
-echo'</tr></thead><tbody>';
-
-
-$i=0;
-foreach($products as $productId =>$nameProduct) {
-//echo $nameProduct; !empty($ColorsCnt[$productId]) and
-    if($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
-
-        if($i==20) { echo'<tr  class="zg"><td class="td_product">наименование</td>
-<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
-
-
-            if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
-            echo'</tr>'; $i=0;    }
-
-
-        echo'<tr id="tr__'.$productId.'" class="trproduct"';
-        echo'><td class="td_product producted"><span class="fs-6">'.$nameProduct.'</span> ';
-        if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
- onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
-        echo' </td><td>'.$productsMinLot[$productId].'</td>';
-
-        $divisionCnt=0;
-        foreach($sortStore as $storeId) {
-            $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
-            $divisionCnt=$divisionCnt + $value;
-            if(empty($value)) $value="";
-            echo'<td  class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
-
-            if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1)  echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
-            echo'</td>';
-        }
-
-        if($printSumm==1) {
-            echo'<td>'.intval($divisionCnt).'</td>';
-
-            echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
-            $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
-
-            echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
-        }
-        $colspan=count($sortStore)+1;
-        echo'</tr>';
-
-
-
-        if($printColor==1) {
-//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
-            $kk=0;
-// цвета
-            foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
-                $colorName=trim($colorName);
-                $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
-                if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
-                {
-
-
-
-
-                    echo'<tr '; if($printColor!=1) echo'style="display:none;"';
-                    echo' class="tr__'.md5($productId).' ';
-
-// если не завезли такой цвет
-                    if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
-
-
-                    if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
-                    echo'>
-<td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)  в %';
-
-
-                    echo'</td><td></td>';
-                    $colorCounter=0;
-                    foreach($sortStore as $storeId) {
-                        $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
-
-                        $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
-
-                        // if(!empty($value)) $value .="%";
-
-                        if(empty($value)) $value="";
-
-
-                        $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
-                        $newcolorcnt=$value_real*($value/100);
-
-                        // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
-
-                        $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
-
-                        $colorCounter +=$colorcnt;
-
-                        echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="нужно поедлить  '.$value_real.' '.$value.'%">'.$colorcnt.'';
-
-                        if(!empty($value) and $printPercentMatrix==1) echo'<br>
-      <small style="color:green">'.$value.'%</small>';
-
-                        echo'
-      </td>';
-                    }
-
-
-                    if($printSumm) {
-
-                        $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
-                        $znak="";
-                        if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
-
-
-                        echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
-<td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
-
-                    }
-
-
-                    echo'</tr>';
-
-                }
-
-
-            }// end color
-        } // end if color
-
-
-
-    }
-
-
-
-}
-
-
-echo'</tbody></table></div>';
-
-
-
-$_CONFIG["jscss"] .='
-<style>
-.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
-.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
-.zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak { border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
-.zak th, .zak td {     border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
-table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
-table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
-table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
-.app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
-.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
-.zak td.td_product:hover {background:#fff;}
-.zak  tr td.pr,.zak tr td.ost{text-align:center;}
-.zak  tr td.pr{background:#ddd}
-.zak  tr td.ost{background:#e6e6e6}
-.zak td{text-align:center;  vertical-align: bottom;}
-.zak td.lf{text-align:left; background:#fff}
-.zak td.tr{text-align:right;}
-.zak td, .zak thead th{color:#000;}
-.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
-</style>';
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
diff --git a/erp24/views/shipment/division.php b/erp24/views/shipment/division.php
deleted file mode 100644 (file)
index 0a4083a..0000000
+++ /dev/null
@@ -1,1630 +0,0 @@
-<?php
-
-use yii\helpers\ArrayHelper;
-use yii\db\Expression;
-use yii_app\records\AdminGroup;
-use yii_app\records\Products1c;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrders;
-use yii_app\records\ShipmentProviders;
-use yii_app\records\Products1cOptions;
-use yii_app\records\StoreOrdersItem;
-use yii_app\records\StoreOrdersPrices;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StoreOrdersColors;
-use yii_app\records\Sales;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-
-//include"templates/top.php";
-
-global $products;
-$act='division';
-$modul='shipment';
-$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
-//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1  or id=10");
-$storesAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
-
-$data3 = StoreOrdersStatuses::find()->asArray()->all();
-//$data3=$db::getRows("SELECT * FROM store_orders_statuses");
-foreach($data3 as $row) {
-    $store_orders_statuses[$row["id"]]=$row["name"];
-    $statuses_groups[$row["id"]]=explode(",",$row["groups"]);
-    $statuses_stores_show[$row["id"]]=$row["stores_show"];
-    $statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
-    $status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
-
-}
-
-$group_id=$_SESSION["group_id"];
-
-global $order_id;
-
-if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
-
-$OrderId=$id;
-
-global $status_order_id;
-
-$row = StoreOrders::find()->select(['name', 'id', 'providers_arr', 'status', 'DATE_FORMAT(date_start, \'%Y-%m-%d\') as date_start', 'parent_id'])
-    ->where(['id' => $id])->asArray()->one();
-//$row=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
-$in=explode(",",$row["providers_arr"]);
-$status_order_id=$row["status"];
-$k=0;
-$where="";
-foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
-    if(!empty($guid)) {
-        if($k!=0) $where .=" OR ";
-        $where .=" id='$guid' ";
-        $k++;
-    }
-}
-
-if(!empty($where)) $where =" AND ( $where )";
-
-
-//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
-$stores = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
-    ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' $where AND view='1' order by name ASC");
-
-$kustArray=array();
-$data2 = Products1c::find()->select(['parent_id', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
-    ->andWhere(['!=', 'parent_id', ''])->orderBy(['parent_id' => SORT_ASC, 'name' => SORT_ASC])->asArray()->all();
-//$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
-foreach($data2 as $row2) {
-    $kustArray[$row2["parent_id"]][]=$row2["id"];
-    $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
-}
-
-$kustBackground[1]="#AFEEEE";
-$kustBackground[2]="#87CEFA";
-$kustBackground[3]="#EEE8AA";
-
-
-
-//sort($kustArray);
-
-$sortStoreId="";
-$i=0;
-foreach($kustArray as $kustId =>$massiv) {
-// echo"<p> Куст $kustId = ";
-    foreach($massiv as $storeGuid) {
-        //  echo '<span class="btn btn-sm btn-info m-2"> '.$storesAll[$storeGuid]. '</span>';
-        if($i>0) $sortStoreId .=",";
-        $sortStoreId .=$storeGuid;
-        $sortStore[]=$storeGuid;
-        $i++;
-    }
-    echo'</p>';
-}
-
-
-
-
-
-echo'<h1 class="page-title mb-0 text-primary">Остаток склада '.$row["name"].' id='.$row["id"].'
-</h1>
-<span class="btn">'. $store_orders_statuses[$status_order_id] .' </span>  ваша роль <b>'.$roles[$_SESSION["group_id"]].'</b>
-
-<div id="admin__online"></div>
-';
-
-$w="";
-
-$da = ShipmentProviders::find()->select(['id', 'name', 'valuta'])->asArray()->all();
-//$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
-foreach($da as $r) {
-    $providers[$r["id"]]=$r["name"];
-    $providers_valuta[$r["id"]]=$r["valuta"];
-}
-
-
-
-$k=0;
-$privedrs_htm="";
-foreach($in as $pid) {
-    $privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
-    if($k!=0) $w .=" OR";  $w .=" o.provider_id='$pid'"; $k++; }
-//echo'<div class="row"><div class="col-12">'.$privedrs_htm.'</div></div>';
-
-$w2="";
-
-$data2 = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'o.min_lot'])
-    ->innerJoin('products_1c p', 'p.id = o.id')->where(['in', 'o.provider_id', $in])
-    ->orderBy(['o.provider_id' => SORT_ASC, 'p.name' => SORT_ASC])->asArray()->all();
-//$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
-//WHERE ($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) {
-    if($k!=0) $w2 .=" OR ";
-    $w2 .="i.id_1c='".$row["id"]."'";
-    $products[$row["id"]]=$row["name"];
-    $productsMinLot[$row["id"]]=$row["min_lot"];
-    $prov[$row["id"]]=$row["provider_id"];
-    $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
-    if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
-    $k++;
-}
-
-$division=array();
-$division_prod = [];
-$data = StoreOrdersItem::find()->select(['division_fact as division_fact', 'store_id', 'product_id'])->where(['order_id' => $OrderId])
-    ->andWhere(['!=', 'store_id', ''])->asArray()->all();
-//$data=$db::getRows("SELECT division_fact as division_fact,store_id,product_id FROM store_orders_item WHERE order_id=? AND store_id!=''",[$OrderId]);
-foreach($data as $row) {
-    $division[$row["product_id"]][$row["store_id"]]=(int)$row["division_fact"];
-
-    $division_prod[$row["product_id"]] +=(int)$row["division_fact"];
-
-}
-
-
-// quantity_purchase_summ AND division_fact>0 or (quantity_purchase_summ>0 and division_fact='0')
-
-$data = StoreOrdersPrices::find()->select(['sum(quantity_warehouseman_fact) as quantity_warehouseman_fact', 'product_id', 'sum(quantity_purchase_summ) as quantity_purchase_summ'])
-    ->where(['order_id' => $OrderId])->groupBy(['product_id'])->asArray()->all();
-//$data=$db::getRows("SELECT sum(quantity_warehouseman_fact) as quantity_warehouseman_fact, product_id,
-//sum(quantity_purchase_summ) as quantity_purchase_summ FROM store_orders_prices WHERE order_id=? group by product_id",[$OrderId]);
-$quantity_warehouseman_fact = [];
-$products_no = [];
-foreach($data as $row) {
-    $quantity_warehouseman_fact[$row["product_id"]]=$row["quantity_warehouseman_fact"];
-    if($row["quantity_purchase_summ"]>0 and empty($division_prod[$row["product_id"]])) {
-        $products_no[$row["product_id"]]=$products[$row["product_id"]];
-        $products_quantity_purchase_summ[$row["product_id"]]=$row["quantity_purchase_summ"];
-    }
-
-
-}
-
-$data = StoreOrdersItem::find()->select(['sum(division_fact) as division_fact', 'product_id'])->where(['order_id' => $OrderId])
-    ->groupBy(['product_id'])->asArray()->all();
-//$data=$db::getRows("SELECT sum(division_fact) as division_fact,product_id FROM store_orders_item WHERE order_id=? group by product_id",[$OrderId]);
-foreach($data as $row) {
-    $QuantitySumm[$row["product_id"]]=$row["division_fact"];
-
-}
-
-global $quantityPurchase;
-$data = StoreOrdersItem::find()->select(['product_id', 'store_id', 'quantity_purchase'])->where(['order_id' => $OrderId])->asArray()->all();
-//$data=$db::getRows("SELECT product_id, store_id, quantity_purchase FROM store_orders_item WHERE order_id=?",[$OrderId]);
-$quantityPurchaseAll = [];
-foreach($data as $row) {
-    $quantityPurchase[$row["product_id"]][$row["store_id"]]=$quantityPurchase[$row["product_id"]][$row["store_id"]]+$row["quantity_purchase"];
-    $quantityPurchaseAll[$row["product_id"]]=$quantityPurchaseAll[$row["product_id"]]+$row["quantity_purchase"];
-
-
-}
-
-//print_r($products_no);
-
-//$products=array_merge($products,$products_no);
-foreach($products as $productId =>$nameProduct) {
-
-    if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
-
-        $ostatok=$quantity_warehouseman_fact[$productId]-$QuantitySumm[$productId];
-        if($ostatok>0) { // echo'<br> '.$nameProduct.'= '. $QuantitySumm[$productId] .' ostatok='.$ostatok.' ';
-            $ostatokReal[$productId]=$ostatok;  }
-        // else echo'<br> Деление в минус '.$nameProduct.'= '. $QuantitySumm[$productId].' ostatok='.$ostatok.' ';
-
-    }
-}
-
-$fieldIdThisDivision=22;
-
-
-if(!empty($_REQUEST["fieldIdThisDivision"])) $fieldIdThisDivision=(int)$_REQUEST["fieldIdThisDivision"];
-
-$_SESSION["fieldIdThisDivision"]=$fieldIdThisDivision;
-
-$data = StoreOrdersFields::find()->select(['name_full', 'description', 'name_eng', 'sql_table_values'])
-    ->where(['id' => $fieldIdThisDivision])->asArray()->one();
-//$data=$db::getRow("SELECT name_full, description, name_eng,sql_table_values FROM `store_orders_fields` WHERE id=?",[$fieldIdThisDivision]);
-
-$arrField=["20"=>"Деление закупшик", "22"=>"Деление кустовых Пришло по фактку кладовщик ", 4=>"Заказ кустовых" ];
-foreach($arrField as $fid =>$name){
-    echo'<a href="/'.$modul.'/'.$act.'/?id='.$id.'&fieldIdThisDivision='.$fid.'" class="btn btn';
-    if($fid==$fieldIdThisDivision) echo'-success'; else echo'-info';
-    echo' m-2">'.$name.'</a>';
-
-}
-
-
-echo' <br> <b>'.$data["name_full"].'</b> '.$data["description"].' <b>'.$data["sql_table_values"].' '.$data["name_eng"].' </b>  ';
-
-global $dataColorsValuesAll,$dataColorsValuesStores;
-//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
-$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'quantity', 'store_id'])
-    ->where(['order_id' => $OrderId])->andWhere(['not in', 'store_id', ['undefined', '']])
-    ->andWhere(['in', 'field_id', ['4', "" . $fieldIdThisDivision, '17', '20', '22']])
-    ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
-    ->asArray()->all();
-//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
-//and (field_id='4' or field_id='$fieldIdThisDivision' or field_id='17' or field_id='20' or field_id='22')  group by product_id,provider_id, store_id, color, field_id",[$OrderId]);
-foreach($data5 as $row5) {
-
-
-    if($row5["store_id"]!=0) $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]+$row5["quantity"];
-
-
-    $dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
-}
-
-
-
-
-//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
-$data5 = StoreOrdersColors::find()->select(['product_id', 'color', 'field_id', 'quantity', 'store_id'])->where(['order_id' => $OrderId])
-    ->andWhere(['not in', 'store_id', ['undefined', '']])->andWhere(['field_id' => "" . $fieldIdThisDivision])
-    ->groupBy(['product_id', 'provider_id', 'store_id', 'color'])
-    ->asArray()->all();
-//$data5=$db::getRows("SELECT product_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
-//and (field_id='$fieldIdThisDivision')  group by product_id,provider_id, store_id, color",[$OrderId]);
-foreach($data5 as $row5) {
-    $ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
-}
-
-
-//print_r($dataColorsValuesAll);
-
-
-
-
-$dataColorsValuesAll=array();
-$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'sum(quantity) as quantity', 'store_id'])
-    ->where(['order_id' => $OrderId])
-    ->andWhere(['store_id' => '0'])
-    ->andWhere(['field_id' => "" . $fieldIdThisDivision])
-    ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
-    ->asArray()->all();
-//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, sum(quantity) as quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined'
-//and store_id='0'
-//and (field_id='$fieldIdThisDivision')  group by product_id,provider_id, store_id, color,field_id",[$OrderId]);
-foreach($data5 as $row5) {
-    $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$row5["quantity"];
-}
-
-global $storesArr,$whereStores,$productsArrayStores;
-$storesArr = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->andWhere(['not in', 'name', ['09 Доставка букетов', '19 Пр. Октября 9а']])->all(), 'id', 'name');
-//$storesArr=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1' AND name!='09 Доставка букетов' AND name!='19 Пр. Октября 9а'");
-$whereStores=" AND ( store_id_1c='-99' ";
-foreach($storesArr as $storeIdGuid => $nameStore) $whereStores .=" or s.store_id_1c='$storeIdGuid' ";
-$whereStores .=" ) ";
-
-$whereProducts=" AND ( p.product_id='-999' ";
-foreach($products as $productId =>$nameProduct) {
-    $whereProducts .=" or p.product_id='$productId' ";
-}
-$whereProducts .=" )";
-
-$data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c', 'p.product_id'])
-    ->innerJoin('sales_products p', 's.id = p.check_id')
-    ->where(['s.operation' => 'Продажа'])
-    ->andWhere(['in', 'p.product_id', array_keys($products)])
-    ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
-    ->groupBy(['p.product_id', 's.store_id_1c'])
-    ->orderBy(['squantity' => SORT_DESC])
-    ->asArray()->all();
-//$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id
-//FROM sales as s, sales_products as p
-//WHERE s.id=p.check_id AND s.operation='Продажа' $whereProducts  AND s.date>=NOW() - INTERVAL 14 day $whereStores  group BY p.product_id, s.store_id_1c order by
-//squantity DESC");
-foreach($data as $row){
-    $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
-
-}
-
-
-
-
-//функция автораспределения количество штук заказнных магазином , фактический приход по товару, сколкьо заказано кустовым, минимальный лот
-function autoDivision($productId,$quantityArr,$formulaFact,$formulaPurchase,$formulaMinLot) {
-    global $db,$storesArr,$whereStores,$productsArrayStores,$quantityPurchase;
-    /*
-    Распределение по делению.
-
-    Если заказ меньше Минимальный лот деления
-    Первый цикл подсчета полный цикл считаем в процентном соотношении доли заказа кустовым к общему приходу
-
-    Например Заказ =100 А пришло 65 штук
-    Последний цикл по рейтингу продаж по этой позиции за прошедшую неделю
-    По этой позиции
-    Если заказ больше то заказ распределяется 100%
-    Подсказка по пронципе продаж начисления %
-    */
-
-
-
-
-    /*
-    $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
-    FROM sales as s, sales_products as p
-    WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores  group BY p.product_id, s.store_id_1c order by
-    squantity DESC",[$productId]);
-    */
-
-    $allQuantity=0;
-    foreach($quantityArr as $quantity) $allQuantity +=$quantity;
-
-
-    $txt="<h3>Сортировка по магазинам по этому товару</h3>
-<p>Продажи за последнюю неделю в шт.</p>";
-    $massivStoreSort=array();
-    $i=1;
-
-
-    if($formulaPurchase>=$formulaFact) $allQuantity=$formulaFact;
-    if($formulaPurchase<=$formulaFact) $allQuantity=$formulaPurchase;
-
-    $txt .="Считаем по $allQuantity ";
-
-    $txt .=" $allQuantity   заказ кустовых $formulaPurchase ";
-    /*
-    foreach($data as $row){
-    $txt .="<tr><td>$i)</td><td>".$storesArr[$row["store_id_1c"]]."</td><td>".(int)$row["squantity"]." шт.</td></tr>";
-    $massivStoreSort[]=$row["store_id_1c"];
-    $massivStoreSortQuantity[$row["store_id_1c"]]=(int)$row["squantity"];
-
-    $i++;
-    }
-    */
-    if($formulaFact>=$formulaPurchase) $percentFact=1; else $percentFact=$formulaFact/$formulaPurchase;
-
-    $percentFact=round($percentFact,4);
-
-    $txt .=" <br>коэфициент умножения  $percentFact  -умноаем каждый заказ на этот коэф
-
-<table><tbody>   ";
-
-    $onclick="";
-
-    $q_all=0;
-    foreach($quantityPurchase[$productId] as $store_id_1c => $quantity){
-
-//$percent=round($quantityArr[$store_id_1c]*$percentFact/$allQuantity,3);
-
-
-        $quantity_zakaz=round($quantityArr[$store_id_1c]*$percentFact);
-        $quantity_zakaz_round=ceilCoefficient($quantity_zakaz,$formulaMinLot);
-
-//$roundPBase=ceilCoefficient($formulaFact*$percent*$percentFact,$formulaMinLot);
-//if($percent>0 and $roundP==0 and $roundPAll<$formulaFact) $roundP=$formulaMinLot;
-        $q_all +=$quantityArr[$store_id_1c];
-
-        if($roundPBaseAll<$allQuantity) {
-            $roundPBaseAll +=$quantity_zakaz_round;
-
-        }
-
-        $txt .="<tr><td>$i)</td><td>".$storesArr[$store_id_1c]."</td><td>".(int)$quantity." шт.</td>
-<td>заказ ".$quantityArr[$store_id_1c]."</td>
-<td>".$percent."</td><td>$formulaFact</td>
-<td> $quantity_zakaz -> $quantity_zakaz_round </td></tr>";
-//$massivStoreSort[]=$store_id_1c;
-//$massivStoreSortQuantity[$store_id_1c]=(int)$quantity;
-
-
-        $autoReccomend[$store_id_1c]=$quantity_zakaz_round;
-
-        $onclick .='$(\'#autodivision_'.$productId.''.$store_id_1c.'\').text(\''.$quantity_zakaz_round.'\');';
-
-
-        $i++;
-    }
-    $txt .="<tr><td></td><td>Итого</td><td></td><td>$q_all</td><td></td><td></td><td>$roundPBaseAll</td></tr>";
-    $do=1;
-    if($roundPBaseAll==$q_all) $do=0;
-
-    $txt .="</tbody></table>всего заказано $allQuantity По факту $formulaFact = процент $percentFact% Всего базово на заказ $roundPAll
-
-
-<span class=\"btn btn-warning\" onclick=\"$onclick\">установить</span>
-
-";
-
-
-
-
-    $thiasQuantity=0;
-    $massivAddQuantity=array();
-    $data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c'])
-        ->innerJoin('sales_products p', 's.id = p.check_id')
-        ->where(['s.operation' => 'Продажа'])
-        ->andWhere(['p.product_id' => $productId])
-        ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
-        ->andWhere(['in', 's.store_id_1c', array_keys($storesArr)])
-        ->groupBy(['p.product_id', 's.store_id_1c'])
-        ->orderBy(['squantity' => SORT_DESC])
-        ->asArray()->all();
-//    $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
-//FROM sales as s, sales_products as p
-//WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores  group BY p.product_id, s.store_id_1c order by
-//squantity DESC",[$productId]);
-    foreach($data as $row){
-        $txt .="<br> $i) ".$storesArr[$row["store_id_1c"]]." ".(int)$row["squantity"]." шт. ";
-        $storeArr[$row["store_id_1c"]]=$row["squantity"];
-        $i++;
-    }
-
-
-
-
-// если первый цикл совсем ничего не начислил
-    if($roundPBaseAll<$allQuantity) {
-        $txt .="<br>
-Начинаем начисление по кругу отталкиваясь от продаж ++ $allQuantity ++";
-
-        $formulaFactForeach=$allQuantity;
-
-        for($kk=0;$kk<=$formulaFactForeach;$kk++) {
-            if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";  break;   }
-
-            foreach($storeArr as $storeId =>$q) {
-                if($allQuantity>=($thiasQuantity+$formulaMinLot)) {
-
-                    $massivAddQuantity[$storeId] +=$formulaMinLot;
-                    $thiasQuantity +=$formulaMinLot;
-
-//$txt .="<br> 77777+++ ".$storesArr[$storeId]." = ".$massivAddQuantity[$storeId]." шт.";
-                    $formulaFactForeach -=$formulaMinLot;
-                }
-
-            }
-        }
-
-        echo"<br>Цикл начисления";
-        $onclick="";
-        foreach($massivAddQuantity as $storeId => $q) {
-            $txt .="<br> +++ ".$storesArr[$storeId]." = ".(int)$q." шт.";
-            $onclick .='$(\'#autodivision_'.$productId.''.$storeId.'\').text(\''.$q.'\')';
-
-        }
-
-        $txt .="<br>Итого по второму кругу= ".(int)$thiasQuantity." шт.
-
-
-
-
-";
-
-
-    }
-// конец цикла
-
-    $thiasQuantity=0;
-    $massivAddQuantity=array();
-// распределяем излишки согласно процентам
-    if($formulaFact>$formulaPurchase) {
-
-        $izlishek=$formulaFact-$formulaPurchase;
-
-        $txt .="<br>Начинаем начисление  излишков по кругу отталкиваясь от продаж";
-
-
-        $formulaFactForeach=$izlishek;
-
-        for($kk=0;$kk<=$formulaFactForeach;$kk++) {
-            if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";  break;   }
-
-            foreach($storeArr as $storeId =>$q) {
-                if($izlishek>=($thiasQuantity+$formulaMinLot)) {
-                    $massivAddQuantity[$storeId] +=$formulaMinLot;
-                    $thiasQuantity +=$formulaMinLot;
-                    $formulaFactForeach -=$formulaMinLot;
-                }
-
-            }
-        }
-
-
-
-
-        //  echo"<br>Цикл начисления";
-        foreach($massivAddQuantity as $store_id_1c => $squantity) {
-
-            if(($allRecommendeted+$squantity)<=$formulaFact) {
-                $allRecommendeted +=$squantity;
-                $txt .="<br> +++ ".$storesArr[$store_id_1c]." = ".(int)$squantity." шт.";
-                $autoReccomend[$store_id_1c] +=$squantity;
-            }
-
-
-        }
-        $txt .="<br>Итого по третьему кругу= ".(int)$thiasQuantity." шт.";
-    }
-// конец цикла
-    $onclick="";
-    $AutoAll=0;
-    $txt .="<br>Рекомендованое распределение с излишками";
-    foreach($autoReccomend as $storeId => $count) {
-        if($AutoAll<$formulaFact and $formulaFact>=($AutoAll+$count)) {
-            $AutoAll +=$count;
-            $txt .="<br>+++ ".$storesArr[$storeId]." = ".(int)$count." шт.";
-            $onclick .='$(\'#autonew_'.$productId.''.$storeId.'\').text(\''.$count.'\');';
-
-        }
-
-    }
-    $txt .="<br>Итого распределено= ".(int)$AutoAll." шт. 
-  
-  
-  <span class=\"btn btn-warning\" onclick=\"$onclick\">установить с делением излишков</span>
-";
-
-
-    $Purchase=0;
-    /*
-    foreach($storesArr as $storeId =>$storeName)
-    {
-     if(!in_array($storeId,$storesArr))   $massivStoreSort[]=$storeId;
-     if(!empty($autoQuantity[$storeId])) $Purchase=1;
-    }
-
-    $autoQuantity=array();
-    $print=1;
-    $formulaFactForeach=$formulaFact;
-
-    if($print==1) $txt .="<br>formulaFactForeach =$formulaFactForeach";
-    $j=1;
-
-
-
-
-    for($kk=0;$kk<=$formulaFactForeach;$kk++) {
-
-
-
-    if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";  break;   }
-     if($print==1)  $txt .="<br>++Цикл =$formulaFactForeach";
-
-
-
-    foreach($massivStoreSortQuantity as $storeId =>$q) {
-
-
-    //$txt .="<br>!!!!!! $formulaFactForeach -- minlot=$formulaMinLot---q=".$autoQuantity[$storeId]."------ ";
-
-
-
-
-    $ost=$formulaFact-$autoQuantityAll;
-
-    if($print==1)  $txt .="<br>$j )  ".$storesArr[$storeId]." (fact=$formulaFact => $ost)  ";
-    $j++;
-
-
-    //если товар не заказ кустовым то пропускаем магазин
-    if(empty($quantityArr[$storeId])) {   $txt .=" -- пропускаем ";     continue; }
-
-
-
-
-
-    //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
-    if($autoQuantityAll>$formulaFact) {  if($print==1)  $txt .="<br>=-----выход из цикла";   break; }
-
-    //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
-    if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot and ($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase))) {
-    // если общее количество товара все еще меньше факта то выполняем
-       if(($autoQuantityAll+$formulaMinLot)<=$formulaFact) {
-        if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
-        $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
-        $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
-        $formulaFactForeach -=$formulaMinLot;
-        if($print==1)   $txt .=" all=$autoQuantityAll+  $formulaMinLot =>continue0";
-        continue;
-        } else {
-
-
-            if($formulaFact>=$formulaMinLot) {
-                  $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
-                  $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
-                  $formulaFactForeach -=$formulaMinLot;
-                    if($print==1)   $txt .=" continue33 all=".$autoQuantity[$storeId]." qu=".$autoQuantity[$storeId]." formulaFactForeach=$formulaFactForeach ";
-
-                   continue;
-           }
-
-
-
-
-        }
-       }
-
-
-    }
-
-    //если остаток меньше минимального лота
-    if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
-    if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
-     $autoQuantity[$storeId] +=$formulaFactForeach;
-     $autoQuantityAll +=$formulaFactForeach;
-     $formulaFactForeach -=$formulaFactForeach;
-     if($print==1)  $txt .=" all2=$autoQuantityAll+  $formulaFactForeach BREAK ";
-     break;
-
-    }
-    }
-
-
-    //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
-    if($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase)) {
-
-
-      //  $formulaFactForeach -=$formulaMinLot;
-
-        if($print==1)   $txt .=" minlot=111";
-
-
-        }// вычитаем из счетчика цикла - минимальный лот
-    if($print==1)  $txt .="   -> ".$autoQuantity[$storeId] ." шт остаток =$formulaFactForeach  all=$autoQuantityAll+  formulaFactForeach=$formulaFactForeach ";
-
-    if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";
-    break; } // выходим из цикла - задача выполнена
-    }
-
-    }
-
-    $ostatky=$formulaFact-$autoQuantityAll;
-    if(($formulaFact-$autoQuantityAll)>0) if($print==1) $txt .="<br><font color=red>Остатки распределены между теми кто заказал но есть остатки $ostatky</font>";
-
-
-
-    //////////////
-
-    $formulaFactForeach=$ostatky;
-    $autoQuantityAllNew=0;
-    if($print==1) $txt .="<br><h3>Распределяем остатки</h3>formulaFactForeach =$formulaFactForeach";
-    $j=1;
-    for($kk=0;$kk<=$formulaFactForeach;$kk++) {
-    if($formulaFactForeach<=0) break;
-     if($print==1)  $txt .="<br>++Цикл =$formulaFactForeach";
-    foreach($massivStoreSortQuantity as $storeId =>$q) {
-
-    if($print==1)  $txt .="<br>$j )  ".$storesArr[$storeId]."  ";
-    $j++;
-
-
-    //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
-    if($autoQuantityAllNew>=$ostatky) break;
-
-    //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
-    if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot) {
-    // если общее количество товара все еще меньше факта то выполняем
-       if(($autoQuantityAllNew+$formulaMinLot)<$formulaFact) {
-
-        $autoQuantityAllNew +=$formulaMinLot; // обновляем счетчик общего количества
-        $autoQuantityNew[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
-        if($print==1)   $txt .=" all=$autoQuantityAllNew+  $formulaMinLot ";
-
-       }
-
-
-    }
-
-    //если остаток меньше минимального лота
-    if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
-
-     $autoQuantityNew[$storeId] +=$formulaFactForeach;
-     $autoQuantityAllNew +=$formulaFactForeach;
-
-    }
-
-
-    //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
-    $formulaFactForeach -=$formulaMinLot; // вычитаем из счетчика цикла - минимальный лот
-    if($print==1)  $txt .="   -> ".$autoQuantityNew[$storeId] ." шт остаток =$formulaFactForeach";
-    if($formulaFactForeach<=0) continue; // выходим из цикла - задача выполнена
-    }
-
-    }
-    /////////////
-
-
-
-
-    if($print==1) $txt .="<br><br>==================
-    <h6>Результат</h6>";
-
-    foreach($autoQuantity as $q =>$s) {
-    if($print==1)  $txt .="<br>".$storesArr[$q]." =>$s";
-    }
-    */
-
-    if($print==1) $txt .="<br>Итого $autoQuantityAll шт.";
-    $array["auto"]=$autoQuantity;
-    $array["text"]=$txt;
-    $array["new"]=$autoQuantityNew;
-
-
-    return $array;
-
-
-
-}
-echo"<br><b>Товары которые были заказны кустовыми но не пришли:</b> было заказано ";
-foreach($products_no as $productId => $cnt) echo"".$products[$productId]."=$cnt шт.,   ";
-
-echo'<br><span class="btn btn-info m-3" onclick="$(\'.no_products\').show()">показать товары которые не пришли</span>';
-
-echo'<span class="btn btn-blue m-3" onclick="load_devision_ajax();">обновить данные</span>';
-
-
-
-echo'<div class="table-responsive">
-<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>';
-
-$head="";
-foreach($sortStore as $storeId) {
-    echo'<th  style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></th>';
-    $head .='<td style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></td>';
-}
-echo'</tr></thead><tbody>';
-
-$i=0;
-foreach($products as $productId =>$nameProduct) {
-// or !empty($products_no[$productId])
-    if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
-
-        if($i==20) { echo'<tr  class="zg"><td class="td_product">наименование</td><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>'.$head.'</tr>'; $i=0;    }
-        echo'<tr id="tr__'.$productId.'"';
-        // style="display:none;"
-        if(!empty($products_no[$productId])) echo' class="bg-warning no_products"';
-        else $i++;
-        echo'><td class="td_product producted" id-data="'.$productId.'">'.$nameProduct.' 
- <span class="btn btn-white btn-sm" onclick="showKust(\''.$productId.'\');$(this).remove();">+ куст</span>';
-        if(!empty($products_colors[$productId])) echo' <span class="btn btn-warning btn-sm" onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>
-
- ';
-        echo' <span onclick="$(\'#tr_'.md5($productId).'\').toggle()" class="btn btn-warning btn-sm">+ распределение</span></td>
- <td class="pr" id="quantity_warehouseman_fact'.$productId.'" title="'.$quantity_warehouseman_fact[$productId].'">'.$quantity_warehouseman_fact[$productId].'</td>
-  <td class="summa_kust summa_kust_'.$productId.'" id="summa_kust_'.$productId.'">'.$quantityPurchaseAll[$productId].'</td>
- <td class="ost ost_product_'.$productId.'" id="ost_product_'.$productId.'">0</td>
-<td>'.$productsMinLot[$productId].'</td>';
-
-
-        foreach($sortStore as $storeId) {
-            $quatityArr[$storeId]=$quantityPurchase[$productId][$storeId];
-            //  $formulaPurchaseArr[$storeId]=$quantityPurchaseAll[$productId][$storeId];
-
-        }
-
-        $formulaFact=$quantity_warehouseman_fact[$productId];
-        $formulaPurchase=$quantityPurchaseAll[$productId];
-        $formulaMinLot=$productsMinLot[$productId];
-//$auto="$formulaFact $formulaPurchase $formulaMinLot";
-
-        $autoArr=autoDivision($productId,$quatityArr,$formulaFact,$formulaPurchase,$formulaMinLot);
-
-
-        $autoQantityArr=$autoArr["auto"];
-        $autoTextArr=$autoArr["text"];
-
-        foreach($sortStore as $storeId) {
-            echo'<td  class="kust'.$kustArrayReverse[$storeId].'">';
-
-            $q=$quantityPurchase[$productId][$storeId];
-
-
-
-
-            if(!empty($q)) echo'<small>к</small>'.$q.'';
-
-            echo'<br><small>а<span id="autodivision_'.$productId.''.$storeId.'"'.$autoQantityArr[$storeId].'</span>
-
-n=<span id="autonew_'.$productId.''.$storeId.'">'.$autoArr["new"][$storeId].'</span></small> ';
-
-            $provider_id=$prov[$productId];
-
-            if(isset($stores[$storeId])) {
-                echo'<input type=number class="form-control product_'.$productId.'"  id="division_fact'.$productId.''.$storeId.'"
-onchange="EditField(\'division_fact\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.');" value="'.$division[$productId][$storeId].'">';
-
-            } else echo'<span class="product_'.$productId.'" title="'.$division[$productId][$storeId].'" id="division_fact'.$productId.''.$storeId.'">'.$division[$productId][$storeId].'</span>';
-
-
-
-
-            echo'</td>';
-
-
-
-        }
-
-
-
-        $colspan=25;
-
-        echo'</tr>
-
-<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>';
-
-
-        $kk=0;
-// цвета
-
-
-
-
-        $reload='';
-        foreach($products_colors[$productId] as $colorId => $colorName)  $reload .=';calc_color_product(\''.$productId.'\',\''.md5($colorName).'\')';
-        foreach($sortStore as $storeId) $reload .=';calc_color_product_store(\''.$productId.'\',\''.$storeId.'\')';
-
-
-
-        foreach($products_colors[$productId] as $colorId => $colorName) {
-            $colorName=trim($colorName);
-//$zakupFactColor=$dataColorsValuesAll[$productId][$colorName][17];
-            $zakupFactColor=$dataColorsValuesAll[$productId][$colorName][22];
-            echo'<tr style="display:none;" class="tr__'.md5($productId).' td_color_'.$productId.' color_tr_calc" title="color'.$productId.''.$storeId.''.md5("$colorName").'">
-<td>
-';
-
-
-
-            if($kk==0) echo'<span class="btn btn-info" onclick="calc_colors(\''.$productId.'\');'.$reload.'">обновить данные</span>';
-
-            $kk++;
-            echo'<table width=100%><td><span class="btn btn-sm btn-info" onclick="calc_color_product(\''.$productId.'\',\''.md5($colorName).'\');">обновить</span></td><td width=70%>'.$colorName.'</td></table></td>
-<td class="pr" id="quantity_color'.$productId.''.md5($colorName).'" title="'.$zakupFactColor.'">';
-
-            if(1) {
-                /*
-                echo'<input title="Приход по цвету от закупщика" type=number class="form-control"  id="quantity_zakup_fact_color'.$productId.''.md5("$colorName").'"
-                onchange="EditZakupColor(\'17\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_zakup_fact_color'.$productId.''.md5("$colorName").'\');"
-                value="'.$zakupFactColor.'">';
-                */
-
-                echo'<input title="Приход по цвету от кладовщика quantity_warehouseman_fact" type=number class="form-control ostatok__'.$productId.''.md5($colorName).'"  id="quantity_warehouseman_fact'.$productId.''.md5("$colorName").'"
-onchange="EditZakupColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_warehouseman_fact'.$productId.''.md5("$colorName").'\');"
-value="'.$zakupFactColor.'">';
-
-
-            } else echo'<span  id-dd="color_'.$productId.''.md5("$colorName").'" class="" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$zakupFactColor.'</span>';
-
-
-            echo'</td>
- <td class="ost summa_kust_'.$productId.''.md5($colorName).'"  id="summa_color1_'.$productId.''.md5($colorName).'"></td>
- <td class="ost ost_product_'.$productId.''.md5($colorName).'" id="ost_color1_'.$productId.''.md5($colorName).'">0</td>
-<td>'.$productsMinLot[$productId].'</td>';
-
-            foreach($sortStore as $storeId) {
-
-                $divisionFact=$dataColorsValuesStores[$productId][$colorName][$fieldIdThisDivision][$storeId];
-                /*
-                $colorName=str_replace('/','',$colorName);
-                $colorName=str_replace('\'','',$colorName);
-                 $colorName = preg_replace ("~/~", "", $colorName);
-                 $colorName = preg_replace ("~\~", "", $colorName);
-                 */
-                $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
-// если это деление факта
-//if(empty($divisionFact) and $fieldIdThisDivision==20)  $divisionFact=$dataColorsValuesStores[$productId][$colorName][4][$storeId];
-//if(empty($divisionFact) and $fieldIdThisDivision==20) $divisionFact=$dataColorsValuesStores[$productId][$colorName][20][$storeId];
-//if(empty($divisionFact))
-//$divisionFact=$dataColorsValuesStores["$productId"]["$colorName2"][22][$storeId];
-                $divisionFact=$ColorsArr["$productId"]["$colorName2"][22][$storeId];
-
-//$divisionFact=$db::getValue("SELECT  quantity FROM store_orders_colors WHERE order_id=? AND store_id=? AND product_id=? AND color='$colorName2' and  field_id='22' LIMIT 1",[$OrderId, $storeId, $productId]);
-
-
-                echo'<td class="kust'.$kustArrayReverse[$storeId].'">';
-
-//$colorName=$colorName2;
-
-                if(isset($stores[$storeId])) {
-                    echo'<input type=number id-dd="color_'.$productId.$storeId.md5("$colorName").'" class="form-control color_'.$productId.''.md5("$colorName").' 
-
-color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.''.$storeId.''.md5("$colorName").'"  id="color'.$productId.''.$storeId.''.md5("$colorName").'"
-onchange="EditFieldColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.',\''.$colorName.'\',\'color'.$productId.''.$storeId.''.md5("$colorName").'\');"
-value="'.$divisionFact.'">'.$divisionFact.'';
-
-                } else echo'<span  id-dd="color_'.$productId.''.md5("$colorName").'" class="color_'.$productId.''.md5("$colorName").'  color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.$storeId.md5("$colorName").'" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$divisionFact.'</span>';
-
-
-                echo'</td>';
-
-
-            }
-
-            echo'</tr>';
-        }
-
-        if(!empty($products_colors[$productId])) {
-
-            echo'<tr style="display:none;" class="bg-warning tr__'.md5($productId).'"><td>Итого по цветам</td>
-
-<td class="sm_kust" id="color_summ_kust_'.$productId.'" title=""></td><td class="pr" id="color_summ_'.$productId.'" title=""></td>
- <td class="ost ost_color_summ_'.$productId.'" id="ost_color_summ_'.$productId.'">0</td>
-<td>'.$productsMinLot[$productId].'</td>';
-
-            foreach($sortStore as $storeId) {
-
-                echo'<td class="kust'.$kustArrayReverse[$storeId].'" id="summ_store_color_'.$productId.''.$storeId.'">
-<span class="btn btn-sm btn-info" onclick="calc_color_product_store(\''.$productId.'\',\''.$storeId.'\');">обновить</span>
-
-</td>';
-
-
-            }
-
-            echo'</tr>';
-
-        }
-
-
-//end colors
-
-
-
-    }
-
-
-
-}
-
-
-echo'</tbody></table></div>';
-
-
-echo'<h2>Излишки на складе после деления </h2>
-<p>Уходят на центральный склад. Минусовые деления не учитываются!</p>
-
-
-<table class="zak">
-<thead><th>наименование</th><th>сотаток шт.</th></thead>
-
-<tbody>';
-if (isset($ostatokReal)) {
-    arsort($ostatokReal);
-    foreach ($ostatokReal as $productId => $count) {
-        echo '<tr><td>' . $products[$productId] . '</td><td>' . $count . '</td></tr> ';
-
-    }
-}
-echo'</tbody></table>';
-
-
-//if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
-
-$_SESSION["order_id"]=$OrderId;
-$_CONFIG["jscss"]='
-
-<script>
- function AjaxGetJson(url, callback) {
-        var xmlhttp = new XMLHttpRequest();
-        xmlhttp.onreadystatechange = function () {
-            if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
-              /*  console.log(\'responseText:\' + xmlhttp.responseText); */
-                try {
-                    let data = JSON.parse(xmlhttp.responseText);
-                    callback(data);
-                } catch (err) {
-                  /*  console.log(err.message + " in " + xmlhttp.responseText); */
-                }
-            }
-        };
-        xmlhttp.open("GET", url, true);
-        xmlhttp.send();
-    }
-    
-function calcu(product_id) {
-
-
-var myNodeList = document.querySelectorAll(\'.td_color_\'+product_id+\'\');
-if( myNodeList.length) { 
-let summa_color = 0;
-for (let el of myNodeList) {
-      let id_element = el.getAttribute(\'title\');
-      let val=$(\'#\'+id_element).val();
-      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-      if(typeof val !== \'undefined\' && val!=\'\') {
-      val = Number(val);
-      summa_color = summa_color + val;
-      summa_color = Number(summa_color); 
-     }
-  
-  }
-
-
-}
-
-
-
-
-
-
-var myNodeList = document.querySelectorAll(\'.product_\'+product_id+\'\');
-
-if( myNodeList.length) { 
-
-let summa = 0;
-
-let prihod = $(\'#quantity_warehouseman_fact\'+product_id+\'\').text();
- prihod = Number(prihod);
-for (let el of myNodeList) {
-      let val = el.value;
-      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-      if(typeof val !== \'undefined\' && val!=\'\') {
-      val = Number(val);
-      summa = summa + val;
-      summa = Number(summa); 
-   
-    }
-  
-  }
-  
-$(\'#summa_kust_\'+product_id+\'\').text(summa);   
-let pr =0;
-pr = prihod - summa;
- pr = Number(pr);
-$(\'#ost_product_\'+product_id+\'\').text(pr); 
-
-if(pr < 0) {
-$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#CD5C5C\'); 
-$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#fff\');    
-    
-} else {
-    
-$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#90EE90\'); 
-$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#222222\');        
-    
-}
-
-}    
-/*calc_colors(product_id);*/
-}   
-
-
-function unique(arr) {
-  let result = [];
-
-  for (let str of arr) {
-    if (!result.includes(str)) {
-      result.push(str);
-    }
-  }
-
-  return result;
-}
-function calc_colors(product_id) {
-
-var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\');
-if( myNodeList.length) { 
-let summa = 0;
-let summa_kust = $(\'#summa_kust_\'+product_id+\'\').text();
-summa_kust = Number(summa_kust); 
-let class_arr=[];
-let class_vl=[];
-var id_last;
-for (let el of myNodeList) {
-      let val = el.value;
-      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-      
-      let  id_dd = el.getAttribute(\'id-dd\');
-      id_last = id_dd;
-      class_arr.push(id_dd);
-      
-      
-      
-      if(typeof val !== \'undefined\' && val!=\'\') {
-      val = Number(val);
-      summa = summa + val;
-      summa = Number(summa); 
-      class_vl[id_dd]=class_vl[id_dd]+val;
-      
-      
-   
-    }
-  
-  }
-  
-
-for (let el of class_vl) {
- $(\'#ost_\'+el+\'\').text(class_vl[el]);  
-
-}
-
-
-  /* console.log(\'class_vl= \'+class_vl+\' \'); */
-
-
-
-  
- class_arr = unique(class_arr);
- for (let el2 of class_arr) {
- let summa_color_store=0;
- var myNodeList = document.querySelectorAll(\'.\'+class_arr+\'\');
-if( myNodeList.length) { 
- for (let el of myNodeList) {
-  let val = el.value;
- if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
- if(typeof val !== \'undefined\' && val!=\'\') {
-      val = Number(val);
-      summa_color_store = summa_color_store + val;
-      summa_color_store = Number(summa_color_store); 
-   
-    }
- }
-summa_color_store = Number(summa_color_store);
-$(\'#summ_store_\'+class_arr+\'\').text(summa_color_store);   
- }
-/*  console.log(\' class_arr= \'+class_arr+\' summa_color_store= \'+summa_color_store+\' \'); */
- } 
-
-  
-summa = Number(summa);
-$(\'#color_summ_\'+product_id+\'\').text(summa);   
-
-
-let pr =0;
-pr = summa_kust - summa;
-$(\'#ost_color_summ_\'+product_id+\'\').text(pr); 
-
-if(pr < 0) {
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#CD5C5C\'); 
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#fff\');    
-    
-} else {
-    
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#90EE90\'); 
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#222222\');        
-    
-} 
-
-}    
-
-}   
-
-
-function calc_color_product(product_id, md5) {
-
-var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+md5+\'\');
-if( myNodeList.length) { 
-let summa = 0;
-let summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').text();
-summa_kust = Number(summa_kust); 
-if(summa_kust==\'\') summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').val();
-summa_kust = Number(summa_kust); 
-
-
-let class_arr=[];
-let class_vl=[];
-var id_last;
-for (let el of myNodeList) {
-      let val = el.value;
-      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-      
-      let  id_dd = el.getAttribute(\'id-dd\');
-      id_last = id_dd;
-      class_arr.push(id_dd);
-      
-      
-      
-      if(typeof val !== \'undefined\' && val!=\'\') {
-      val = Number(val);
-      summa = summa + val;
-      summa = Number(summa); 
-      class_vl[id_dd]=class_vl[id_dd]+val;
-      
-      
-   
-    }
-  
-  }
-  
-
-
-summa = Number(summa);
-$(\'#summa_color1_\'+product_id+\'\'+md5+\'\').text(summa);   
-
-
-let pr =0;
-pr = summa_kust - summa;
-$(\'#ost_color1_\'+product_id+\'\'+md5+\'\').text(pr); 
-
-if(pr < 0) {
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#CD5C5C\'); 
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');    
-    
-}
-if(pr>0) {
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'blue\'); 
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');    
-    
-}  
-if(pr==\'0\') {
-    
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#90EE90\'); 
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#222222\');        
-    
-} 
-
-}       
-    
-}
-
-
-function calc_color_product_store(product_id, store_id) {
-
-var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+store_id+\'\');
-if( myNodeList.length) { 
-let summa = 0;
-
-let class_arr=[];
-let class_vl=[];
-var id_last;
-for (let el of myNodeList) {
-      let val = el.value;
-      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-      
-      let  id_dd = el.getAttribute(\'id-dd\');
-      id_last = id_dd;
-      class_arr.push(id_dd);
-      if(typeof val !== \'undefined\' && val!=\'\') {
-      val = Number(val);
-      summa = summa + val;
-      summa = Number(summa); 
-
-    }
-  
-  }
-summa = Number(summa);
-$(\'#summ_store_color_\'+product_id+\'\'+store_id+\'\').text(summa);   
-
-
-}       
-    
-}
-
-
-
-jQuery(document).ready(function($) {
- $(".form-control").focus(function(){
-   $(".form-control").removeClass("active");
-   $(this).addClass("active");
-  }).blur(function(){
-  })
-});
-   
-   
-
-function load_devision_ajax() {
-
-
-var myNodeList = document.querySelectorAll(\'.producted\');
-if( myNodeList.length) { 
-for (let el of myNodeList) {
-      let product_id = el.getAttribute(\'id-data\');
-      calcu(product_id);
-}      
-}      
-AjaxGetJson(\'/shipment/ajax-division/\', function (data) {
-
-
-for (product_id in data) {
-        for (store_id in data[product_id]) {
-       /*  console.log(\' product_id= \'+product_id+\' store_id= \'+store_id+\' = \'+data[product_id][store_id]); */
-          let new_val = data[product_id][store_id][\'division_fact\'];
-          let colors_array = data[product_id][store_id][\'color\'];
-          
-              for (color in data[product_id][store_id][\'color\']) {
-                let color_quantity = data[product_id][store_id][\'color\'][color];
-                let color_md5 = color;
-                let dividcolor=\'color\'+product_id+\'\'+store_id+\'\'+color_md5+\'\';
-
-         if($(\'#\'+dividcolor).hasClass("active")){} else {
-               $(\'#\'+dividcolor).val(\'\'+color_quantity+\'\');  
-               $(\'#\'+dividcolor).text(\'\'+color_quantity+\'\');  
-               $(\'#\'+dividcolor).attr(\'title\',\'\'+color_quantity+\'\');  
-         }
-            }
-          
-         let divid=\'division_fact\'+product_id+\'\'+store_id;
-          let val=$(\'#\'+divid).val();
-          
-         
-          if(val!=new_val && $(\'#\'+divid).type == "input") {
-          $(\'#\'+divid).css(\'border\',\'1px #cd0202 solid\');
-          calcu(product_id);
-          }
-          
-        if($(\'#\'+divid).hasClass("active")){
-     } else {
-          $(\'#\'+divid).val(\'\'+new_val+\'\');  
-          $(\'#\'+divid).text(\'\'+new_val+\'\');  
-          $(\'#\'+divid).attr(\'title\',\'\'+new_val+\'\');  
-        }
-        
-        }
-        
-        
-}
-
-        });    
-    
-}   
-window.onload = function() {
-load_devision_ajax();
-};   
-    
-setInterval(function () {
-
-/*load_devision_ajax();*/
-
-    },5000);
-
-/*
-setInterval(function () {
-var myNodeList = document.querySelectorAll(\'.producted\');
-if( myNodeList.length) { 
-for (let el of myNodeList) {
-      let product_id = el.getAttribute(\'id-data\');
-     calc_colors(product_id); 
-}      
-} 
-
-},5000);
-
-*/
-
-var param = $("meta[name=csrf-param]").attr("content");
-var token = $("meta[name=csrf-token]").attr("content");
-
-setInterval(function () {
-$.ajax({
-       url: \'/shipment/ajax-admin-online/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { modul: \''.$modul.'\', action: \''.$act.'\',   entity_id: '.$OrderId.', [param]: token},  
-       success: function(data){ 
-        let data2 = JSON.parse(data);
-        let html =\'сейчас с этой страницей работают: \';
-       for (product_id in data2) {
-        html +=\'<span class="tag me-2">\'+data2[product_id]+\'</span>\';
-       }
-       
-       $(\'#admin__online\').html(html); 
-
-       }}); 
-},12000);
-
-
-
-function showKust(product_id){
-
-$.ajax({
-       url: \'/shipment/ajaxDivisionKust/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { order_id: '.$OrderId.',  product_id: \'\'+product_id+\'\'  },  
-       success: function(data){ 
-       $(\'#tr__\'+product_id).after(data); 
-
-       }}); 
-}
-
-
-function changef(id,typeint)
-{ 
-var uname=$(\'#\'+id+\'\').val();
-
-if(typeint==\'double\')  uname = uname.replace(/[^0-9.\s]/gi, \'\'); 
-if(typeint==\'int\')  uname = uname.replace(/[^0-9\s]/gi, \'\'); 
-$(\'#\'+id+\'\').val(\'\'+uname+\'\');
-}
-
-
-
-function EditField22(name_eng,product_id,store_id,provider_id)
-{ 
-/*
-changef(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\',\'int\');
-$.ajax({
-       url: \'/shipment/ajaxEditField/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { id: '.$OrderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val()+\'\' },  
-       success: function(data){ 
-
-         $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
-       setTimeout(function(){$(\'.okk\').remove();}, 5000);
-   
-
-       }}); 
-*/
-
-
-
-}
-
-
-
-
-
-function EditField(name_eng,product_id,store_id,provider_id)
-{ 
-/*     alert(\' name \'+name_eng+\'  product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');*/
-       
-var v=$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val();      
-$.ajax({
-       url: \'/shipment/ajaxEditField/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { id: '.$OrderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+v+\'\' },  
-       success: function(data){ 
-         $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok</span>\');
-         setTimeout(function(){$(\'.okk\').remove();}, 6000);
-       }});    
-}
-
-function EditFieldColor(field_id,product_id,store_id,provider_id,color,color_md5)
-{ 
-var v=$(\'#\'+color_md5+\'\').val();   
-/*alert(\' field_id \'+field_id+\' v=\'+v+\'  color=\'+color+\'  color_md5=\'+color_md5+\'   product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
-*/     
-
-$.ajax({
-       url: \'/shipment/ajaxEditFieldColor/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',store_id:\'\'+store_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },  
-       success: function(data){ 
-         $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
-         setTimeout(function(){$(\'.okk\').remove();}, 6000);
-       }});    
-}
-
-
-function EditZakupColor(field_id,product_id,provider_id,color,color_md5)
-{ 
-var v=$(\'#\'+color_md5+\'\').val();   
-/*alert(\' field_id \'+field_id+\' v=\'+v+\'  color=\'+color+\'  color_md5=\'+color_md5+\'   product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
-*/     
-
-$.ajax({
-       url: \'/shipment/ajaxEditZakupColor/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },  
-       success: function(data){ 
-         $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
-         setTimeout(function(){$(\'.okk\').remove();}, 3000);
-       }});    
-}
-
-
-</script>
-
-<style>
-.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
-.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
-.zak> :not(caption)>*>* {
-    padding: 0.05rem;
-    background-color: 1px;
-    box-shadow: none;
-}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak {
-       border-collapse: collapse;
-       border-spacing: 0;
-       overflow: hidden;
-}
-.zak th, .zak td {
-       border: 1px solid #e6e6e6;
-       padding: 0.1rem;
-       vertical-align: middle;
-       position: relative;
-}
-
-.zak td:hover:before,.zak td.kust1:hover:before  { 
-       background-color: #e3e3e3;
-       content: \'\';  
-       height: 100%;
-       left: -5000px;
-       position: absolute;  
-       top: 0;
-       width: 10000px;   
-       z-index: -2;        
-}
-.zak td:hover:after,.zak td.kust1:after { 
-       background-color: #cdcdcd;
-       content: \'\';  
-       height: 10000px;    
-       left: 0;
-       position: absolute;  
-       top: -5000px;
-       width: 100%;
-       z-index: -1;        
-}
-
-.zak tbody td input.form-control{font-size:0.7rem;max-width:50px;border:0;border-radius:0;color:#333;padding:0.1rem;margin:0;text-align:center;}
-.zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
-.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
-
-table.zak thead th,
-table.zak tr.zg th th,table.zak tr.zg td td {
-  vertical-align: bottom;
-  line-height: normal;
-}
-table.zak thead b, table.zak tbody b {
-  writing-mode: vertical-rl;
-  transform: scale(-1);
-  
-}
-
-
-table.zak tr.zg th b, table.zak tr.zg td b {
-  writing-mode: vertical-rl;
-  transform: scale(-1);
-    font-weight:normal; font-size:0.6rem;
-}
-
- .app-content .side-app {
-    padding: 25px 0.5rem 0 0.5rem;
-}
-
-.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
-.zak td.td_product:hover {background:#fff;}
-
-.zak  tr td.pr,.zak tr td.ost{text-align:center;}
-.zak  tr td.pr{background:#ddd}
-.zak  tr td.ost{background:#e6e6e6}
-
-.zak td{text-align:center;  vertical-align: bottom;}
-.zak td.lf{text-align:left; background:#fff}
-
-';
-/*
-foreach($kustBackground as $kustId =>$bg) {
-
-$_CONFIG["jscss"] .='
-table.zak tr td.kust'.$kustId.' {background:'.$bg.'}
-table.zak tr:hover td.kust'.$kustId.' {background:#cdcdcd}
-
-';
-
-}
-*/
-
-$_CONFIG["jscss"] .='
-input::-webkit-outer-spin-button,
-input::-webkit-inner-spin-button {
- -webkit-appearance: none;
-    margin: 0; 
-}</style>';
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
diff --git a/erp24/views/shipment/fields-data.php b/erp24/views/shipment/fields-data.php
deleted file mode 100644 (file)
index 9738e9a..0000000
+++ /dev/null
@@ -1,592 +0,0 @@
-<?php
-
-
-use yii\grid\ActionColumn;
-use yii\helpers\Url;
-use yii\helpers\Html;
-use yii\grid\GridView;
-use yii\widgets\Pjax;
-use yii_app\records\Dashboard;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrderStatus;
-use yii_app\services\ShipmentService;
-
-/* @var $this yii\web\View */
-/* @var $bonusConversionCost int */
-
-/* @var $userSalarySalut float */
-/* @var $userSalarySalutPremium float */
-/* @var $storeOrders array */
-/* @var $dozakupka array */
-/* @var $store_orders_statuses array */
-/* @var $dataStoreOrdersFields array */
-/* @var $dostupFields array */
-/* @var $bgFields array */
-/* @var $orders_status_description array */
-/* @var $adminGroups array */
-/* @var $urlActionPart string */
-/* @var $orderId string */
-/* @var $groupId int */
-/* @var $userGroup string */
-/* @var $orderData array */
-/* @var $storeOrderStatusDescription string */
-/* @var $storeOrderStatus string */
-/* @var $storeId ?int */
-/* @var $status_order_id int */
-/* @var $status_edit_dostup array */
-/* @var $store_orders_status_description array */
-/* @var $storesArray array */
-/* @var $storeArr array */
-/* @var $store_orders_statuses array */
-/* @var $statuses_stores_show array */
-/* @var $products_varieties array */
-/* @var $products_class array */
-/* @var $products array */
-/* @var $productsOptions array */
-/* @var $productsColorsArray array */
-/* @var $prov array */
-/* @var $statuses_dostup array */
-/* @var $dostup_fields array */
-/* @var $bg_fields array */
-/* @var $fieldsRows array */
-/* @var $dataTableHeader array */
-/* @var $shipmentService object */
-
-$this->title = 'Заказ товара';
-$this->params['breadcrumbs'][] = $this->title;
-$modul = 'shipment';
-
-
-
-$this->registerCssFile('/css/table/table.css', ['position' => \yii\web\View::POS_END]);
-
-?>
-
-
-    <div class="index">
-
-        <h1><?= Html::encode($this->title) ?></h1>
-
-
-
-
-    </div>
-    <div class="alert alert-warning" role="alert"><a href="/shipments/index" class="btn me-2 btn-info">❮ назад в закупки</a>
-
-
-
-    <a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
-    <a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
-
-
-    Описание статуса: <?php echo $storeOrderStatusDescription ?>  Под кем будем просматривать
-<?php
-foreach ($adminGroups as $gid => $nameGroup) {
-
-    $buttonStyle = '';
-    $urlRow = '/shipment/' . $urlActionPart .'/?id=' . $orderId . '&group_id=' . $gid;
-    
-    if ($gid == $groupId) {
-        $buttonStyle = 'btn-success';
-    } else {
-        $buttonStyle = 'btn-outline-info';
-    }
-    
-    ?><a href='<?= $urlRow?>' class='m-1 btn btn-sm <?php echo $buttonStyle;?>'><?php echo $nameGroup; ?></a><?php
-
-}
-?>
-
-
-<br>
-<?php
-?>
-
-
-        Дата старта продаж (от этой даты считаем продажи при авто-заказе) <?php echo $orderData['date_start']; ?>
-        Дата деления (от этой даты считаем продажи при делении)<?php echo $orderData['division_date']; ?>
-
-
-
-
-<!--<a href="/shipment/' . $urlActionPart . '/?id=' . $orderId . '&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
-<span onclick="ajaxUpdateFieldsDataTest();" class="btn btn-info me-2">1) TEST!!! поссчитать статистические данные данные</span>
-<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
-<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
-<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
-<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
-
-
-
-
-<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
-
-
-
-</div>
-
-<a href="/shipment/<?php echo $urlActionPart;?>/?id=<?php echo $orderId ?>'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
-
-
-<h1 class="page-title mb-0 text-primary">Заказ товара <?php echo $orderData["name"] ?> id=<?php echo $orderId ?>
-<span class="btn btn-lime"><?php echo  $storeOrderStatus ?></span>  ваша роль <b> <?php echo $userGroup ?></b></h1>';
-
-<?php
-// панель с магазинами
-ShipmentService::showOrderStoresPanel(
-    $status_order_id,
-    $status_edit_dostup,
-    $store_orders_status_description,
-    $storesArray,
-    $storeArr,
-    $storeId,
-    $store_orders_statuses,
-    $statuses_stores_show,
-    $urlActionPart,
-    $orderId,
-    $groupId
-);
-
-//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
-if (!empty($status_order_id) && $status_order_id == 1) {
-
-
-    ?><a href=\"/shipment/$urlActionPart/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a><?php
-
-
-    if (!empty($_REQUEST["load"])) {
-        $data = $db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
-        foreach ($data as $row) {
-            $productsPrices[$row["product_id"]] = $row["price"];
-        }
-        $data_uper = [];
-        foreach ($products as $productId => $nameProduct) {
-            echo "<br>$nameProduct Роз. цена=" . $productsPrices[$productId] . "  закуп " . $productsOptions[$productId]["price_zakup"] . " ";
-            $price = $productsPrices[$productId];
-            $data_uper[$productId]["NULL"]["NULL"] = $price;
-
-            $db::sql("
-                UPDATE 
-                    `store_orders_prices` 
-                SET purchase_price='$price'
-                WHERE 
-                    product_id='$productId' 
-                AND 
-                    order_id='$orderId' 
-                AND 
-                    provider_id=1 
-                AND 
-                    purchase_price!='0.00'"
-            );
-
-        }
-
-//розничная цена
-        insert_store_orders_fields($data_uper, "purchase_price");
-
-
-        $data_uper = [];
-        foreach ($products as $productId => $nameProduct) {
-            $price = $productsOptions[$productId]["price_zakup"];
-            $data_uper[$productId]["NULL"]["NULL"] = $productsOptions[$productId]["price_zakup"];
-            $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
-WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
-        }
-        insert_store_orders_fields($data_uper, "purchase_price_zakup");
-
-//header("Location: /shipment/$urlActionPart/?id=$orderId&group_id=$gid");
-    }
-
-
-}
-
-
-//если выбран магазин то
-if (!empty($store_id)) echo '<input type=hidden name=store_id_id value=' . $store_id . ' id=store_id_id>';
-
-echo '
-<div id=edit_div></div>
-<div class="table-responsive mt-3">
-    <table class="zak">';
-$html = '<thead>
-            <tr class="zg">
-                <th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
-
-                    <span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
-
-
-<a href="/shipment/statusFieldsSort/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
-
-<a href="/shipment/config/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
-
-
-</th>';
-$thead = $html; // формируем thead
-$head_td = $html;
-
-
-
-$rowArraySum = [];
-$shipmentService->rowArraySum = [];
-
-
-if (!empty($groupId)) {
-    foreach ($dataStoreOrdersFields as $row) {
-        $dostup = $dostup_fields[$row["id"]];
-        $bg = $bg_fields[$row["id"]];
-        if ($dostup == "edit" or $dostup == "show") {
-
-
-            $html = '<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="' . $row["name_full"] . ' ' . $row["name_eng"] . '"  onclick="ajaxFieldInfo(' . $row["id"] . ')" style="max-width:90px;">
-    <b>' . $row["name"] . '</b></th>';
-            $thead .= $html;
-            $head_td .= $html;
-        }
-
-    }
-}
-
-$thead .= '</tr></thead>';
-$head_td .= '</tr>';
-echo '' . $thead . '<tbody>';
-
-
-//$FiledsData=getDataFiledsData();
-
-
-// полнограммы по всем магазинам
-if (!empty($store_id)) {
-    $data3 = $db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' 
-AND store_id!='' AND quantity>0 AND store_id=?", [$store_id]);
-    foreach ($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]] = $row2["quantity"];
-}
-
-//$data3 = $db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
-//$data3 = ProductsClass::find()->andWhere(['tip' => array('potted','wrap')])->asArray()->all();
-
-
-
-
-$trCount = 0;
-foreach ($products as $pid => $name) {
-    if ($trCount == 20) {
-        $trCount = 0;
-        echo $head_td;
-    }
-    $trCount++;
-
-    echo '<tr';
-
-
-    if (!empty($store_id) and empty($store_planogramAllStores[$store_id][$pid])) {
-        echo ' class="bg-danger"';
-    }
-
-
-    if (empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) {
-//        echo ' class="bg-danger"';
-//
-//        echo ' style="opacity:0.5"';
-    }
-
-
-    echo '><td class="text-right">';
-//если статус общий то группируем по магазинам
-    if (empty($statuses_stores_show[$status_order_id])) {
-        echo '<span onclick="$(\'.trstores_' . $pid . '\').toggle();" class="btn btn-default btn-sm">+</span>';
-    }
-    echo '' . $name . '';
-
-
-//узнаем категорибю товара
-    $categoryId = $productsOptions[$pid]["parent_id"];
-    $tip = '';
-// по категории узнаем тип товара горшечка или упаковка
-    if (!empty($products_class[$categoryId])) {
-        $tip = $products_class[$categoryId];
-    }
-
-
-    if (array_key_exists($pid, $productsColorsArray)) {
-        if (count($productsColorsArray[$pid]) > 0) {
-            echo '<span onclick="$(\'.trcolors_' . $pid . '\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
-        }
-    }
-    echo '<input type=hidden name=provider_id[' . $pid . '] value="' . $prov[$pid] . '">';
-    echo '</td>';
-
-
-//    if (!empty($store_id)) {
-        foreach ($dataStoreOrdersFields as $row) {
-            $shipmentService->printFieldTd($row["name_eng"], $pid, null);
-        }
-//    }
-
-    echo '</tr>';
-
-
-//begin colors
-    if (array_key_exists($pid, $productsColorsArray)) {
-        foreach ($productsColorsArray[$pid] as $color) {
-            $color = trim($color);
-            if (!empty($color)) {
-                echo '<tr class="trcolors trcolors_' . $pid . ' bg-gray-300" style="display:none;"><td class="text-right">' . $name . ' + <span class="btn btn-sm btn-warning me-1">' . $color . '</span>';
-
-                if (!empty($products_varieties[$pid][$color])) {
-                    echo '<div class="sorts_flowers" style="display:none;"><br>сорта ';
-                    foreach ($products_varieties[$pid][$color] as $k => $var) {
-                        echo "<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
-                    }
-                    echo '</div>';
-                }
-
-
-
-                if (!empty($store_id) && !empty($color)) {
-                    foreach ($dataStoreOrdersFields as $row) {
-//                        printFieldTd($row["name_eng"], $pid, null, null);
-                        $shipmentService->printFieldTd($row["name_eng"], $pid, $store_id, $color);
-                    }
-                }
-
-                echo "</tr>";
-            }
-
-        }
-    }
-//end colors
-
-
-}
-
-
-echo '<tr class="bg-success zg"><td class="text-right"></td>';
-foreach ($dataStoreOrdersFields as $row) {
-    $dostup = $dostup_fields[$row["id"]];
-    $bg = $bg_fields[$row["id"]];
-    if ($dostup == "edit" or $dostup == "show") {
-        echo '<td class="text-center" title="' . $row["name_full"] . ' ' . $row["name_eng"] . '"><b>' . $row["name"] . ' (' . $fieldsRows[$row["name_eng"]]["row_type_sum"] . ')</b></td>';
-    }
-}
-echo '</tr>
-<tr class="bg-success"><td class="text-right">итого -ГО</td>';
-foreach ($dataStoreOrdersFields as $row) {
-    $dostup = $dostup_fields[$row["id"]];
-    if ($dostup == "edit" or $dostup == "show") {
-        $s = "";
-        if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "amount") {
-            $s = $shipmentService->rowArraySum[$row["id"]] ?? 0;
-        }
-        if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "avg") {
-            if (!empty($shipmentService->rowArraySum["cnt__" . $row["id"]])) {
-                $s = round($shipmentService->rowArraySum[$row["id"]] ?? 0 / $shipmentService->rowArraySum["cnt__" . $row["id"]]);
-            }
-        }
-
-        echo '<td class="text-center ' . $bg . '"><b>' . $s . '</b></td>';
-    }
-}
-echo '</tr></tbody>';
-echo '</table>
-
-<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
-/*
-$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");
-
-// суммируем деление и заносим данные в таблицу хранения данных по полям
-foreach($products as $productId => $name) {
-//echo"<br>$name ";
-  $all=0;
-  $division_auto_need_all=0;
-  foreach($storesArrayAll as $storeId => $nameStore) {
-  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
-   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
-    $all =$all+$summ;
-    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
-  //  if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
-
-
-  }
-
-$field_name="division_auto_need_all";
-//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
-if(!empty($division_auto_need_all)) {
-   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
-    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
-
-
-}
-
-//пробегаемся по всем продуктам
-foreach($products as $productId => $name) {
-
-
-$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
-
-
-echo"<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
-Сумма потребности =".$division_auto_need_all."
-Сумма получаено по факту  ".$quantity_warehouseman_fact."";
-
-$division_ratio=1;
-if($division_auto_need_all > $quantity_warehouseman_fact) {
-$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
-
-echo"<font color=red>-меньше!</font>";
-
-echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
-
-}
-
-$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
-insert_store_orders_fields($data_uper,"division_ratio");
-
-
-}
-
-*/
-
-
-echo "<script>
-function ajaxFieldInfo(id){
- $('#modal-7 .modal-body').html('Загружаем....');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');  
- $.ajax({
-       url: '/shipments/ajaxFieldInfo/',
-       method: 'post',       
-       dataType: 'html',        
-       data: {id: id},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}); 
-}
-
-function ajaxUpdateFieldsDataTest(){
- $('#modal-7 .modal-body').html('Test Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipments/ajax-update-fields-data-test/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: '2', update:'1'},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}) 
-}
-
-function ajaxUpdateFieldsData(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipments/ajaxUpdateFieldsData/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update:'1'},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}) 
-}
-
-
-function ajaxUpdateStep(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipments/ajaxUpdateStep/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update_step:'1'},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}) 
-}
-
-
-function ajaxUploadAutoPurchase(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipments/ajaxUploadAutoPurchase/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update_step:'1'},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}) 
-}
-
-function foreachSalesHand(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipments/ajaxUpdateStep/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}) 
-}
-
-
-function deleteAll(){
- const result = confirm('Удаляем данные?');
-    
-    if (result) {
-
- $('#modal-7 .modal-body').html('Удаляем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');  
- $.ajax({
-       url: '/shipments/ajaxUpdateStep/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, deleteAll:'1'},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}) 
-}
-}
-
-
-</script>";
-
-echo '<!-- MODAL -->
-               <div class="modal fade" id="modal-7">
-                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
-                               <div class="modal-content">
-                                       <div class="modal-header">
-                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
-                                       </div>
-                                       <div class="modal-body p-0">
-                               
-                                       </div>
-                       
-                               </div>
-</div>
-</div>';
-
-
-//include "templates/bottom.php";
-
-
-
-
-
-
-
-
-
-
-
-/*
-
---
-
-
-
---
-
-
- */
\ No newline at end of file
diff --git a/erp24/views/shipment/fields-data2.php b/erp24/views/shipment/fields-data2.php
deleted file mode 100644 (file)
index c020b49..0000000
+++ /dev/null
@@ -1,557 +0,0 @@
-<?php
-
-use yii\helpers\ArrayHelper;
-use yii_app\records\AdminGroup;
-use yii_app\records\StoreOrders;
-use yii_app\records\StoreOrderStatusLog;
-use yii_app\records\Prices;
-use yii_app\records\StoreOrdersPrices;
-use yii_app\records\ProductsVarieties;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StorePlanogram;
-use yii_app\records\ProductsClass;
-use yii\db\Expression;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-//include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-
-//include"templates/top.php";
-
-//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
-global $products, // массив с товарами производителя прикрепленного к этой закупке
-       $orderId, // id- заказа
-       $store_id, // GUID магазина
-       $storesArray, // массив с магазинами
-       $group_id, // ID группы авторизованного сотрудника
-       $fieldsRows, // массив с данными по полями - ключ name_eng
-       $date_start_sale, // дата старта продаж от которой считаемстатистику
-       $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
-       $whereInProductsIdArr, // $whereInProductsId в форме массива
-       $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
-       $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
-       $FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам
-       $status_order_id, // ID текущего статуса закупаки
-       $store_orders_statuses, // массим со статсами закупок
-       $statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
-       $status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
-       $store_orders_status_description, // - массив с описанием стутса
-       $dostup_fields,
-       $bg_fields,
-       $ProductsOptions;
-
-$act='fields-data2'; // часть url action
-
-$group_id=$_SESSION["group_id"]; // ID группы сотрудника
-if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
-
-
-
-
-if(!empty($_REQUEST["group_id"])) {
-    $group_id=(int)$_REQUEST["group_id"];
-    $_SESSION["group_id_init"]=$group_id;
-}
-
-
-
-$time = strtotime('this week monday, 00:00');  // текущий понедельник  в формате unixtimestamp
-$date2=date('Y-m-d 23:59:59', $time);  // текущий понедельник
-$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
-
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
-
-
-// измененеи статуса заказа
-if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
-    StoreOrders::updateAll(['status' => (int)$_POST["status_new"]], ['id' => $orderId]);
-//    $db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
-    $storeOrderStatusLog = new StoreOrderStatusLog;
-    $storeOrderStatusLog->status = (int)$_POST["status_new"];
-    $storeOrderStatusLog->order_id = $orderId;
-    $storeOrderStatusLog->date = date('Y-m-d H:i:s');
-    $storeOrderStatusLog->admin_id = $_SESSION["admin_id"];
-    $storeOrderStatusLog->save();
-//    $db::sql("INSERT IGNORE INTO  store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
-
-    mess("Статус изменен");
-}
-
-
-
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-$data = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])
-    ->where(['in', 'id', ['1','10','7','51','9','17','70']])->all(), 'id', 'name');
-//$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
-
-
-
-echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
-
-
-
-<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
-<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
-
-
-Описание статуса: '.$store_orders_status_description[$status_order_id].'
-
-';
-
-echo"Под кем будем просматривать ";
-foreach($data as $gid => $nameGroup) {
-
-    echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
-
-    if($gid==$group_id) echo"success"; else echo"outline-info";
-
-    echo"\">$nameGroup</a>";
-
-}
-echo'
-<br>
-
-Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
-Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
-
-
-
-
-
-
-<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
-<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
-<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
-<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
-<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
-
-
-
-
-<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
-
-
-
-</div>';
-
-//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
-
-
-echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
-<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span>  ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
-
-global $act;
-$act = 'fields-data2';
-// панель с магазинами
-showOrderStoresPanel();
-
-//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
-if($status_order_id==1) {
-
-
-    echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";
-
-
-    if(!empty($_REQUEST["load"])) {
-        $data = Prices::find()->select(['product_id', 'price'])->where(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-//        $data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
-        foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
-        $data_uper=[];
-        foreach($products as $productId => $nameProduct) {
-            echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]."  закуп ".$ProductsOptions[$productId]["price_zakup"]." ";
-            $price=$productsPrices[$productId];
-            $data_uper[$productId]["NULL"]["NULL"]=$price;
-
-            StoreOrdersPrices::updateAll(['purchase_price' => $price],
-                ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price', '0.00']]);
-//            $db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
-//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
-
-        }
-
-//розничная цена
-        insert_store_orders_fields($data_uper,"purchase_price");
-
-
-        $data_uper=[];
-        foreach($products as $productId => $nameProduct) {
-            $price=$ProductsOptions[$productId]["price_zakup"];
-            $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];
-            StoreOrdersPrices::updateAll(['purchase_price_zakup' => $price],
-                ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price_zakup', '0.00']]);
-//            $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
-//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
-        }
-        insert_store_orders_fields($data_uper,"purchase_price_zakup");
-
-//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
-    }
-
-
-}
-
-
-$products_varieties=[];
-$data = ProductsVarieties::find()->select(['id', 'product_id', 'color', 'name'])->asArray()->all();
-//$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
-foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
-
-
-
-//если выбран магазин то
-if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
-
-echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
-$html='<thead><tr class="zg"><th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
-
-<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
-
-
-<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
-
-<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
-
-
-</th>';
-$thead=$html; // формируем thead
-$head_td=$html;
-
-
-global $rowArraySum;
-$rowArraySum=[];
-
-if(!empty($group_id)) {
-//извлекаем сортировку полей в зависимости от группы сотрудника
-//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
-
-    $storeOrdersStatuses = StoreOrdersStatuses::find()->select(['fields_sort'])->where(['id' => $status_order_id])->asArray()->one();
-    $sort = $storeOrdersStatuses['fields_sort'] ?? '';
-//    $sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
-//    if(!empty($sort)) $sort="ORDER BY        FIELD(`id`, $sort) ";
-
-    $dataQuery = StoreOrdersFields::find();
-    if (!empty($sort)) {
-        $dataQuery->orderBy([new Expression('FIELD(id, ' . $sort . ')')]);
-    }
-    $data = $dataQuery->asArray()->all();
-//    $data=$db::getRows("SELECT * FROM store_orders_fields  $sort");
-}
-foreach($data as $row) {
-    $dostup=$dostup_fields[$row["id"]];
-    $bg=$bg_fields[$row["id"]];
-    if($dostup=="edit" or $dostup=="show") {
-
-
-
-        $html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'"  onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:90px;">
-<b>'.$row["name"].'</b></th>';
-        $thead .=$html;
-        $head_td .=$html;
-    }
-
-}
-$thead .='</tr></thead>';
-$head_td .='</tr>';
-echo ''.$thead.'<tbody>';
-
-
-
-//$FiledsData=getDataFiledsData();
-
-
-// полнограммы по всем магазинам
-if(!empty($store_id)) {
-    $data3 = StorePlanogram::find()->select(['store_id', 'product_id', 'quantity'])->where(['color' => ''])
-        ->andWhere(['!=', 'store_id', ''])->andWhere(['>', 'quantity', '0'])->andWhere(['store_id' => $store_id])->asArray()->all();
-//    $data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
-//AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
-    foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
-}
-
-$data3 = ProductsClass::find()->where(['in', 'tip', ['potted','wrap']])->asArray()->all();
-//$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
-foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"];
-
-
-
-
-
-$trCount=0;
-foreach($products as $pid =>$name) {
-    if($trCount==20) {
-        $trCount=0;
-        echo  $head_td;
-    }
-    $trCount++;
-
-    echo'<tr';
-
-
-    if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
-
-
-    if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
-
-        //echo' style="opacity:0.5"';
-    }
-
-
-
-    echo'><td class="text-right">';
-//если статус общий то группируем по магазинам
-    if(empty($statuses_stores_show[$status_order_id]))  {      echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>';   }
-    echo''.$name.'';
-
-
-
-//узнаем категорибю товара
-    $categoryId=$ProductsOptions[$pid]["parent_id"];
-// по категории узнаем тип товара горшечка или упаковка
-    $tip=$products_class[$categoryId] ?? '';
-
-
-    if(count($productsColorsArray[$pid] ?? [])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
-    echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
-    echo'</td>';
-
-    foreach($data as $row)   printFieldTd($row["name_eng"],$pid,$store_id);
-
-    echo'</tr>';
-
-
-//begin colors
-    foreach($productsColorsArray[$pid] ?? [] as $color) {
-        $color=trim($color);
-        if(!empty($color))  {
-            echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;"><td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>';
-
-            if(!empty($products_varieties[$pid][$color])) {
-                echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';
-                foreach($products_varieties[$pid][$color] as $k => $var) {
-                    echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
-                }
-                echo'</div>';
-            }
-
-            foreach($data as $row) {
-                printFieldTd($row["name_eng"],$pid,$store_id,$color);
-
-            }
-            echo"</tr>";
-        }
-
-    }
-//end colors
-
-
-}
-
-
-echo'<tr class="bg-success zg"><td class="text-right"></td>';
-foreach($data as $row) {
-    $dostup=$dostup_fields[$row["id"]];
-    $bg=$bg_fields[$row["id"]];
-    if($dostup=="edit" or $dostup=="show") {
-        echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
-    }
-}
-echo'</tr>
-<tr class="bg-success"><td class="text-right">итого</td>';
-foreach($data as $row) {
-    $dostup=$dostup_fields[$row["id"]];
-    if($dostup=="edit" or $dostup=="show") {
-        $s="";
-        if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]];
-        if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
-
-        echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
-    }
-}
-echo'</tr></tbody>';
-echo'</table>
-
-<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
-/*
-$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");
-
-// суммируем деление и заносим данные в таблицу хранения данных по полям
-foreach($products as $productId => $name) {
-//echo"<br>$name ";
-  $all=0;
-  $division_auto_need_all=0;
-  foreach($storesArrayAll as $storeId => $nameStore) {
-  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
-   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
-    $all =$all+$summ;
-    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
-  //  if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
-
-
-  }
-
-$field_name="division_auto_need_all";
-//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
-if(!empty($division_auto_need_all)) {
-   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
-    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
-
-
-}
-
-//пробегаемся по всем продуктам
-foreach($products as $productId => $name) {
-
-
-$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
-
-
-echo"<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
-Сумма потребности =".$division_auto_need_all."
-Сумма получаено по факту  ".$quantity_warehouseman_fact."";
-
-$division_ratio=1;
-if($division_auto_need_all > $quantity_warehouseman_fact) {
-$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
-
-echo"<font color=red>-меньше!</font>";
-
-echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
-
-}
-
-$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
-insert_store_orders_fields($data_uper,"division_ratio");
-
-
-}
-
-*/
-
-
-
-
-$_CONFIG["jscss"] .="<script>
-    const param4x = $('meta[name=csrf-param]').attr('content');
-const token4x = $('meta[name=csrf-token]').attr('content');
-
-function ajaxFieldInfo(id){
- $('#modal-7 .modal-body').html('Загружаем....');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');  
- $.ajax({
-       url: '/shipment/ajaxFieldInfo/',
-       method: 'post',       
-       dataType: 'html',        
-       data: {id: id},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}); 
-}
-
-function ajaxUpdateFieldsData(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
-       url: '/shipment/ajax-update-fields-data/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update:'1', [param4x] : token4x},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}); 
-}
-
-
-function ajaxUpdateStep(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipment/ajax-update-step/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update_step:'1', [param4x] : token4x},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}); 
-}
-
-
-function ajaxUploadAutoPurchase(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipment/ajaxUploadAutoPurchase/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update_step:'1'},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}); 
-}
-
-function foreachSalesHand(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
- $.ajax({
-       url: '/shipment/ajax-update-step/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, update_step:'1', foreachSalesHand:'1', [param4x] : token4x},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}); 
-}
-
-
-function deleteAll(){
- const result = confirm('Удаляем данные?');
-    
-    if (result) {
-
- $('#modal-7 .modal-body').html('Удаляем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');  
- $.ajax({
-       url: '/shipment/ajax-update-step/',
-       method: 'post',       
-       dataType: 'html',        
-       data: { id: $orderId, deleteAll:'1', [param4x] : token4x},  
-       success: function(data){  
-    $('#modal-7 .modal-body').html(data);
-       }}); 
-}
-}
-
-
-</script>";
-
-$_CONFIG["jscss"] .='<!-- MODAL -->
-               <div class="modal fade" id="modal-7">
-                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
-                               <div class="modal-content">
-                                       <div class="modal-header">
-                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
-                                       </div>
-                                       <div class="modal-body p-0">
-                               
-                                       </div>
-                       
-                               </div>
-</div>
-</div>';
-
-
-
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
-
-
-
-
diff --git a/erp24/views/shipment/fields.php b/erp24/views/shipment/fields.php
deleted file mode 100644 (file)
index e82195e..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-use \yii\helpers\ArrayHelper;
-use \yii_app\records\AdminGroup;
-use \yii_app\records\StoreOrdersFields;
-use \yii_app\records\StoreOrdersStatuses;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-//include"templates/top.php";
-
-//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
-
-$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
-//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1 or id=10");
-
-echo "<div class='m-5'>";
-
-echo'<h1 class="page-title mb-0 text-primary">Настройка статусов в заказе у поставщиков кто может ставить статусы</h1>';
-
-
-if(!empty($_POST["save"])){
-
-    foreach($_POST["description"] as $idr => $val) {
-
-        StoreOrdersFields::updateAll(['description' => $val], ['id' => $idr]);
-//        $db::sql("UPDATE store_orders_fields SET description=? WHERE id=?",[$val,$idr]);
-
-    }
-
-
-}
-
-$data = StoreOrdersStatuses::find()->select(['id', 'dostup'])->asArray()->all();
-//$data=$db::getRows("SELECT id, dostup FROM `store_orders_statuses` WHERE 1");
-foreach($data as $row) {
-    $dostup[$row["id"]] = json_decode($row["dostup"], true);
-
-}
-
-
-echo'<form method=post action="/shipment/fields/">';
-?><input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" /><?php
-
-
-$data = StoreOrdersFields::find()->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_fields");
-echo'<table class="table table-hover"><thead><th width=100>название кратко</th>
-<th>name_eng</th>
-<th>SQL таблица сохранения</th>
-
-<th>тип</th>
-<th>тип данных</th>
-
-<th>сумма по столбцу</th>
-<th>сохраняем цвета в ячейке</th>
-
-
-</thead><tbody>';
-foreach($data as $row) {
-
-    echo"
-    <tr><td><b>".$row["name"]."<b><br>
-    <small>".$row["name_full"]."</small></td>
-     
-    
-    <td>".$row["name_eng"]."</td>
-    <td>".$row["sql_table_values"]."</td>
-    <td>".$row["type"]."";
-
-    if(in_array($row["type"],array("multiplication","avg","difference")))
-        echo"   <input type=text class=\"form-control\" name=func_content[".$row["id"]."] value=\"".$row["func_content"]."\">";
-
-    echo"</td>
-     <td>".$row["tip"]."</td>   
-   
-           <td>"; if($row["summ"]) echo"да"; echo"</td> 
-             <td>"; if($row["colors_save"]) echo"да"; echo"</td>   
-    </tr><tr><td colspan=7><textarea class=\"form-control\" name=description[".$row["id"]."] rows=1>".$row["description"]."</textarea></td></tr>";
-    /*
-       echo'<tr><td colspan=7><table>';
-       foreach($statuses as $gid => $name) {
-       if(!empty($roles[$gid])) {
-
-           echo"<tr><td class=\"text-right\">".$name."</td><td style=\"min-width:300px\"> ";
-
-        //   $dostup[$status_id]
-
-         echo' </td></tr>';
-
-
-
-       }
-      }
-      echo'</table></td></tr>';
-      */
-
-}
-echo'</tbody></table><button class="btn btn-success" name="save" value=1>сохранить</button></div></form>';
-
-echo "</div>";
-
-//include"templates/bottom.php";
-
-
-
-
-
-
old mode 100755 (executable)
new mode 100644 (file)
index fd24bb9..e1ea7f1
@@ -1,116 +1,5 @@
 <?php
 
+chdir(__DIR__ . '/../../');
 
-use yii\grid\ActionColumn;
-use yii\helpers\Url;
-use yii\helpers\Html;
-use yii\grid\GridView;
-use yii\widgets\Pjax;
-use yii_app\records\Dashboard;
-
-/* @var $this yii\web\View */
-/* @var $bonusConversionCost int */
-
-/* @var $userSalarySalut float */
-/* @var $userSalarySalutPremium float */
-/* @var $storeOrders array */
-/* @var $dozakupka array */
-/* @var $store_orders_statuses array */
-
-$this->title = 'Список закупок';
-$this->params['breadcrumbs'][] = $this->title;
-$modul = 'shipments';
-
-?>
-
-
-<div class="dashboard-index">
-
-    <h1>
-        <?= Html::encode($this->title) ?>
-        <?= Html::a('+ добавить закупку', ['add'], ['class' => 'btn btn-success']) ?>
-    </h1>
-
-</div>
-<?php
-
-foreach($storeOrders as $row) {
-    ?>
-    <div class="expanel expanel-default">
-        <div class="expanel-heading">
-
-            <span class="btn btn-white btn-light me-1"  onclick="$('#external__<?php echo $row["id"]?>').toggle();">показать дозакупки</span>
-            <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $row["id"]?> class="btn btn-default fs-5">
-                <span class="btn btn-outline-info"><?php echo $row["id"]?></span> <?php echo $row["name"]?></a>
-
-
-            <div class="d-inline-block dropdown me-2">
-                <button type="button" class="btn bg-dark-transparent dropdown-toggle"  onclick="$(this).parent().children('.dropdown-menu').toggle();">действия</button>
-                <div class="dropdown-menu" style="display:none;">
-                    <a class="dropdown-item" href="/shipment/add/?id=<?php echo $row["id"]?>">правка</a>
-                    <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $row["id"]?>>старый интерфейс</a>
-                    <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $row["id"]?>>новый интерфейс</a>
-                    <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $row["id"]?> >новый интерфейс2</a>
-                    <a class="dropdown-item" href=/shipment/division/?id=<?php echo $row["id"]?>>деление</a>
-                    <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $row["id"]?>>цвета для кустовых при заказе</a>
-
-                    <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $row["id"]?>>деление - печать на складе</a>
-                    <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $row["id"]?>>деление - по цветам</a>
-                </div>
-            </div>
-
-            <a href="/shipment/edit/?id=<?php echo $row["id"]?>" class="btn btn-warning btn-sm me-2"><?php echo $store_orders_statuses[$row["status"]]?></a>
-            <small>дата продаж: <?php echo $row["date_start"]?>, создано <?php echo $row["date_add"]?>  <i><?php echo $row["comments"]?></i></small>
-
-
-
-
-        </div>
-
-        <div class="expanel-body" id="external__<?php echo $row["id"] ?>" style="display:none;">
-            <div class="row">
-                <?php
-                if (array_key_exists($row["id"], $dozakupka)) {
-                    foreach($dozakupka[$row["id"]] as $rows) {
-
-                    ?>
-                        <div class="col-12">
-                            <div class="ml-4">
-                                <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $rows["id"]?> class="btn btn-white fs-6 me-3">
-                                    <span class="btn btn-outline-info fs-6 me-2"><?php echo $rows["id"]?></span><?php echo $rows["name"]?>
-                                    <span class="me-2 btn btn-sm bg-warning"><?php echo $store_orders_statuses[$rows["status"]]?></span>
-                                </a>
-                                <div class="dropdown d-inline-block">
-                                    <button type="button" class="btn bg-dark-transparent dropdown-toggle"  onclick="$(this).parent().children('.dropdown-menu').toggle();">действия </button>
-                                    <div class="dropdown-menu" style="">
-                                        <a class="dropdown-item" href="/shipment/add/?id=<?php echo $rows["id"]?>">правка</a>
-                                        <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $rows["id"]?>>старый интерфейс</a>
-                                        <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $rows["id"]?>>новый интерфейс</a>
-                                        <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $rows["id"]?> >новый интерфейс2</a>
-                                        <a class="dropdown-item" href=/shipment/division/?id=<?php echo $rows["id"]?>>деление</a>
-                                        <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $rows["id"]?>>цвета для кустовых при заказе</a>
-                                        <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $rows["id"]?>>деление - печать на складе</a>
-                                        <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $rows["id"]?>>деление - по цветам</a>
-                                    </div>
-                                </div>
-                                <i><?php echo $rows["comment"] ?? ''?></i>
-                                <table class="table"><tbody></tbody></table>
-                            </div>
-                        </div>
-                        <?php
-                    }
-                }
-                ?>
-
-            </div>
-        </div>
-
-
-    </div>
-
-
-
-
-
-<?php
-}
+include 'modul/shipment/index.php';
\ No newline at end of file
diff --git a/erp24/views/shipment/polnogramm.php b/erp24/views/shipment/polnogramm.php
deleted file mode 100644 (file)
index 7900ea7..0000000
+++ /dev/null
@@ -1,549 +0,0 @@
-<?php
-
-use \yii_app\records\StorePlanogram;
-use \yii_app\records\StorePlanogramLogi;
-use \yii_app\records\StorePlanogramColorsSort;
-use \yii_app\records\Products1cOptions;
-use \yii_app\records\ProductsClass;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-//include"templates/top.php";
-
-$store_id = '';
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-
-
-//$dost=[1,2,4]; //$_SESSION["store_arr_dostup"]
-
-$k=0;
-$where="";
-foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
-    if(!empty($guid)) {
-        if($k!=0) $where .=", ";
-        $where .="'$guid' ";
-        $k++;
-    }
-}
-
-if(!empty($where)) $where =" AND id in( $where )";
-
-
-if(in_array($_SESSION["group_id"],[1,10,51])) $editView=1; else $editView=0;
-
-$save=0;
-
-if(in_array($_SESSION["group_id"],[1,10])) $save=1;
-
-
-$massiver[]=["name"=>"П-ма мин.","title"=>"Полнограмма минимальная","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0"];
-$massiver[]=["name"=>"П-ма Макс.","title"=>"Полнограмма Максимальная","name_eng"=>"quantity_max", "name_eng_sql"=>"quantity_max", "background"=>"bg-danger2", "step"=>"1", "placeholder"=>"0"];
-
-
-
-echo'<h1 class="page-title mb-0 text-primary">полнограмма</h1>';
-
-$stores = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['and', ['tip' => 'city_store'], ['view' => '1']])
-    ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' $where  order by name ASC");
-
-
-
-foreach($stores as $strid=>$namestore){
-    echo"<a href=\"/shipment/polnogramm/?store_id=$strid\" class=\"btn btn-";
-    if(isset($store_id) && $store_id==$strid) echo"success"; else echo"info";  echo" btn-sm m-1\">$namestore</a>";
-}
-
-
-//$w="";
-$providers = yii\helpers\ArrayHelper::map(\yii_app\records\ShipmentProviders::find()->select(['name', 'id'])->all(), 'id', 'name');
-//$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-//$k=0;
-//foreach($in as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=",";  $w .=" '$pid'"; $k++; }
-
-
-if(!empty($_POST["save_view"]) and $editView==1) {
-    $db::sql("UPDATE products_1c SET view=0 WHERE tip='products'");
-    foreach($_POST["view"] as $productId => $on) {
-        $productId=htmlentities($productId);
-        if($on=="on") $db::sql("UPDATE  products_1c SET view=1 WHERE tip='products' AND id=?",[$productId]);
-        //if(empty($on))  mess("<br> $productId = $on ");
-    }
-}
-
-
-
-if(!empty($_POST["save"])) {
-
-
-    mess("save");
-
-
-    foreach($massiver as $m0 => $m1) {
-        $name_eng=$m1["name_eng_sql"];
-        foreach($_POST[$name_eng] as $m => $val) {
-            $val= mb_eregi_replace('[^0-9.]', '', $val);
-            $sql_param[$m][$name_eng]=$val;
-
-        }
-    }
-
-
-
-
-    $log = [];
-    foreach($sql_param as $prod_id => $massi) {
-
-        $dataRow=$db::getRows("SELECT date_id, color, quantity, quantity_max FROM store_planogram_logi WHERE
-store_id='$store_id' AND product_id='$prod_id'  order by date_id DESC LIMIT 12");
-
-        $date_id="";
-        foreach($dataRow as $row){
-            if(empty($date_id)) $date_id=$row["date_id"];
-            if(empty($row["color"])) $row["color"]="NULL";
-
-            if($date_id==$row["date_id"]) {
-                $log[$row["color"]]["quantity"]=$row["quantity"];
-                $log[$row["color"]]["quantity_max"]=$row["quantity_max"];
-            }
-
-        }
-
-
-
-        if(($log["NULL"]["quantity"] ?? 0) != $massi["quantity"])
-        {
-
-            $comment_id=(int)$_POST["comment_id"][$prod_id];
-            // echo" <br>".$log["NULL"]["quantity"]." new_valiue= ".$massi["quantity"]." comment_id=$comment_id ";
-            $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
-            if (!$storePlanogram) {
-                $storePlanogram = new StorePlanogram;
-                $storePlanogram->store_id = $store_id;
-                $storePlanogram->product_id = $prod_id;
-                $storePlanogram->color = '';
-            }
-            foreach ($massi as $pole => $value) {
-                $storePlanogram->$pole = $value;
-            }
-            $storePlanogram->save();
-            if ($storePlanogram->getErrors()) {
-                var_dump($storePlanogram->getErrors());
-            }
-//            $sql="INSERT IGNORE INTO store_planogram SET  ";
-//            $up= "store_id='$store_id', product_id='$prod_id', color=''"; foreach($massi as $pole =>$value)  $up .=", $pole='$value' ";
-//            $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//            $db::sql($sql);
-            // echo"<br>$sql ";
-            $storePlanogramLogi = StorePlanogramLogi::find()
-                ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
-            if (!$storePlanogramLogi) {
-                $storePlanogramLogi = new StorePlanogramLogi;
-                $storePlanogramLogi->date_id = date("Ymd");
-                $storePlanogramLogi->store_id = $store_id;
-                $storePlanogramLogi->product_id = $prod_id;
-                $storePlanogramLogi->color = '';
-            }
-            foreach ($massi as $pole => $value) {
-                $storePlanogramLogi->$pole = $value;
-            }
-            $storePlanogramLogi->comment_id = $comment_id;
-            $storePlanogramLogi->save();
-//            $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
-//            $sql="INSERT IGNORE INTO store_planogram_logi SET  ";
-//            $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//            $db::sql($sql);
-
-
-
-
-            foreach($_POST["quantity__color"][$prod_id] ?? [] as $color => $quan) {
-                $color=trim($color);
-                $quan=(int)$quan;
-                if(!empty($color)) {
-                    $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
-                    if (!$storePlanogram) {
-                        $storePlanogram = new StorePlanogram;
-                        $storePlanogram->store_id = $store_id;
-                        $storePlanogram->product_id = $prod_id;
-                        $storePlanogram->color = $color;
-                    }
-                    $storePlanogram->quantity = $quan;
-                    $storePlanogram->save();
-//                    $sql="INSERT IGNORE INTO store_planogram SET  ";
-//                    $up= " store_id='$store_id', product_id='$prod_id', color='$color',  quantity='$quan' ";
-//                    $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//                    $db::sql($sql);
-
-                    $storePlanogramLogi = StorePlanogramLogi::find()
-                        ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
-                    if (!$storePlanogramLogi) {
-                        $storePlanogramLogi = new StorePlanogramLogi;
-                        $storePlanogramLogi->date_id = date("Ymd");
-                        $storePlanogramLogi->store_id = $store_id;
-                        $storePlanogramLogi->product_id = $prod_id;
-                        $storePlanogramLogi->color = $color;
-                    }
-                    $storePlanogramLogi->comment_id = $comment_id;
-                    $storePlanogramLogi->save();
-//                    $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
-//                    $sql="INSERT IGNORE INTO store_planogram_logi SET  ";
-//                    $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//                    $db::sql($sql);
-
-
-
-                }
-            }
-
-
-            foreach($_POST["quantity_max__color_max"][$prod_id] ?? [] as $color => $quan) {
-                $color=trim($color);
-                $quan=(int)$quan;
-                if(!empty($color)) {
-                    $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
-                    if (!$storePlanogram) {
-                        $storePlanogram = new StorePlanogram;
-                        $storePlanogram->store_id = $store_id;
-                        $storePlanogram->product_id = $prod_id;
-                        $storePlanogram->color = $color;
-                    }
-                    $storePlanogram->quantity = $quan;
-                    $storePlanogram->save();
-//                    $sql="INSERT IGNORE INTO store_planogram SET ";
-//                    $up= " store_id='$store_id', product_id='$prod_id', color='$color', quantity_max='$quan' ";
-//                    $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//                    $db::sql($sql);
-                    //echo"<br> $sql";
-                }
-            }
-
-        }
-
-
-    }
-
-    mess("Полнограмма для магазина сохранена");
-}
-
-echo'<div class="table-responsive mt-3">';
-
-if($save==1) echo'<form method=post>' . '<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() .'" />';
-
-echo'
-<table  class="table table-sm table-hover border-top text-nowrap"><thead>';
-
-foreach($massiver as $f =>$mass) {
-    echo'<th style="width:90px;">'.$mass["name"].'</th>';
-}
-echo'<th class="w-90">наименование</th>';
-
-if($editView==1)  echo'<th>видимый</th>';
-echo'</thead><tbody>';
-
-
-if (isset($store_id)) {
-    $data3 = StorePlanogram::find()->where(['store_id' => $store_id, 'color' => ''])->asArray()->all();
-//    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
-    foreach ($data3 as $row2) {
-        $values_in[$row2["product_id"]]["quantity"] = $row2["quantity"];
-        $values_in[$row2["product_id"]]["quantity_max"] = $row2["quantity_max"];
-
-    }
-
-    $data3 = StorePlanogram::find()->where(['store_id' => $store_id])->andWhere(['!=', 'color', ''])->asArray()->all();
-//    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
-    foreach ($data3 as $row2) {
-        $colors_in[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
-        $colors_in_max[$row2["product_id"]][$row2["color"]] = $row2["quantity_max"];
-    }
-}
-
-
-
-
-$colorSort=[];
-if (isset($store_id)) {
-    $data = StorePlanogramColorsSort::find()->select(['product_id', 'color', 'posit'])->where(['store_id' => $store_id])
-        ->orderBy(['product_id' => SORT_ASC, 'posit' => SORT_ASC])->asArray()->all();
-//    $data = $db::getRows("SELECT product_id,color,posit FROM store_planogram_colors_sort WHERE store_id=?  order by product_id ASC, posit ASC", [$store_id]);
-    foreach ($data as $row) $colorSort[$row["product_id"]][] = $row["color"];
-}
-
-/*
-
-echo 'Максимальный размер данных: ' . ini_get('post_max_size') . '<br>';
-echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '<br>';
-echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '<br>';
-echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '<br>';
-echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '<br>';
-echo 'Память для скрипта: ' . ini_get('memory_limit') . '<br>';
-*/
-
-$providers[0]="-без поставщика-";
-
-$data = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'p.view'])
-    ->innerJoin('products_1c p', 'p.id = o.id AND o.provider_id > 0')
-    ->orderBy(['o.provider_id' => SORT_ASC, 'p.view' => SORT_DESC, 'p.name' => SORT_ASC])->asArray()->all();
-//$data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors,p.view  FROM products_1c_options as o, products_1c as p  WHERE
-//p.id=o.id AND o.provider_id>0 order by o.provider_id ASC, p.view DESC, p.name ASC");
-
-
-$products_group = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['tip' => 'products_group'])->all(), 'id', 'name');
-//$products_group=$db::mapping("SELECT id, name FROM products_1c   WHERE tip='products_group'");
-
-$data2 = ProductsClass::find()->alias('cl')->select(['p.id', 'p.name', 'p.parent_id',  'o.provider_id', 'o.colors', 'p.parent_id as category_id'])
-    ->leftJoin('products_1c p', 'p.view =1 AND p.parent_id=cl.category_id')
-    ->leftJoin('products_1c_options o', 'p.id = o.id')
-    ->where(['cl.tip' => 'related'])
-    ->groupBy(['p.id'])
-    ->orderBy(['o.provider_id' => SORT_DESC, 'p.parent_id' => SORT_DESC, 'p.name' => SORT_ASC])
-    ->asArray()->all();
-//$data2=$db::getRows("SELECT p.id, p.name, p.parent_id,  o.provider_id, o.colors, p.parent_id as category_id FROM
-//   products_class as cl
-//  LEFT JOIN products_1c as p    ON (p.view='1' AND p.parent_id=cl.category_id )
-//   LEFT  JOIN products_1c_options as o ON (p.id=o.id)
-//WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
-$data = array_merge($data, $data2);
-
-
-$providersIn = [];
-$category_idIn = [];
-$p = 0;
-foreach($data as $row) {
-    if(!in_array($row["provider_id"],$providersIn)) {
-
-        if(empty($providers[$row["provider_id"]])) {
-            echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
-        } elseif(!empty($providers[$row["provider_id"]]))
-        {
-            echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();"><td colspan=4 class="bg-success fs-4 p-2">+ 
- '.$providers[$row["provider_id"]].'</td></tr>';
-        }
-
-        $providersIn[]=$row["provider_id"];
-
-    }
-
-
-    if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
-        echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
- <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
-        $category_idIn[]=$row["category_id"];
-        $p++;
-    }
-
-    echo"<tr style=\"display:none\" class=\"pr__".$row["provider_id"]." ";
-    if(!empty($row["category_id"])) echo" category__".$row["category_id"];
-    if(empty($row["view"]))  echo" bg-warning";
-    echo"\">";
-    foreach($massiver as $f =>$mass) {
-        echo'<td title="'.$mass["title"].'"><input onclick="$(\'.p'.$row["id"].'\').show();" type=numeric oninput="up(this)" min="0" name='.$mass["name_eng"].'['.$row["id"].']  value="';
-        if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
-        echo'"';
-        if(!empty($mass["pattern"])) echo ' pattern="'.$mass["pattern"].'"';
-        if(isset($mass["step"])) echo ' step="'.$mass["step"].'"';
-        if(isset($mass["placeholder"])) echo ' placeholder="'.$mass["placeholder"].'"';
-        echo' class="poln';
-        if(isset($mass["background"])) echo ' '.$mass["background"];
-        echo'"';
-        echo'></td>';
-
-    }
-
-    echo"<td class=\"fs-5 p-1\">".$row["name"]." ";
-    //if($providers[$row["provider_id"]]) echo"<span class=\"btn btn-sm btn-indigo\">".$providers[$row["provider_id"]]."</span>";
-
-    if (isset($store_id)) {
-        echo '<a href="/shipment/store-planogram-logi/?store_id=' . $store_id . '&product_id=' . $row["id"] . '">logi</a>';
-    }
-    echo'<select class="form-control p'.$row["id"].' bg-danger" name=comment_id['.$row["id"].'] style="display:none;width:100px;">';
-    $sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
-    foreach($sel as $sid => $sname){
-        echo'<option value='.$sid.'';
-        if(isset($sthis) && $sid==$sthis) echo' selected';
-
-        echo'>'.$sname.'</option>';
-
-    }
-
-
-    echo'</select>';
-
-
-    echo"</td>";
-
-    if($editView==1) {  echo"<td><input type=checkbox name=view[".$row["id"]."] ";  if(isset($row["view"]) && $row["view"]==1) echo" checked";  echo"></td>";}
-    echo"</tr>";
-
-    if(!empty($row["colors"])) {
-        $colors=explode(";",$row["colors"]);
-
-
-
-////////// color
-        echo'<tr style="display:none" class="pr__'.$row["provider_id"].'"><td colspan=2 class="text-right pt-2">минимальные</td><td colspan=2>';
-        foreach($colors as $color) {
-            $color=trim($color);
-            $percentTxt=""; $cssClass="";
-            if(!empty($values_in[$row["id"]]["quantity"]) and !empty($colors_in[$row["id"]][$color]))   {
-                $percent=round(100*($colors_in[$row["id"]][$color]/$values_in[$row["id"]]["quantity"]),2);
-                $percentTxt =" ($percent%)";
-                $cssClass=" cssLime";
-            }
-
-
-            echo'<div class="dinlineblock'.$cssClass.'">
-   <table cellpadding=0 cellspasing=0><td><input type=numeric name=quantity__color['.$row["id"].']['.$color.'] class="input-sm" value="'.(isset($colors_in) ? $colors_in[$row["id"]][$color] ?? '' : '').'"></td>
-  <td>'.$color.''.$percentTxt.'</td></table></div>';
-            //<span class="btn btn-sm btn-warning">цвет '.$row["name"].'</span>
-
-        }
-        echo'</div></td></tr>';
-//////////    end color
-
-
-////////// color max
-
-        if(!empty($colorSort[$row["id"]])) {
-            $colors_new=[];
-            foreach($colorSort[$row["id"]] as $color1 => $color)    $colors_new[]=$color;
-
-
-            foreach($colors as $color1 => $color) {
-                // if(!in_array($color,$colors_new))  $colors_new[]=$color;
-            }
-
-
-        } else $colors_new=$colors;
-
-
-
-
-        echo'<tr style="display:none" class="pr__'.$row["provider_id"].' bg-danger2"><td colspan=2 class="text-right pt-2"> <a href="/shipment/ProductColorSort/?product_id='.$row["id"].'&store_id='.$store_id.'" target=new class="fs-4 btn bt-info">⇅</a> максимальные</td><td colspan=2>';
-        foreach($colors_new as $color) {
-            $color=trim($color);
-            echo'<div class="dinlineblock">
-   <table cellpadding=0 cellspasing=0><td><input type=numeric name='.$mass["name_eng"].'__color_max['.$row["id"].']['.$color.'] class="input-sm" value="'.($colors_in_max[$row["id"]][$color] ?? '').'"></td>
-  <td>'.$color.'</td></table></div>';
-        }
-        echo'</div></td></tr>';
-//////////    end color max
-
-
-
-
-
-    }
-
-
-}
-echo'</tbody></table>';
-
-
-
-if($save==1) {
-
-
-    echo'<button type=submit name=save value=1 class="btn btn-success btn-lg m-2">сохранить</button>';
-
-
-// даем доступ к сохранению только изранным группам
-    if($editView==1) {
-        echo'<button type=submit name=save_view value=1 class="btn btn-success btn-lg m-2">изменить показ товаров в полнограмме</button>';
-    }
-}
-
-
-if($save==1) echo'</form>';
-
-/*
-
-echo"<h2>Сопутка</h2>";
-$data=$db::getRows("SELECT p.id, p.name FROM products_class as cl, products_1c as p  WHERE
-p.parent_id=cl.category_id  AND cl.tip='related' order by p.name ASC");
-
-foreach($data as $row) {
-
-echo"<br>  ".$row["provider_id"]." ".$row["name"]." ";
-}
-
-
-*/
-
-
-echo'</div>';
-
-
-
-
-$_CONFIG["jscss"]='
-<style>.table tbody tr td{padding:0;}
-
-.input-sm{width:70px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
-input[type="numeric"].poln,.poln{font-weight:bolder; width:90px; font-size:1.7rem; background:lime; color:#000; border:0;padding:2px;  text-align:center;}
-.cssLime{background:#caefca;padding:0.4rem;}
-.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
-.bg-danger2,input[type="numeric"].poln.bg-danger2{background:#ffd0d0}
-
-
-</style>
-<script>
-function up(e) {
-  if (e.value.indexOf(".") != \'-1\') {
-    e.value=e.value.substring(0, e.value.indexOf(".") + 3);
-  }
-
-   
-  
-}
-
-
-';
-/*
-
-
-function ajaxProductColorSort(product_id){
-
- jQuery(\'#modal-7\').modal(\'show\', {backdrop: \'static\'}); $(\'#modal-7 .modal-title\').text(\'Сортировка цветов по приоритету для товара\');
-
-$.ajax({
-       url: \'/shipment/ProductColorSort/\',
-       method: \'post\',
-       dataType: \'html\',
-       data: {product_id: product_id, store_id : \''.$store_id.'\'},
-       success: function(data){
-    $(\'#modal-7 .modal-body\').html(data);
-       }});
-}
-</script>
-
-
-<!-- MODAL -->
-               <div class="modal fade" id="modal-7">
-                       <div class="modal-dialog modal-dialog-centered text-center" role="document">
-                               <div class="modal-content modal-content-demo">
-                                       <div class="modal-header">
-                                               <h6 class="modal-title"></h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
-                                       </div>
-                                       <div class="modal-body">
-
-                                       </div>
-                                       <div class="modal-footer">
-
-                                        <button class="btn btn-secondary" data-bs-dismiss="modal" type="button">закрыть</button>
-                                       </div>
-                               </div>
-                       </div>
-               </div>*/
-
-
-//include"templates/bottom.php";
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
-
-
diff --git a/erp24/views/shipment/set-division-priority.php b/erp24/views/shipment/set-division-priority.php
deleted file mode 100644 (file)
index 73fc8f4..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<?php
-
-use yii\widgets\ActiveForm;
-use yii\base\DynamicModel;
-
-use yii_app\helpers\PrintBlockHelper;
-
-use kartik\select2\Select2;
-
-/** @var $products array */
-/** @var $filterModel DynamicModel */
-/** @var $orderStoreSort array */
-/** @var $storeNamesByGuid array */
-/** @var $storePlanogramByStoreGuid array */
-/** @var $salesQuantity array */
-
-$this->registerCssFile('/css/customSortable.css');
-$this->registerJsFile('/js/Sortable.js', ['position' => \yii\web\View::POS_END]);
-$this->registerJsFile('/js/customSortable.js', ['position' => \yii\web\View::POS_END]);
-
-?>
-
-<div class="setDivisionPriority m-5">
-    <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
-        <?php PrintBlockHelper::printBlock('Товар', $filterForm->field($filterModel, 'productId')->widget(Select2::class, [
-            'data' => $products,
-            'language' => 'ru',
-            'options' => ['placeholder' => 'Товар...'],
-            'pluginOptions' => [
-                'allowClear' => true,
-            ],
-            'pluginEvents' => [
-                'change' => 'function() {
-                    $("#filter-form").get(0).submit();
-                }',
-            ]
-        ])->label(false)); ?>
-    <?php ActiveForm::end(); ?>
-    <?php if ($orderStoreSort && $storeNamesByGuid && $storePlanogramByStoreGuid): ?>
-        <div class="row">
-            <div class="col-1"></div>
-            <div class="col-2">Магазин</div>
-            <div class="col-2">Продажи</div>
-            <div class="col-2">Планограмма минимум</div>
-            <div class="col-2">Планограмма максимум</div>
-        </div>
-        <div class="draganddropTable" data-name="stores#<?= $filterModel->productId ?>">
-            <?php foreach ($orderStoreSort as $orderStore): ?>
-                <div class="row">
-                    <div class="col-1 drag-handler"></div>
-                    <div class="col-2">
-                        <?= $storeNamesByGuid[$orderStore->store_id] ?? '---' ?>
-                    </div>
-                    <div class="col-2">
-                        <?= $salesQuantity[$orderStore->store_id] ?? '---' ?>
-                    </div>
-                    <div class="col-2">
-                        <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity ?? '---' ?>
-                    </div>
-                    <div class="col-2">
-                        <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity_max ?? '---' ?>
-                    </div>
-                </div>
-            <?php endforeach; ?>
-        </div>
-    <?php endif; ?>
-</div>
diff --git a/erp24/views/shipment/store-planogram-logi.php b/erp24/views/shipment/store-planogram-logi.php
deleted file mode 100644 (file)
index 64883af..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-use yii_app\records\Products1c;
-use yii\helpers\ArrayHelper;
-use yii_app\records\StorePlanogram;
-use yii_app\records\StorePlanogramLogi;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-//include"templates/top.php";
-
-$store_id = $product_id = null;
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-if(!empty($_REQUEST["product_id"])) $product_id=htmlentities($_REQUEST["product_id"]);
-
-$sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
-
-echo'<h1 class="page-title mb-0 text-primary">Логи матрицы товара на магазине</h1>  
-
-
-
-</p><div id=editDiv></div>';
-
-$storesAll = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store'])
-    ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
-
-
-
-if(!empty($store_id)) {
-    echo'<div class="table-responsive mt-3">
-
-
-история
-<table class="table">';
-    echo'<tbody>';
-
-    $dataRow = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $product_id, 'color' => ''])->one();
-//    $dataRow=$db::getRow("SELECT * FROM store_planogram WHERE store_id=? AND product_id=? AND color=''",[$store_id,$product_id]);
-
-
-    echo'<tr><td>сейчас</td><td>'.$dataRow["quantity"].'</td><td>'.$dataRow["quantity_max"].'</td><td>'.$dataRow["color"].'</td></tr>';
-
-
-    $data = StorePlanogramLogi::find()->where(['store_id' => $store_id, 'product_id' => $product_id])
-        ->orderBy(['date_id' => SORT_DESC, 'color' => SORT_ASC])->asArray()->all();
-//    $data=$db::getRows("SELECT * FROM store_planogram_logi WHERE store_id=? AND product_id=? order by date_id DESC, color ASC",[$store_id,$product_id]);
-
-
-    foreach($data as $row) {
-
-        if($row["color"]=="")
-            echo'<tr><td>'.$row["date_id"].'</td><td>'.$row["quantity"].'</td><td>'.$row["quantity_max"].'</td><td>'.$row["color"].'</td>
-<td>'.$sel[$row["comment_id"]].'</td>
-</tr>';
-
-    }
-
-
-    echo'</tbody></table>
-
-</div>';
-
-}
-
-//include"templates/bottom.php";
diff --git a/erp24/views/shipment/store-products-fact-edit.php b/erp24/views/shipment/store-products-fact-edit.php
deleted file mode 100644 (file)
index 48f3bb3..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-
-if(!empty($_REQUEST["product_id"])) {
-
-    $product_id=htmlentities($_REQUEST["product_id"]);
-    $color=htmlentities($_REQUEST["color"]);
-    $quantity=intval($_REQUEST["quantity"]);
-    $store_id=htmlentities($_REQUEST["store_id"]);
-    $date_id=intval($_REQUEST["date_id"]);
-    echo"Сохранили количество =$quantity";
-
-
-
-    if($color!="NULL") $color=str_replace('"','',$color);
-    else $color='';
-    $sql="INSERT IGNORE INTO store_products_fact SET  ";
-    $up= "store_id='$store_id', product_id='$product_id', date_id='$date_id', color='$color', quantity='$quantity' ";
-    $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//echo"<br><br>++$color++$sql";
-    $db::sql($sql);
-
-}
\ No newline at end of file
diff --git a/erp24/views/shipment/store-products-fact.php b/erp24/views/shipment/store-products-fact.php
deleted file mode 100644 (file)
index 0d6dd73..0000000
+++ /dev/null
@@ -1,630 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-//include"templates/top.php";
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-//$date_id=date("Ymd");
-if(!empty($_REQUEST["date_id"])) $date_id=intval($_REQUEST["date_id"]);
-$arrayDate=["first","second","third","fourth","fifth"];
-$typeDay="monday";
-if(!isset($_SESSION["show_planogram_0"])) $_SESSION["show_planogram_0"]=1;
-
-if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="hide")  $_SESSION["show_planogram_0"]=0;
-if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="show")  $_SESSION["show_planogram_0"]=1;
-
-
-
-if(isset($_REQUEST["typeDay"]) && $_REQUEST["typeDay"]) $typeDay=htmlentities($_REQUEST["typeDay"]); //"wednesday";
-
-//$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE date_id!=? order by date_id desc LIMIT 1",[date("Ymd")]);
-//f(empty($date_n_id))
-$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE 1 order by date_id desc LIMIT 1");
-
-
-$massivert[$date_n_id]=date('d.m.Y', strtotime($date_n_id));
-$massiver_time[$date_n_id]=strtotime($date_n_id);
-if(empty($date_id)) $date_id=$date_n_id;
-
-
-if(date('l', time())=="Wednesday") $typeDay="wednesday";
-
-$dayLinkstArray=["monday"=>"Понедельник", "wednesday"=>"Среда" ];
-$typer="";
-foreach($dayLinkstArray as $lnk => $name) {
-
-    $typer .="<a href=\"?typeDay=$lnk\" class=\"btn btn-sm btn-";
-    if($typeDay==$lnk) $typer .="success"; else $typer .="info";$typer .=" me-2\">$name</a>  ";
-}
-//echo"Выберите тип: $typer";
-
-
-$dayTextArray=[$typeDay];
-
-foreach($dayTextArray as $dayText) {
-    foreach($arrayDate as $sl) {
-        if(strtotime("$sl $dayText of this month")<time())  {
-            $massivert[date('Ymd', strtotime("$sl $dayText of this month"))]=date('d.m.Y', strtotime("$sl $dayText of this month"));
-            $massiver_time[date('Ymd', strtotime("$sl $dayText of this month"))]=strtotime("$sl $dayText of this month");
-        }
-    }
-}
-
-
-asort($massivert);
-
-$date_div="";
-foreach($massivert as $did => $date) {
-// if($massiver_time[$did]>0) {
-    $date_div .="<a href=\"?date_id=$did\" class=\"btn btn-sm btn-";
-    if($did==$date_id) $date_div .="success"; else $date_div .="info";
-    $date_div .=" me-2\">$date</a>  ";
-
-}
-
-
-
-//echo "<br>Выберите дату ".$date_div;  and empty($date_id)
-if(empty($_REQUEST["date_id"]) and !empty($_REQUEST["store_id"]))  {
-
-    error_mess("Выберите дату  $date_div");
-
-    exit();
-}
-
-$data=$db::getRows("SELECT id,name, providers_arr FROM `store_orders` WHERE date_start>NOW() - interval 25 day");
-foreach($data as $row) {
-    $pr=explode(",",$row["providers_arr"]);
-    foreach($pr as $prid) { if(!empty($prid)) $prov[$prid]=$prid;}
-}
-//echo print_r($prov);;
-
-
-$k=0;
-$where="";
-foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
-    if(!empty($guid)) {
-        if($k!=0) $where .=",";
-        $where.="'$guid' ";
-        $k++;
-    }
-}
-
-//if(!empty($where)) $where =" AND id in($where)";
-
-$massiver[]=["name"=>"Факт","title"=>"Фактические остатки","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0","type"=>"number","tip"=>"int"];
-$massiver[]=["name"=>"Комментарий","title"=>"Комментарий флориста","name_eng"=>"comment_type_id", "name_eng_sql"=>"comment_type_id", "class"=>"comment", "type"=>"select", "class"=>"sel",
-    "values_arr"=>["0"=>"-выбрать-",
-        1=>"не хватило товара",
-        2=>"большое списание по товару",
-        3=>"много товара",
-        4=>"Цветок одного цвета ",
-        5=>"Цветок плохого качества ",
-        6=>"Не пользуются спросом",
-        7=>"Не заказывали ,а привезли"
-    ],
-
-
-
-
-
-
-
-    "tip"=>"int"];
-if(in_array($_SESSION["group_id"],[1,10,7,50])) $massiver[]=["name"=>"Ком-й кустовой","title"=>"Комментарий кустового","name_eng"=>"comments", "name_eng_sql"=>"comments", "class"=>"comment", "placeholder"=>"0","type"=>"textarea","tip"=>"string"];
-
-
-
-echo'<h1 class="page-title mb-0 text-primary">Фактические остатки на '.date('d.m.Y',strtotime($date_id));
-if(isset($store_id) && empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&date_id=$did&show_planogram_0=show\" class=\"ml-3 me-2 btn-warning btn-sm\">показывать товары с 0 полнограммой</a>";
-if(isset($store_id) && !empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&&show_planogram_0=hide\" class=\"ml-3  me-2 btn-danger btn-sm\">скрыть товары с 0 полнограммой</a>";
-echo'</h1>     
-
-
-<a href="https://youtu.be/-jAr0uV5uZI" class="btn btn-danger btn-lg" target=new>Видео-инструкция</a> https://youtu.be/-jAr0uV5uZI
-<p>Флористы заполняют в понедельник и в среду до 11 часов по своему магазину. Вносят фактические остатки вместе по цветам тоже!
-Флористы или администраторы вносят комментарии из списка (3 причины). Далее кустовой просматривает и сотавляет свои комментарии текстом.
-Цифра в % на кнопке магазина показывает на сколько позиций заполнена полнограмма факт от полнограммы для данного магазина без учета цветов.
-<br>Заполняем на последнюю актуальную дату! '.$date_div.'
-
-
-
-
-</p><div id=editDiv></div>';
-
-
-if(empty($where)) mess("У вас не прописан доступ к магазинам автозаказа обратитесь +79308013638 Екатерина HR");
-
-
-$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view=1 AND id in($where)  order by name ASC");
-$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
-
-
-
-// сколько заполнено по магазинам
-$storesFact=array(); $storesFactNo=array();
-// полнограммы по всем магазинам
-$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' AND store_id!='' AND quantity>0 AND store_id in($where)");
-foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
-
-// полнограммы факт по всем магазинам
-$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_products_fact WHERE date_id=? AND quantity>0 AND store_id in($where)",[$date_id]);
-foreach($data3 as $row2) $factAll[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
-
-
-foreach($stores as $stId =>$nameStore) {
-//echo"<br>магазин ".$nameStore."   ";
-    $cnt=0; $all=0;
-    $arrays=$store_planogramAllStores[$stId] ?? [];
-    if(!empty($stores[$stId])){
-        foreach($arrays as $productId =>$quantity) {
-            if($factAll[$stId][$productId] ?? 0 >0 and $quantity>0)  {
-                //echo"+ $productId  = $quantity";
-                $cnt++;
-            }
-            $all++;
-        }
-        $percent=round(100*($cnt/($all == 0 ? 1 : $all)));
-//echo" $cnt из $all =$percent %";
-        $storesFact[$stId]=$percent;
-//не заполнившие магазины
-        if($percent<15) $storesFactNo[]=$stId;
-    }
-
-}
-// сколько заполнено по магазинам
-
-
-
-
-
-foreach($stores as $strid=>$namestore){
-    echo"<a href=\"/shipment/store-products-fact/?store_id=$strid&date_id=$date_id\" class=\"btn btn-sm btn-";
-    if(isset($store_id) && $store_id==$strid) echo"warning btn"; else echo"info";  echo" m-1\">";
-
-    if($storesFact[$strid]>20) echo"<span class=\"btn btn-sm bg-success me-1\" title=\"Полнограмма заполнена на ".$storesFact[$strid]."%\">+".$storesFact[$strid]."%</span>";
-
-    if(empty($storesFact[$strid])) echo"<span class=\"btn btn-sm bg-danger me-1\">-</span>";
-    elseif($storesFact[$strid]<10) echo"<span class=\"btn btn-sm bg-danger me-1\">".$storesFact[$strid]."%</span>";
-
-    if(empty($store_planogramAllStores[$strid])) echo"<span class=\"btn btn-sm bg-danger2 me-1\">нет полнограммы</span>";
-
-    echo"$namestore</a>";
-}
-
-
-
-if(!empty($storesFactNo)) {
-    echo'<p>магазины не заполнившие полнограмму';
-    foreach($storesFactNo as $stId) echo'<span class="btn btn-danger me-2 btn-sm">'.$storesAll[$stId].'</span>  ';
-
-    echo'</p>';
-
-}
-
-
-$w="";
-$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-$k=0;
-foreach(($in ?? []) as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=" OR";  $w .=" o.provider_id='$pid'"; $k++; }
-
-if(!empty($_POST["quantity"])) {
-
-    foreach($massiver as $m0 => $m1) {
-        $name_eng=$m1["name_eng_sql"];
-        foreach($_POST[$name_eng] as $m => $val) {
-            if($m1["tip"]=="int")    $val= mb_eregi_replace('[^0-9.]', '', $val);
-            else $val= htmlentities($val);
-            if($val>=0) $sql_param[$m][$name_eng]=$val;
-
-        }
-    }
-
-
-
-    foreach($sql_param as $prod_id => $massi) {
-        $sql="INSERT IGNORE INTO store_products_fact SET  ";
-        $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color=''";
-        foreach($massi as $pole =>$value)  $up .=", $pole='$value' ";
-        $sql .="$up ON DUPLICATE KEY UPDATE $up";
-
-        $db::sql($sql);
-
-        foreach($_POST["color"]["quantity"][$prod_id]  as $color => $quantity) {
-            $color=str_replace('"','',$color);
-            $sql="INSERT IGNORE INTO store_products_fact SET  ";
-            $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color='$color', quantity='$quantity' ";
-            $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//echo"<br><br>++$color++$sql";
-            $db::sql($sql);
-        }
-
-    }
-
-
-
-
-    mess("Факт для магазина сохранена");
-}
-if(!empty($store_id)) {
-    echo '<div class="table-responsive mt-3"><form action="" method=post>
-<table class="w-100" cellspasing=0 cellpadding=0 border=0>';
-    echo '<tbody>';
-
-
-    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
-    foreach ($data3 as $row2) $store_planogram[$row2["product_id"]] = $row2["quantity"];
-
-    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
-    foreach ($data3 as $row2) $store_planogram_colors[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
-
-
-    $data3 = $db::getRows("SELECT * FROM balances WHERE store_id=? AND quantity!=0", [$store_id]);
-    foreach ($data3 as $row2) $balances[$row2["product_id"]] = $row2["quantity"];
-
-
-    $data3 = $db::getRows("SELECT * FROM store_products_fact WHERE store_id=? AND date_id=?", [$store_id, $date_id]);
-    foreach ($data3 as $row2) {
-
-        foreach ($massiver as $m0 => $m1) {
-            $name_eng = $m1["name_eng_sql"];
-
-            if (empty($row2["color"])) $values_in[$row2["product_id"]][$name_eng] = $row2[$name_eng];
-            else  $values_in_color[$row2["product_id"]][$name_eng][$row2["color"]] = $row2[$name_eng];
-        }
-    }
-
-
-    $where = "";
-    if (!empty($prov)) {
-        $where = " AND o.provider_id in(";
-        $j = 0;
-        foreach (($prov ?? []) as $pid) {
-            if ($j > 0) $where .= ",";
-            $where .= "'$pid'";
-            $j++;
-        }
-        $where .= ")";
-    }
-
-    $data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p 
-WHERE o.provider_id>0 AND p.view='1' AND p.id=o.id $where order by o.provider_id ASC, p.name ASC");
-
-
-    $products_group=$db::mapping("SELECT id, name FROM products_1c   WHERE tip='products_group'");
-//foreach($data4 as $row4) $products_group[$row4["id"]]=$row4["name"];
-
-    $data2=$db::getRows("SELECT p.id, p.name, p.parent_id,  o.provider_id, o.colors, p.parent_id as category_id FROM
-   products_class as cl
-  LEFT JOIN products_1c as p    ON (p.view='1' AND p.parent_id=cl.category_id ) 
-   LEFT  JOIN products_1c_options as o ON (p.id=o.id) 
-WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
-//SELECT p.id, p.name, p.parent_id, provider_id FROM products_class as cl, products_1c as p  WHERE p.parent_id=cl.category_id  AND cl.tip='related' AND p.view='1'  order by p.parent_id, p.name ASC
-
-    $data = array_merge($data, $data2);
-
-
-
-    $p=0;
-    $p2=0;
-    $providersIn = [];
-    $category_idIn = [];
-    foreach($data as $row) {
-
-
-        if(!in_array($row["provider_id"],$providersIn)) {
-
-
-            if(empty($providers[$row["provider_id"]])) {
-                echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
-            }elseif(!empty($providers[$row["provider_id"]])) {
-
-                echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();">
- <td colspan=6 class="p-2"><span class="bg-green fs-4 p-2 w-100 d-block">+ '.$providers[$row["provider_id"]].'</span></td></tr>';
-
-            }
-
-            echo' <tr style="';
-
-            if($p>=1) echo"display:none;";
-
-            echo'" class="pr__'.$row["provider_id"].'"><td  class="w-10"><small>Наименование</small></td><td class="text-center"><small>остаток 1c</small></td>';
-            foreach($massiver as $f =>$mass)    echo'<td class="text-left"><small>'.$mass["name"].'</small></td>';
-            echo'<td class="text-center"><small>пол-ма</small></td><td class="text-center"><small>разница</small></td><td class="text-center"><small>%</small></td><td class="w-70"></td></tr>';
-
-            $providersIn[]=$row["provider_id"];
-            $p++;
-        }
-
-
-        if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
-            echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
- <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
-            $category_idIn[]=$row["category_id"];
-            $p2++;
-        }
-
-        // <small>".$providers[$row["provider_id"]]."</small>
-// echo"<tr style=\"display:none;\" class=\"pr__".$row["provider_id"]."\"><td colspan=4 class=\"fs-5\">".$row["name"]."</td></tr>";
-
-        if($store_planogram[$row["id"]] ?? 0>0 or $_SESSION["show_planogram_0"]==1) {
-            $difference=($store_planogram[$row["id"]] ?? 0)-($values_in[$row["id"]]["quantity"] ?? 0);
-            if(!empty($store_planogram[$row["id"]])) $difference_percent=100-round(100*$difference/$store_planogram[$row["id"]]);
-            else $difference_percent="";
-
-
-            echo"<tr style=\"";
-
-            if($p>1 or $p2>1) echo"display:none;";
-
-            if(($store_planogram[$row["id"]] ?? 0) ==0) echo"opacity:0.9;";
-            if($difference_percent==0 and ($store_planogram[$row["id"]]??0)!=0) echo"background:#ffe391;";
-            if($difference_percent>=100) echo"background:#9effd2;";
-
-
-
-            echo"\" class=\"trhover pr__".$row["provider_id"]."";
-
-            if(!empty($row["category_id"])) echo" category__".$row["category_id"];
-
-            if(($store_planogram[$row["id"]]?? 0)==0) echo" bg-danger2";
-
-            echo"\"><td class=\"text-right fs-6 pr-2\">".$row["name"]."</td>
-<td class=\"text-center tdcntr\">".($balances[$row["id"]] ?? '')."</td>";
-            foreach($massiver as $f =>$mass) {
-                echo'<td title="'.$mass["title"].'">';
-
-                if($mass["type"]=="number") {
-                    echo'<input type=number oninput="up(this)" onchange="storeProductsFactEdit(\''.$row["id"].'\',\'NULL\')" min="0" id="color_quantity_'.$row["id"].'_NULL" name='.$mass["name_eng"].'['.$row["id"].'] class="poln '.($mass["class"] ?? '').'" value="';
-                    if(isset($values_in[$row["id"]][$mass["name_eng"]])) echo $values_in[$row["id"]][$mass["name_eng"]];
-                    echo'"';
-                    if(!empty($mass["pattern"])) echo' pattern="'.$mass["pattern"].'"';
-                    if(isset($mass["step"])) echo' step="'.$mass["step"].'"';
-                    if(isset($mass["placeholder"])) echo' placeholder="'.$mass["placeholder"].'"';
-                    echo'>';
-                }
-                if($mass["type"]=="textarea") {
-                    echo'<textarea  oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'" row=1>';
-                    if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
-                    echo'</textarea>';
-                }
-
-                if($mass["type"]=="select") {
-                    echo'<select  oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'">';
-                    //  echo"<option value=0 "; if(empty($values_in[$row["id"]])) echo "select";  echo">-выбрать-</option>";
-
-                    foreach($mass["values_arr"] as $v => $name) {
-                        echo"<option value=$v "; if($v==($values_in[$row["id"]][$mass["name_eng"]] ?? 0)) echo "selected";
-                        echo">$name</option>";
-                    }
-                    echo'</select>';
-                }
-                echo'</td>';
-
-            }
-
-
-            echo'<td class="tdcntr bg-default">'.($store_planogram[$row["id"]] ?? '').'</td>
-<td class="tdcntr bg-';
-            if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
-
-            if($difference<0) $difference="+".abs($difference);
-            if($difference_percent<0) $difference_percent=">".abs($difference_percent);
-
-            if(!empty($store_planogram[$row["id"]]) and !empty($difference_percent)) $difference_percent .="%";
-            else $difference_percent ="";
-            echo'">'.$difference.'</td>
-<td class="tdcntr bg-default">'.$difference_percent.'</td>';
-
-
-            /* <td>
-             <textarea class=\"form-control\" row=1 name=comment>".$row["name"]."</textarea>
-             </td>*/
-            echo"</tr>";
-            $colors=explode(";",$row["colors"]);
-            $colorShow=0;
-            if(!empty($row["colors"])) {
-                foreach($colors as $color_w) {
-                    if(!empty($store_planogram_colors[$row["id"]][trim($color_w)])) $colorShow++;
-                }
-
-                $colorShow=1;
-                if($colorShow>0){
-                    echo"<tr style=\"";
-                    if($p>1) echo"display:none;";
-
-                    echo"\" class=\"pr__".$row["provider_id"]."\"><td colspan=5>
-     <table class=\"tablecolors mb-5\">
-     <thead><th class=zg rowspan=".count($colors).">
-    </th><th><b>кол-во</b></th><th><b>цвет</b></th><th><b>полнограмма</b></th><th><b>расхождение шт.</b></th><th><b>заполнение %</b></th></thead>
-     <tbody>";
-
-
-
-                    $j=0;
-                    foreach($colors as $color_w) {
-                        $color_w=trim($color_w);
-
-
-                        if(!empty($store_planogram_colors[$row["id"]][$color_w])) {   }
-
-                        echo"<tr>";
-
-                        if($j==0)  echo"<td class=zg rowspan=".count($colors)."><b>".$row["name"]."</b></td>";
-
-                        $j++;
-                        echo"<td><input onchange=\"storeProductsFactEdit('".$row["id"]."','$color_w')\" type=number class=input-sm name=color[quantity][".$row["id"]."][$color_w] id=\"color_quantity_".$row["id"]."_$color_w\" value=\"";
-                        if(isset($values_in_color[$row["id"]]["quantity"][$color_w] )) echo $values_in_color[$row["id"]]["quantity"][$color_w];
-                        echo"\"></td><td>$color_w</td>";
-                        $difference_percent=0;
-                        $difference=($store_planogram_colors[$row["id"]][$color_w] ?? 0)-($values_in_color[$row["id"]]["quantity"][$color_w] ?? 0);
-                        if($store_planogram_colors[$row["id"]][$color_w] ?? 0)
-                            $difference_percent=100-round(100*$difference/$store_planogram_colors[$row["id"]][$color_w]);
-
-
-                        if(!empty($difference_percent)) $difference_percent="$difference_percent%";
-                        else $difference_percent="";
-
-
-
-                        echo'<td class="bg-default tdcntr">';
-                        if(!empty($store_planogram_colors[$row["id"]][$color_w])  and !empty($difference_percent)) echo $store_planogram_colors[$row["id"]][$color_w];
-
-                        echo'</td>
-<td class="tdcntr bg-';
-                        if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
-                        echo'">';
-
-                        if(!empty($difference)) echo $difference;
-
-                        echo'</td><td class="tdcntr bg-default">'.$difference_percent.'</td>';
-                        echo'</tr>';
-
-
-
-
-                    }
-
-
-
-                    echo"</tbody></table></td></tr>";
-
-                }
-
-            }
-
-        }
-
-
-
-
-
-    }
-    echo'</tbody></table>
-
-
-<button type=submit name=edits value=1 class="btn btn-success btn-lg m-2">сохранить</button>
-
-</form></div>';
-
-    /*
-
-    $data=$db::getRows("SELECT id, name FROM products_1c   WHERE tip='products_group'");
-    foreach($data as $row) $products_group[$row["id"]]=$row["name"];
-
-
-
-
-    echo"<h2>Сопутка</h2><table class=\"table table-hover\"><thead></thead><tbody>";
-    $data=$db::getRows("SELECT p.id, p.name, p.parent_id FROM products_class as cl, products_1c as p  WHERE
-    p.parent_id=cl.category_id  AND cl.tip='related' AND p.view='1'  order by p.parent_id, p.name ASC");
-
-    foreach($data as $row) {
-     if(empty($inGroup[$row["parent_id"]])){
-
-        $inGroup[$row["parent_id"]]=$row["parent_id"];
-     echo"<tr onclick=\"$('.p".$row["parent_id"]."').toggle();\"><td>
-     <span class=\"bg-green fs-4 p-2 w-100 d-block\">+".$products_group[$row["parent_id"]]."</span></td></tr>  ";
-
-     } else {
-
-         echo"<tr class=\"p".$row["parent_id"]."\" style=\"display:none;\"><td> ".$row["provider_id"]." ".$row["name"]."</td></tr>  ";
-
-
-     }
-    }
-
-    echo"</tbody></table>";
-    */
-    /*
-
-    .zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
-    .zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
-    .zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
-    .zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
-    .zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-    .zak {     border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
-    .zak th, .zak td { border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
-
-
-    table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
-    table.zak thead th{margin:0 0.5rem;}
-    table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
-    table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
-    .app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
-    .zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
-    .zak td.td_product:hover {background:#fff;}
-
-    */
-global $_CONFIG;
-
-    $_CONFIG["jscss"] = '<style>.t tbody tr td{padding:0;}
-.t tbody tr td input.form-control{padding:0;margin:0 2px;text-align:center;font-weight:bold;}
-
-.table tbody tr td{padding:0;}
-
-.input-sm{width:60px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
-input[type="numeric"].poln,.poln{font-weight:bolder; width:70px; font-size:1.3rem; background:lime; color:#000; border:0;padding:1px;  text-align:center;}
-.cssLime{background:#caefca;padding:0.4rem;}
-.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
-table td.tdcntr{text-align:center; font-size:1.3rem;}
-.tablecolors tr:hover td,.trhover:hover {background:#cecece;}
-
-.tablecolors tr th {text-align:center;}
-.tablecolors tr th b{font-weight:normal;}
-
-.tablecolors tbody{border-bottom:1px #cdcdcd solid; }
-.tablecolors {margin:0.5rem 0 0 2rem; float:right;}
-table.tablecolors td.zg b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:1rem;}
-
-select.sel{width:90px;font-size:0.8rem; padding:0px;}
-textarea.comment{width:220px; border:0px; background:#e6e6e6;}
-
-.bg-danger2{background:#ffd1d1;}
-
-table tbody td small{color:#787878; text-align:center; font-size:0.7rem; margin:0 0.4rem;}
-</style>
-
-<script>
-const param6x = $(\'meta[name=csrf-param]\').attr(\'content\');
-const token6x = $(\'meta[name=csrf-token]\').attr(\'content\');
-
-
-$quantity=htmlentities($_REQUEST["quantity"]);
-
-
-function storeProductsFactEdit(product_id,color){
-
-var quantity=$(\'#color_quantity_\'+product_id+\'_\'+color+\'\').val();
-
- $.ajax({
-       url: \'/shipment/store-products-fact-edit/\',
-       method: \'post\',       
-       dataType: \'html\',        
-       data: {store_id: \''.$store_id.'\', date_id: \''.$date_id.'\', quantity: quantity,  product_id: product_id, color: color, [param6x]: token6x},  
-       success: function(data) {
-    $(\'#editDiv\').html(data);
-       }}); 
-}
-
-
-function up(e) {
-  if (e.value.indexOf(".") != \'-1\') {
-    e.value=e.value.substring(0, e.value.indexOf(".") + 3);
-  }
-}
-</script>';
-
-    include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-}
-
-//include"templates/bottom.php";
-
-
-
-
diff --git a/erp24/views/shipment/write_off.php b/erp24/views/shipment/write_off.php
deleted file mode 100644 (file)
index 111c7b9..0000000
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$date_14day=date("Y-m-d",time()-86400*7);
-$date2=date("Y-m-d",time());
-
-$where=""; $get="";
-if(!empty($_REQUEST["date1"])) {$date_14day=htmlentities($_REQUEST["date1"]); $where .=" AND date>='$date_14day'";  $get .="&date1=$date_14day";  }
-if(!empty($_REQUEST["date2"])) {$date2=htmlentities($_REQUEST["date2"]);  $where .=" AND date<='$date2'"; $get .="&date2=$date2";}
-
-
-echo'<form method=post>
-<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() . '" />
-<table><td><input type=date name=date1 value="'.$date_14day.'" class="form-control"></td>
-<td><input type=date name=date2 value="'.$date2.'" class="form-control"> </td>
-<td><button class="btn btn-success" value="1" name=show>сохранить</button></td></table></form>';
-
-
-$stores=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
-
-
-$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt, w.store_id, prices.price
-FROM write_offs as w, write_offs_products as p , products_1c as products, prices
-WHERE p.write_offs_id=w.id AND products.id=p.product_id AND products.id=prices.product_id   AND w.type='Брак'  AND  w.date>=?  AND  w.date<=? group BY w.store_id, p.product_id order by p.product_id, cnt DESC",[$date_14day,$date2]);
-
-foreach($data as $row) {
-    $write[$row["product_id"]][$row["store_id"]] =$row["cnt"];
-    $write_all[$row["store_id"]] +=$row["cnt"];
-    $all +=$row["cnt"];
-
-
-    $write_price_all[$row["store_id"]] +=$row["cnt"]*$row["price"];
-    $all_price +=$row["cnt"]*$row["price"];
-}
-
-
-echo" Данные из 1c c $date_14day по  $date2
- <h3>% списания от общего списания по магазинам</h3> 
- Списнаия на сумму $all_price=
-  <table class=\"table table-border\"><tbody>";
-foreach($stores as $storeId =>$store) {
-
-    $percent_all=round(100*($write_all[$storeId]/($all + 0.0001)));
-    $percantArr[$storeId]=$percent_all;
-    $percentp_all=round(100*($write_price_all[$storeId]/($all_price + 0.0001)));
-    $percantArrPrice[$storeId]=$percentp_all;
-
-}
-
-arsort($percantArr);
-foreach($percantArr as $storeId =>$percent_all)  {
-    if($percent_all>0) echo"<tr><td> ".$stores[$storeId]." </td><td>$percent_all%</td><td>".$write_price_all[$storeId]."</td><td>".$percantArrPrice[$storeId]."%</td></tr>";
-
-}
-
-echo"</tbody></table>";
-
-$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt
-FROM write_offs as w, write_offs_products as p , products_1c as products
-WHERE p.write_offs_id=w.id AND products.id=p.product_id  AND w.type='Брак' AND  w.date>=?  AND  w.date<=? group BY p.product_id order by  cnt DESC",[$date_14day,$date2]);
-echo" <h3>Списания по магазинам</h3><table class=\"table table-border\">";
-foreach($data as $row) {
-
-    echo"<tr><td><span class=\"btn btn-info btn-sm me-2\" onclick=\"$('.p".$row["product_id"]."').toggle()\">+</span>".$row["name"]."</td><td>".$row["cnt"]."</td></tr> ";
-
-    foreach($write[$row["product_id"]] ?? [] as $storeId => $cnt) {
-
-
-        $percent=round( ($cnt/$row["cnt"])*100 );
-
-        echo"<tr style=\"display:none;\" class=\"p".$row["product_id"]."\"><td>$cnt  <b>$percent%</b></td><td>".$stores[$storeId]."</td></tr>";
-
-
-    }
-
-}
-echo"</table>";
-
-
-
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file
diff --git a/erp24/views/shipment_old/add.php b/erp24/views/shipment_old/add.php
new file mode 100644 (file)
index 0000000..44ac6b3
--- /dev/null
@@ -0,0 +1,39 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/uni.php");
+include_once(dirname(__DIR__, 2) . "/inc/uni2.php");
+
+global $h1,$group_menu,$uni_fields, $forma_sql_table, $modul, $act;
+$h1="Добавить "; $group_menu=0; $uni_fields=0;
+$modul="shipment";
+$forma_sql_table="store_orders";
+$act="add";
+$h1="Добавить закупку";
+if(empty($_REQUEST["id"])) {
+    if(!empty($_SESSION["cat_id"]))   $catid=(int)$_SESSION["cat_id"];
+
+
+}
+if(!empty($_REQUEST["cat_id"]))  { $catid=(int)$_REQUEST["cat_id"];  $_SESSION["default_".$modul."_cat_id"]=$catid; $_SESSION["cat_id"]=$catid;
+    $_SESSION["default"][$modul]["cat_id"]=$catid;
+}
+
+
+
+//include"templates/top.php";
+echo "<div class='m-5'>";
+construct_modul_form_azea($modul);
+echo "</div>";
+
+
+$_CONFIG["jscss"]='
+<link href="/azea/assets/plugins/fileupload/css/fileupload.css" rel="stylesheet" type="text/css" />
+<script src="/azea/assets/js/file-upload.js"></script>         
+';
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file
diff --git a/erp24/views/shipment_old/ajax-admin-online.php b/erp24/views/shipment_old/ajax-admin-online.php
new file mode 100644 (file)
index 0000000..4d1ac44
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+
+header("Content-Type: application/json; charset=UTF-8");
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+
+if(!empty($_REQUEST["modul"])) {
+    $modul=htmlentities($_REQUEST["modul"]);
+    $action=htmlentities($_REQUEST["action"]);
+    $entity_id=htmlentities($_REQUEST["entity_id"]);
+
+//echo "$modul $action $entity_id";
+
+    $db::sql("INSERT INTO admin_online_page (modul, action, entity_id, admin_id, date) VALUES ('$modul', '$action' ,'$entity_id','".$_SESSION["admin_id"]."', NOW()) ON DUPLICATE KEY UPDATE date=NOW()");
+
+
+
+    $data=$db::getRows("SELECT p.admin_id, a.name FROM admin_online_page as p, admin as a
+WHERE p.modul=? AND p.action=?  AND p.entity_id=? AND p.admin_id=a.id AND p.date>=NOW() - INTERVAL 2 minute",[$modul,$action,$entity_id]);
+    $division = [];
+    foreach($data as $row) {
+        $division[$row["admin_id"]]=$row["name"];
+
+    }
+    echo json_encode($division,JSON_UNESCAPED_UNICODE);
+
+}
\ No newline at end of file
diff --git a/erp24/views/shipment_old/ajax-division.php b/erp24/views/shipment_old/ajax-division.php
new file mode 100644 (file)
index 0000000..673cba0
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+
+header("Content-Type: application/json; charset=UTF-8");
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+
+if(!empty($_SESSION["order_id"]))  $order_id=(int)$_SESSION["order_id"];
+else $order_id=1;
+
+if(!empty($_SESSION["fieldIdThisDivision"]))  $this_field_id=(int)$_SESSION["fieldIdThisDivision"];
+
+if(empty($this_field_id)) $this_field_id=20;
+
+
+$db::sql("INSERT INTO admin_online_page (modul, action, entity_id, admin_id, date) VALUES ('shipment', 'division' ,'$order_id','".$_SESSION["admin_id"]."', NOW()) ON DUPLICATE KEY UPDATE date=NOW()");
+
+
+
+$data=$db::getRows("SELECT division_fact,store_id,product_id FROM store_orders_item WHERE order_id=? AND store_id!='' AND division_fact>0",[$order_id]);
+$division = [];
+foreach($data as $row) {
+    $division[$row["product_id"]][$row["store_id"]]["division_fact"]=(int)$row["division_fact"];
+}
+
+
+$data=$db::getRows("SELECT product_id,color,sum(quantity) as quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
+and field_id=? and store_id!='0' group by product_id, store_id, color",[$order_id,$this_field_id]);
+foreach($data as $row) {
+    $division[$row["product_id"]][$row["store_id"]]["color"][md5($row["color"])]=$division2[$row["product_id"]][$row["store_id"]]["color"][md5($row["color"])]+$row["quantity"];
+}
+
+echo json_encode($division,JSON_UNESCAPED_UNICODE);
+
+
diff --git a/erp24/views/shipment_old/ajax-edit-field-value.php b/erp24/views/shipment_old/ajax-edit-field-value.php
new file mode 100644 (file)
index 0000000..e1582a9
--- /dev/null
@@ -0,0 +1,171 @@
+<?php
+
+use \yii_app\records\StoreOrdersFields;
+use \yii_app\records\StoreOrdersFieldsData;
+use \yii_app\records\StoreOrdersFieldsDataLogi;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+
+if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
+
+    $id=(int)$_REQUEST["id"];
+    $product_id=htmlentities($_REQUEST["product_id"]);
+    $store_id=htmlentities($_REQUEST["store_id"]);
+    $name_eng=htmlentities($_REQUEST["name_eng"]);
+    $value=htmlentities($_REQUEST["value"]);
+    $provider_id=intval($_REQUEST["provider_id"]);
+    $color=htmlentities($_REQUEST["color"]);
+
+
+
+    $whereInProductsId=" in('$product_id') ";
+    $products=[$product_id=>"товар"];
+
+
+//echo"$name_eng=$value $product_id $store_id";
+    if(!empty($store_id)) {
+        global $dependent_fields;
+        $data = StoreOrdersFields::find()->select(['id', 'dependent_fields', 'name_eng'])->asArray()->all();
+//        $data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1");
+        foreach($data as $row) {
+            $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);
+            $fieldRows[$row["id"]]=$row["name_eng"];
+        }
+
+        global $arrayp;
+
+        function recurs_depended($fieldId) {
+            global $dependent_fields,$arrayp;
+            $arrayp .=",".implode(",",$dependent_fields[$fieldId]);
+            foreach($dependent_fields[$fieldId] as $fieldId2)          recurs_depended($fieldId2);
+            return $arrayp;
+        }
+
+
+
+        $row = StoreOrdersFields::find()->select(['id', 'tip'])->where(['name_eng' => $name_eng])->asArray()->one();
+//        $row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]);
+        if(is_array($row)) {
+            $tip=$row["tip"];
+            $fieldId=$row["id"];
+
+
+
+            if(0) {
+                $arrayp=recurs_depended($fieldId);
+
+
+                $arrayp = array_unique(explode(",",$arrayp));
+                $arrayp = array_diff($arrayp, array(''));
+//echo "++++".print_r($arrayp)."  ";
+
+
+                $updateFieldsArray=[];
+                echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией   ";
+                foreach($arrayp as $k) {
+
+                    if(is_numeric($k))  { echo"<br>---+++$k ".$fieldRows[$k]."";
+
+                        $updateFieldsArray[]=$fieldRows[$k];
+
+                    }
+
+                }
+
+
+
+
+
+
+                if(!empty($updateFieldsArray))
+                {
+//include_once("inc/functionsFiedlsData.php");
+
+//updateProductArrayDataField($updateFieldsArray);
+                }
+
+
+            }
+//print_r($updateFieldsArray);
+
+
+
+
+            if($tip=="string") $pole="value_text"; else $pole="value";
+
+            if(empty($color)  or $color=='undefined' or $color=='NULL') $color='';
+            if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
+
+
+            $up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
+
+            if(isset($value)) {
+
+
+                //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+                //echo"удаление пустой записи";
+
+
+
+                $value_old_pole = StoreOrdersFieldsData::find()->select([$pole])->where(['product_id' => $product_id, 'order_id' => $id, 'store_id' => $store_id, 'field_name' => $name_eng, 'field_id' => $fieldId, 'color' => $color])->asArray()->one();
+                $value_old = $value_old_pole[$pole];
+                //$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+                $value_old=str_replace('.000','',$value_old);
+
+                $storeOrdersFieldsData = StoreOrdersFieldsData::find()->where(['order_id' => $id, 'product_id' => $product_id,
+                    'store_id' => $store_id, 'field_id' => $fieldId, 'field_name' => $name_eng, 'color' => $color])->one();
+                if (!$storeOrdersFieldsData) {
+                    $storeOrdersFieldsData = new StoreOrdersFieldsData;
+                    $storeOrdersFieldsData->order_id = $id;
+                    $storeOrdersFieldsData->product_id = $product_id;
+                    $storeOrdersFieldsData->store_id = $store_id;
+                    $storeOrdersFieldsData->field_id = $fieldId;
+                    $storeOrdersFieldsData->field_name = $name_eng;
+                    $storeOrdersFieldsData->color = $color;
+                }
+                $storeOrdersFieldsData->$pole = $value;
+                $storeOrdersFieldsData->save();
+//                $sql="INSERT IGNORE INTO store_orders_fields_data SET  ";
+//                $up2 =" $pole='$value'";
+//                $up .= ",".$up2;
+//                $sql .="$up ON DUPLICATE KEY UPDATE $up2";
+//                $db::sql($sql);
+//echo'сохранили '.$name_eng.' store_id='.$store_id.' '.$name_eng.'  color='.$color.' value='.$value.'  ';
+
+                $storeOrdersFieldsDataLogi = new StoreOrdersFieldsDataLogi;
+                $storeOrdersFieldsDataLogi->product_id = $product_id;
+                $storeOrdersFieldsDataLogi->field_id = $fieldId;
+                $storeOrdersFieldsDataLogi->order_id = $id;
+                $storeOrdersFieldsDataLogi->store_id = $store_id;
+                $storeOrdersFieldsDataLogi->color = $color;
+                $storeOrdersFieldsDataLogi->value = $value;
+                $storeOrdersFieldsDataLogi->value_old = $value_old;
+                $storeOrdersFieldsDataLogi->date_add = date('Y-m-d H:i:s');
+                $storeOrdersFieldsDataLogi->admin_id = $_SESSION["admin_id"];
+                $storeOrdersFieldsDataLogi->save();
+
+//                $db::sql("INSERT INTO store_orders_fields_data_logi
+//(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
+//VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
+
+            }
+
+
+        } else echo'Поля '.$name_eng.' нет в таблице ';
+
+    }
+
+}
\ No newline at end of file
diff --git a/erp24/views/shipment_old/ajax-update-fields-data.php b/erp24/views/shipment_old/ajax-update-fields-data.php
new file mode 100644 (file)
index 0000000..9ef2a70
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+
+
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+       $orderId, // id- заказа
+       $store_id, // GUID магазина
+       $storesArray, // массив с магазинами
+       $group_id, // ID группы авторизованного сотрудника
+       $fieldsRows, // массив с данными по полями - ключ name_eng
+       $date_start_sale, // дата старта продаж от которой считаемстатистику
+       $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+       $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+       $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+       $FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам
+       $status_order_id, // ID текущего статуса закупаки
+       $store_orders_statuses, // массим со статсами закупок
+       $statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
+       $status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
+       $store_orders_status_description, // - массив с описанием стутса
+       $dostup_fields,
+       $bg_fields,
+       $ProductsOptions;
+
+
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+
+
+
+
diff --git a/erp24/views/shipment_old/ajax-update-step.php b/erp24/views/shipment_old/ajax-update-step.php
new file mode 100644 (file)
index 0000000..ae0b289
--- /dev/null
@@ -0,0 +1,634 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+       $orderId, // id- заказа
+       $store_id, // GUID магазина
+       $storesArray, // массив с магазинами
+       $group_id, // ID группы авторизованного сотрудника
+       $fieldsRows, // массив с данными по полями - ключ name_eng
+       $date_start_sale, // дата старта продаж от которой считаемстатистику
+       $order_date_add,
+       $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+       $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+       $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+       $FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам
+       $status_order_id, // ID текущего статуса закупаки
+       $store_orders_statuses, // массим со статсами закупок
+       $statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
+       $status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
+       $store_orders_status_description, // - массив с описанием стутса
+       $dostup_fields,
+       $bg_fields,
+       $ProductsOptions;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+$whereDeleteData="";
+// параметр указывает на то что осток после деления распределяем автоматически в ячейки для ручной добавки к делению
+$foreachSalesHand=false;
+if($_REQUEST["foreachSalesHand"]==1) { $foreachSalesHand=true; $whereDeleteData .=",'division_hand'"; }
+
+
+if($_REQUEST["deleteAll"]==1) {
+    $db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId'");
+
+    mess("Данные удалены");
+
+    exit();
+}
+
+
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_ratio' or field_name='division_auto' or field_name='storehouse_balance') AND order_id='$orderId'");
+$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");
+
+include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+/*
+
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
+foreach($data as $row) {
+    $fieldsPropertyArray[$row["field_id"]][]=$row;
+ }
+
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
+foreach($data as $row) {
+    $fieldsRows[$row["name_eng"]]=$row;
+    $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
+    $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]);     //считаем поля и зависимые поля рекурсивно
+    if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"];
+$date_update=$OrderData["date_update"];
+$date_start_division=$OrderData["division_date"];
+
+
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup FROM products_1c_options as o, products_1c as p WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) {
+  if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+   $products[$row["id"]]=$row["name"];
+   $prov[$row["id"]]=$row["provider_id"];
+   $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+
+   $k++;
+ }
+$whereInProductsId .=")";
+
+
+*/
+
+// вычисляем массив по цветам привязанным к товару
+$colorsProduct=[];
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row) {
+    $colors=explode(";",$row["colors"]);
+    foreach($colors as $color) {
+        $color=trim($color);
+        $colorsProduct[$row["id"]][$color]=$color;
+    }
+}
+
+
+
+
+
+$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id 
+FROM sales as s, sales_products as p 
+WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id $whereInProductsId  AND s.date>=? - INTERVAL 14 day  group BY p.product_id, s.store_id_1c order by 
+squantity DESC",[$date_start_division]);
+foreach($data as $row){
+    $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
+
+}
+
+
+
+// товар в пути  date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day
+
+$data=$db::getRows("SELECT  id,name,providers_arr FROM store_orders WHERE  date_add>='$order_date_add' - interval 7 day  AND date_add<='$order_date_add' ");
+
+
+$j=0;
+$orders_where="";
+foreach($data as $row) {
+
+    $store_orders[$row["id"]]=$row["name"];
+    $providersIdInThisOrder2=explode(",",$row["providers_arr"]);
+    $whereProvidersId2="";
+    $k=0;
+    foreach($providersIdInThisOrder2 as $pid) { if($k!=0) $whereProvidersId2 .=","; $whereProvidersId2 .="'$pid'"; $k++; }
+
+    if($j>0) $orders_where .=",";
+
+    $orders_where .="'".$row["id"]."' ";
+    $j++;
+
+
+
+
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+    $whereInProductsId_is=" in (";
+    $z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id in($whereProvidersId2) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+    $data2=$db::getRows($z);
+    $k=0;
+    foreach($data2 as $row3) {   if($k!=0) $whereInProductsId_is .=","; $whereInProductsId_is .="'".$row3["id"]."'";$k++;}
+    $whereInProductsId_is .=")";
+
+
+    echo" ".$row["id"].") ".$row["name"]."  убираем информацию по остальным товарам<br>";
+    if(!empty($whereInProductsId_is) and $k>0) $db::sql("DELETE FROM store_orders_fields_data WHERE product_id NOT $whereInProductsId_is  AND order_id='".$row["id"]."'");
+}
+$data_up=[];
+$db::sql("DELETE FROM store_orders_fields_data WHERE  field_name='goods_in_transit' AND order_id='$orderId'");
+
+
+if(!empty($orders_where))
+{
+
+
+    $orders_where=" AND order_id in($orders_where) AND order_id!='$orderId'";
+    $data=$db::getRows("SELECT order_id,product_id,value,color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0
+  $orders_where group by order_id, product_id,value,color");
+    foreach($data as $row) {
+        if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+        $data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
+
+        $titleArr[$row["product_id"]]["NULL"][$color] .="
+       id=".$row["order_id"]." ".$store_orders[$row["order_id"]]."=".(int)$row["value"]." шт.";
+
+
+    }
+    insert_store_orders_fields($data_up,"goods_in_transit",$titleArr);
+}
+
+
+
+
+$data_up2=[];
+foreach($products as $productId =>$nameProduct) {
+
+    echo"<br><b>$nameProduct</b>";
+
+    $data_up=[];
+    $massivTitle=[];
+    foreach($storesArrayAll as $storeId => $nameStore) {
+
+//echo"<br>$nameStore ";
+
+        $colorsProductsArray[$productId]["NULL"]="NULL";
+
+        foreach($colorsProductsArray[$productId] as $color) {
+
+            $arrs2=returnFormula("division_auto_need",  $productId, $storeId, $color);
+// echo "$color=".$arrs2["value"]." "; // title=".$arrs2["title"]."
+
+            $FiledsData["division_auto_need"][$productId][$storeId][$color]=$arrs2["value"];
+            if($color=="NULL")   {
+                $data_up[$productId][$storeId][$color]=$arrs2["value"];
+                $division_auto_need_all[$productId] +=$arrs2["value"];
+                $massivTitle[$productId][$storeId][$color] =$arrs2["title"];
+
+            }
+
+        }
+    }
+
+
+    insert_store_orders_fields($data_up,"division_auto_need",$massivTitle);
+
+
+
+    echo"<br>Итого division_auto_need_all=".$division_auto_need_all[$productId]." 
+
+старый коэфф=".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]."
+
+куплено по факту=".$FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"]."";
+
+    $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
+    $data_up2[$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
+}
+
+
+
+
+insert_store_orders_fields($data_up2,"division_auto_need_all");
+
+
+
+
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact   quantity_zakup_fact
+$data_up=[];
+foreach($products as $productId => $nameProduct) {
+    $massivSQL=array();
+    $FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+//+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]
+
+    if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]) {
+        $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
+    }
+    else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"],3);
+    echo"<br>$nameProduct = division_ratio  ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+    $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+}
+
+insert_store_orders_fields($data_up,"division_ratio");
+
+
+
+
+$data_up=[]; $datau=[]; $data_hand=[];
+foreach($products as $productId =>$nameProduct) {
+    $division_auto_all2=[];
+    echo"<br><b>$nameProduct - division_auto  $rowFactName=".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."</b>";
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        echo"<br>$nameStore ";
+
+        $colorsProductsArray[$productId]["NULL"]="NULL";
+        foreach($colorsProductsArray[$productId] as $color) {
+            $division_auto=$FiledsData["division_auto_need"][$productId][$storeId][$color] * $FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+
+            if(empty($FiledsData["min_lot"][$productId]))  $min_lot=1; else $min_lot=$FiledsData["min_lot"][$productId];
+            $division_auto_ceil=ceilCoefficient($division_auto,$min_lot);
+
+
+            $title=" ".$FiledsData["division_auto_need"][$productId][$storeId][$color]." *  ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." = $division_auto ->$division_auto_ceil  ";
+
+
+            echo $title;
+
+
+            if($color=="NULL" and $storeId!="NULL")   $storehouse_balance1=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all2[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+
+
+
+            $storehouse_balance0=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+            if($division_auto_ceil<=$storehouse_balance0 and $storehouse_balance1<0) { $storehouse_balance1=1;
+                if($color=="NULL" and $storeId!="NULL")   $division_auto_all2[$productId] +=$division_auto_ceil;
+                echo"!!!!вносим все равно $storehouse_balance0";
+
+            }
+
+
+            if($storehouse_balance1<0) {
+
+                $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+                echo" !баланс! $storehouse_balance ";
+
+                echo"<span class=\"btn btn-danger\">не вносим</span>";
+
+            }
+            else {
+                if($color=="NULL" and $storeId!="NULL")  {
+                    $division_auto_all[$productId] +=$division_auto_ceil;
+                    $division_auto_all2[$productId] +=$division_auto_ceil;
+
+                }
+
+                $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+                echo" баланс $storehouse_balance ";
+                $value=$division_auto_ceil;
+                $field_name="division_auto";
+                $field_id=$fieldsRows[$field_name]["id"];
+
+                if($storehouse_balance>=0) {
+                    if($color=="NULL") {
+                        $color="";
+                        try {
+                            $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update,title)       
+          VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?)  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
+                                [$productId, $orderId, $storeId, $field_name, $field_id, $value, "",  $color, $title, $value, "",$title]);
+                        }
+                        catch (Exception $e)
+                        {
+                            echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+                        }
+
+
+                        $hand=$FiledsData["division_hand"][$productId][$storeId][$color];
+                        if(empty($hand)) $hand=0;
+
+                        $data_up[$productId][$storeId][$color]=$value+$hand;
+                        $datau[$productId][$storeId][$color]="$value+".$hand;
+                    }
+                }  else {
+
+                    echo"--не вносим--";
+                }
+
+
+
+            }
+
+
+            echo "all=".$division_auto_all2[$productId]." ";
+
+
+        }
+
+
+
+
+
+    }
+
+
+    $product_counter++;
+    insert_store_orders_fields($data_up,"division_summ",$datau);
+
+
+
+    $min_lot=$FiledsData["min_lot"][$productId];
+    $division_hand_summ=$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+    $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+    // $data_up3=[];
+    // $data_up3[$productId]["NULL"]["NULL"]=$storehouse_balance;
+    // insert_store_orders_fields($data_up3,"storehouse_balance");
+
+    $field_name="storehouse_balance";
+    $field_id=$fieldsRows[$field_name]["id"];
+    $storeId="";
+    $color="";
+    $value=$storehouse_balance;
+
+
+    try {
+        $s="INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update)       
+          VALUES (?,?,?,?,?,?,?,?,'-1',NOW())  ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW()";
+        $db::sql($s,            [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text,  $color, $value, $value_text]);
+
+    }
+    catch (Exception $e)
+    {
+        echo 'Ошибка вставки данных  error='. $e->getMessage();
+    }
+
+
+    echo"<br>Итого division_auto_all=".$division_auto_all[$productId]." division_hand_summ=$division_hand_summ storehouse_balance=<b>$storehouse_balance</b> min_lot=$min_lot ";
+    $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
+
+
+// добавляем деление ручное по магазину по циклу - по рейтингу магазина
+
+    if($foreachSalesHand==true and $min_lot <=$storehouse_balance and $storehouse_balance>0){
+
+        echo"<br><b>Запускаем цикл начисления согласно продажам</b>";
+
+        $j=1;
+        $new_balance=0;
+        $nb=0;
+        do {
+            foreach($productsArrayStores[$productId] as $storeId =>$quantity) {
+                $new_balance=$storehouse_balance-$min_lot;
+
+                if( $new_balance>=0) {
+                    $nb = $FiledsData["division_hand"][$productId][$storeId]["NULL"] + $min_lot;
+                    $storehouse_balance=$storehouse_balance-$min_lot;
+
+                    echo"<br><font color=blue> ".$storesArrayAll[$storeId]." =>$quantity</font> $storehouse_balance-$min_lot new_balance=$new_balance 
+ + hand=$min_lot
+  hand_old=".$FiledsData["division_hand"][$productId][$storeId]["NULL"]." 
+  hand_new=".$nb." ";
+
+                    $FiledsData["division_hand"][$productId][$storeId]["NULL"] += $min_lot;
+                    $data_hand[$productId][$storeId]["NULL"] +=$min_lot;
+                }
+
+                if( $new_balance<=0)  break;
+
+
+            }
+            $j++;
+        } while($new_balance>0);
+
+
+
+        foreach($data_hand[$productId] as $storeId => $arr) {
+            echo"<br>data_up=".$storesArrayAll[$storeId]."= ".$arr["NULL"]."  ";
+        }
+
+    }
+
+
+
+    if($product_counter>1) { echo"<font color=red>Выход из цикла!!!!</font>"; break;}
+
+
+}
+
+
+
+
+if($foreachSalesHand==true) {
+    insert_store_orders_fields($data_hand,"division_hand");
+    insert_store_orders_fields($data_hand,"division_auto_hand");
+
+
+}
+
+
+
+
+
+
+
+// деление по магазину
+$datau=[];
+$FiledsData["division_auto_all"]=[];
+$FiledsData["auto_purchase_formula_all"]=[];
+foreach($products as $productId =>$nameProduct) {
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        // деление ручное сумма по магазину
+        $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] += $FiledsData["auto_purchase_formula"][$productId][$storeId]["NULL"];
+        $FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"] += $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+        $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"] += $FiledsData["division_auto"][$productId][$storeId]["NULL"];
+        $datau["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"]."+". $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+        $FiledsData["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+        $FiledsData["division_delta"][$productId][$storeId]["NULL"]=round(100*($FiledsData["division_hand"][$productId][$storeId]["NULL"]/($FiledsData["division_auto"][$productId][$storeId]["NULL"] + 0.0001)));
+        $FiledsData["division_summ"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
+        $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
+        $FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] - $FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"];
+        $FiledsData["delta_zakup"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + 0.0001),0);
+        $FiledsData["delta_rejection"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + $FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"] + 0.0001 ),0);
+
+
+
+    }
+}
+
+
+foreach($products as $productId =>$nameProduct) {
+    $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"]-$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"] ;
+
+
+    $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"];
+
+}
+
+
+
+
+
+insert_store_orders_fields($FiledsData["division_hand_summ"],"division_hand_summ");
+insert_store_orders_fields($FiledsData["division_auto_all"],"division_auto_all");
+insert_store_orders_fields($FiledsData["division_summ"],"division_summ",$datau["division_summ"], false);
+insert_store_orders_fields($FiledsData["division_summ_all"],"division_summ_all");
+insert_store_orders_fields($FiledsData["division_delta"],"division_delta");
+insert_store_orders_fields($FiledsData["purchase_fact_difference"],"purchase_fact_difference","", false);
+insert_store_orders_fields($FiledsData["delta_zakup"],"delta_zakup","", false);
+insert_store_orders_fields($FiledsData["delta_rejection"],"delta_rejection","", false);
+insert_store_orders_fields($FiledsData["auto_purchase_formula_all"],"auto_purchase_formula_all","", false);
+insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
+
+
+
+foreach($products as $productId =>$nameProduct) {
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        foreach($colorsProduct[$productId] as $color) {
+            // echo"<br>  $color ";
+            $summ=$FiledsData["division_auto"][$productId][$storeId][$color] + $FiledsData["division_hand"][$productId][$storeId][$color];
+            if(!empty($summ)) $FiledsData["division_summ"][$productId][$storeId][$color]=$summ;
+        }
+
+    }
+}
+insert_store_orders_fields($FiledsData["division_summ"],"division_summ","", false);
+
+
+//////////// остаток склада вновь считаем
+/*
+$datau=[];
+$data_storehouse_balance=[];
+foreach($products as $productId =>$nameProduct) {
+    $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+    $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ( ".$division_auto_all[$productId]."+".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]." ) ";
+    echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]."  ";
+    $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
+    $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
+}
+insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
+*/
+////////////
+
+$FiledsData["storehouse_balance"]=[];
+$datau=[];
+$data_storehouse_balance=[];
+$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=0;
+foreach($products as $productId =>$nameProduct) {
+    echo"<br><h4>$nameProduct</h4>";
+    $alld=0;
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        // деление ручное сумма по магазину
+        $alld+=($FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"]);
+
+        echo"<br> $nameStore divauto=".$FiledsData["division_auto"][$productId][$storeId]["NULL"]." ".$FiledsData["division_hand"][$productId][$storeId]["NULL"]." =$alld ";
+
+
+    }
+
+    $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-$alld;
+    echo" <br> $nameProduct fact ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ".$alld."   = ".$storehouse_balance." ";
+    $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." -  $alld ";
+    echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]."  ";
+    $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
+    $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
+
+}
+insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
+
+
+// автоформула
+foreach($products as $productId =>$nameProduct) {
+    $param["sale_7day"]=0;     $param["quantity"]=0;     $param["quantity_fact"]=0;
+    foreach($storesArrayAll as $storeId => $nameStore) {
+        $param["sale_7day"] +=$FiledsData["sales_cnt"][$productId][$storeId]["NULL"];
+        $param["quantity"] +=$FiledsData["quantity"][$productId][$storeId]["NULL"];
+        $param["quantity_fact"] +=$FiledsData["quantity_fact"][$productId][$storeId]["NULL"];
+    }
+
+    echo"<br>Считаем автозаказ Продажи 7 дней ".$param["sale_7day"]." или ( ".$FiledsData["sales_cnt"][$productId]["NULL"]["NULL"].") 
+
+quantity=".$param["quantity"]." или (".$FiledsData["quantity"][$productId]["NULL"]["NULL"].")  
+
+quantity_fact=".$param["quantity_fact"]."  или (".$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"].")   ";
+
+
+
+// считаем запас на 3 дня
+    $FiledsData["auto_purchase_formula"]=[];
+    $sale_2day=ceil(3*($param["sale_7day"]/7));
+    $goods_in_transit=(int)$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+    $quantity_fact=$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"];
+    $quantity=$FiledsData["quantity"][$productId]["NULL"]["NULL"];
+    $fact=$quantity_fact +  $goods_in_transit;
+    $fact_sale=$param["sale_7day"];// если факт продаж будет больше чем факт - перприсваеиваем
+
+    if(($fact-$fact_sale)>0) {
+        $saleweek1=$fact-$fact_sale ;
+        $zakaz= $param["sale_7day"] + $sale_2day +  $quantity - $saleweek1;
+
+        echo 'sale_7day + sale_2day +  quantity - $saleweek1 ';
+    }
+    else {
+        $zakaz= $param["sale_7day"] + $sale_2day +  $quantity ;
+
+        echo" если";
+    }
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+    if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+    $ceil=ceilCoefficient($zakaz,$FiledsData["min_lot"][$productId]);
+    echo"<br><b>++Авто-заказ = $ceil (товар в пути $goods_in_transit)</b>";
+    $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"]=$ceil;
+}
+
+insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
+
+
+
+
+$data2=$db::getRows("SELECT product_id, sum(quantity) as quantity FROM balances WHERE quantity>0 AND store_id!=''  AND   product_id $whereInProductsId GROUP BY product_id");
+foreach($data2 as $row2) {
+    $FiledsData["quantity_storage"][$row2["product_id"]]["NULL"]["NULL"]=$row2["quantity"];
+}
+
+insert_store_orders_fields($FiledsData["quantity_storage"],"quantity_storage","", false);
+
+
diff --git a/erp24/views/shipment_old/division-print-edit.php b/erp24/views/shipment_old/division-print-edit.php
new file mode 100644 (file)
index 0000000..0664e4f
--- /dev/null
@@ -0,0 +1,491 @@
+<?php
+
+use yii\base\DynamicModel;
+use yii\widgets\ActiveForm;
+use kartik\select2\Select2;
+
+use yii_app\helpers\PrintBlockHelper;
+
+/* @var $storeAll array */
+/* @var $products array */
+/* @var $colorsCnt array */
+/* @var $quantity_warehouseman_fact array */
+/* @var $orderId string */
+/* @var $productsMinLot array */
+/* @var $dataFieldsValues array */
+/* @var $storeGroups array */
+/* @var $filterModel DynamicModel */
+/* @var $division_name string */
+/* @var $division_date string */
+/* @var $products_colors array */
+/* @var $dataColor array */
+/* @var $dataHand array */
+
+$this->registerJsFile('/js/shipment/division-print-edit.js', ['position' => \yii\web\View::POS_END]);
+
+$storeGroupOptions = [-1 => 'Не выбран'];
+foreach ($storeGroups as $gIndex) {
+    $storeGroupOptions[$gIndex] = $gIndex;
+}
+
+$printOrientationOptions = [
+    'portrait' => 'Портретная',
+    'landscape' => 'Альбомная',
+];
+
+?>
+
+<div class="m-5">
+    <h5 class="page-title mb-0 text-primary">Деление по магазинам <?= $division_name ?> Дата деления <?= $division_date ?> id=<?= $orderId ?></h5>
+    <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
+        <div class="row">
+            <div class="col-1 text-right">Печатать цвет:</div>
+            <div class="col-1"><?= $filterForm->field($filterModel, 'printColor')->checkbox(['value' => 1, 'uncheckValue' => 0,
+                    'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
+            <div class="col-2 text-right">Печатать ручных добавок:</div>
+            <div class="col-1"><?= $filterForm->field($filterModel, 'printHand')->checkbox(['value' => '1', 'uncheckValue' => '0',
+                    'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
+            <div class="col-2 text-right">Показать столбцы итого:</div>
+            <div class="col-1"><?= $filterForm->field($filterModel, 'printSumm')->checkbox(['value' => '1', 'uncheckValue' => '0',
+                    'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
+        </div>
+        <?php PrintBlockHelper::printBlock('Выберите куст', $filterForm->field($filterModel, 'groupIndex')->widget(Select2::class, [
+            'data' => $storeGroupOptions,
+            'language' => 'ru',
+            'options' => ['placeholder' => 'Куст...'],
+            'pluginOptions' => [
+                'allowClear' => true,
+            ],
+            'pluginEvents' => [
+                'change' => 'function(e) {
+                    $("#filter-form").get(0).submit();
+                }'
+            ],
+        ])->label(false)); ?>
+        <?php PrintBlockHelper::printBlock('Ориентация', $filterForm->field($filterModel, 'printOrientation')->widget(Select2::class, [
+            'data' => $printOrientationOptions,
+            'language' => 'ru',
+            'options' => ['placeholder' => 'Ориентация...'],
+            'pluginOptions' => [
+                'allowClear' => true,
+            ],
+            'pluginEvents' => [
+                'change' => 'function(e) {
+                    $("#filter-form").get(0).submit();
+                }'
+            ],
+        ])->label(false)); ?>
+    <?php ActiveForm::end() ?>
+    <div class="col-1">
+        <button id="shipmentPrintButton" class="btn btn-primary btn-lg" onclick="printTable();">Print</button>
+    </div>
+    <div class="table-responsive">
+        <table class="table-hover zak">
+            <thead>
+                <tr class="zg">
+                    <th class="td_product">наименование</th>
+                    <th><b>мин-ый лот деления шт.</b></th>
+                    <?php foreach($storeAll as $store): ?>
+                        <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+                            <th><b><?= $store->name ?></b></th>
+                            <?php if ($filterModel->groupIndex != -1): ?>
+                                <th style="min-width: 40px"></th>
+                            <?php endif; ?>
+                        <?php endif; ?>
+                    <?php endforeach; ?>
+                    <th><b>итого</b></th>
+                    <th><b>куплено</b></th>
+                    <th><b>разница</b></th>
+                </tr>
+            </thead>
+            <tbody>
+                <?php
+                    $colorsCounter = [];
+                    $ostatok = [];
+                ?>
+                <?php foreach($products as $productId => $productName): ?>
+                    <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
+                        <tr id="tr__<?= $productId ?>" class="trproduct">
+                            <td class="td_product producted">
+                                <span class="fs-6">
+                                    <a href="/shipment/divisionPrintEditProduct/?productId=<?= $productId ?>&id=<?= $orderId ?>"
+                                       target=new><?= $productName ?></a>
+                                </span>
+                            </td>
+                            <td><?= $productsMinLot[$productId] ?></td>
+                            <?php $divisionCnt = 0; ?>
+                            <?php foreach($storeAll as $store): ?>
+                                <?php
+                                    $value = ceil($dataFieldsValues[$productId][$store->id]["NULL"] ?? 0);
+                                    $ostatok[$productId][$store->id] = $value;
+                                    $divisionCnt += $value;
+                                    if (empty($value)) {
+                                        $value = "";
+                                    }
+                                ?>
+                                <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+                                    <td>
+                                        <?= $value ?>
+                                        <?php if (!empty($dataHand[$productId][$store->id]['NULL']) && $filterModel->printHand == 1): ?>
+                                            <sup style="color:green; font-size:0.5rem"><?= intval($dataHand[$productId][$store->id]["NULL"]) ?></sup>
+                                        <?php endif; ?>
+                                    </td>
+                                    <?php if ($filterModel->groupIndex != -1): ?>
+                                        <td style="min-width: 40px"></td>
+                                    <?php endif; ?>
+                                <?php endif; ?>
+                            <?php endforeach; ?>
+                            <td><?= intval($divisionCnt) ?></td>
+                            <td><?= intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]) ?></td>
+                            <?php $r2 = $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] - $divisionCnt; ?>
+                            <td <?= ($r2 != 0 ? 'class="bg-danger"' : '') ?> ><?= $r2 ?></td>
+                        </tr>
+                    <?php endif; ?>
+                    <?php if ($filterModel->printColor == 1): ?>
+                        <?php if (!empty($products_colors[$productId])): ?>
+                            <?php foreach($products_colors[$productId] as $colorName): ?>
+                                <?php
+                                    $colorName = trim($colorName);
+                                    $colorAllCnt = 0;
+                                ?>
+                                <?php if (!empty($dataColor[$productId][$colorName])): ?>
+                                    <tr>
+                                        <td class="tr"><?= $colorName ?>(<?= $dataColor[$productId][$colorName] ?> шт.)</td>
+                                        <td></td>
+                                        <?php
+                                            $colorsCounter[$productId]++;
+                                            $newHand = [];
+                                        ?>
+                                        <?php foreach($storeAll as $store): ?>
+                                            <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+                                                <?php
+                                                    $value = ceil($dataFieldsValues[$productId][$store->id][$colorName] ?? 0);
+                                                    $ostatok[$productId][$store->id] -= $value;
+                                                    $colorAllCnt += $value;
+                                                ?>
+                                                <td <?= $value % ($productsMinLot[$productId] ?? 1) != 0 ? 'class="bg-danger"' : '' ?>
+                                                        onclick="ShowInput('division_hand',
+                                                                '<?= $store->id ?>',
+                                                                '<?= $productId ?>',
+                                                                '<?= $colorName ?>',
+                                                                '<?= md5($colorName) ?>',
+                                                                '<?= $productsMinLot[$productId] ?>',
+                                                                '<?= $value ?>')"
+                                                    id="division_hand<?= $store->id ?><?= $productId ?><?= md5($colorName) ?>" >
+                                                    <?= $value ?>
+                                                </td>
+                                                <?php if ($filterModel->groupIndex != -1): ?>
+                                                    <td style="min-width: 40px"></td>
+                                                <?php endif; ?>
+                                            <?php endif; ?>
+                                        <?php endforeach; ?>
+                                        <?php if ($filterModel->printSumm == 1): ?>
+                                            <?php $difColor = $dataColor[$productId][$colorName] - $colorAllCnt; ?>
+                                            <td><?= $colorAllCnt ?></td>
+                                            <td><?= $dataColor[$productId][$colorName] ?></td>
+                                            <td <?= $difColor != 0 ? 'class="bg-danger"' : '' ?>><?= $difColor ?></td>
+                                        <?php endif; ?>
+                                    </tr>
+                                <?php endif; ?>
+                            <?php endforeach; ?>
+                        <?php endif; ?>
+                        <?php if (!empty($colorsCounter[$productId])): ?>
+                        <tr class="bg-success">
+                            <td class="tr">остаток</td>
+                            <td></td>
+                            <?php foreach($storeAll as $store): ?>
+                                <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+                                    <?php $value = $ostatok[$productId][$store->id]; ?>
+                                    <td <?= $value < 0 ? 'class="bg-danger"' : '' ?> ><?= $value ?></td>
+                                    <?php if ($filterModel->groupIndex != -1): ?>
+                                        <td style="min-width: 40px"></td>
+                                    <?php endif; ?>
+                                <?php endif; ?>
+                            <?php endforeach; ?>
+                            <?php if ($filterModel->printSumm == 1): ?>
+                                <td></td>
+                                <td></td>
+                                <td class="bg-danger"></td>
+                            <?php endif; ?>
+                        </tr>
+                    <?php endif; ?>
+                    <?php endif; ?>
+                    <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
+                        <?php if ($filterModel->groupIndex == -1): ?>
+                            <tr class="trproduct">
+                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
+                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
+                                <?php foreach($storeAll as $store): ?>
+                                    <td class="td_product"><span class="fs-6">&nbsp;</span></td>
+                                <?php endforeach; ?>
+                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
+                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
+                                <td class="td_product"><span class="fs-6">&nbsp;</span></td>
+                            </tr>
+                        <?php endif; ?>
+                    <?php endif; ?>
+                <?php endforeach; ?>
+            </tbody>
+        </table>
+    </div>
+</div>
+
+<script>
+    function printTable() {
+        const landscape = '<?= $filterModel->printOrientation ?>' === 'landscape';
+        const css = '@page { ' + (landscape ? 'size: landscape;' : '') + ' margin: 0;  } #shipmentPrintButton, #filter-form {display: none;}' +
+            'a[href]:after { content: "" !important;}',
+            head = document.head || document.getElementsByTagName('head')[0],
+            style = document.createElement('style');
+
+        style.media = 'print';
+        style.appendChild(document.createTextNode(css));
+
+        head.appendChild(style);
+
+        window.print();
+
+        head.removeChild(style)
+    }
+</script>
+
+<style>
+    table tbody tr td {
+        border: 3px solid black !important;
+    }
+
+    table.table tbody tr:hover td {
+        background: #cdcdcd
+    }
+
+    .zak tbody tr:hover td {
+        background: #cdcdcd
+    }
+
+    .zak > thead > tr > th, .zak tr.zg th, .zak tr.zg td {
+        font-size: 0.7rem;
+        min-width: 30px;
+        text-align: center;
+        font-weight: normal;
+        max-height: 60px;
+        overflow: hidden
+    }
+
+    .zak > thead > tr > th b {
+        font-weight: normal;
+    }
+
+    .zak > :not(caption) > * > * {
+        padding: 0.05rem;
+        box-shadow: none;
+    }
+
+    .zak td.fs-5 {
+        text-align: left;
+        padding: 0.3rem 1rem;
+    }
+
+    .zak {
+        border-collapse: collapse;
+        border-spacing: 0;
+        overflow: hidden;
+    }
+
+    .zak th, .zak td {
+        border: 1px solid #e6e6e6;
+        padding: 0.1rem;
+        vertical-align: middle;
+        position: relative;
+    }
+
+    .zak td:hover:before {
+        background-color: #e3e3e3;
+        content: '';
+        height: 100%;
+        left: -5000px;
+        position: absolute;
+        top: 0;
+        width: 10000px;
+        z-index: -2;
+    }
+
+    .zak td:hover:after {
+        background-color: #cdcdcd;
+        content: '';
+        height: 10000px;
+        left: 0;
+        position: absolute;
+        top: -5000px;
+        width: 100%;
+        z-index: -1;
+    }
+
+    .zak tbody td input.form-control {
+        font-size: 0.8rem;
+        min-width: 70px;
+        max-width: 100px;
+        font-weight: bold;
+        border: 0;
+        border-radius: 0;
+        color: #333;
+        padding: 0.2rem;
+        margin: 0;
+    }
+
+    .zak tbody td input.form-control:focus {
+        border: 2px #cd0202 solid;
+        background: #ffccdb
+    }
+
+    .zak td.bg-danger, .zak td.bg-indigo, .zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo {
+        color: #fff;
+    }
+
+    table.zak thead th:not(:first-child), table.zak tr.zg th th:not(:first-child) {
+        vertical-align: bottom;
+        line-height: normal;
+    }
+
+    table.zak thead b {
+        writing-mode: vertical-rl;
+        transform: scale(-1);
+    }
+
+    table.zak tr.zg th b, table.zak tr.zg td b {
+        writing-mode: vertical-rl;
+        transform: scale(-1);
+        font-weight: normal;
+        font-size: 0.6rem;
+    }
+
+    .zak tr th .th_p_summ {
+        text-align: center;
+        font-weight: bold;
+    }
+
+    .app-content .side-app {
+        padding: 25px 0.5rem 0 0.5rem;
+    }
+
+    .zak tbody tr td.td_product, .zak td.td_product {
+        tex-align: left;
+    }
+
+    .zak td.td_product:hover {
+        background: #fff;
+    }
+</style>
+<style>
+    .zak tbody tr:hover:not(.no-hover) td {
+        background: #cdcdcd
+    }
+
+    .zak > thead > tr > th, .zak tr.zg th {
+        font-size: 0.7rem;
+        min-width: 30px;
+        max-width: 40px;
+        text-align: center;
+        font-weight: normal;
+        overflow: hidden
+    }
+
+    .zak > thead > tr > th b, .zak > thead > tr > td b {
+        font-weight: normal;
+    }
+
+    .zak > :not(caption) > * > * {
+        padding: 0.05rem;
+        box-shadow: none;
+    }
+
+    .zak td.fs-5 {
+        text-align: left;
+        padding: 0.3rem 1rem;
+    }
+
+    .zak {
+        border-collapse: collapse;
+        border-spacing: 0;
+        overflow: hidden;
+    }
+
+    .zak th, .zak td {
+        border: 1px solid #e6e6e6;
+        padding: 0.1rem;
+        vertical-align: middle;
+        position: relative;
+    }
+
+    table.zak thead th, table.zak tr.zg th th, table.zak tr.zg td td {
+        vertical-align: bottom;
+        line-height: normal;
+    }
+
+    table.zak thead b, table.zak tbody b {
+        writing-mode: vertical-rl;
+        transform: scale(-1);
+    }
+
+    table.zak tr.zg th b, table.zak tr.zg td b {
+        writing-mode: vertical-rl;
+        transform: scale(-1);
+        font-weight: normal;
+        font-size: 0.6rem;
+    }
+
+    .app-content .side-app {
+        padding: 25px 0.5rem 0 0.5rem;
+    }
+
+    .zak tbody tr td.td_product, .zak td.td_product {
+        text-align: right;
+    }
+
+    .zak td.td_product:hover {
+        background: #fff;
+    }
+
+    .zak tr td.pr, .zak tr td.ost {
+        text-align: center;
+    }
+
+    .zak tr td.pr {
+        background: #ddd
+    }
+
+    .zak tr td.ost {
+        background: #e6e6e6
+    }
+
+    .zak td {
+        text-align: center;
+        vertical-align: bottom;
+    }
+
+    .zak td.lf {
+        text-align: left;
+        background: #fff
+    }
+
+    .zak td.tr {
+        text-align: right;
+    }
+
+    .zak td, .zak thead th {
+        color: #000;
+    }
+
+    .zak tr.trproduct td {
+        font-size: 1rem;
+        font-weight: bold;
+    }
+
+    input.greener {
+        border: 2px green solid;
+    }
+
+    input.editColor {
+        width: auto;
+        max-width: 70px;
+    }
+</style>
diff --git a/erp24/views/shipment_old/division-print-edit2.php b/erp24/views/shipment_old/division-print-edit2.php
new file mode 100644 (file)
index 0000000..d2d6848
--- /dev/null
@@ -0,0 +1,541 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+global $products;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$act='division-print-edit2';
+$modul='shipment';
+$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
+
+$OrderId=$id;
+
+
+$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
+$in=explode(",",$row["providers_arr"]);
+$status_order_id=$row["status"];
+$division_date=$row["division_date"];
+
+$k=0;
+$printColor=1;
+if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
+
+
+$printHand=0;
+if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
+
+
+$printSumm=0;
+if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
+
+
+$printPercentMatrix=0;
+if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
+
+
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+    $kustArray[$row2["parent_id"]][]=$row2["id"];
+    $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+
+
+
+
+
+//sort($kustArray);
+
+$sortStoreId="";
+$i=0;
+foreach($kustArray as $kustId =>$massiv) {
+    foreach($massiv as $storeGuid) {
+        if($i>0) $sortStoreId .=",";
+        $sortStoreId .=$storeGuid;
+        $sortStore[]=$storeGuid;
+        $i++;
+    }
+    echo'</p>';
+}
+
+
+
+
+
+echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
+echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info  btn-sm  me-1">без цветов</a>
+
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info  btn-sm me-1 ">показать ручные добавки</a>
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info  btn-sm me-1 ">показать столбцы итого</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info  btn-sm me-1 ">показать % от матрицы в цвете</a>
+
+
+
+
+<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
+
+
+
+$data=$db::getRows("SELECT * FROM store_planogram WHERE 1");
+foreach($data as $row) {
+    if(empty($row["color"])) $row["color"]="NULL";
+    $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["min"]=$row["quantity"];
+    $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["max"]=$row["quantity_max"];
+}
+
+
+
+
+$colorSort=[];
+$data=$db::getRows("SELECT product_id, store_id, color,posit FROM store_planogram_colors_sort WHERE 1  order by product_id ASC, posit ASC");
+foreach($data as $row) $colorSort[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["posit"];
+
+
+
+$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
+foreach($da as $r) {
+    $providers[$r["id"]]=$r["name"];
+    $providers_valuta[$r["id"]]=$r["valuta"];
+}
+
+
+
+$k=0;$w="";
+$privedrs_htm="";
+foreach($in as $pid) {
+//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
+    if($k!=0) $w .=",";  $w .="'$pid'"; $k++; }
+
+$w2="";
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+//if($k!=0) $w2 .=" OR ";
+//$w2 .="i.id_1c='".$row["id"]."'";
+    $products[$row["id"]]=$row["name"];
+    $productsMinLot[$row["id"]]=$row["min_lot"];
+    $prov[$row["id"]]=$row["provider_id"];
+    $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
+    if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
+    $k++;
+}
+
+$division=array(); //division_summ =50
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
+$ColorsCnt = [];
+$dataFiedlsValuesColorsCnt = [];
+foreach($data as $row) {
+    if(empty($row["color"])) $row["color"]="NULL";
+    if(empty($row["store_id"])) $row["store_id"]="NULL";
+    $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+    if($row["store_id"]!="NULL") {
+        $ColorsCnt[$row["product_id"]] +=$row["value"];
+        $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+$division=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
+foreach($data as $row) {
+    if(empty($row["color"])) $row["color"]="NULL";
+    if(empty($row["store_id"])) $row["store_id"]="NULL";
+    $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+    if($row["store_id"]!="NULL") {
+        $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+
+
+
+$quantity_warehouseman_fact=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
+foreach($data as $row) {
+    if(empty($row["color"])) $row["color"]="NULL";
+    if(empty($row["store_id"])) $row["store_id"]="NULL";
+    $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+
+    if($row["store_id"]=="NULL") {
+        $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
+    }
+}
+
+
+$colorPercent=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value,field_name FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and color!='' and field_name in('color_percent','division_hand')",[$OrderId]);
+foreach($data as $row) {
+    if($row["store_id"]!="NULL") {
+        if($row["field_name"]=="color_percent") $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
+        if($row["field_name"]=="division_hand") $divisionHand[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
+
+
+    }
+}
+
+
+
+echo'<div id="edit_div"></div><div class="table-responsive">
+<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
+
+$head="";
+foreach($sortStore as $storeId) {
+    echo'<th  style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
+    $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
+}
+if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+
+echo'</tr></thead><tbody>';
+
+
+$i=0;
+foreach($products as $productId =>$nameProduct) {
+//echo $nameProduct;
+    if(!empty($ColorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
+
+        if($i==20) { echo'<tr  class="zg"><td class="td_product">наименование</td>
+<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
+
+
+            if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+            echo'</tr>'; $i=0;    }
+
+
+        echo'<tr id="tr__'.$productId.'" class="trproduct"';
+        echo'><td class="td_product producted"><span class="fs-6"><a href="/shipment/divisionPrintEditProduct/?productId='.$productId.'&id='.$OrderId.'" target=new>'.$nameProduct.'</a></span> ';
+        if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
+ onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
+        echo' </td><td>'.$productsMinLot[$productId].'</td>';
+
+        $divisionCnt=0;
+        foreach($sortStore as $storeId) {
+            $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+            $divisionCnt=$divisionCnt + $value;
+            if(empty($value)) $value="";
+            echo'<td  class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
+
+            if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1)  echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
+            echo'</td>';
+        }
+
+        if($printSumm==1) {
+            echo'<td>'.intval($divisionCnt).'</td>';
+
+            echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
+            $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
+
+            echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
+        }
+        $colspan=count($sortStore)+1;
+        echo'</tr>';
+
+//$ostatok[$productId]=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"];
+
+        if($printColor==1) {
+//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
+            $kk=0;
+// цвета
+            foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
+                $colorName=trim($colorName);
+                $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
+                if(1)//if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
+                {
+
+
+
+                    /*
+                    echo'<tr '; if($printColor!=1) echo'style="display:none;"';
+                    echo' class="tr__'.md5($productId).' ';
+
+                    // если не завезли такой цвет
+                    if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
+
+
+                    if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
+                    echo'>
+                    <td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)  в %';
+
+
+                    echo'</td><td></td>';
+                    $colorCounter=0;
+                      foreach($sortStore as $storeId) {
+                          $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
+
+                          $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
+
+                        // if(!empty($value)) $value .="%";
+
+                          if(empty($value)) $value="";
+
+
+                          $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+                          $newcolorcnt=$value_real*($value/100);
+
+                         // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
+
+                            $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
+                            $colorData[$productId][$storeId][$colorName2]=$colorcnt;
+
+                            $colorCounter +=$colorcnt;
+
+                          echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="'.$value_real.' -> '.$value.'%">'.$colorcnt.'';
+
+                          if(!empty($value) and $printPercentMatrix==1) echo'<br>
+                          <small style="color:green">'.$value.'%</small>';
+
+                          echo'
+                          </td>';
+                     }
+
+
+                    if($printSumm) {
+
+                    $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
+                    $znak="";
+                    if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
+
+                    $difference[$productId][$colorName]=$colorDifference;
+
+
+                    echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
+                    <td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
+
+                    }
+
+
+                    echo'</tr>';
+
+                    */
+
+
+////////////// class="bg-secondary"
+
+
+                    $colorAllcnt=0;
+                    if(!empty($dataColor[$productId][$colorName])) {
+                        echo'<tr><td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)</td><td></td>';
+                        $ColorsCounter[$productId]++;
+                        $foreachBegin=$difference[$productId][$colorName];
+                        $minLot=$productsMinLot[$productId];
+                        $newHand=[];
+                        foreach($sortStore as $storeId) {
+                            //$colorData[$productId][$storeId][$colorName2]
+                            if($colorData[$productId][$storeId][$colorName]>0 and $colorData[$productId][$storeId][$colorName]>=$minLot) {
+                                if($foreachBegin>0) {
+                                    $foreachBegin -=$minLot;
+                                    $newHand[$storeId] +=-$minLot;
+
+
+
+                                } else break;
+                            }
+
+
+                        }
+
+
+
+                        foreach($sortStore as $storeId) {
+                            $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
+
+                            if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
+
+                            $ostatok[$productId][$storeId] +=$newColorInt; //'.$newHand[$storeId].'= $(\'#input_division_hand'.$storeId.''.$productId.''.md5($colorName).'\').toggle();
+                            echo'<td><span onclick="ShowInput(\'division_hand\',\''.$storeId.'\',\''.$productId.'\',\''.$colorName.'\',\''.md5($colorName).'\',\''.$productsMinLot[$productId].'\',\''.$newColorInt.'\')"
+   id="division_hand'.$storeId.''.$productId.''.md5($colorName).'">'.$newColorInt.'</span>
+ </td>';
+
+                            $colorAllcnt +=$newColorInt;
+
+                            //   <input style="display:none;" type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'division_hand\',\''.$productId.'\',\''.$storeId.'\',\''.$colorName.'\',\''.md5($colorName).'\');" class="" id="input_division_hand'.$storeId.''.$productId.''.md5($colorName).'">
+//  <sup>'.$store_planogram[$productId][$storeId][$colorName]["min"].'-'.$store_planogram[$productId][$storeId][$colorName]["max"].'</sup>
+                        }
+
+
+                        if($printSumm) {
+
+//$colorDifference=$colorCounter-$dataColor[$productId][$colorName];
+                            $znak="";
+
+
+                            $difcolor=$dataColor[$productId][$colorName]-$colorAllcnt;
+
+//if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";  '.$colorCounter.' '.$dataColor[$productId][$colorName].'
+                            echo'<td>'.$colorAllcnt.'</td><td>'.$dataColor[$productId][$colorName].'</td>
+<td '; if($difcolor!=0) echo' class="bg-danger"'; echo'>'.$difcolor.'</td>';
+
+                        }
+
+                        echo'</tr>';
+                    }
+/////////////////
+
+                }
+
+
+            }// end color
+
+
+//////////////
+
+
+            if(!empty($ColorsCounter[$productId])) {
+                echo'<tr class="bg-success"><td class="tr">остаток</td><td></td>';
+                foreach($sortStore as $storeId) {
+
+
+                    $ost=$dataFiedlsValues[$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
+                    //'.$ostatok[$productId][$storeId].'
+                    echo'<td class="';
+                    if($ost==0) echo'bg-success';
+                    elseif($ost>0) echo'bg-indigo';
+                    elseif($ost<0) echo'bg-danger';
+                    echo'">'.$ost.'</td>';
+                }
+
+
+                if($printSumm) {
+
+                    echo'<td></td><td></td>
+<td '; if($colorDifferenc1) echo' class="bg-danger"'; echo'></td>';
+
+                }
+
+                echo'</tr>';
+            }
+/////////////////
+
+
+
+
+
+        } // end if color
+
+
+
+    }
+
+
+
+}
+
+
+echo'</tbody></table></div>';
+//var onch=\'onchange="ajaxEditColor( \'\'+name_eng+\'\' , \'\'+store_id+\'\', \'\'+product_id+\'\', \'\'+color+\'\', \'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');"\';
+
+
+//   $(\'#\'+name_id).after(\'<input type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'\'+name_eng+\'\',\'\'+product_id+\'\',\'\'+store_id+\'\',\'\'+color+\'\',\'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');
+// class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'"
+$_CONFIG["jscss"] .='
+
+
+
+<script>
+
+function editz(name_eng)
+{ 
+
+alert(\' \'+name_eng+\'\');
+}
+
+
+function ajaxEditColor(name_eng,store_id,product_id,color,colormd5)
+{ 
+
+var v =$(\'#input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\').val();
+var name_id=\'input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+
+
+
+$.ajax({
+       url: \'/shipment/ajaxEditFieldValue/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$OrderId.',  
+       name_eng: name_eng, 
+       store_id: store_id,
+       product_id: product_id,
+       color: color,
+       value: v},  
+       success: function(data){  
+   $(\'#\'+name_id+\'\').after(\'<span class="okk">\'+data+\'</span>\');
+   $(\'#\'+name_id+\'\').addClass(\'greener\');
+       }
+    
+}); 
+
+setTimeout(function(){$(\'.okk\').remove();$(\'#\'+name_id+\'\').removeClass(\'greener\');}, 3000); 
+
+}
+
+
+function ShowInput(name_eng,store_id,product_id,color,colormd5,step,value) {
+var name_id=\'\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+
+if($(\'#\'+name_id+\'\').html()==value) {
+$(\'#\'+name_id+\'\').html(\'<input type=number class="editColor" onchange=ajaxEditColor("\'+name_eng+\'","\'+store_id+\'","\'+product_id+\'","\'+color+\'","\'+colormd5+\'") id=input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'  name=colorHand[\'+store_id+\'][\'+product_id+\'][\'+color+\'] value="\'+value+\'" step="\'+step+\'">\');
+}
+
+}
+
+</script>
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+.zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
+.zak th, .zak td {     border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
+.app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+.zak td.td_product:hover {background:#fff;}
+.zak  tr td.pr,.zak tr td.ost{text-align:center;}
+.zak  tr td.pr{background:#ddd}
+.zak  tr td.ost{background:#e6e6e6}
+.zak td{text-align:center;  vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+
+
+input.greener{border:2px green solid;}
+input.editColor{width:auto;max-width:70px;}
+</style>';
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
+
diff --git a/erp24/views/shipment_old/division-print.php b/erp24/views/shipment_old/division-print.php
new file mode 100644 (file)
index 0000000..a52c3c5
--- /dev/null
@@ -0,0 +1,348 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+global $products;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$act='division-print';
+$modul='shipment';
+$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
+
+$OrderId=$id;
+
+
+$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
+$in=explode(",",$row["providers_arr"]);
+$status_order_id=$row["status"];
+$division_date=$row["division_date"];
+
+$k=0;
+$printColor=1;
+if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
+
+
+$printHand=0;
+if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
+
+
+$printSumm=0;
+if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
+
+
+$printPercentMatrix=0;
+if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+    $kustArray[$row2["parent_id"]][]=$row2["id"];
+    $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+
+//sort($kustArray);
+
+$sortStoreId="";
+$i=0;
+foreach($kustArray as $kustId =>$massiv) {
+    foreach($massiv as $storeGuid) {
+        if($i>0) $sortStoreId .=",";
+        $sortStoreId .=$storeGuid;
+        $sortStore[]=$storeGuid;
+        $i++;
+    }
+    echo'</p>';
+}
+
+
+
+
+
+echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
+echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info  btn-sm  me-1">без цветов</a>
+
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info  btn-sm me-1 ">показать ручные добавки</a>
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info  btn-sm me-1 ">показать столбцы итого</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info  btn-sm me-1 ">показать % от матрицы в цвете</a>
+
+
+
+
+<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
+
+
+
+$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
+foreach($da as $r) {
+    $providers[$r["id"]]=$r["name"];
+    $providers_valuta[$r["id"]]=$r["valuta"];
+}
+
+
+
+$k=0;$w="";
+$privedrs_htm="";
+foreach($in as $pid) {
+//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
+    if($k!=0) $w .=",";  $w .="'$pid'"; $k++; }
+
+$w2="";
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+//if($k!=0) $w2 .=" OR ";
+//$w2 .="i.id_1c='".$row["id"]."'";
+    $products[$row["id"]]=$row["name"];
+    $productsMinLot[$row["id"]]=$row["min_lot"];
+    $prov[$row["id"]]=$row["provider_id"];
+    $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
+    if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
+    $k++;
+}
+
+$division=array(); //division_summ =50
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
+foreach($data as $row) {
+    if(empty($row["color"])) $row["color"]="NULL";
+    if(empty($row["store_id"])) $row["store_id"]="NULL";
+    $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+    if($row["store_id"]!="NULL") {
+        $ColorsCnt[$row["product_id"]] +=$row["value"];
+        $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+$division=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
+foreach($data as $row) {
+    if(empty($row["color"])) $row["color"]="NULL";
+    if(empty($row["store_id"])) $row["store_id"]="NULL";
+    $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+    if($row["store_id"]!="NULL") {
+        $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+
+
+
+$quantity_warehouseman_fact=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
+foreach($data as $row) {
+    if(empty($row["color"])) $row["color"]="NULL";
+    if(empty($row["store_id"])) $row["store_id"]="NULL";
+    $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+
+    if($row["store_id"]=="NULL") {
+        $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
+    }
+}
+
+
+$colorPercent=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and color!='' and field_name='color_percent'",[$OrderId]);
+foreach($data as $row) {
+    if($row["store_id"]!="NULL") {
+        $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+    }
+}
+
+
+
+echo'<div class="table-responsive">
+<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
+
+$head="";
+foreach($sortStore as $storeId) {
+    echo'<th  style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
+    $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
+}
+if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+
+echo'</tr></thead><tbody>';
+
+
+$i=0;
+foreach($products as $productId =>$nameProduct) {
+//echo $nameProduct; !empty($ColorsCnt[$productId]) and
+    if($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
+
+        if($i==20) { echo'<tr  class="zg"><td class="td_product">наименование</td>
+<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
+
+
+            if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+            echo'</tr>'; $i=0;    }
+
+
+        echo'<tr id="tr__'.$productId.'" class="trproduct"';
+        echo'><td class="td_product producted"><span class="fs-6">'.$nameProduct.'</span> ';
+        if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
+ onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
+        echo' </td><td>'.$productsMinLot[$productId].'</td>';
+
+        $divisionCnt=0;
+        foreach($sortStore as $storeId) {
+            $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+            $divisionCnt=$divisionCnt + $value;
+            if(empty($value)) $value="";
+            echo'<td  class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
+
+            if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1)  echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
+            echo'</td>';
+        }
+
+        if($printSumm==1) {
+            echo'<td>'.intval($divisionCnt).'</td>';
+
+            echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
+            $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
+
+            echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
+        }
+        $colspan=count($sortStore)+1;
+        echo'</tr>';
+
+
+
+        if($printColor==1) {
+//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
+            $kk=0;
+// цвета
+            foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
+                $colorName=trim($colorName);
+                $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
+                if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
+                {
+
+
+
+
+                    echo'<tr '; if($printColor!=1) echo'style="display:none;"';
+                    echo' class="tr__'.md5($productId).' ';
+
+// если не завезли такой цвет
+                    if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
+
+
+                    if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
+                    echo'>
+<td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)  в %';
+
+
+                    echo'</td><td></td>';
+                    $colorCounter=0;
+                    foreach($sortStore as $storeId) {
+                        $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
+
+                        $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
+
+                        // if(!empty($value)) $value .="%";
+
+                        if(empty($value)) $value="";
+
+
+                        $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+                        $newcolorcnt=$value_real*($value/100);
+
+                        // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
+
+                        $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
+
+                        $colorCounter +=$colorcnt;
+
+                        echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="нужно поедлить  '.$value_real.' '.$value.'%">'.$colorcnt.'';
+
+                        if(!empty($value) and $printPercentMatrix==1) echo'<br>
+      <small style="color:green">'.$value.'%</small>';
+
+                        echo'
+      </td>';
+                    }
+
+
+                    if($printSumm) {
+
+                        $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
+                        $znak="";
+                        if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
+
+
+                        echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
+<td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
+
+                    }
+
+
+                    echo'</tr>';
+
+                }
+
+
+            }// end color
+        } // end if color
+
+
+
+    }
+
+
+
+}
+
+
+echo'</tbody></table></div>';
+
+
+
+$_CONFIG["jscss"] .='
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+.zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
+.zak th, .zak td {     border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
+.app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+.zak td.td_product:hover {background:#fff;}
+.zak  tr td.pr,.zak tr td.ost{text-align:center;}
+.zak  tr td.pr{background:#ddd}
+.zak  tr td.ost{background:#e6e6e6}
+.zak td{text-align:center;  vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+</style>';
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
diff --git a/erp24/views/shipment_old/division.php b/erp24/views/shipment_old/division.php
new file mode 100644 (file)
index 0000000..0a4083a
--- /dev/null
@@ -0,0 +1,1630 @@
+<?php
+
+use yii\helpers\ArrayHelper;
+use yii\db\Expression;
+use yii_app\records\AdminGroup;
+use yii_app\records\Products1c;
+use yii_app\records\StoreOrdersStatuses;
+use yii_app\records\StoreOrders;
+use yii_app\records\ShipmentProviders;
+use yii_app\records\Products1cOptions;
+use yii_app\records\StoreOrdersItem;
+use yii_app\records\StoreOrdersPrices;
+use yii_app\records\StoreOrdersFields;
+use yii_app\records\StoreOrdersColors;
+use yii_app\records\Sales;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+
+//include"templates/top.php";
+
+global $products;
+$act='division';
+$modul='shipment';
+$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
+//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1  or id=10");
+$storesAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+
+$data3 = StoreOrdersStatuses::find()->asArray()->all();
+//$data3=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data3 as $row) {
+    $store_orders_statuses[$row["id"]]=$row["name"];
+    $statuses_groups[$row["id"]]=explode(",",$row["groups"]);
+    $statuses_stores_show[$row["id"]]=$row["stores_show"];
+    $statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
+    $status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+
+}
+
+$group_id=$_SESSION["group_id"];
+
+global $order_id;
+
+if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
+
+$OrderId=$id;
+
+global $status_order_id;
+
+$row = StoreOrders::find()->select(['name', 'id', 'providers_arr', 'status', 'DATE_FORMAT(date_start, \'%Y-%m-%d\') as date_start', 'parent_id'])
+    ->where(['id' => $id])->asArray()->one();
+//$row=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
+$in=explode(",",$row["providers_arr"]);
+$status_order_id=$row["status"];
+$k=0;
+$where="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+    if(!empty($guid)) {
+        if($k!=0) $where .=" OR ";
+        $where .=" id='$guid' ";
+        $k++;
+    }
+}
+
+if(!empty($where)) $where =" AND ( $where )";
+
+
+//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$stores = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
+    ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' $where AND view='1' order by name ASC");
+
+$kustArray=array();
+$data2 = Products1c::find()->select(['parent_id', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
+    ->andWhere(['!=', 'parent_id', ''])->orderBy(['parent_id' => SORT_ASC, 'name' => SORT_ASC])->asArray()->all();
+//$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+    $kustArray[$row2["parent_id"]][]=$row2["id"];
+    $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+
+
+
+//sort($kustArray);
+
+$sortStoreId="";
+$i=0;
+foreach($kustArray as $kustId =>$massiv) {
+// echo"<p> Куст $kustId = ";
+    foreach($massiv as $storeGuid) {
+        //  echo '<span class="btn btn-sm btn-info m-2"> '.$storesAll[$storeGuid]. '</span>';
+        if($i>0) $sortStoreId .=",";
+        $sortStoreId .=$storeGuid;
+        $sortStore[]=$storeGuid;
+        $i++;
+    }
+    echo'</p>';
+}
+
+
+
+
+
+echo'<h1 class="page-title mb-0 text-primary">Остаток склада '.$row["name"].' id='.$row["id"].'
+</h1>
+<span class="btn">'. $store_orders_statuses[$status_order_id] .' </span>  ваша роль <b>'.$roles[$_SESSION["group_id"]].'</b>
+
+<div id="admin__online"></div>
+';
+
+$w="";
+
+$da = ShipmentProviders::find()->select(['id', 'name', 'valuta'])->asArray()->all();
+//$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
+foreach($da as $r) {
+    $providers[$r["id"]]=$r["name"];
+    $providers_valuta[$r["id"]]=$r["valuta"];
+}
+
+
+
+$k=0;
+$privedrs_htm="";
+foreach($in as $pid) {
+    $privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
+    if($k!=0) $w .=" OR";  $w .=" o.provider_id='$pid'"; $k++; }
+//echo'<div class="row"><div class="col-12">'.$privedrs_htm.'</div></div>';
+
+$w2="";
+
+$data2 = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'o.min_lot'])
+    ->innerJoin('products_1c p', 'p.id = o.id')->where(['in', 'o.provider_id', $in])
+    ->orderBy(['o.provider_id' => SORT_ASC, 'p.name' => SORT_ASC])->asArray()->all();
+//$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
+//WHERE ($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+    if($k!=0) $w2 .=" OR ";
+    $w2 .="i.id_1c='".$row["id"]."'";
+    $products[$row["id"]]=$row["name"];
+    $productsMinLot[$row["id"]]=$row["min_lot"];
+    $prov[$row["id"]]=$row["provider_id"];
+    $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
+    if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
+    $k++;
+}
+
+$division=array();
+$division_prod = [];
+$data = StoreOrdersItem::find()->select(['division_fact as division_fact', 'store_id', 'product_id'])->where(['order_id' => $OrderId])
+    ->andWhere(['!=', 'store_id', ''])->asArray()->all();
+//$data=$db::getRows("SELECT division_fact as division_fact,store_id,product_id FROM store_orders_item WHERE order_id=? AND store_id!=''",[$OrderId]);
+foreach($data as $row) {
+    $division[$row["product_id"]][$row["store_id"]]=(int)$row["division_fact"];
+
+    $division_prod[$row["product_id"]] +=(int)$row["division_fact"];
+
+}
+
+
+// quantity_purchase_summ AND division_fact>0 or (quantity_purchase_summ>0 and division_fact='0')
+
+$data = StoreOrdersPrices::find()->select(['sum(quantity_warehouseman_fact) as quantity_warehouseman_fact', 'product_id', 'sum(quantity_purchase_summ) as quantity_purchase_summ'])
+    ->where(['order_id' => $OrderId])->groupBy(['product_id'])->asArray()->all();
+//$data=$db::getRows("SELECT sum(quantity_warehouseman_fact) as quantity_warehouseman_fact, product_id,
+//sum(quantity_purchase_summ) as quantity_purchase_summ FROM store_orders_prices WHERE order_id=? group by product_id",[$OrderId]);
+$quantity_warehouseman_fact = [];
+$products_no = [];
+foreach($data as $row) {
+    $quantity_warehouseman_fact[$row["product_id"]]=$row["quantity_warehouseman_fact"];
+    if($row["quantity_purchase_summ"]>0 and empty($division_prod[$row["product_id"]])) {
+        $products_no[$row["product_id"]]=$products[$row["product_id"]];
+        $products_quantity_purchase_summ[$row["product_id"]]=$row["quantity_purchase_summ"];
+    }
+
+
+}
+
+$data = StoreOrdersItem::find()->select(['sum(division_fact) as division_fact', 'product_id'])->where(['order_id' => $OrderId])
+    ->groupBy(['product_id'])->asArray()->all();
+//$data=$db::getRows("SELECT sum(division_fact) as division_fact,product_id FROM store_orders_item WHERE order_id=? group by product_id",[$OrderId]);
+foreach($data as $row) {
+    $QuantitySumm[$row["product_id"]]=$row["division_fact"];
+
+}
+
+global $quantityPurchase;
+$data = StoreOrdersItem::find()->select(['product_id', 'store_id', 'quantity_purchase'])->where(['order_id' => $OrderId])->asArray()->all();
+//$data=$db::getRows("SELECT product_id, store_id, quantity_purchase FROM store_orders_item WHERE order_id=?",[$OrderId]);
+$quantityPurchaseAll = [];
+foreach($data as $row) {
+    $quantityPurchase[$row["product_id"]][$row["store_id"]]=$quantityPurchase[$row["product_id"]][$row["store_id"]]+$row["quantity_purchase"];
+    $quantityPurchaseAll[$row["product_id"]]=$quantityPurchaseAll[$row["product_id"]]+$row["quantity_purchase"];
+
+
+}
+
+//print_r($products_no);
+
+//$products=array_merge($products,$products_no);
+foreach($products as $productId =>$nameProduct) {
+
+    if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
+
+        $ostatok=$quantity_warehouseman_fact[$productId]-$QuantitySumm[$productId];
+        if($ostatok>0) { // echo'<br> '.$nameProduct.'= '. $QuantitySumm[$productId] .' ostatok='.$ostatok.' ';
+            $ostatokReal[$productId]=$ostatok;  }
+        // else echo'<br> Деление в минус '.$nameProduct.'= '. $QuantitySumm[$productId].' ostatok='.$ostatok.' ';
+
+    }
+}
+
+$fieldIdThisDivision=22;
+
+
+if(!empty($_REQUEST["fieldIdThisDivision"])) $fieldIdThisDivision=(int)$_REQUEST["fieldIdThisDivision"];
+
+$_SESSION["fieldIdThisDivision"]=$fieldIdThisDivision;
+
+$data = StoreOrdersFields::find()->select(['name_full', 'description', 'name_eng', 'sql_table_values'])
+    ->where(['id' => $fieldIdThisDivision])->asArray()->one();
+//$data=$db::getRow("SELECT name_full, description, name_eng,sql_table_values FROM `store_orders_fields` WHERE id=?",[$fieldIdThisDivision]);
+
+$arrField=["20"=>"Деление закупшик", "22"=>"Деление кустовых Пришло по фактку кладовщик ", 4=>"Заказ кустовых" ];
+foreach($arrField as $fid =>$name){
+    echo'<a href="/'.$modul.'/'.$act.'/?id='.$id.'&fieldIdThisDivision='.$fid.'" class="btn btn';
+    if($fid==$fieldIdThisDivision) echo'-success'; else echo'-info';
+    echo' m-2">'.$name.'</a>';
+
+}
+
+
+echo' <br> <b>'.$data["name_full"].'</b> '.$data["description"].' <b>'.$data["sql_table_values"].' '.$data["name_eng"].' </b>  ';
+
+global $dataColorsValuesAll,$dataColorsValuesStores;
+//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
+$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'quantity', 'store_id'])
+    ->where(['order_id' => $OrderId])->andWhere(['not in', 'store_id', ['undefined', '']])
+    ->andWhere(['in', 'field_id', ['4', "" . $fieldIdThisDivision, '17', '20', '22']])
+    ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
+    ->asArray()->all();
+//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
+//and (field_id='4' or field_id='$fieldIdThisDivision' or field_id='17' or field_id='20' or field_id='22')  group by product_id,provider_id, store_id, color, field_id",[$OrderId]);
+foreach($data5 as $row5) {
+
+
+    if($row5["store_id"]!=0) $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]+$row5["quantity"];
+
+
+    $dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
+}
+
+
+
+
+//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
+$data5 = StoreOrdersColors::find()->select(['product_id', 'color', 'field_id', 'quantity', 'store_id'])->where(['order_id' => $OrderId])
+    ->andWhere(['not in', 'store_id', ['undefined', '']])->andWhere(['field_id' => "" . $fieldIdThisDivision])
+    ->groupBy(['product_id', 'provider_id', 'store_id', 'color'])
+    ->asArray()->all();
+//$data5=$db::getRows("SELECT product_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
+//and (field_id='$fieldIdThisDivision')  group by product_id,provider_id, store_id, color",[$OrderId]);
+foreach($data5 as $row5) {
+    $ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
+}
+
+
+//print_r($dataColorsValuesAll);
+
+
+
+
+$dataColorsValuesAll=array();
+$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'sum(quantity) as quantity', 'store_id'])
+    ->where(['order_id' => $OrderId])
+    ->andWhere(['store_id' => '0'])
+    ->andWhere(['field_id' => "" . $fieldIdThisDivision])
+    ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
+    ->asArray()->all();
+//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, sum(quantity) as quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined'
+//and store_id='0'
+//and (field_id='$fieldIdThisDivision')  group by product_id,provider_id, store_id, color,field_id",[$OrderId]);
+foreach($data5 as $row5) {
+    $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$row5["quantity"];
+}
+
+global $storesArr,$whereStores,$productsArrayStores;
+$storesArr = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->andWhere(['not in', 'name', ['09 Доставка букетов', '19 Пр. Октября 9а']])->all(), 'id', 'name');
+//$storesArr=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1' AND name!='09 Доставка букетов' AND name!='19 Пр. Октября 9а'");
+$whereStores=" AND ( store_id_1c='-99' ";
+foreach($storesArr as $storeIdGuid => $nameStore) $whereStores .=" or s.store_id_1c='$storeIdGuid' ";
+$whereStores .=" ) ";
+
+$whereProducts=" AND ( p.product_id='-999' ";
+foreach($products as $productId =>$nameProduct) {
+    $whereProducts .=" or p.product_id='$productId' ";
+}
+$whereProducts .=" )";
+
+$data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c', 'p.product_id'])
+    ->innerJoin('sales_products p', 's.id = p.check_id')
+    ->where(['s.operation' => 'Продажа'])
+    ->andWhere(['in', 'p.product_id', array_keys($products)])
+    ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
+    ->groupBy(['p.product_id', 's.store_id_1c'])
+    ->orderBy(['squantity' => SORT_DESC])
+    ->asArray()->all();
+//$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id
+//FROM sales as s, sales_products as p
+//WHERE s.id=p.check_id AND s.operation='Продажа' $whereProducts  AND s.date>=NOW() - INTERVAL 14 day $whereStores  group BY p.product_id, s.store_id_1c order by
+//squantity DESC");
+foreach($data as $row){
+    $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
+
+}
+
+
+
+
+//функция автораспределения количество штук заказнных магазином , фактический приход по товару, сколкьо заказано кустовым, минимальный лот
+function autoDivision($productId,$quantityArr,$formulaFact,$formulaPurchase,$formulaMinLot) {
+    global $db,$storesArr,$whereStores,$productsArrayStores,$quantityPurchase;
+    /*
+    Распределение по делению.
+
+    Если заказ меньше Минимальный лот деления
+    Первый цикл подсчета полный цикл считаем в процентном соотношении доли заказа кустовым к общему приходу
+
+    Например Заказ =100 А пришло 65 штук
+    Последний цикл по рейтингу продаж по этой позиции за прошедшую неделю
+    По этой позиции
+    Если заказ больше то заказ распределяется 100%
+    Подсказка по пронципе продаж начисления %
+    */
+
+
+
+
+    /*
+    $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
+    FROM sales as s, sales_products as p
+    WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores  group BY p.product_id, s.store_id_1c order by
+    squantity DESC",[$productId]);
+    */
+
+    $allQuantity=0;
+    foreach($quantityArr as $quantity) $allQuantity +=$quantity;
+
+
+    $txt="<h3>Сортировка по магазинам по этому товару</h3>
+<p>Продажи за последнюю неделю в шт.</p>";
+    $massivStoreSort=array();
+    $i=1;
+
+
+    if($formulaPurchase>=$formulaFact) $allQuantity=$formulaFact;
+    if($formulaPurchase<=$formulaFact) $allQuantity=$formulaPurchase;
+
+    $txt .="Считаем по $allQuantity ";
+
+    $txt .=" $allQuantity   заказ кустовых $formulaPurchase ";
+    /*
+    foreach($data as $row){
+    $txt .="<tr><td>$i)</td><td>".$storesArr[$row["store_id_1c"]]."</td><td>".(int)$row["squantity"]." шт.</td></tr>";
+    $massivStoreSort[]=$row["store_id_1c"];
+    $massivStoreSortQuantity[$row["store_id_1c"]]=(int)$row["squantity"];
+
+    $i++;
+    }
+    */
+    if($formulaFact>=$formulaPurchase) $percentFact=1; else $percentFact=$formulaFact/$formulaPurchase;
+
+    $percentFact=round($percentFact,4);
+
+    $txt .=" <br>коэфициент умножения  $percentFact  -умноаем каждый заказ на этот коэф
+
+<table><tbody>   ";
+
+    $onclick="";
+
+    $q_all=0;
+    foreach($quantityPurchase[$productId] as $store_id_1c => $quantity){
+
+//$percent=round($quantityArr[$store_id_1c]*$percentFact/$allQuantity,3);
+
+
+        $quantity_zakaz=round($quantityArr[$store_id_1c]*$percentFact);
+        $quantity_zakaz_round=ceilCoefficient($quantity_zakaz,$formulaMinLot);
+
+//$roundPBase=ceilCoefficient($formulaFact*$percent*$percentFact,$formulaMinLot);
+//if($percent>0 and $roundP==0 and $roundPAll<$formulaFact) $roundP=$formulaMinLot;
+        $q_all +=$quantityArr[$store_id_1c];
+
+        if($roundPBaseAll<$allQuantity) {
+            $roundPBaseAll +=$quantity_zakaz_round;
+
+        }
+
+        $txt .="<tr><td>$i)</td><td>".$storesArr[$store_id_1c]."</td><td>".(int)$quantity." шт.</td>
+<td>заказ ".$quantityArr[$store_id_1c]."</td>
+<td>".$percent."</td><td>$formulaFact</td>
+<td> $quantity_zakaz -> $quantity_zakaz_round </td></tr>";
+//$massivStoreSort[]=$store_id_1c;
+//$massivStoreSortQuantity[$store_id_1c]=(int)$quantity;
+
+
+        $autoReccomend[$store_id_1c]=$quantity_zakaz_round;
+
+        $onclick .='$(\'#autodivision_'.$productId.''.$store_id_1c.'\').text(\''.$quantity_zakaz_round.'\');';
+
+
+        $i++;
+    }
+    $txt .="<tr><td></td><td>Итого</td><td></td><td>$q_all</td><td></td><td></td><td>$roundPBaseAll</td></tr>";
+    $do=1;
+    if($roundPBaseAll==$q_all) $do=0;
+
+    $txt .="</tbody></table>всего заказано $allQuantity По факту $formulaFact = процент $percentFact% Всего базово на заказ $roundPAll
+
+
+<span class=\"btn btn-warning\" onclick=\"$onclick\">установить</span>
+
+";
+
+
+
+
+    $thiasQuantity=0;
+    $massivAddQuantity=array();
+    $data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c'])
+        ->innerJoin('sales_products p', 's.id = p.check_id')
+        ->where(['s.operation' => 'Продажа'])
+        ->andWhere(['p.product_id' => $productId])
+        ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
+        ->andWhere(['in', 's.store_id_1c', array_keys($storesArr)])
+        ->groupBy(['p.product_id', 's.store_id_1c'])
+        ->orderBy(['squantity' => SORT_DESC])
+        ->asArray()->all();
+//    $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
+//FROM sales as s, sales_products as p
+//WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores  group BY p.product_id, s.store_id_1c order by
+//squantity DESC",[$productId]);
+    foreach($data as $row){
+        $txt .="<br> $i) ".$storesArr[$row["store_id_1c"]]." ".(int)$row["squantity"]." шт. ";
+        $storeArr[$row["store_id_1c"]]=$row["squantity"];
+        $i++;
+    }
+
+
+
+
+// если первый цикл совсем ничего не начислил
+    if($roundPBaseAll<$allQuantity) {
+        $txt .="<br>
+Начинаем начисление по кругу отталкиваясь от продаж ++ $allQuantity ++";
+
+        $formulaFactForeach=$allQuantity;
+
+        for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+            if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";  break;   }
+
+            foreach($storeArr as $storeId =>$q) {
+                if($allQuantity>=($thiasQuantity+$formulaMinLot)) {
+
+                    $massivAddQuantity[$storeId] +=$formulaMinLot;
+                    $thiasQuantity +=$formulaMinLot;
+
+//$txt .="<br> 77777+++ ".$storesArr[$storeId]." = ".$massivAddQuantity[$storeId]." шт.";
+                    $formulaFactForeach -=$formulaMinLot;
+                }
+
+            }
+        }
+
+        echo"<br>Цикл начисления";
+        $onclick="";
+        foreach($massivAddQuantity as $storeId => $q) {
+            $txt .="<br> +++ ".$storesArr[$storeId]." = ".(int)$q." шт.";
+            $onclick .='$(\'#autodivision_'.$productId.''.$storeId.'\').text(\''.$q.'\')';
+
+        }
+
+        $txt .="<br>Итого по второму кругу= ".(int)$thiasQuantity." шт.
+
+
+
+
+";
+
+
+    }
+// конец цикла
+
+    $thiasQuantity=0;
+    $massivAddQuantity=array();
+// распределяем излишки согласно процентам
+    if($formulaFact>$formulaPurchase) {
+
+        $izlishek=$formulaFact-$formulaPurchase;
+
+        $txt .="<br>Начинаем начисление  излишков по кругу отталкиваясь от продаж";
+
+
+        $formulaFactForeach=$izlishek;
+
+        for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+            if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";  break;   }
+
+            foreach($storeArr as $storeId =>$q) {
+                if($izlishek>=($thiasQuantity+$formulaMinLot)) {
+                    $massivAddQuantity[$storeId] +=$formulaMinLot;
+                    $thiasQuantity +=$formulaMinLot;
+                    $formulaFactForeach -=$formulaMinLot;
+                }
+
+            }
+        }
+
+
+
+
+        //  echo"<br>Цикл начисления";
+        foreach($massivAddQuantity as $store_id_1c => $squantity) {
+
+            if(($allRecommendeted+$squantity)<=$formulaFact) {
+                $allRecommendeted +=$squantity;
+                $txt .="<br> +++ ".$storesArr[$store_id_1c]." = ".(int)$squantity." шт.";
+                $autoReccomend[$store_id_1c] +=$squantity;
+            }
+
+
+        }
+        $txt .="<br>Итого по третьему кругу= ".(int)$thiasQuantity." шт.";
+    }
+// конец цикла
+    $onclick="";
+    $AutoAll=0;
+    $txt .="<br>Рекомендованое распределение с излишками";
+    foreach($autoReccomend as $storeId => $count) {
+        if($AutoAll<$formulaFact and $formulaFact>=($AutoAll+$count)) {
+            $AutoAll +=$count;
+            $txt .="<br>+++ ".$storesArr[$storeId]." = ".(int)$count." шт.";
+            $onclick .='$(\'#autonew_'.$productId.''.$storeId.'\').text(\''.$count.'\');';
+
+        }
+
+    }
+    $txt .="<br>Итого распределено= ".(int)$AutoAll." шт. 
+  
+  
+  <span class=\"btn btn-warning\" onclick=\"$onclick\">установить с делением излишков</span>
+";
+
+
+    $Purchase=0;
+    /*
+    foreach($storesArr as $storeId =>$storeName)
+    {
+     if(!in_array($storeId,$storesArr))   $massivStoreSort[]=$storeId;
+     if(!empty($autoQuantity[$storeId])) $Purchase=1;
+    }
+
+    $autoQuantity=array();
+    $print=1;
+    $formulaFactForeach=$formulaFact;
+
+    if($print==1) $txt .="<br>formulaFactForeach =$formulaFactForeach";
+    $j=1;
+
+
+
+
+    for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+
+
+
+    if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";  break;   }
+     if($print==1)  $txt .="<br>++Цикл =$formulaFactForeach";
+
+
+
+    foreach($massivStoreSortQuantity as $storeId =>$q) {
+
+
+    //$txt .="<br>!!!!!! $formulaFactForeach -- minlot=$formulaMinLot---q=".$autoQuantity[$storeId]."------ ";
+
+
+
+
+    $ost=$formulaFact-$autoQuantityAll;
+
+    if($print==1)  $txt .="<br>$j )  ".$storesArr[$storeId]." (fact=$formulaFact => $ost)  ";
+    $j++;
+
+
+    //если товар не заказ кустовым то пропускаем магазин
+    if(empty($quantityArr[$storeId])) {   $txt .=" -- пропускаем ";     continue; }
+
+
+
+
+
+    //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
+    if($autoQuantityAll>$formulaFact) {  if($print==1)  $txt .="<br>=-----выход из цикла";   break; }
+
+    //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
+    if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot and ($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase))) {
+    // если общее количество товара все еще меньше факта то выполняем
+       if(($autoQuantityAll+$formulaMinLot)<=$formulaFact) {
+        if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
+        $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
+        $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
+        $formulaFactForeach -=$formulaMinLot;
+        if($print==1)   $txt .=" all=$autoQuantityAll+  $formulaMinLot =>continue0";
+        continue;
+        } else {
+
+
+            if($formulaFact>=$formulaMinLot) {
+                  $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
+                  $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
+                  $formulaFactForeach -=$formulaMinLot;
+                    if($print==1)   $txt .=" continue33 all=".$autoQuantity[$storeId]." qu=".$autoQuantity[$storeId]." formulaFactForeach=$formulaFactForeach ";
+
+                   continue;
+           }
+
+
+
+
+        }
+       }
+
+
+    }
+
+    //если остаток меньше минимального лота
+    if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
+    if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
+     $autoQuantity[$storeId] +=$formulaFactForeach;
+     $autoQuantityAll +=$formulaFactForeach;
+     $formulaFactForeach -=$formulaFactForeach;
+     if($print==1)  $txt .=" all2=$autoQuantityAll+  $formulaFactForeach BREAK ";
+     break;
+
+    }
+    }
+
+
+    //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
+    if($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase)) {
+
+
+      //  $formulaFactForeach -=$formulaMinLot;
+
+        if($print==1)   $txt .=" minlot=111";
+
+
+        }// вычитаем из счетчика цикла - минимальный лот
+    if($print==1)  $txt .="   -> ".$autoQuantity[$storeId] ." шт остаток =$formulaFactForeach  all=$autoQuantityAll+  formulaFactForeach=$formulaFactForeach ";
+
+    if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";
+    break; } // выходим из цикла - задача выполнена
+    }
+
+    }
+
+    $ostatky=$formulaFact-$autoQuantityAll;
+    if(($formulaFact-$autoQuantityAll)>0) if($print==1) $txt .="<br><font color=red>Остатки распределены между теми кто заказал но есть остатки $ostatky</font>";
+
+
+
+    //////////////
+
+    $formulaFactForeach=$ostatky;
+    $autoQuantityAllNew=0;
+    if($print==1) $txt .="<br><h3>Распределяем остатки</h3>formulaFactForeach =$formulaFactForeach";
+    $j=1;
+    for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+    if($formulaFactForeach<=0) break;
+     if($print==1)  $txt .="<br>++Цикл =$formulaFactForeach";
+    foreach($massivStoreSortQuantity as $storeId =>$q) {
+
+    if($print==1)  $txt .="<br>$j )  ".$storesArr[$storeId]."  ";
+    $j++;
+
+
+    //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
+    if($autoQuantityAllNew>=$ostatky) break;
+
+    //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
+    if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot) {
+    // если общее количество товара все еще меньше факта то выполняем
+       if(($autoQuantityAllNew+$formulaMinLot)<$formulaFact) {
+
+        $autoQuantityAllNew +=$formulaMinLot; // обновляем счетчик общего количества
+        $autoQuantityNew[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
+        if($print==1)   $txt .=" all=$autoQuantityAllNew+  $formulaMinLot ";
+
+       }
+
+
+    }
+
+    //если остаток меньше минимального лота
+    if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
+
+     $autoQuantityNew[$storeId] +=$formulaFactForeach;
+     $autoQuantityAllNew +=$formulaFactForeach;
+
+    }
+
+
+    //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
+    $formulaFactForeach -=$formulaMinLot; // вычитаем из счетчика цикла - минимальный лот
+    if($print==1)  $txt .="   -> ".$autoQuantityNew[$storeId] ." шт остаток =$formulaFactForeach";
+    if($formulaFactForeach<=0) continue; // выходим из цикла - задача выполнена
+    }
+
+    }
+    /////////////
+
+
+
+
+    if($print==1) $txt .="<br><br>==================
+    <h6>Результат</h6>";
+
+    foreach($autoQuantity as $q =>$s) {
+    if($print==1)  $txt .="<br>".$storesArr[$q]." =>$s";
+    }
+    */
+
+    if($print==1) $txt .="<br>Итого $autoQuantityAll шт.";
+    $array["auto"]=$autoQuantity;
+    $array["text"]=$txt;
+    $array["new"]=$autoQuantityNew;
+
+
+    return $array;
+
+
+
+}
+echo"<br><b>Товары которые были заказны кустовыми но не пришли:</b> было заказано ";
+foreach($products_no as $productId => $cnt) echo"".$products[$productId]."=$cnt шт.,   ";
+
+echo'<br><span class="btn btn-info m-3" onclick="$(\'.no_products\').show()">показать товары которые не пришли</span>';
+
+echo'<span class="btn btn-blue m-3" onclick="load_devision_ajax();">обновить данные</span>';
+
+
+
+echo'<div class="table-responsive">
+<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>';
+
+$head="";
+foreach($sortStore as $storeId) {
+    echo'<th  style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></th>';
+    $head .='<td style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></td>';
+}
+echo'</tr></thead><tbody>';
+
+$i=0;
+foreach($products as $productId =>$nameProduct) {
+// or !empty($products_no[$productId])
+    if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
+
+        if($i==20) { echo'<tr  class="zg"><td class="td_product">наименование</td><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>'.$head.'</tr>'; $i=0;    }
+        echo'<tr id="tr__'.$productId.'"';
+        // style="display:none;"
+        if(!empty($products_no[$productId])) echo' class="bg-warning no_products"';
+        else $i++;
+        echo'><td class="td_product producted" id-data="'.$productId.'">'.$nameProduct.' 
+ <span class="btn btn-white btn-sm" onclick="showKust(\''.$productId.'\');$(this).remove();">+ куст</span>';
+        if(!empty($products_colors[$productId])) echo' <span class="btn btn-warning btn-sm" onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>
+
+ ';
+        echo' <span onclick="$(\'#tr_'.md5($productId).'\').toggle()" class="btn btn-warning btn-sm">+ распределение</span></td>
+ <td class="pr" id="quantity_warehouseman_fact'.$productId.'" title="'.$quantity_warehouseman_fact[$productId].'">'.$quantity_warehouseman_fact[$productId].'</td>
+  <td class="summa_kust summa_kust_'.$productId.'" id="summa_kust_'.$productId.'">'.$quantityPurchaseAll[$productId].'</td>
+ <td class="ost ost_product_'.$productId.'" id="ost_product_'.$productId.'">0</td>
+<td>'.$productsMinLot[$productId].'</td>';
+
+
+        foreach($sortStore as $storeId) {
+            $quatityArr[$storeId]=$quantityPurchase[$productId][$storeId];
+            //  $formulaPurchaseArr[$storeId]=$quantityPurchaseAll[$productId][$storeId];
+
+        }
+
+        $formulaFact=$quantity_warehouseman_fact[$productId];
+        $formulaPurchase=$quantityPurchaseAll[$productId];
+        $formulaMinLot=$productsMinLot[$productId];
+//$auto="$formulaFact $formulaPurchase $formulaMinLot";
+
+        $autoArr=autoDivision($productId,$quatityArr,$formulaFact,$formulaPurchase,$formulaMinLot);
+
+
+        $autoQantityArr=$autoArr["auto"];
+        $autoTextArr=$autoArr["text"];
+
+        foreach($sortStore as $storeId) {
+            echo'<td  class="kust'.$kustArrayReverse[$storeId].'">';
+
+            $q=$quantityPurchase[$productId][$storeId];
+
+
+
+
+            if(!empty($q)) echo'<small>к</small>'.$q.'';
+
+            echo'<br><small>а<span id="autodivision_'.$productId.''.$storeId.'"'.$autoQantityArr[$storeId].'</span>
+
+n=<span id="autonew_'.$productId.''.$storeId.'">'.$autoArr["new"][$storeId].'</span></small> ';
+
+            $provider_id=$prov[$productId];
+
+            if(isset($stores[$storeId])) {
+                echo'<input type=number class="form-control product_'.$productId.'"  id="division_fact'.$productId.''.$storeId.'"
+onchange="EditField(\'division_fact\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.');" value="'.$division[$productId][$storeId].'">';
+
+            } else echo'<span class="product_'.$productId.'" title="'.$division[$productId][$storeId].'" id="division_fact'.$productId.''.$storeId.'">'.$division[$productId][$storeId].'</span>';
+
+
+
+
+            echo'</td>';
+
+
+
+        }
+
+
+
+        $colspan=25;
+
+        echo'</tr>
+
+<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>';
+
+
+        $kk=0;
+// цвета
+
+
+
+
+        $reload='';
+        foreach($products_colors[$productId] as $colorId => $colorName)  $reload .=';calc_color_product(\''.$productId.'\',\''.md5($colorName).'\')';
+        foreach($sortStore as $storeId) $reload .=';calc_color_product_store(\''.$productId.'\',\''.$storeId.'\')';
+
+
+
+        foreach($products_colors[$productId] as $colorId => $colorName) {
+            $colorName=trim($colorName);
+//$zakupFactColor=$dataColorsValuesAll[$productId][$colorName][17];
+            $zakupFactColor=$dataColorsValuesAll[$productId][$colorName][22];
+            echo'<tr style="display:none;" class="tr__'.md5($productId).' td_color_'.$productId.' color_tr_calc" title="color'.$productId.''.$storeId.''.md5("$colorName").'">
+<td>
+';
+
+
+
+            if($kk==0) echo'<span class="btn btn-info" onclick="calc_colors(\''.$productId.'\');'.$reload.'">обновить данные</span>';
+
+            $kk++;
+            echo'<table width=100%><td><span class="btn btn-sm btn-info" onclick="calc_color_product(\''.$productId.'\',\''.md5($colorName).'\');">обновить</span></td><td width=70%>'.$colorName.'</td></table></td>
+<td class="pr" id="quantity_color'.$productId.''.md5($colorName).'" title="'.$zakupFactColor.'">';
+
+            if(1) {
+                /*
+                echo'<input title="Приход по цвету от закупщика" type=number class="form-control"  id="quantity_zakup_fact_color'.$productId.''.md5("$colorName").'"
+                onchange="EditZakupColor(\'17\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_zakup_fact_color'.$productId.''.md5("$colorName").'\');"
+                value="'.$zakupFactColor.'">';
+                */
+
+                echo'<input title="Приход по цвету от кладовщика quantity_warehouseman_fact" type=number class="form-control ostatok__'.$productId.''.md5($colorName).'"  id="quantity_warehouseman_fact'.$productId.''.md5("$colorName").'"
+onchange="EditZakupColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_warehouseman_fact'.$productId.''.md5("$colorName").'\');"
+value="'.$zakupFactColor.'">';
+
+
+            } else echo'<span  id-dd="color_'.$productId.''.md5("$colorName").'" class="" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$zakupFactColor.'</span>';
+
+
+            echo'</td>
+ <td class="ost summa_kust_'.$productId.''.md5($colorName).'"  id="summa_color1_'.$productId.''.md5($colorName).'"></td>
+ <td class="ost ost_product_'.$productId.''.md5($colorName).'" id="ost_color1_'.$productId.''.md5($colorName).'">0</td>
+<td>'.$productsMinLot[$productId].'</td>';
+
+            foreach($sortStore as $storeId) {
+
+                $divisionFact=$dataColorsValuesStores[$productId][$colorName][$fieldIdThisDivision][$storeId];
+                /*
+                $colorName=str_replace('/','',$colorName);
+                $colorName=str_replace('\'','',$colorName);
+                 $colorName = preg_replace ("~/~", "", $colorName);
+                 $colorName = preg_replace ("~\~", "", $colorName);
+                 */
+                $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
+// если это деление факта
+//if(empty($divisionFact) and $fieldIdThisDivision==20)  $divisionFact=$dataColorsValuesStores[$productId][$colorName][4][$storeId];
+//if(empty($divisionFact) and $fieldIdThisDivision==20) $divisionFact=$dataColorsValuesStores[$productId][$colorName][20][$storeId];
+//if(empty($divisionFact))
+//$divisionFact=$dataColorsValuesStores["$productId"]["$colorName2"][22][$storeId];
+                $divisionFact=$ColorsArr["$productId"]["$colorName2"][22][$storeId];
+
+//$divisionFact=$db::getValue("SELECT  quantity FROM store_orders_colors WHERE order_id=? AND store_id=? AND product_id=? AND color='$colorName2' and  field_id='22' LIMIT 1",[$OrderId, $storeId, $productId]);
+
+
+                echo'<td class="kust'.$kustArrayReverse[$storeId].'">';
+
+//$colorName=$colorName2;
+
+                if(isset($stores[$storeId])) {
+                    echo'<input type=number id-dd="color_'.$productId.$storeId.md5("$colorName").'" class="form-control color_'.$productId.''.md5("$colorName").' 
+
+color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.''.$storeId.''.md5("$colorName").'"  id="color'.$productId.''.$storeId.''.md5("$colorName").'"
+onchange="EditFieldColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.',\''.$colorName.'\',\'color'.$productId.''.$storeId.''.md5("$colorName").'\');"
+value="'.$divisionFact.'">'.$divisionFact.'';
+
+                } else echo'<span  id-dd="color_'.$productId.''.md5("$colorName").'" class="color_'.$productId.''.md5("$colorName").'  color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.$storeId.md5("$colorName").'" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$divisionFact.'</span>';
+
+
+                echo'</td>';
+
+
+            }
+
+            echo'</tr>';
+        }
+
+        if(!empty($products_colors[$productId])) {
+
+            echo'<tr style="display:none;" class="bg-warning tr__'.md5($productId).'"><td>Итого по цветам</td>
+
+<td class="sm_kust" id="color_summ_kust_'.$productId.'" title=""></td><td class="pr" id="color_summ_'.$productId.'" title=""></td>
+ <td class="ost ost_color_summ_'.$productId.'" id="ost_color_summ_'.$productId.'">0</td>
+<td>'.$productsMinLot[$productId].'</td>';
+
+            foreach($sortStore as $storeId) {
+
+                echo'<td class="kust'.$kustArrayReverse[$storeId].'" id="summ_store_color_'.$productId.''.$storeId.'">
+<span class="btn btn-sm btn-info" onclick="calc_color_product_store(\''.$productId.'\',\''.$storeId.'\');">обновить</span>
+
+</td>';
+
+
+            }
+
+            echo'</tr>';
+
+        }
+
+
+//end colors
+
+
+
+    }
+
+
+
+}
+
+
+echo'</tbody></table></div>';
+
+
+echo'<h2>Излишки на складе после деления </h2>
+<p>Уходят на центральный склад. Минусовые деления не учитываются!</p>
+
+
+<table class="zak">
+<thead><th>наименование</th><th>сотаток шт.</th></thead>
+
+<tbody>';
+if (isset($ostatokReal)) {
+    arsort($ostatokReal);
+    foreach ($ostatokReal as $productId => $count) {
+        echo '<tr><td>' . $products[$productId] . '</td><td>' . $count . '</td></tr> ';
+
+    }
+}
+echo'</tbody></table>';
+
+
+//if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+$_SESSION["order_id"]=$OrderId;
+$_CONFIG["jscss"]='
+
+<script>
+ function AjaxGetJson(url, callback) {
+        var xmlhttp = new XMLHttpRequest();
+        xmlhttp.onreadystatechange = function () {
+            if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
+              /*  console.log(\'responseText:\' + xmlhttp.responseText); */
+                try {
+                    let data = JSON.parse(xmlhttp.responseText);
+                    callback(data);
+                } catch (err) {
+                  /*  console.log(err.message + " in " + xmlhttp.responseText); */
+                }
+            }
+        };
+        xmlhttp.open("GET", url, true);
+        xmlhttp.send();
+    }
+    
+function calcu(product_id) {
+
+
+var myNodeList = document.querySelectorAll(\'.td_color_\'+product_id+\'\');
+if( myNodeList.length) { 
+let summa_color = 0;
+for (let el of myNodeList) {
+      let id_element = el.getAttribute(\'title\');
+      let val=$(\'#\'+id_element).val();
+      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+      if(typeof val !== \'undefined\' && val!=\'\') {
+      val = Number(val);
+      summa_color = summa_color + val;
+      summa_color = Number(summa_color); 
+     }
+  
+  }
+
+
+}
+
+
+
+
+
+
+var myNodeList = document.querySelectorAll(\'.product_\'+product_id+\'\');
+
+if( myNodeList.length) { 
+
+let summa = 0;
+
+let prihod = $(\'#quantity_warehouseman_fact\'+product_id+\'\').text();
+ prihod = Number(prihod);
+for (let el of myNodeList) {
+      let val = el.value;
+      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+      if(typeof val !== \'undefined\' && val!=\'\') {
+      val = Number(val);
+      summa = summa + val;
+      summa = Number(summa); 
+   
+    }
+  
+  }
+  
+$(\'#summa_kust_\'+product_id+\'\').text(summa);   
+let pr =0;
+pr = prihod - summa;
+ pr = Number(pr);
+$(\'#ost_product_\'+product_id+\'\').text(pr); 
+
+if(pr < 0) {
+$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#CD5C5C\'); 
+$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#fff\');    
+    
+} else {
+    
+$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#90EE90\'); 
+$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#222222\');        
+    
+}
+
+}    
+/*calc_colors(product_id);*/
+}   
+
+
+function unique(arr) {
+  let result = [];
+
+  for (let str of arr) {
+    if (!result.includes(str)) {
+      result.push(str);
+    }
+  }
+
+  return result;
+}
+function calc_colors(product_id) {
+
+var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\');
+if( myNodeList.length) { 
+let summa = 0;
+let summa_kust = $(\'#summa_kust_\'+product_id+\'\').text();
+summa_kust = Number(summa_kust); 
+let class_arr=[];
+let class_vl=[];
+var id_last;
+for (let el of myNodeList) {
+      let val = el.value;
+      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+      
+      let  id_dd = el.getAttribute(\'id-dd\');
+      id_last = id_dd;
+      class_arr.push(id_dd);
+      
+      
+      
+      if(typeof val !== \'undefined\' && val!=\'\') {
+      val = Number(val);
+      summa = summa + val;
+      summa = Number(summa); 
+      class_vl[id_dd]=class_vl[id_dd]+val;
+      
+      
+   
+    }
+  
+  }
+  
+
+for (let el of class_vl) {
+ $(\'#ost_\'+el+\'\').text(class_vl[el]);  
+
+}
+
+
+  /* console.log(\'class_vl= \'+class_vl+\' \'); */
+
+
+
+  
+ class_arr = unique(class_arr);
+ for (let el2 of class_arr) {
+ let summa_color_store=0;
+ var myNodeList = document.querySelectorAll(\'.\'+class_arr+\'\');
+if( myNodeList.length) { 
+ for (let el of myNodeList) {
+  let val = el.value;
+ if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+ if(typeof val !== \'undefined\' && val!=\'\') {
+      val = Number(val);
+      summa_color_store = summa_color_store + val;
+      summa_color_store = Number(summa_color_store); 
+   
+    }
+ }
+summa_color_store = Number(summa_color_store);
+$(\'#summ_store_\'+class_arr+\'\').text(summa_color_store);   
+ }
+/*  console.log(\' class_arr= \'+class_arr+\' summa_color_store= \'+summa_color_store+\' \'); */
+ } 
+
+  
+summa = Number(summa);
+$(\'#color_summ_\'+product_id+\'\').text(summa);   
+
+
+let pr =0;
+pr = summa_kust - summa;
+$(\'#ost_color_summ_\'+product_id+\'\').text(pr); 
+
+if(pr < 0) {
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#CD5C5C\'); 
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#fff\');    
+    
+} else {
+    
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#90EE90\'); 
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#222222\');        
+    
+} 
+
+}    
+
+}   
+
+
+function calc_color_product(product_id, md5) {
+
+var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+md5+\'\');
+if( myNodeList.length) { 
+let summa = 0;
+let summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').text();
+summa_kust = Number(summa_kust); 
+if(summa_kust==\'\') summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').val();
+summa_kust = Number(summa_kust); 
+
+
+let class_arr=[];
+let class_vl=[];
+var id_last;
+for (let el of myNodeList) {
+      let val = el.value;
+      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+      
+      let  id_dd = el.getAttribute(\'id-dd\');
+      id_last = id_dd;
+      class_arr.push(id_dd);
+      
+      
+      
+      if(typeof val !== \'undefined\' && val!=\'\') {
+      val = Number(val);
+      summa = summa + val;
+      summa = Number(summa); 
+      class_vl[id_dd]=class_vl[id_dd]+val;
+      
+      
+   
+    }
+  
+  }
+  
+
+
+summa = Number(summa);
+$(\'#summa_color1_\'+product_id+\'\'+md5+\'\').text(summa);   
+
+
+let pr =0;
+pr = summa_kust - summa;
+$(\'#ost_color1_\'+product_id+\'\'+md5+\'\').text(pr); 
+
+if(pr < 0) {
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#CD5C5C\'); 
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');    
+    
+}
+if(pr>0) {
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'blue\'); 
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');    
+    
+}  
+if(pr==\'0\') {
+    
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#90EE90\'); 
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#222222\');        
+    
+} 
+
+}       
+    
+}
+
+
+function calc_color_product_store(product_id, store_id) {
+
+var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+store_id+\'\');
+if( myNodeList.length) { 
+let summa = 0;
+
+let class_arr=[];
+let class_vl=[];
+var id_last;
+for (let el of myNodeList) {
+      let val = el.value;
+      if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+      
+      let  id_dd = el.getAttribute(\'id-dd\');
+      id_last = id_dd;
+      class_arr.push(id_dd);
+      if(typeof val !== \'undefined\' && val!=\'\') {
+      val = Number(val);
+      summa = summa + val;
+      summa = Number(summa); 
+
+    }
+  
+  }
+summa = Number(summa);
+$(\'#summ_store_color_\'+product_id+\'\'+store_id+\'\').text(summa);   
+
+
+}       
+    
+}
+
+
+
+jQuery(document).ready(function($) {
+ $(".form-control").focus(function(){
+   $(".form-control").removeClass("active");
+   $(this).addClass("active");
+  }).blur(function(){
+  })
+});
+   
+   
+
+function load_devision_ajax() {
+
+
+var myNodeList = document.querySelectorAll(\'.producted\');
+if( myNodeList.length) { 
+for (let el of myNodeList) {
+      let product_id = el.getAttribute(\'id-data\');
+      calcu(product_id);
+}      
+}      
+AjaxGetJson(\'/shipment/ajax-division/\', function (data) {
+
+
+for (product_id in data) {
+        for (store_id in data[product_id]) {
+       /*  console.log(\' product_id= \'+product_id+\' store_id= \'+store_id+\' = \'+data[product_id][store_id]); */
+          let new_val = data[product_id][store_id][\'division_fact\'];
+          let colors_array = data[product_id][store_id][\'color\'];
+          
+              for (color in data[product_id][store_id][\'color\']) {
+                let color_quantity = data[product_id][store_id][\'color\'][color];
+                let color_md5 = color;
+                let dividcolor=\'color\'+product_id+\'\'+store_id+\'\'+color_md5+\'\';
+
+         if($(\'#\'+dividcolor).hasClass("active")){} else {
+               $(\'#\'+dividcolor).val(\'\'+color_quantity+\'\');  
+               $(\'#\'+dividcolor).text(\'\'+color_quantity+\'\');  
+               $(\'#\'+dividcolor).attr(\'title\',\'\'+color_quantity+\'\');  
+         }
+            }
+          
+         let divid=\'division_fact\'+product_id+\'\'+store_id;
+          let val=$(\'#\'+divid).val();
+          
+         
+          if(val!=new_val && $(\'#\'+divid).type == "input") {
+          $(\'#\'+divid).css(\'border\',\'1px #cd0202 solid\');
+          calcu(product_id);
+          }
+          
+        if($(\'#\'+divid).hasClass("active")){
+     } else {
+          $(\'#\'+divid).val(\'\'+new_val+\'\');  
+          $(\'#\'+divid).text(\'\'+new_val+\'\');  
+          $(\'#\'+divid).attr(\'title\',\'\'+new_val+\'\');  
+        }
+        
+        }
+        
+        
+}
+
+        });    
+    
+}   
+window.onload = function() {
+load_devision_ajax();
+};   
+    
+setInterval(function () {
+
+/*load_devision_ajax();*/
+
+    },5000);
+
+/*
+setInterval(function () {
+var myNodeList = document.querySelectorAll(\'.producted\');
+if( myNodeList.length) { 
+for (let el of myNodeList) {
+      let product_id = el.getAttribute(\'id-data\');
+     calc_colors(product_id); 
+}      
+} 
+
+},5000);
+
+*/
+
+var param = $("meta[name=csrf-param]").attr("content");
+var token = $("meta[name=csrf-token]").attr("content");
+
+setInterval(function () {
+$.ajax({
+       url: \'/shipment/ajax-admin-online/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { modul: \''.$modul.'\', action: \''.$act.'\',   entity_id: '.$OrderId.', [param]: token},  
+       success: function(data){ 
+        let data2 = JSON.parse(data);
+        let html =\'сейчас с этой страницей работают: \';
+       for (product_id in data2) {
+        html +=\'<span class="tag me-2">\'+data2[product_id]+\'</span>\';
+       }
+       
+       $(\'#admin__online\').html(html); 
+
+       }}); 
+},12000);
+
+
+
+function showKust(product_id){
+
+$.ajax({
+       url: \'/shipment/ajaxDivisionKust/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { order_id: '.$OrderId.',  product_id: \'\'+product_id+\'\'  },  
+       success: function(data){ 
+       $(\'#tr__\'+product_id).after(data); 
+
+       }}); 
+}
+
+
+function changef(id,typeint)
+{ 
+var uname=$(\'#\'+id+\'\').val();
+
+if(typeint==\'double\')  uname = uname.replace(/[^0-9.\s]/gi, \'\'); 
+if(typeint==\'int\')  uname = uname.replace(/[^0-9\s]/gi, \'\'); 
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+
+function EditField22(name_eng,product_id,store_id,provider_id)
+{ 
+/*
+changef(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\',\'int\');
+$.ajax({
+       url: \'/shipment/ajaxEditField/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$OrderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val()+\'\' },  
+       success: function(data){ 
+
+         $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+       setTimeout(function(){$(\'.okk\').remove();}, 5000);
+   
+
+       }}); 
+*/
+
+
+
+}
+
+
+
+
+
+function EditField(name_eng,product_id,store_id,provider_id)
+{ 
+/*     alert(\' name \'+name_eng+\'  product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');*/
+       
+var v=$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val();      
+$.ajax({
+       url: \'/shipment/ajaxEditField/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id: '.$OrderId.',  name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+v+\'\' },  
+       success: function(data){ 
+         $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok</span>\');
+         setTimeout(function(){$(\'.okk\').remove();}, 6000);
+       }});    
+}
+
+function EditFieldColor(field_id,product_id,store_id,provider_id,color,color_md5)
+{ 
+var v=$(\'#\'+color_md5+\'\').val();   
+/*alert(\' field_id \'+field_id+\' v=\'+v+\'  color=\'+color+\'  color_md5=\'+color_md5+\'   product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
+*/     
+
+$.ajax({
+       url: \'/shipment/ajaxEditFieldColor/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',store_id:\'\'+store_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },  
+       success: function(data){ 
+         $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
+         setTimeout(function(){$(\'.okk\').remove();}, 6000);
+       }});    
+}
+
+
+function EditZakupColor(field_id,product_id,provider_id,color,color_md5)
+{ 
+var v=$(\'#\'+color_md5+\'\').val();   
+/*alert(\' field_id \'+field_id+\' v=\'+v+\'  color=\'+color+\'  color_md5=\'+color_md5+\'   product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
+*/     
+
+$.ajax({
+       url: \'/shipment/ajaxEditZakupColor/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },  
+       success: function(data){ 
+         $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
+         setTimeout(function(){$(\'.okk\').remove();}, 3000);
+       }});    
+}
+
+
+</script>
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+    padding: 0.05rem;
+    background-color: 1px;
+    box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+       border-collapse: collapse;
+       border-spacing: 0;
+       overflow: hidden;
+}
+.zak th, .zak td {
+       border: 1px solid #e6e6e6;
+       padding: 0.1rem;
+       vertical-align: middle;
+       position: relative;
+}
+
+.zak td:hover:before,.zak td.kust1:hover:before  { 
+       background-color: #e3e3e3;
+       content: \'\';  
+       height: 100%;
+       left: -5000px;
+       position: absolute;  
+       top: 0;
+       width: 10000px;   
+       z-index: -2;        
+}
+.zak td:hover:after,.zak td.kust1:after { 
+       background-color: #cdcdcd;
+       content: \'\';  
+       height: 10000px;    
+       left: 0;
+       position: absolute;  
+       top: -5000px;
+       width: 100%;
+       z-index: -1;        
+}
+
+.zak tbody td input.form-control{font-size:0.7rem;max-width:50px;border:0;border-radius:0;color:#333;padding:0.1rem;margin:0;text-align:center;}
+.zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+table.zak thead th,
+table.zak tr.zg th th,table.zak tr.zg td td {
+  vertical-align: bottom;
+  line-height: normal;
+}
+table.zak thead b, table.zak tbody b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+  
+}
+
+
+table.zak tr.zg th b, table.zak tr.zg td b {
+  writing-mode: vertical-rl;
+  transform: scale(-1);
+    font-weight:normal; font-size:0.6rem;
+}
+
+ .app-content .side-app {
+    padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+.zak td.td_product:hover {background:#fff;}
+
+.zak  tr td.pr,.zak tr td.ost{text-align:center;}
+.zak  tr td.pr{background:#ddd}
+.zak  tr td.ost{background:#e6e6e6}
+
+.zak td{text-align:center;  vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+
+';
+/*
+foreach($kustBackground as $kustId =>$bg) {
+
+$_CONFIG["jscss"] .='
+table.zak tr td.kust'.$kustId.' {background:'.$bg.'}
+table.zak tr:hover td.kust'.$kustId.' {background:#cdcdcd}
+
+';
+
+}
+*/
+
+$_CONFIG["jscss"] .='
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+    margin: 0; 
+}</style>';
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
diff --git a/erp24/views/shipment_old/fields-data.php b/erp24/views/shipment_old/fields-data.php
new file mode 100644 (file)
index 0000000..9738e9a
--- /dev/null
@@ -0,0 +1,592 @@
+<?php
+
+
+use yii\grid\ActionColumn;
+use yii\helpers\Url;
+use yii\helpers\Html;
+use yii\grid\GridView;
+use yii\widgets\Pjax;
+use yii_app\records\Dashboard;
+use yii_app\records\StoreOrdersFields;
+use yii_app\records\StoreOrdersStatuses;
+use yii_app\records\StoreOrderStatus;
+use yii_app\services\ShipmentService;
+
+/* @var $this yii\web\View */
+/* @var $bonusConversionCost int */
+
+/* @var $userSalarySalut float */
+/* @var $userSalarySalutPremium float */
+/* @var $storeOrders array */
+/* @var $dozakupka array */
+/* @var $store_orders_statuses array */
+/* @var $dataStoreOrdersFields array */
+/* @var $dostupFields array */
+/* @var $bgFields array */
+/* @var $orders_status_description array */
+/* @var $adminGroups array */
+/* @var $urlActionPart string */
+/* @var $orderId string */
+/* @var $groupId int */
+/* @var $userGroup string */
+/* @var $orderData array */
+/* @var $storeOrderStatusDescription string */
+/* @var $storeOrderStatus string */
+/* @var $storeId ?int */
+/* @var $status_order_id int */
+/* @var $status_edit_dostup array */
+/* @var $store_orders_status_description array */
+/* @var $storesArray array */
+/* @var $storeArr array */
+/* @var $store_orders_statuses array */
+/* @var $statuses_stores_show array */
+/* @var $products_varieties array */
+/* @var $products_class array */
+/* @var $products array */
+/* @var $productsOptions array */
+/* @var $productsColorsArray array */
+/* @var $prov array */
+/* @var $statuses_dostup array */
+/* @var $dostup_fields array */
+/* @var $bg_fields array */
+/* @var $fieldsRows array */
+/* @var $dataTableHeader array */
+/* @var $shipmentService object */
+
+$this->title = 'Заказ товара';
+$this->params['breadcrumbs'][] = $this->title;
+$modul = 'shipment';
+
+
+
+$this->registerCssFile('/css/table/table.css', ['position' => \yii\web\View::POS_END]);
+
+?>
+
+
+    <div class="index">
+
+        <h1><?= Html::encode($this->title) ?></h1>
+
+
+
+
+    </div>
+    <div class="alert alert-warning" role="alert"><a href="/shipments/index" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+    <a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+    <a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+    Описание статуса: <?php echo $storeOrderStatusDescription ?>  Под кем будем просматривать
+<?php
+foreach ($adminGroups as $gid => $nameGroup) {
+
+    $buttonStyle = '';
+    $urlRow = '/shipment/' . $urlActionPart .'/?id=' . $orderId . '&group_id=' . $gid;
+    
+    if ($gid == $groupId) {
+        $buttonStyle = 'btn-success';
+    } else {
+        $buttonStyle = 'btn-outline-info';
+    }
+    
+    ?><a href='<?= $urlRow?>' class='m-1 btn btn-sm <?php echo $buttonStyle;?>'><?php echo $nameGroup; ?></a><?php
+
+}
+?>
+
+
+<br>
+<?php
+?>
+
+
+        Дата старта продаж (от этой даты считаем продажи при авто-заказе) <?php echo $orderData['date_start']; ?>
+        Дата деления (от этой даты считаем продажи при делении)<?php echo $orderData['division_date']; ?>
+
+
+
+
+<!--<a href="/shipment/' . $urlActionPart . '/?id=' . $orderId . '&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsDataTest();" class="btn btn-info me-2">1) TEST!!! поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>
+
+<a href="/shipment/<?php echo $urlActionPart;?>/?id=<?php echo $orderId ?>'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+<h1 class="page-title mb-0 text-primary">Заказ товара <?php echo $orderData["name"] ?> id=<?php echo $orderId ?>
+<span class="btn btn-lime"><?php echo  $storeOrderStatus ?></span>  ваша роль <b> <?php echo $userGroup ?></b></h1>';
+
+<?php
+// панель с магазинами
+ShipmentService::showOrderStoresPanel(
+    $status_order_id,
+    $status_edit_dostup,
+    $store_orders_status_description,
+    $storesArray,
+    $storeArr,
+    $storeId,
+    $store_orders_statuses,
+    $statuses_stores_show,
+    $urlActionPart,
+    $orderId,
+    $groupId
+);
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if (!empty($status_order_id) && $status_order_id == 1) {
+
+
+    ?><a href=\"/shipment/$urlActionPart/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a><?php
+
+
+    if (!empty($_REQUEST["load"])) {
+        $data = $db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+        foreach ($data as $row) {
+            $productsPrices[$row["product_id"]] = $row["price"];
+        }
+        $data_uper = [];
+        foreach ($products as $productId => $nameProduct) {
+            echo "<br>$nameProduct Роз. цена=" . $productsPrices[$productId] . "  закуп " . $productsOptions[$productId]["price_zakup"] . " ";
+            $price = $productsPrices[$productId];
+            $data_uper[$productId]["NULL"]["NULL"] = $price;
+
+            $db::sql("
+                UPDATE 
+                    `store_orders_prices` 
+                SET purchase_price='$price'
+                WHERE 
+                    product_id='$productId' 
+                AND 
+                    order_id='$orderId' 
+                AND 
+                    provider_id=1 
+                AND 
+                    purchase_price!='0.00'"
+            );
+
+        }
+
+//розничная цена
+        insert_store_orders_fields($data_uper, "purchase_price");
+
+
+        $data_uper = [];
+        foreach ($products as $productId => $nameProduct) {
+            $price = $productsOptions[$productId]["price_zakup"];
+            $data_uper[$productId]["NULL"]["NULL"] = $productsOptions[$productId]["price_zakup"];
+            $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+        }
+        insert_store_orders_fields($data_uper, "purchase_price_zakup");
+
+//header("Location: /shipment/$urlActionPart/?id=$orderId&group_id=$gid");
+    }
+
+
+}
+
+
+//если выбран магазин то
+if (!empty($store_id)) echo '<input type=hidden name=store_id_id value=' . $store_id . ' id=store_id_id>';
+
+echo '
+<div id=edit_div></div>
+<div class="table-responsive mt-3">
+    <table class="zak">';
+$html = '<thead>
+            <tr class="zg">
+                <th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+                    <span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead = $html; // формируем thead
+$head_td = $html;
+
+
+
+$rowArraySum = [];
+$shipmentService->rowArraySum = [];
+
+
+if (!empty($groupId)) {
+    foreach ($dataStoreOrdersFields as $row) {
+        $dostup = $dostup_fields[$row["id"]];
+        $bg = $bg_fields[$row["id"]];
+        if ($dostup == "edit" or $dostup == "show") {
+
+
+            $html = '<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="' . $row["name_full"] . ' ' . $row["name_eng"] . '"  onclick="ajaxFieldInfo(' . $row["id"] . ')" style="max-width:90px;">
+    <b>' . $row["name"] . '</b></th>';
+            $thead .= $html;
+            $head_td .= $html;
+        }
+
+    }
+}
+
+$thead .= '</tr></thead>';
+$head_td .= '</tr>';
+echo '' . $thead . '<tbody>';
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if (!empty($store_id)) {
+    $data3 = $db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' 
+AND store_id!='' AND quantity>0 AND store_id=?", [$store_id]);
+    foreach ($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]] = $row2["quantity"];
+}
+
+//$data3 = $db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+//$data3 = ProductsClass::find()->andWhere(['tip' => array('potted','wrap')])->asArray()->all();
+
+
+
+
+$trCount = 0;
+foreach ($products as $pid => $name) {
+    if ($trCount == 20) {
+        $trCount = 0;
+        echo $head_td;
+    }
+    $trCount++;
+
+    echo '<tr';
+
+
+    if (!empty($store_id) and empty($store_planogramAllStores[$store_id][$pid])) {
+        echo ' class="bg-danger"';
+    }
+
+
+    if (empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) {
+//        echo ' class="bg-danger"';
+//
+//        echo ' style="opacity:0.5"';
+    }
+
+
+    echo '><td class="text-right">';
+//если статус общий то группируем по магазинам
+    if (empty($statuses_stores_show[$status_order_id])) {
+        echo '<span onclick="$(\'.trstores_' . $pid . '\').toggle();" class="btn btn-default btn-sm">+</span>';
+    }
+    echo '' . $name . '';
+
+
+//узнаем категорибю товара
+    $categoryId = $productsOptions[$pid]["parent_id"];
+    $tip = '';
+// по категории узнаем тип товара горшечка или упаковка
+    if (!empty($products_class[$categoryId])) {
+        $tip = $products_class[$categoryId];
+    }
+
+
+    if (array_key_exists($pid, $productsColorsArray)) {
+        if (count($productsColorsArray[$pid]) > 0) {
+            echo '<span onclick="$(\'.trcolors_' . $pid . '\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+        }
+    }
+    echo '<input type=hidden name=provider_id[' . $pid . '] value="' . $prov[$pid] . '">';
+    echo '</td>';
+
+
+//    if (!empty($store_id)) {
+        foreach ($dataStoreOrdersFields as $row) {
+            $shipmentService->printFieldTd($row["name_eng"], $pid, null);
+        }
+//    }
+
+    echo '</tr>';
+
+
+//begin colors
+    if (array_key_exists($pid, $productsColorsArray)) {
+        foreach ($productsColorsArray[$pid] as $color) {
+            $color = trim($color);
+            if (!empty($color)) {
+                echo '<tr class="trcolors trcolors_' . $pid . ' bg-gray-300" style="display:none;"><td class="text-right">' . $name . ' + <span class="btn btn-sm btn-warning me-1">' . $color . '</span>';
+
+                if (!empty($products_varieties[$pid][$color])) {
+                    echo '<div class="sorts_flowers" style="display:none;"><br>сорта ';
+                    foreach ($products_varieties[$pid][$color] as $k => $var) {
+                        echo "<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
+                    }
+                    echo '</div>';
+                }
+
+
+
+                if (!empty($store_id) && !empty($color)) {
+                    foreach ($dataStoreOrdersFields as $row) {
+//                        printFieldTd($row["name_eng"], $pid, null, null);
+                        $shipmentService->printFieldTd($row["name_eng"], $pid, $store_id, $color);
+                    }
+                }
+
+                echo "</tr>";
+            }
+
+        }
+    }
+//end colors
+
+
+}
+
+
+echo '<tr class="bg-success zg"><td class="text-right"></td>';
+foreach ($dataStoreOrdersFields as $row) {
+    $dostup = $dostup_fields[$row["id"]];
+    $bg = $bg_fields[$row["id"]];
+    if ($dostup == "edit" or $dostup == "show") {
+        echo '<td class="text-center" title="' . $row["name_full"] . ' ' . $row["name_eng"] . '"><b>' . $row["name"] . ' (' . $fieldsRows[$row["name_eng"]]["row_type_sum"] . ')</b></td>';
+    }
+}
+echo '</tr>
+<tr class="bg-success"><td class="text-right">итого -ГО</td>';
+foreach ($dataStoreOrdersFields as $row) {
+    $dostup = $dostup_fields[$row["id"]];
+    if ($dostup == "edit" or $dostup == "show") {
+        $s = "";
+        if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "amount") {
+            $s = $shipmentService->rowArraySum[$row["id"]] ?? 0;
+        }
+        if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "avg") {
+            if (!empty($shipmentService->rowArraySum["cnt__" . $row["id"]])) {
+                $s = round($shipmentService->rowArraySum[$row["id"]] ?? 0 / $shipmentService->rowArraySum["cnt__" . $row["id"]]);
+            }
+        }
+
+        echo '<td class="text-center ' . $bg . '"><b>' . $s . '</b></td>';
+    }
+}
+echo '</tr></tbody>';
+echo '</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+/*
+$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+  $all=0;
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $all =$all+$summ;
+    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+  //  if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
+
+
+  }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+
+
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+
+
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+echo "<script>
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');  
+ $.ajax({
+       url: '/shipments/ajaxFieldInfo/',
+       method: 'post',       
+       dataType: 'html',        
+       data: {id: id},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function ajaxUpdateFieldsDataTest(){
+ $('#modal-7 .modal-body').html('Test Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipments/ajax-update-fields-data-test/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: '2', update:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}) 
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipments/ajaxUpdateFieldsData/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}) 
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipments/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}) 
+}
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipments/ajaxUploadAutoPurchase/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}) 
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipments/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}) 
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+    
+    if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');  
+ $.ajax({
+       url: '/shipments/ajaxUpdateStep/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, deleteAll:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}) 
+}
+}
+
+
+</script>";
+
+echo '<!-- MODAL -->
+               <div class="modal fade" id="modal-7">
+                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
+                               <div class="modal-content">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body p-0">
+                               
+                                       </div>
+                       
+                               </div>
+</div>
+</div>';
+
+
+//include "templates/bottom.php";
+
+
+
+
+
+
+
+
+
+
+
+/*
+
+--
+
+
+
+--
+
+
+ */
\ No newline at end of file
diff --git a/erp24/views/shipment_old/fields-data2.php b/erp24/views/shipment_old/fields-data2.php
new file mode 100644 (file)
index 0000000..c020b49
--- /dev/null
@@ -0,0 +1,557 @@
+<?php
+
+use yii\helpers\ArrayHelper;
+use yii_app\records\AdminGroup;
+use yii_app\records\StoreOrders;
+use yii_app\records\StoreOrderStatusLog;
+use yii_app\records\Prices;
+use yii_app\records\StoreOrdersPrices;
+use yii_app\records\ProductsVarieties;
+use yii_app\records\StoreOrdersStatuses;
+use yii_app\records\StoreOrdersFields;
+use yii_app\records\StorePlanogram;
+use yii_app\records\ProductsClass;
+use yii\db\Expression;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+//include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+
+//include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+       $orderId, // id- заказа
+       $store_id, // GUID магазина
+       $storesArray, // массив с магазинами
+       $group_id, // ID группы авторизованного сотрудника
+       $fieldsRows, // массив с данными по полями - ключ name_eng
+       $date_start_sale, // дата старта продаж от которой считаемстатистику
+       $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+       $whereInProductsIdArr, // $whereInProductsId в форме массива
+       $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+       $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+       $FiledsDataSummStats,  // массив с суммами по всем магазинам и цветам
+       $status_order_id, // ID текущего статуса закупаки
+       $store_orders_statuses, // массим со статсами закупок
+       $statuses_stores_show,  // массив со статусами на которых необходимо выводить список магазинов
+       $status_edit_dostup,  //массив с доступами к полям - просомтр или редактирование
+       $store_orders_status_description, // - массив с описанием стутса
+       $dostup_fields,
+       $bg_fields,
+       $ProductsOptions;
+
+$act='fields-data2'; // часть url action
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+
+
+
+
+if(!empty($_REQUEST["group_id"])) {
+    $group_id=(int)$_REQUEST["group_id"];
+    $_SESSION["group_id_init"]=$group_id;
+}
+
+
+
+$time = strtotime('this week monday, 00:00');  // текущий понедельник  в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time);  // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+    StoreOrders::updateAll(['status' => (int)$_POST["status_new"]], ['id' => $orderId]);
+//    $db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+    $storeOrderStatusLog = new StoreOrderStatusLog;
+    $storeOrderStatusLog->status = (int)$_POST["status_new"];
+    $storeOrderStatusLog->order_id = $orderId;
+    $storeOrderStatusLog->date = date('Y-m-d H:i:s');
+    $storeOrderStatusLog->admin_id = $_SESSION["admin_id"];
+    $storeOrderStatusLog->save();
+//    $db::sql("INSERT IGNORE INTO  store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+    mess("Статус изменен");
+}
+
+
+
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+$data = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])
+    ->where(['in', 'id', ['1','10','7','51','9','17','70']])->all(), 'id', 'name');
+//$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
+
+
+
+echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+Описание статуса: '.$store_orders_status_description[$status_order_id].'
+
+';
+
+echo"Под кем будем просматривать ";
+foreach($data as $gid => $nameGroup) {
+
+    echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
+
+    if($gid==$group_id) echo"success"; else echo"outline-info";
+
+    echo"\">$nameGroup</a>";
+
+}
+echo'
+<br>
+
+Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
+Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
+
+
+
+
+
+
+<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>';
+
+//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
+<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span>  ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
+
+global $act;
+$act = 'fields-data2';
+// панель с магазинами
+showOrderStoresPanel();
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if($status_order_id==1) {
+
+
+    echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";
+
+
+    if(!empty($_REQUEST["load"])) {
+        $data = Prices::find()->select(['product_id', 'price'])->where(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
+//        $data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+        foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
+        $data_uper=[];
+        foreach($products as $productId => $nameProduct) {
+            echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]."  закуп ".$ProductsOptions[$productId]["price_zakup"]." ";
+            $price=$productsPrices[$productId];
+            $data_uper[$productId]["NULL"]["NULL"]=$price;
+
+            StoreOrdersPrices::updateAll(['purchase_price' => $price],
+                ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price', '0.00']]);
+//            $db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
+//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
+
+        }
+
+//розничная цена
+        insert_store_orders_fields($data_uper,"purchase_price");
+
+
+        $data_uper=[];
+        foreach($products as $productId => $nameProduct) {
+            $price=$ProductsOptions[$productId]["price_zakup"];
+            $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];
+            StoreOrdersPrices::updateAll(['purchase_price_zakup' => $price],
+                ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price_zakup', '0.00']]);
+//            $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+        }
+        insert_store_orders_fields($data_uper,"purchase_price_zakup");
+
+//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
+    }
+
+
+}
+
+
+$products_varieties=[];
+$data = ProductsVarieties::find()->select(['id', 'product_id', 'color', 'name'])->asArray()->all();
+//$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+
+
+
+//если выбран магазин то
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+    $storeOrdersStatuses = StoreOrdersStatuses::find()->select(['fields_sort'])->where(['id' => $status_order_id])->asArray()->one();
+    $sort = $storeOrdersStatuses['fields_sort'] ?? '';
+//    $sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+//    if(!empty($sort)) $sort="ORDER BY        FIELD(`id`, $sort) ";
+
+    $dataQuery = StoreOrdersFields::find();
+    if (!empty($sort)) {
+        $dataQuery->orderBy([new Expression('FIELD(id, ' . $sort . ')')]);
+    }
+    $data = $dataQuery->asArray()->all();
+//    $data=$db::getRows("SELECT * FROM store_orders_fields  $sort");
+}
+foreach($data as $row) {
+    $dostup=$dostup_fields[$row["id"]];
+    $bg=$bg_fields[$row["id"]];
+    if($dostup=="edit" or $dostup=="show") {
+
+
+
+        $html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'"  onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:90px;">
+<b>'.$row["name"].'</b></th>';
+        $thead .=$html;
+        $head_td .=$html;
+    }
+
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+    $data3 = StorePlanogram::find()->select(['store_id', 'product_id', 'quantity'])->where(['color' => ''])
+        ->andWhere(['!=', 'store_id', ''])->andWhere(['>', 'quantity', '0'])->andWhere(['store_id' => $store_id])->asArray()->all();
+//    $data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
+//AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+    foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+}
+
+$data3 = ProductsClass::find()->where(['in', 'tip', ['potted','wrap']])->asArray()->all();
+//$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"];
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+    if($trCount==20) {
+        $trCount=0;
+        echo  $head_td;
+    }
+    $trCount++;
+
+    echo'<tr';
+
+
+    if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+    if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+
+        //echo' style="opacity:0.5"';
+    }
+
+
+
+    echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+    if(empty($statuses_stores_show[$status_order_id]))  {      echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>';   }
+    echo''.$name.'';
+
+
+
+//узнаем категорибю товара
+    $categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+    $tip=$products_class[$categoryId] ?? '';
+
+
+    if(count($productsColorsArray[$pid] ?? [])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+    echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+    echo'</td>';
+
+    foreach($data as $row)   printFieldTd($row["name_eng"],$pid,$store_id);
+
+    echo'</tr>';
+
+
+//begin colors
+    foreach($productsColorsArray[$pid] ?? [] as $color) {
+        $color=trim($color);
+        if(!empty($color))  {
+            echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;"><td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>';
+
+            if(!empty($products_varieties[$pid][$color])) {
+                echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';
+                foreach($products_varieties[$pid][$color] as $k => $var) {
+                    echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
+                }
+                echo'</div>';
+            }
+
+            foreach($data as $row) {
+                printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+            }
+            echo"</tr>";
+        }
+
+    }
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+    $dostup=$dostup_fields[$row["id"]];
+    $bg=$bg_fields[$row["id"]];
+    if($dostup=="edit" or $dostup=="show") {
+        echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+    }
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+    $dostup=$dostup_fields[$row["id"]];
+    if($dostup=="edit" or $dostup=="show") {
+        $s="";
+        if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount")   $s=$rowArraySum[$row["id"]];
+        if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg")   $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+        echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+    }
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+/*
+$db::sql("DELETE FROM  store_orders_fields_data WHERE  field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+  $all=0;
+  $division_auto_need_all=0;
+  foreach($storesArrayAll as $storeId => $nameStore) {
+  //  echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+   // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+    $all =$all+$summ;
+    $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+  //  if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
+
+
+  }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+   $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+    $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+
+
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+
+
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b>  division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту  ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+
+
+$_CONFIG["jscss"] .="<script>
+    const param4x = $('meta[name=csrf-param]').attr('content');
+const token4x = $('meta[name=csrf-token]').attr('content');
+
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');  
+ $.ajax({
+       url: '/shipment/ajaxFieldInfo/',
+       method: 'post',       
+       dataType: 'html',        
+       data: {id: id},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+       url: '/shipment/ajax-update-fields-data/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update:'1', [param4x] : token4x},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajax-update-step/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1', [param4x] : token4x},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajaxUploadAutoPurchase/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1'},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');  
+ $.ajax({
+       url: '/shipment/ajax-update-step/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, update_step:'1', foreachSalesHand:'1', [param4x] : token4x},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+    
+    if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');  
+ $.ajax({
+       url: '/shipment/ajax-update-step/',
+       method: 'post',       
+       dataType: 'html',        
+       data: { id: $orderId, deleteAll:'1', [param4x] : token4x},  
+       success: function(data){  
+    $('#modal-7 .modal-body').html(data);
+       }}); 
+}
+}
+
+
+</script>";
+
+$_CONFIG["jscss"] .='<!-- MODAL -->
+               <div class="modal fade" id="modal-7">
+                       <div class="modal-dialog  modal-lg modal-dialog-centered text-center" role="document">
+                               <div class="modal-content">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body p-0">
+                               
+                                       </div>
+                       
+                               </div>
+</div>
+</div>';
+
+
+
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
+
+
+
+
diff --git a/erp24/views/shipment_old/fields.php b/erp24/views/shipment_old/fields.php
new file mode 100644 (file)
index 0000000..e82195e
--- /dev/null
@@ -0,0 +1,112 @@
+<?php
+
+use \yii\helpers\ArrayHelper;
+use \yii_app\records\AdminGroup;
+use \yii_app\records\StoreOrdersFields;
+use \yii_app\records\StoreOrdersStatuses;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+//include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
+
+$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
+//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71  or id=9  or id=51 or id=1 or id=10");
+
+echo "<div class='m-5'>";
+
+echo'<h1 class="page-title mb-0 text-primary">Настройка статусов в заказе у поставщиков кто может ставить статусы</h1>';
+
+
+if(!empty($_POST["save"])){
+
+    foreach($_POST["description"] as $idr => $val) {
+
+        StoreOrdersFields::updateAll(['description' => $val], ['id' => $idr]);
+//        $db::sql("UPDATE store_orders_fields SET description=? WHERE id=?",[$val,$idr]);
+
+    }
+
+
+}
+
+$data = StoreOrdersStatuses::find()->select(['id', 'dostup'])->asArray()->all();
+//$data=$db::getRows("SELECT id, dostup FROM `store_orders_statuses` WHERE 1");
+foreach($data as $row) {
+    $dostup[$row["id"]] = json_decode($row["dostup"], true);
+
+}
+
+
+echo'<form method=post action="/shipment/fields/">';
+?><input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" /><?php
+
+
+$data = StoreOrdersFields::find()->asArray()->all();
+//$data=$db::getRows("SELECT * FROM store_orders_fields");
+echo'<table class="table table-hover"><thead><th width=100>название кратко</th>
+<th>name_eng</th>
+<th>SQL таблица сохранения</th>
+
+<th>тип</th>
+<th>тип данных</th>
+
+<th>сумма по столбцу</th>
+<th>сохраняем цвета в ячейке</th>
+
+
+</thead><tbody>';
+foreach($data as $row) {
+
+    echo"
+    <tr><td><b>".$row["name"]."<b><br>
+    <small>".$row["name_full"]."</small></td>
+     
+    
+    <td>".$row["name_eng"]."</td>
+    <td>".$row["sql_table_values"]."</td>
+    <td>".$row["type"]."";
+
+    if(in_array($row["type"],array("multiplication","avg","difference")))
+        echo"   <input type=text class=\"form-control\" name=func_content[".$row["id"]."] value=\"".$row["func_content"]."\">";
+
+    echo"</td>
+     <td>".$row["tip"]."</td>   
+   
+           <td>"; if($row["summ"]) echo"да"; echo"</td> 
+             <td>"; if($row["colors_save"]) echo"да"; echo"</td>   
+    </tr><tr><td colspan=7><textarea class=\"form-control\" name=description[".$row["id"]."] rows=1>".$row["description"]."</textarea></td></tr>";
+    /*
+       echo'<tr><td colspan=7><table>';
+       foreach($statuses as $gid => $name) {
+       if(!empty($roles[$gid])) {
+
+           echo"<tr><td class=\"text-right\">".$name."</td><td style=\"min-width:300px\"> ";
+
+        //   $dostup[$status_id]
+
+         echo' </td></tr>';
+
+
+
+       }
+      }
+      echo'</table></td></tr>';
+      */
+
+}
+echo'</tbody></table><button class="btn btn-success" name="save" value=1>сохранить</button></div></form>';
+
+echo "</div>";
+
+//include"templates/bottom.php";
+
+
+
+
+
+
diff --git a/erp24/views/shipment_old/index.php b/erp24/views/shipment_old/index.php
new file mode 100755 (executable)
index 0000000..fd24bb9
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+
+
+use yii\grid\ActionColumn;
+use yii\helpers\Url;
+use yii\helpers\Html;
+use yii\grid\GridView;
+use yii\widgets\Pjax;
+use yii_app\records\Dashboard;
+
+/* @var $this yii\web\View */
+/* @var $bonusConversionCost int */
+
+/* @var $userSalarySalut float */
+/* @var $userSalarySalutPremium float */
+/* @var $storeOrders array */
+/* @var $dozakupka array */
+/* @var $store_orders_statuses array */
+
+$this->title = 'Список закупок';
+$this->params['breadcrumbs'][] = $this->title;
+$modul = 'shipments';
+
+?>
+
+
+<div class="dashboard-index">
+
+    <h1>
+        <?= Html::encode($this->title) ?>
+        <?= Html::a('+ добавить закупку', ['add'], ['class' => 'btn btn-success']) ?>
+    </h1>
+
+</div>
+<?php
+
+foreach($storeOrders as $row) {
+    ?>
+    <div class="expanel expanel-default">
+        <div class="expanel-heading">
+
+            <span class="btn btn-white btn-light me-1"  onclick="$('#external__<?php echo $row["id"]?>').toggle();">показать дозакупки</span>
+            <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $row["id"]?> class="btn btn-default fs-5">
+                <span class="btn btn-outline-info"><?php echo $row["id"]?></span> <?php echo $row["name"]?></a>
+
+
+            <div class="d-inline-block dropdown me-2">
+                <button type="button" class="btn bg-dark-transparent dropdown-toggle"  onclick="$(this).parent().children('.dropdown-menu').toggle();">действия</button>
+                <div class="dropdown-menu" style="display:none;">
+                    <a class="dropdown-item" href="/shipment/add/?id=<?php echo $row["id"]?>">правка</a>
+                    <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $row["id"]?>>старый интерфейс</a>
+                    <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $row["id"]?>>новый интерфейс</a>
+                    <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $row["id"]?> >новый интерфейс2</a>
+                    <a class="dropdown-item" href=/shipment/division/?id=<?php echo $row["id"]?>>деление</a>
+                    <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $row["id"]?>>цвета для кустовых при заказе</a>
+
+                    <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $row["id"]?>>деление - печать на складе</a>
+                    <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $row["id"]?>>деление - по цветам</a>
+                </div>
+            </div>
+
+            <a href="/shipment/edit/?id=<?php echo $row["id"]?>" class="btn btn-warning btn-sm me-2"><?php echo $store_orders_statuses[$row["status"]]?></a>
+            <small>дата продаж: <?php echo $row["date_start"]?>, создано <?php echo $row["date_add"]?>  <i><?php echo $row["comments"]?></i></small>
+
+
+
+
+        </div>
+
+        <div class="expanel-body" id="external__<?php echo $row["id"] ?>" style="display:none;">
+            <div class="row">
+                <?php
+                if (array_key_exists($row["id"], $dozakupka)) {
+                    foreach($dozakupka[$row["id"]] as $rows) {
+
+                    ?>
+                        <div class="col-12">
+                            <div class="ml-4">
+                                <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $rows["id"]?> class="btn btn-white fs-6 me-3">
+                                    <span class="btn btn-outline-info fs-6 me-2"><?php echo $rows["id"]?></span><?php echo $rows["name"]?>
+                                    <span class="me-2 btn btn-sm bg-warning"><?php echo $store_orders_statuses[$rows["status"]]?></span>
+                                </a>
+                                <div class="dropdown d-inline-block">
+                                    <button type="button" class="btn bg-dark-transparent dropdown-toggle"  onclick="$(this).parent().children('.dropdown-menu').toggle();">действия </button>
+                                    <div class="dropdown-menu" style="">
+                                        <a class="dropdown-item" href="/shipment/add/?id=<?php echo $rows["id"]?>">правка</a>
+                                        <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $rows["id"]?>>старый интерфейс</a>
+                                        <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $rows["id"]?>>новый интерфейс</a>
+                                        <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $rows["id"]?> >новый интерфейс2</a>
+                                        <a class="dropdown-item" href=/shipment/division/?id=<?php echo $rows["id"]?>>деление</a>
+                                        <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $rows["id"]?>>цвета для кустовых при заказе</a>
+                                        <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $rows["id"]?>>деление - печать на складе</a>
+                                        <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $rows["id"]?>>деление - по цветам</a>
+                                    </div>
+                                </div>
+                                <i><?php echo $rows["comment"] ?? ''?></i>
+                                <table class="table"><tbody></tbody></table>
+                            </div>
+                        </div>
+                        <?php
+                    }
+                }
+                ?>
+
+            </div>
+        </div>
+
+
+    </div>
+
+
+
+
+
+<?php
+}
diff --git a/erp24/views/shipment_old/polnogramm.php b/erp24/views/shipment_old/polnogramm.php
new file mode 100644 (file)
index 0000000..7900ea7
--- /dev/null
@@ -0,0 +1,549 @@
+<?php
+
+use \yii_app\records\StorePlanogram;
+use \yii_app\records\StorePlanogramLogi;
+use \yii_app\records\StorePlanogramColorsSort;
+use \yii_app\records\Products1cOptions;
+use \yii_app\records\ProductsClass;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+//include"templates/top.php";
+
+$store_id = '';
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+
+
+//$dost=[1,2,4]; //$_SESSION["store_arr_dostup"]
+
+$k=0;
+$where="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+    if(!empty($guid)) {
+        if($k!=0) $where .=", ";
+        $where .="'$guid' ";
+        $k++;
+    }
+}
+
+if(!empty($where)) $where =" AND id in( $where )";
+
+
+if(in_array($_SESSION["group_id"],[1,10,51])) $editView=1; else $editView=0;
+
+$save=0;
+
+if(in_array($_SESSION["group_id"],[1,10])) $save=1;
+
+
+$massiver[]=["name"=>"П-ма мин.","title"=>"Полнограмма минимальная","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0"];
+$massiver[]=["name"=>"П-ма Макс.","title"=>"Полнограмма Максимальная","name_eng"=>"quantity_max", "name_eng_sql"=>"quantity_max", "background"=>"bg-danger2", "step"=>"1", "placeholder"=>"0"];
+
+
+
+echo'<h1 class="page-title mb-0 text-primary">полнограмма</h1>';
+
+$stores = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['and', ['tip' => 'city_store'], ['view' => '1']])
+    ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' $where  order by name ASC");
+
+
+
+foreach($stores as $strid=>$namestore){
+    echo"<a href=\"/shipment/polnogramm/?store_id=$strid\" class=\"btn btn-";
+    if(isset($store_id) && $store_id==$strid) echo"success"; else echo"info";  echo" btn-sm m-1\">$namestore</a>";
+}
+
+
+//$w="";
+$providers = yii\helpers\ArrayHelper::map(\yii_app\records\ShipmentProviders::find()->select(['name', 'id'])->all(), 'id', 'name');
+//$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+//$k=0;
+//foreach($in as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=",";  $w .=" '$pid'"; $k++; }
+
+
+if(!empty($_POST["save_view"]) and $editView==1) {
+    $db::sql("UPDATE products_1c SET view=0 WHERE tip='products'");
+    foreach($_POST["view"] as $productId => $on) {
+        $productId=htmlentities($productId);
+        if($on=="on") $db::sql("UPDATE  products_1c SET view=1 WHERE tip='products' AND id=?",[$productId]);
+        //if(empty($on))  mess("<br> $productId = $on ");
+    }
+}
+
+
+
+if(!empty($_POST["save"])) {
+
+
+    mess("save");
+
+
+    foreach($massiver as $m0 => $m1) {
+        $name_eng=$m1["name_eng_sql"];
+        foreach($_POST[$name_eng] as $m => $val) {
+            $val= mb_eregi_replace('[^0-9.]', '', $val);
+            $sql_param[$m][$name_eng]=$val;
+
+        }
+    }
+
+
+
+
+    $log = [];
+    foreach($sql_param as $prod_id => $massi) {
+
+        $dataRow=$db::getRows("SELECT date_id, color, quantity, quantity_max FROM store_planogram_logi WHERE
+store_id='$store_id' AND product_id='$prod_id'  order by date_id DESC LIMIT 12");
+
+        $date_id="";
+        foreach($dataRow as $row){
+            if(empty($date_id)) $date_id=$row["date_id"];
+            if(empty($row["color"])) $row["color"]="NULL";
+
+            if($date_id==$row["date_id"]) {
+                $log[$row["color"]]["quantity"]=$row["quantity"];
+                $log[$row["color"]]["quantity_max"]=$row["quantity_max"];
+            }
+
+        }
+
+
+
+        if(($log["NULL"]["quantity"] ?? 0) != $massi["quantity"])
+        {
+
+            $comment_id=(int)$_POST["comment_id"][$prod_id];
+            // echo" <br>".$log["NULL"]["quantity"]." new_valiue= ".$massi["quantity"]." comment_id=$comment_id ";
+            $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
+            if (!$storePlanogram) {
+                $storePlanogram = new StorePlanogram;
+                $storePlanogram->store_id = $store_id;
+                $storePlanogram->product_id = $prod_id;
+                $storePlanogram->color = '';
+            }
+            foreach ($massi as $pole => $value) {
+                $storePlanogram->$pole = $value;
+            }
+            $storePlanogram->save();
+            if ($storePlanogram->getErrors()) {
+                var_dump($storePlanogram->getErrors());
+            }
+//            $sql="INSERT IGNORE INTO store_planogram SET  ";
+//            $up= "store_id='$store_id', product_id='$prod_id', color=''"; foreach($massi as $pole =>$value)  $up .=", $pole='$value' ";
+//            $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//            $db::sql($sql);
+            // echo"<br>$sql ";
+            $storePlanogramLogi = StorePlanogramLogi::find()
+                ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
+            if (!$storePlanogramLogi) {
+                $storePlanogramLogi = new StorePlanogramLogi;
+                $storePlanogramLogi->date_id = date("Ymd");
+                $storePlanogramLogi->store_id = $store_id;
+                $storePlanogramLogi->product_id = $prod_id;
+                $storePlanogramLogi->color = '';
+            }
+            foreach ($massi as $pole => $value) {
+                $storePlanogramLogi->$pole = $value;
+            }
+            $storePlanogramLogi->comment_id = $comment_id;
+            $storePlanogramLogi->save();
+//            $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
+//            $sql="INSERT IGNORE INTO store_planogram_logi SET  ";
+//            $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//            $db::sql($sql);
+
+
+
+
+            foreach($_POST["quantity__color"][$prod_id] ?? [] as $color => $quan) {
+                $color=trim($color);
+                $quan=(int)$quan;
+                if(!empty($color)) {
+                    $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
+                    if (!$storePlanogram) {
+                        $storePlanogram = new StorePlanogram;
+                        $storePlanogram->store_id = $store_id;
+                        $storePlanogram->product_id = $prod_id;
+                        $storePlanogram->color = $color;
+                    }
+                    $storePlanogram->quantity = $quan;
+                    $storePlanogram->save();
+//                    $sql="INSERT IGNORE INTO store_planogram SET  ";
+//                    $up= " store_id='$store_id', product_id='$prod_id', color='$color',  quantity='$quan' ";
+//                    $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//                    $db::sql($sql);
+
+                    $storePlanogramLogi = StorePlanogramLogi::find()
+                        ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
+                    if (!$storePlanogramLogi) {
+                        $storePlanogramLogi = new StorePlanogramLogi;
+                        $storePlanogramLogi->date_id = date("Ymd");
+                        $storePlanogramLogi->store_id = $store_id;
+                        $storePlanogramLogi->product_id = $prod_id;
+                        $storePlanogramLogi->color = $color;
+                    }
+                    $storePlanogramLogi->comment_id = $comment_id;
+                    $storePlanogramLogi->save();
+//                    $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
+//                    $sql="INSERT IGNORE INTO store_planogram_logi SET  ";
+//                    $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//                    $db::sql($sql);
+
+
+
+                }
+            }
+
+
+            foreach($_POST["quantity_max__color_max"][$prod_id] ?? [] as $color => $quan) {
+                $color=trim($color);
+                $quan=(int)$quan;
+                if(!empty($color)) {
+                    $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
+                    if (!$storePlanogram) {
+                        $storePlanogram = new StorePlanogram;
+                        $storePlanogram->store_id = $store_id;
+                        $storePlanogram->product_id = $prod_id;
+                        $storePlanogram->color = $color;
+                    }
+                    $storePlanogram->quantity = $quan;
+                    $storePlanogram->save();
+//                    $sql="INSERT IGNORE INTO store_planogram SET ";
+//                    $up= " store_id='$store_id', product_id='$prod_id', color='$color', quantity_max='$quan' ";
+//                    $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//                    $db::sql($sql);
+                    //echo"<br> $sql";
+                }
+            }
+
+        }
+
+
+    }
+
+    mess("Полнограмма для магазина сохранена");
+}
+
+echo'<div class="table-responsive mt-3">';
+
+if($save==1) echo'<form method=post>' . '<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() .'" />';
+
+echo'
+<table  class="table table-sm table-hover border-top text-nowrap"><thead>';
+
+foreach($massiver as $f =>$mass) {
+    echo'<th style="width:90px;">'.$mass["name"].'</th>';
+}
+echo'<th class="w-90">наименование</th>';
+
+if($editView==1)  echo'<th>видимый</th>';
+echo'</thead><tbody>';
+
+
+if (isset($store_id)) {
+    $data3 = StorePlanogram::find()->where(['store_id' => $store_id, 'color' => ''])->asArray()->all();
+//    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
+    foreach ($data3 as $row2) {
+        $values_in[$row2["product_id"]]["quantity"] = $row2["quantity"];
+        $values_in[$row2["product_id"]]["quantity_max"] = $row2["quantity_max"];
+
+    }
+
+    $data3 = StorePlanogram::find()->where(['store_id' => $store_id])->andWhere(['!=', 'color', ''])->asArray()->all();
+//    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
+    foreach ($data3 as $row2) {
+        $colors_in[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
+        $colors_in_max[$row2["product_id"]][$row2["color"]] = $row2["quantity_max"];
+    }
+}
+
+
+
+
+$colorSort=[];
+if (isset($store_id)) {
+    $data = StorePlanogramColorsSort::find()->select(['product_id', 'color', 'posit'])->where(['store_id' => $store_id])
+        ->orderBy(['product_id' => SORT_ASC, 'posit' => SORT_ASC])->asArray()->all();
+//    $data = $db::getRows("SELECT product_id,color,posit FROM store_planogram_colors_sort WHERE store_id=?  order by product_id ASC, posit ASC", [$store_id]);
+    foreach ($data as $row) $colorSort[$row["product_id"]][] = $row["color"];
+}
+
+/*
+
+echo 'Максимальный размер данных: ' . ini_get('post_max_size') . '<br>';
+echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '<br>';
+echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '<br>';
+echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '<br>';
+echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '<br>';
+echo 'Память для скрипта: ' . ini_get('memory_limit') . '<br>';
+*/
+
+$providers[0]="-без поставщика-";
+
+$data = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'p.view'])
+    ->innerJoin('products_1c p', 'p.id = o.id AND o.provider_id > 0')
+    ->orderBy(['o.provider_id' => SORT_ASC, 'p.view' => SORT_DESC, 'p.name' => SORT_ASC])->asArray()->all();
+//$data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors,p.view  FROM products_1c_options as o, products_1c as p  WHERE
+//p.id=o.id AND o.provider_id>0 order by o.provider_id ASC, p.view DESC, p.name ASC");
+
+
+$products_group = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['tip' => 'products_group'])->all(), 'id', 'name');
+//$products_group=$db::mapping("SELECT id, name FROM products_1c   WHERE tip='products_group'");
+
+$data2 = ProductsClass::find()->alias('cl')->select(['p.id', 'p.name', 'p.parent_id',  'o.provider_id', 'o.colors', 'p.parent_id as category_id'])
+    ->leftJoin('products_1c p', 'p.view =1 AND p.parent_id=cl.category_id')
+    ->leftJoin('products_1c_options o', 'p.id = o.id')
+    ->where(['cl.tip' => 'related'])
+    ->groupBy(['p.id'])
+    ->orderBy(['o.provider_id' => SORT_DESC, 'p.parent_id' => SORT_DESC, 'p.name' => SORT_ASC])
+    ->asArray()->all();
+//$data2=$db::getRows("SELECT p.id, p.name, p.parent_id,  o.provider_id, o.colors, p.parent_id as category_id FROM
+//   products_class as cl
+//  LEFT JOIN products_1c as p    ON (p.view='1' AND p.parent_id=cl.category_id )
+//   LEFT  JOIN products_1c_options as o ON (p.id=o.id)
+//WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
+$data = array_merge($data, $data2);
+
+
+$providersIn = [];
+$category_idIn = [];
+$p = 0;
+foreach($data as $row) {
+    if(!in_array($row["provider_id"],$providersIn)) {
+
+        if(empty($providers[$row["provider_id"]])) {
+            echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
+        } elseif(!empty($providers[$row["provider_id"]]))
+        {
+            echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();"><td colspan=4 class="bg-success fs-4 p-2">+ 
+ '.$providers[$row["provider_id"]].'</td></tr>';
+        }
+
+        $providersIn[]=$row["provider_id"];
+
+    }
+
+
+    if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
+        echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
+ <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
+        $category_idIn[]=$row["category_id"];
+        $p++;
+    }
+
+    echo"<tr style=\"display:none\" class=\"pr__".$row["provider_id"]." ";
+    if(!empty($row["category_id"])) echo" category__".$row["category_id"];
+    if(empty($row["view"]))  echo" bg-warning";
+    echo"\">";
+    foreach($massiver as $f =>$mass) {
+        echo'<td title="'.$mass["title"].'"><input onclick="$(\'.p'.$row["id"].'\').show();" type=numeric oninput="up(this)" min="0" name='.$mass["name_eng"].'['.$row["id"].']  value="';
+        if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
+        echo'"';
+        if(!empty($mass["pattern"])) echo ' pattern="'.$mass["pattern"].'"';
+        if(isset($mass["step"])) echo ' step="'.$mass["step"].'"';
+        if(isset($mass["placeholder"])) echo ' placeholder="'.$mass["placeholder"].'"';
+        echo' class="poln';
+        if(isset($mass["background"])) echo ' '.$mass["background"];
+        echo'"';
+        echo'></td>';
+
+    }
+
+    echo"<td class=\"fs-5 p-1\">".$row["name"]." ";
+    //if($providers[$row["provider_id"]]) echo"<span class=\"btn btn-sm btn-indigo\">".$providers[$row["provider_id"]]."</span>";
+
+    if (isset($store_id)) {
+        echo '<a href="/shipment/store-planogram-logi/?store_id=' . $store_id . '&product_id=' . $row["id"] . '">logi</a>';
+    }
+    echo'<select class="form-control p'.$row["id"].' bg-danger" name=comment_id['.$row["id"].'] style="display:none;width:100px;">';
+    $sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
+    foreach($sel as $sid => $sname){
+        echo'<option value='.$sid.'';
+        if(isset($sthis) && $sid==$sthis) echo' selected';
+
+        echo'>'.$sname.'</option>';
+
+    }
+
+
+    echo'</select>';
+
+
+    echo"</td>";
+
+    if($editView==1) {  echo"<td><input type=checkbox name=view[".$row["id"]."] ";  if(isset($row["view"]) && $row["view"]==1) echo" checked";  echo"></td>";}
+    echo"</tr>";
+
+    if(!empty($row["colors"])) {
+        $colors=explode(";",$row["colors"]);
+
+
+
+////////// color
+        echo'<tr style="display:none" class="pr__'.$row["provider_id"].'"><td colspan=2 class="text-right pt-2">минимальные</td><td colspan=2>';
+        foreach($colors as $color) {
+            $color=trim($color);
+            $percentTxt=""; $cssClass="";
+            if(!empty($values_in[$row["id"]]["quantity"]) and !empty($colors_in[$row["id"]][$color]))   {
+                $percent=round(100*($colors_in[$row["id"]][$color]/$values_in[$row["id"]]["quantity"]),2);
+                $percentTxt =" ($percent%)";
+                $cssClass=" cssLime";
+            }
+
+
+            echo'<div class="dinlineblock'.$cssClass.'">
+   <table cellpadding=0 cellspasing=0><td><input type=numeric name=quantity__color['.$row["id"].']['.$color.'] class="input-sm" value="'.(isset($colors_in) ? $colors_in[$row["id"]][$color] ?? '' : '').'"></td>
+  <td>'.$color.''.$percentTxt.'</td></table></div>';
+            //<span class="btn btn-sm btn-warning">цвет '.$row["name"].'</span>
+
+        }
+        echo'</div></td></tr>';
+//////////    end color
+
+
+////////// color max
+
+        if(!empty($colorSort[$row["id"]])) {
+            $colors_new=[];
+            foreach($colorSort[$row["id"]] as $color1 => $color)    $colors_new[]=$color;
+
+
+            foreach($colors as $color1 => $color) {
+                // if(!in_array($color,$colors_new))  $colors_new[]=$color;
+            }
+
+
+        } else $colors_new=$colors;
+
+
+
+
+        echo'<tr style="display:none" class="pr__'.$row["provider_id"].' bg-danger2"><td colspan=2 class="text-right pt-2"> <a href="/shipment/ProductColorSort/?product_id='.$row["id"].'&store_id='.$store_id.'" target=new class="fs-4 btn bt-info">⇅</a> максимальные</td><td colspan=2>';
+        foreach($colors_new as $color) {
+            $color=trim($color);
+            echo'<div class="dinlineblock">
+   <table cellpadding=0 cellspasing=0><td><input type=numeric name='.$mass["name_eng"].'__color_max['.$row["id"].']['.$color.'] class="input-sm" value="'.($colors_in_max[$row["id"]][$color] ?? '').'"></td>
+  <td>'.$color.'</td></table></div>';
+        }
+        echo'</div></td></tr>';
+//////////    end color max
+
+
+
+
+
+    }
+
+
+}
+echo'</tbody></table>';
+
+
+
+if($save==1) {
+
+
+    echo'<button type=submit name=save value=1 class="btn btn-success btn-lg m-2">сохранить</button>';
+
+
+// даем доступ к сохранению только изранным группам
+    if($editView==1) {
+        echo'<button type=submit name=save_view value=1 class="btn btn-success btn-lg m-2">изменить показ товаров в полнограмме</button>';
+    }
+}
+
+
+if($save==1) echo'</form>';
+
+/*
+
+echo"<h2>Сопутка</h2>";
+$data=$db::getRows("SELECT p.id, p.name FROM products_class as cl, products_1c as p  WHERE
+p.parent_id=cl.category_id  AND cl.tip='related' order by p.name ASC");
+
+foreach($data as $row) {
+
+echo"<br>  ".$row["provider_id"]." ".$row["name"]." ";
+}
+
+
+*/
+
+
+echo'</div>';
+
+
+
+
+$_CONFIG["jscss"]='
+<style>.table tbody tr td{padding:0;}
+
+.input-sm{width:70px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
+input[type="numeric"].poln,.poln{font-weight:bolder; width:90px; font-size:1.7rem; background:lime; color:#000; border:0;padding:2px;  text-align:center;}
+.cssLime{background:#caefca;padding:0.4rem;}
+.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
+.bg-danger2,input[type="numeric"].poln.bg-danger2{background:#ffd0d0}
+
+
+</style>
+<script>
+function up(e) {
+  if (e.value.indexOf(".") != \'-1\') {
+    e.value=e.value.substring(0, e.value.indexOf(".") + 3);
+  }
+
+   
+  
+}
+
+
+';
+/*
+
+
+function ajaxProductColorSort(product_id){
+
+ jQuery(\'#modal-7\').modal(\'show\', {backdrop: \'static\'}); $(\'#modal-7 .modal-title\').text(\'Сортировка цветов по приоритету для товара\');
+
+$.ajax({
+       url: \'/shipment/ProductColorSort/\',
+       method: \'post\',
+       dataType: \'html\',
+       data: {product_id: product_id, store_id : \''.$store_id.'\'},
+       success: function(data){
+    $(\'#modal-7 .modal-body\').html(data);
+       }});
+}
+</script>
+
+
+<!-- MODAL -->
+               <div class="modal fade" id="modal-7">
+                       <div class="modal-dialog modal-dialog-centered text-center" role="document">
+                               <div class="modal-content modal-content-demo">
+                                       <div class="modal-header">
+                                               <h6 class="modal-title"></h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">&times;</span></button>
+                                       </div>
+                                       <div class="modal-body">
+
+                                       </div>
+                                       <div class="modal-footer">
+
+                                        <button class="btn btn-secondary" data-bs-dismiss="modal" type="button">закрыть</button>
+                                       </div>
+                               </div>
+                       </div>
+               </div>*/
+
+
+//include"templates/bottom.php";
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
+
+
diff --git a/erp24/views/shipment_old/set-division-priority.php b/erp24/views/shipment_old/set-division-priority.php
new file mode 100644 (file)
index 0000000..73fc8f4
--- /dev/null
@@ -0,0 +1,67 @@
+<?php
+
+use yii\widgets\ActiveForm;
+use yii\base\DynamicModel;
+
+use yii_app\helpers\PrintBlockHelper;
+
+use kartik\select2\Select2;
+
+/** @var $products array */
+/** @var $filterModel DynamicModel */
+/** @var $orderStoreSort array */
+/** @var $storeNamesByGuid array */
+/** @var $storePlanogramByStoreGuid array */
+/** @var $salesQuantity array */
+
+$this->registerCssFile('/css/customSortable.css');
+$this->registerJsFile('/js/Sortable.js', ['position' => \yii\web\View::POS_END]);
+$this->registerJsFile('/js/customSortable.js', ['position' => \yii\web\View::POS_END]);
+
+?>
+
+<div class="setDivisionPriority m-5">
+    <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
+        <?php PrintBlockHelper::printBlock('Товар', $filterForm->field($filterModel, 'productId')->widget(Select2::class, [
+            'data' => $products,
+            'language' => 'ru',
+            'options' => ['placeholder' => 'Товар...'],
+            'pluginOptions' => [
+                'allowClear' => true,
+            ],
+            'pluginEvents' => [
+                'change' => 'function() {
+                    $("#filter-form").get(0).submit();
+                }',
+            ]
+        ])->label(false)); ?>
+    <?php ActiveForm::end(); ?>
+    <?php if ($orderStoreSort && $storeNamesByGuid && $storePlanogramByStoreGuid): ?>
+        <div class="row">
+            <div class="col-1"></div>
+            <div class="col-2">Магазин</div>
+            <div class="col-2">Продажи</div>
+            <div class="col-2">Планограмма минимум</div>
+            <div class="col-2">Планограмма максимум</div>
+        </div>
+        <div class="draganddropTable" data-name="stores#<?= $filterModel->productId ?>">
+            <?php foreach ($orderStoreSort as $orderStore): ?>
+                <div class="row">
+                    <div class="col-1 drag-handler"></div>
+                    <div class="col-2">
+                        <?= $storeNamesByGuid[$orderStore->store_id] ?? '---' ?>
+                    </div>
+                    <div class="col-2">
+                        <?= $salesQuantity[$orderStore->store_id] ?? '---' ?>
+                    </div>
+                    <div class="col-2">
+                        <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity ?? '---' ?>
+                    </div>
+                    <div class="col-2">
+                        <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity_max ?? '---' ?>
+                    </div>
+                </div>
+            <?php endforeach; ?>
+        </div>
+    <?php endif; ?>
+</div>
diff --git a/erp24/views/shipment_old/store-planogram-logi.php b/erp24/views/shipment_old/store-planogram-logi.php
new file mode 100644 (file)
index 0000000..64883af
--- /dev/null
@@ -0,0 +1,70 @@
+<?php
+
+use yii_app\records\Products1c;
+use yii\helpers\ArrayHelper;
+use yii_app\records\StorePlanogram;
+use yii_app\records\StorePlanogramLogi;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+//include"templates/top.php";
+
+$store_id = $product_id = null;
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["product_id"])) $product_id=htmlentities($_REQUEST["product_id"]);
+
+$sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
+
+echo'<h1 class="page-title mb-0 text-primary">Логи матрицы товара на магазине</h1>  
+
+
+
+</p><div id=editDiv></div>';
+
+$storesAll = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store'])
+    ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
+
+
+
+if(!empty($store_id)) {
+    echo'<div class="table-responsive mt-3">
+
+
+история
+<table class="table">';
+    echo'<tbody>';
+
+    $dataRow = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $product_id, 'color' => ''])->one();
+//    $dataRow=$db::getRow("SELECT * FROM store_planogram WHERE store_id=? AND product_id=? AND color=''",[$store_id,$product_id]);
+
+
+    echo'<tr><td>сейчас</td><td>'.$dataRow["quantity"].'</td><td>'.$dataRow["quantity_max"].'</td><td>'.$dataRow["color"].'</td></tr>';
+
+
+    $data = StorePlanogramLogi::find()->where(['store_id' => $store_id, 'product_id' => $product_id])
+        ->orderBy(['date_id' => SORT_DESC, 'color' => SORT_ASC])->asArray()->all();
+//    $data=$db::getRows("SELECT * FROM store_planogram_logi WHERE store_id=? AND product_id=? order by date_id DESC, color ASC",[$store_id,$product_id]);
+
+
+    foreach($data as $row) {
+
+        if($row["color"]=="")
+            echo'<tr><td>'.$row["date_id"].'</td><td>'.$row["quantity"].'</td><td>'.$row["quantity_max"].'</td><td>'.$row["color"].'</td>
+<td>'.$sel[$row["comment_id"]].'</td>
+</tr>';
+
+    }
+
+
+    echo'</tbody></table>
+
+</div>';
+
+}
+
+//include"templates/bottom.php";
diff --git a/erp24/views/shipment_old/store-products-fact-edit.php b/erp24/views/shipment_old/store-products-fact-edit.php
new file mode 100644 (file)
index 0000000..48f3bb3
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+
+if(!empty($_REQUEST["product_id"])) {
+
+    $product_id=htmlentities($_REQUEST["product_id"]);
+    $color=htmlentities($_REQUEST["color"]);
+    $quantity=intval($_REQUEST["quantity"]);
+    $store_id=htmlentities($_REQUEST["store_id"]);
+    $date_id=intval($_REQUEST["date_id"]);
+    echo"Сохранили количество =$quantity";
+
+
+
+    if($color!="NULL") $color=str_replace('"','',$color);
+    else $color='';
+    $sql="INSERT IGNORE INTO store_products_fact SET  ";
+    $up= "store_id='$store_id', product_id='$product_id', date_id='$date_id', color='$color', quantity='$quantity' ";
+    $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//echo"<br><br>++$color++$sql";
+    $db::sql($sql);
+
+}
\ No newline at end of file
diff --git a/erp24/views/shipment_old/store-products-fact.php b/erp24/views/shipment_old/store-products-fact.php
new file mode 100644 (file)
index 0000000..0d6dd73
--- /dev/null
@@ -0,0 +1,630 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+//include"templates/top.php";
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+//$date_id=date("Ymd");
+if(!empty($_REQUEST["date_id"])) $date_id=intval($_REQUEST["date_id"]);
+$arrayDate=["first","second","third","fourth","fifth"];
+$typeDay="monday";
+if(!isset($_SESSION["show_planogram_0"])) $_SESSION["show_planogram_0"]=1;
+
+if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="hide")  $_SESSION["show_planogram_0"]=0;
+if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="show")  $_SESSION["show_planogram_0"]=1;
+
+
+
+if(isset($_REQUEST["typeDay"]) && $_REQUEST["typeDay"]) $typeDay=htmlentities($_REQUEST["typeDay"]); //"wednesday";
+
+//$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE date_id!=? order by date_id desc LIMIT 1",[date("Ymd")]);
+//f(empty($date_n_id))
+$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE 1 order by date_id desc LIMIT 1");
+
+
+$massivert[$date_n_id]=date('d.m.Y', strtotime($date_n_id));
+$massiver_time[$date_n_id]=strtotime($date_n_id);
+if(empty($date_id)) $date_id=$date_n_id;
+
+
+if(date('l', time())=="Wednesday") $typeDay="wednesday";
+
+$dayLinkstArray=["monday"=>"Понедельник", "wednesday"=>"Среда" ];
+$typer="";
+foreach($dayLinkstArray as $lnk => $name) {
+
+    $typer .="<a href=\"?typeDay=$lnk\" class=\"btn btn-sm btn-";
+    if($typeDay==$lnk) $typer .="success"; else $typer .="info";$typer .=" me-2\">$name</a>  ";
+}
+//echo"Выберите тип: $typer";
+
+
+$dayTextArray=[$typeDay];
+
+foreach($dayTextArray as $dayText) {
+    foreach($arrayDate as $sl) {
+        if(strtotime("$sl $dayText of this month")<time())  {
+            $massivert[date('Ymd', strtotime("$sl $dayText of this month"))]=date('d.m.Y', strtotime("$sl $dayText of this month"));
+            $massiver_time[date('Ymd', strtotime("$sl $dayText of this month"))]=strtotime("$sl $dayText of this month");
+        }
+    }
+}
+
+
+asort($massivert);
+
+$date_div="";
+foreach($massivert as $did => $date) {
+// if($massiver_time[$did]>0) {
+    $date_div .="<a href=\"?date_id=$did\" class=\"btn btn-sm btn-";
+    if($did==$date_id) $date_div .="success"; else $date_div .="info";
+    $date_div .=" me-2\">$date</a>  ";
+
+}
+
+
+
+//echo "<br>Выберите дату ".$date_div;  and empty($date_id)
+if(empty($_REQUEST["date_id"]) and !empty($_REQUEST["store_id"]))  {
+
+    error_mess("Выберите дату  $date_div");
+
+    exit();
+}
+
+$data=$db::getRows("SELECT id,name, providers_arr FROM `store_orders` WHERE date_start>NOW() - interval 25 day");
+foreach($data as $row) {
+    $pr=explode(",",$row["providers_arr"]);
+    foreach($pr as $prid) { if(!empty($prid)) $prov[$prid]=$prid;}
+}
+//echo print_r($prov);;
+
+
+$k=0;
+$where="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+    if(!empty($guid)) {
+        if($k!=0) $where .=",";
+        $where.="'$guid' ";
+        $k++;
+    }
+}
+
+//if(!empty($where)) $where =" AND id in($where)";
+
+$massiver[]=["name"=>"Факт","title"=>"Фактические остатки","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0","type"=>"number","tip"=>"int"];
+$massiver[]=["name"=>"Комментарий","title"=>"Комментарий флориста","name_eng"=>"comment_type_id", "name_eng_sql"=>"comment_type_id", "class"=>"comment", "type"=>"select", "class"=>"sel",
+    "values_arr"=>["0"=>"-выбрать-",
+        1=>"не хватило товара",
+        2=>"большое списание по товару",
+        3=>"много товара",
+        4=>"Цветок одного цвета ",
+        5=>"Цветок плохого качества ",
+        6=>"Не пользуются спросом",
+        7=>"Не заказывали ,а привезли"
+    ],
+
+
+
+
+
+
+
+    "tip"=>"int"];
+if(in_array($_SESSION["group_id"],[1,10,7,50])) $massiver[]=["name"=>"Ком-й кустовой","title"=>"Комментарий кустового","name_eng"=>"comments", "name_eng_sql"=>"comments", "class"=>"comment", "placeholder"=>"0","type"=>"textarea","tip"=>"string"];
+
+
+
+echo'<h1 class="page-title mb-0 text-primary">Фактические остатки на '.date('d.m.Y',strtotime($date_id));
+if(isset($store_id) && empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&date_id=$did&show_planogram_0=show\" class=\"ml-3 me-2 btn-warning btn-sm\">показывать товары с 0 полнограммой</a>";
+if(isset($store_id) && !empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&&show_planogram_0=hide\" class=\"ml-3  me-2 btn-danger btn-sm\">скрыть товары с 0 полнограммой</a>";
+echo'</h1>     
+
+
+<a href="https://youtu.be/-jAr0uV5uZI" class="btn btn-danger btn-lg" target=new>Видео-инструкция</a> https://youtu.be/-jAr0uV5uZI
+<p>Флористы заполняют в понедельник и в среду до 11 часов по своему магазину. Вносят фактические остатки вместе по цветам тоже!
+Флористы или администраторы вносят комментарии из списка (3 причины). Далее кустовой просматривает и сотавляет свои комментарии текстом.
+Цифра в % на кнопке магазина показывает на сколько позиций заполнена полнограмма факт от полнограммы для данного магазина без учета цветов.
+<br>Заполняем на последнюю актуальную дату! '.$date_div.'
+
+
+
+
+</p><div id=editDiv></div>';
+
+
+if(empty($where)) mess("У вас не прописан доступ к магазинам автозаказа обратитесь +79308013638 Екатерина HR");
+
+
+$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view=1 AND id in($where)  order by name ASC");
+$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
+
+
+
+// сколько заполнено по магазинам
+$storesFact=array(); $storesFactNo=array();
+// полнограммы по всем магазинам
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' AND store_id!='' AND quantity>0 AND store_id in($where)");
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+
+// полнограммы факт по всем магазинам
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_products_fact WHERE date_id=? AND quantity>0 AND store_id in($where)",[$date_id]);
+foreach($data3 as $row2) $factAll[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+
+
+foreach($stores as $stId =>$nameStore) {
+//echo"<br>магазин ".$nameStore."   ";
+    $cnt=0; $all=0;
+    $arrays=$store_planogramAllStores[$stId] ?? [];
+    if(!empty($stores[$stId])){
+        foreach($arrays as $productId =>$quantity) {
+            if($factAll[$stId][$productId] ?? 0 >0 and $quantity>0)  {
+                //echo"+ $productId  = $quantity";
+                $cnt++;
+            }
+            $all++;
+        }
+        $percent=round(100*($cnt/($all == 0 ? 1 : $all)));
+//echo" $cnt из $all =$percent %";
+        $storesFact[$stId]=$percent;
+//не заполнившие магазины
+        if($percent<15) $storesFactNo[]=$stId;
+    }
+
+}
+// сколько заполнено по магазинам
+
+
+
+
+
+foreach($stores as $strid=>$namestore){
+    echo"<a href=\"/shipment/store-products-fact/?store_id=$strid&date_id=$date_id\" class=\"btn btn-sm btn-";
+    if(isset($store_id) && $store_id==$strid) echo"warning btn"; else echo"info";  echo" m-1\">";
+
+    if($storesFact[$strid]>20) echo"<span class=\"btn btn-sm bg-success me-1\" title=\"Полнограмма заполнена на ".$storesFact[$strid]."%\">+".$storesFact[$strid]."%</span>";
+
+    if(empty($storesFact[$strid])) echo"<span class=\"btn btn-sm bg-danger me-1\">-</span>";
+    elseif($storesFact[$strid]<10) echo"<span class=\"btn btn-sm bg-danger me-1\">".$storesFact[$strid]."%</span>";
+
+    if(empty($store_planogramAllStores[$strid])) echo"<span class=\"btn btn-sm bg-danger2 me-1\">нет полнограммы</span>";
+
+    echo"$namestore</a>";
+}
+
+
+
+if(!empty($storesFactNo)) {
+    echo'<p>магазины не заполнившие полнограмму';
+    foreach($storesFactNo as $stId) echo'<span class="btn btn-danger me-2 btn-sm">'.$storesAll[$stId].'</span>  ';
+
+    echo'</p>';
+
+}
+
+
+$w="";
+$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$k=0;
+foreach(($in ?? []) as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=" OR";  $w .=" o.provider_id='$pid'"; $k++; }
+
+if(!empty($_POST["quantity"])) {
+
+    foreach($massiver as $m0 => $m1) {
+        $name_eng=$m1["name_eng_sql"];
+        foreach($_POST[$name_eng] as $m => $val) {
+            if($m1["tip"]=="int")    $val= mb_eregi_replace('[^0-9.]', '', $val);
+            else $val= htmlentities($val);
+            if($val>=0) $sql_param[$m][$name_eng]=$val;
+
+        }
+    }
+
+
+
+    foreach($sql_param as $prod_id => $massi) {
+        $sql="INSERT IGNORE INTO store_products_fact SET  ";
+        $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color=''";
+        foreach($massi as $pole =>$value)  $up .=", $pole='$value' ";
+        $sql .="$up ON DUPLICATE KEY UPDATE $up";
+
+        $db::sql($sql);
+
+        foreach($_POST["color"]["quantity"][$prod_id]  as $color => $quantity) {
+            $color=str_replace('"','',$color);
+            $sql="INSERT IGNORE INTO store_products_fact SET  ";
+            $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color='$color', quantity='$quantity' ";
+            $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//echo"<br><br>++$color++$sql";
+            $db::sql($sql);
+        }
+
+    }
+
+
+
+
+    mess("Факт для магазина сохранена");
+}
+if(!empty($store_id)) {
+    echo '<div class="table-responsive mt-3"><form action="" method=post>
+<table class="w-100" cellspasing=0 cellpadding=0 border=0>';
+    echo '<tbody>';
+
+
+    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
+    foreach ($data3 as $row2) $store_planogram[$row2["product_id"]] = $row2["quantity"];
+
+    $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
+    foreach ($data3 as $row2) $store_planogram_colors[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
+
+
+    $data3 = $db::getRows("SELECT * FROM balances WHERE store_id=? AND quantity!=0", [$store_id]);
+    foreach ($data3 as $row2) $balances[$row2["product_id"]] = $row2["quantity"];
+
+
+    $data3 = $db::getRows("SELECT * FROM store_products_fact WHERE store_id=? AND date_id=?", [$store_id, $date_id]);
+    foreach ($data3 as $row2) {
+
+        foreach ($massiver as $m0 => $m1) {
+            $name_eng = $m1["name_eng_sql"];
+
+            if (empty($row2["color"])) $values_in[$row2["product_id"]][$name_eng] = $row2[$name_eng];
+            else  $values_in_color[$row2["product_id"]][$name_eng][$row2["color"]] = $row2[$name_eng];
+        }
+    }
+
+
+    $where = "";
+    if (!empty($prov)) {
+        $where = " AND o.provider_id in(";
+        $j = 0;
+        foreach (($prov ?? []) as $pid) {
+            if ($j > 0) $where .= ",";
+            $where .= "'$pid'";
+            $j++;
+        }
+        $where .= ")";
+    }
+
+    $data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p 
+WHERE o.provider_id>0 AND p.view='1' AND p.id=o.id $where order by o.provider_id ASC, p.name ASC");
+
+
+    $products_group=$db::mapping("SELECT id, name FROM products_1c   WHERE tip='products_group'");
+//foreach($data4 as $row4) $products_group[$row4["id"]]=$row4["name"];
+
+    $data2=$db::getRows("SELECT p.id, p.name, p.parent_id,  o.provider_id, o.colors, p.parent_id as category_id FROM
+   products_class as cl
+  LEFT JOIN products_1c as p    ON (p.view='1' AND p.parent_id=cl.category_id ) 
+   LEFT  JOIN products_1c_options as o ON (p.id=o.id) 
+WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
+//SELECT p.id, p.name, p.parent_id, provider_id FROM products_class as cl, products_1c as p  WHERE p.parent_id=cl.category_id  AND cl.tip='related' AND p.view='1'  order by p.parent_id, p.name ASC
+
+    $data = array_merge($data, $data2);
+
+
+
+    $p=0;
+    $p2=0;
+    $providersIn = [];
+    $category_idIn = [];
+    foreach($data as $row) {
+
+
+        if(!in_array($row["provider_id"],$providersIn)) {
+
+
+            if(empty($providers[$row["provider_id"]])) {
+                echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
+            }elseif(!empty($providers[$row["provider_id"]])) {
+
+                echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();">
+ <td colspan=6 class="p-2"><span class="bg-green fs-4 p-2 w-100 d-block">+ '.$providers[$row["provider_id"]].'</span></td></tr>';
+
+            }
+
+            echo' <tr style="';
+
+            if($p>=1) echo"display:none;";
+
+            echo'" class="pr__'.$row["provider_id"].'"><td  class="w-10"><small>Наименование</small></td><td class="text-center"><small>остаток 1c</small></td>';
+            foreach($massiver as $f =>$mass)    echo'<td class="text-left"><small>'.$mass["name"].'</small></td>';
+            echo'<td class="text-center"><small>пол-ма</small></td><td class="text-center"><small>разница</small></td><td class="text-center"><small>%</small></td><td class="w-70"></td></tr>';
+
+            $providersIn[]=$row["provider_id"];
+            $p++;
+        }
+
+
+        if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
+            echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
+ <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
+            $category_idIn[]=$row["category_id"];
+            $p2++;
+        }
+
+        // <small>".$providers[$row["provider_id"]]."</small>
+// echo"<tr style=\"display:none;\" class=\"pr__".$row["provider_id"]."\"><td colspan=4 class=\"fs-5\">".$row["name"]."</td></tr>";
+
+        if($store_planogram[$row["id"]] ?? 0>0 or $_SESSION["show_planogram_0"]==1) {
+            $difference=($store_planogram[$row["id"]] ?? 0)-($values_in[$row["id"]]["quantity"] ?? 0);
+            if(!empty($store_planogram[$row["id"]])) $difference_percent=100-round(100*$difference/$store_planogram[$row["id"]]);
+            else $difference_percent="";
+
+
+            echo"<tr style=\"";
+
+            if($p>1 or $p2>1) echo"display:none;";
+
+            if(($store_planogram[$row["id"]] ?? 0) ==0) echo"opacity:0.9;";
+            if($difference_percent==0 and ($store_planogram[$row["id"]]??0)!=0) echo"background:#ffe391;";
+            if($difference_percent>=100) echo"background:#9effd2;";
+
+
+
+            echo"\" class=\"trhover pr__".$row["provider_id"]."";
+
+            if(!empty($row["category_id"])) echo" category__".$row["category_id"];
+
+            if(($store_planogram[$row["id"]]?? 0)==0) echo" bg-danger2";
+
+            echo"\"><td class=\"text-right fs-6 pr-2\">".$row["name"]."</td>
+<td class=\"text-center tdcntr\">".($balances[$row["id"]] ?? '')."</td>";
+            foreach($massiver as $f =>$mass) {
+                echo'<td title="'.$mass["title"].'">';
+
+                if($mass["type"]=="number") {
+                    echo'<input type=number oninput="up(this)" onchange="storeProductsFactEdit(\''.$row["id"].'\',\'NULL\')" min="0" id="color_quantity_'.$row["id"].'_NULL" name='.$mass["name_eng"].'['.$row["id"].'] class="poln '.($mass["class"] ?? '').'" value="';
+                    if(isset($values_in[$row["id"]][$mass["name_eng"]])) echo $values_in[$row["id"]][$mass["name_eng"]];
+                    echo'"';
+                    if(!empty($mass["pattern"])) echo' pattern="'.$mass["pattern"].'"';
+                    if(isset($mass["step"])) echo' step="'.$mass["step"].'"';
+                    if(isset($mass["placeholder"])) echo' placeholder="'.$mass["placeholder"].'"';
+                    echo'>';
+                }
+                if($mass["type"]=="textarea") {
+                    echo'<textarea  oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'" row=1>';
+                    if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
+                    echo'</textarea>';
+                }
+
+                if($mass["type"]=="select") {
+                    echo'<select  oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'">';
+                    //  echo"<option value=0 "; if(empty($values_in[$row["id"]])) echo "select";  echo">-выбрать-</option>";
+
+                    foreach($mass["values_arr"] as $v => $name) {
+                        echo"<option value=$v "; if($v==($values_in[$row["id"]][$mass["name_eng"]] ?? 0)) echo "selected";
+                        echo">$name</option>";
+                    }
+                    echo'</select>';
+                }
+                echo'</td>';
+
+            }
+
+
+            echo'<td class="tdcntr bg-default">'.($store_planogram[$row["id"]] ?? '').'</td>
+<td class="tdcntr bg-';
+            if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
+
+            if($difference<0) $difference="+".abs($difference);
+            if($difference_percent<0) $difference_percent=">".abs($difference_percent);
+
+            if(!empty($store_planogram[$row["id"]]) and !empty($difference_percent)) $difference_percent .="%";
+            else $difference_percent ="";
+            echo'">'.$difference.'</td>
+<td class="tdcntr bg-default">'.$difference_percent.'</td>';
+
+
+            /* <td>
+             <textarea class=\"form-control\" row=1 name=comment>".$row["name"]."</textarea>
+             </td>*/
+            echo"</tr>";
+            $colors=explode(";",$row["colors"]);
+            $colorShow=0;
+            if(!empty($row["colors"])) {
+                foreach($colors as $color_w) {
+                    if(!empty($store_planogram_colors[$row["id"]][trim($color_w)])) $colorShow++;
+                }
+
+                $colorShow=1;
+                if($colorShow>0){
+                    echo"<tr style=\"";
+                    if($p>1) echo"display:none;";
+
+                    echo"\" class=\"pr__".$row["provider_id"]."\"><td colspan=5>
+     <table class=\"tablecolors mb-5\">
+     <thead><th class=zg rowspan=".count($colors).">
+    </th><th><b>кол-во</b></th><th><b>цвет</b></th><th><b>полнограмма</b></th><th><b>расхождение шт.</b></th><th><b>заполнение %</b></th></thead>
+     <tbody>";
+
+
+
+                    $j=0;
+                    foreach($colors as $color_w) {
+                        $color_w=trim($color_w);
+
+
+                        if(!empty($store_planogram_colors[$row["id"]][$color_w])) {   }
+
+                        echo"<tr>";
+
+                        if($j==0)  echo"<td class=zg rowspan=".count($colors)."><b>".$row["name"]."</b></td>";
+
+                        $j++;
+                        echo"<td><input onchange=\"storeProductsFactEdit('".$row["id"]."','$color_w')\" type=number class=input-sm name=color[quantity][".$row["id"]."][$color_w] id=\"color_quantity_".$row["id"]."_$color_w\" value=\"";
+                        if(isset($values_in_color[$row["id"]]["quantity"][$color_w] )) echo $values_in_color[$row["id"]]["quantity"][$color_w];
+                        echo"\"></td><td>$color_w</td>";
+                        $difference_percent=0;
+                        $difference=($store_planogram_colors[$row["id"]][$color_w] ?? 0)-($values_in_color[$row["id"]]["quantity"][$color_w] ?? 0);
+                        if($store_planogram_colors[$row["id"]][$color_w] ?? 0)
+                            $difference_percent=100-round(100*$difference/$store_planogram_colors[$row["id"]][$color_w]);
+
+
+                        if(!empty($difference_percent)) $difference_percent="$difference_percent%";
+                        else $difference_percent="";
+
+
+
+                        echo'<td class="bg-default tdcntr">';
+                        if(!empty($store_planogram_colors[$row["id"]][$color_w])  and !empty($difference_percent)) echo $store_planogram_colors[$row["id"]][$color_w];
+
+                        echo'</td>
+<td class="tdcntr bg-';
+                        if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
+                        echo'">';
+
+                        if(!empty($difference)) echo $difference;
+
+                        echo'</td><td class="tdcntr bg-default">'.$difference_percent.'</td>';
+                        echo'</tr>';
+
+
+
+
+                    }
+
+
+
+                    echo"</tbody></table></td></tr>";
+
+                }
+
+            }
+
+        }
+
+
+
+
+
+    }
+    echo'</tbody></table>
+
+
+<button type=submit name=edits value=1 class="btn btn-success btn-lg m-2">сохранить</button>
+
+</form></div>';
+
+    /*
+
+    $data=$db::getRows("SELECT id, name FROM products_1c   WHERE tip='products_group'");
+    foreach($data as $row) $products_group[$row["id"]]=$row["name"];
+
+
+
+
+    echo"<h2>Сопутка</h2><table class=\"table table-hover\"><thead></thead><tbody>";
+    $data=$db::getRows("SELECT p.id, p.name, p.parent_id FROM products_class as cl, products_1c as p  WHERE
+    p.parent_id=cl.category_id  AND cl.tip='related' AND p.view='1'  order by p.parent_id, p.name ASC");
+
+    foreach($data as $row) {
+     if(empty($inGroup[$row["parent_id"]])){
+
+        $inGroup[$row["parent_id"]]=$row["parent_id"];
+     echo"<tr onclick=\"$('.p".$row["parent_id"]."').toggle();\"><td>
+     <span class=\"bg-green fs-4 p-2 w-100 d-block\">+".$products_group[$row["parent_id"]]."</span></td></tr>  ";
+
+     } else {
+
+         echo"<tr class=\"p".$row["parent_id"]."\" style=\"display:none;\"><td> ".$row["provider_id"]." ".$row["name"]."</td></tr>  ";
+
+
+     }
+    }
+
+    echo"</tbody></table>";
+    */
+    /*
+
+    .zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+    .zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+    .zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+    .zak> :not(caption)>*>* {    padding: 0.05rem;    background-color: 1px;    box-shadow: none;}
+    .zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+    .zak {     border-collapse: collapse;      border-spacing: 0;      overflow: hidden;}
+    .zak th, .zak td { border: 1px solid #e6e6e6;      padding: 0.1rem;        vertical-align: middle; position: relative;}
+
+
+    table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td {  vertical-align: bottom;  line-height: normal;}
+    table.zak thead th{margin:0 0.5rem;}
+    table.zak thead b, table.zak tbody b { writing-mode: vertical-rl;  transform: scale(-1);}
+    table.zak tr.zg th b, table.zak tr.zg td b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:0.6rem;}
+    .app-content .side-app {    padding: 25px 0.5rem 0 0.5rem;}
+    .zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+    .zak td.td_product:hover {background:#fff;}
+
+    */
+global $_CONFIG;
+
+    $_CONFIG["jscss"] = '<style>.t tbody tr td{padding:0;}
+.t tbody tr td input.form-control{padding:0;margin:0 2px;text-align:center;font-weight:bold;}
+
+.table tbody tr td{padding:0;}
+
+.input-sm{width:60px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
+input[type="numeric"].poln,.poln{font-weight:bolder; width:70px; font-size:1.3rem; background:lime; color:#000; border:0;padding:1px;  text-align:center;}
+.cssLime{background:#caefca;padding:0.4rem;}
+.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
+table td.tdcntr{text-align:center; font-size:1.3rem;}
+.tablecolors tr:hover td,.trhover:hover {background:#cecece;}
+
+.tablecolors tr th {text-align:center;}
+.tablecolors tr th b{font-weight:normal;}
+
+.tablecolors tbody{border-bottom:1px #cdcdcd solid; }
+.tablecolors {margin:0.5rem 0 0 2rem; float:right;}
+table.tablecolors td.zg b {  writing-mode: vertical-rl; transform: scale(-1);    font-weight:normal; font-size:1rem;}
+
+select.sel{width:90px;font-size:0.8rem; padding:0px;}
+textarea.comment{width:220px; border:0px; background:#e6e6e6;}
+
+.bg-danger2{background:#ffd1d1;}
+
+table tbody td small{color:#787878; text-align:center; font-size:0.7rem; margin:0 0.4rem;}
+</style>
+
+<script>
+const param6x = $(\'meta[name=csrf-param]\').attr(\'content\');
+const token6x = $(\'meta[name=csrf-token]\').attr(\'content\');
+
+
+$quantity=htmlentities($_REQUEST["quantity"]);
+
+
+function storeProductsFactEdit(product_id,color){
+
+var quantity=$(\'#color_quantity_\'+product_id+\'_\'+color+\'\').val();
+
+ $.ajax({
+       url: \'/shipment/store-products-fact-edit/\',
+       method: \'post\',       
+       dataType: \'html\',        
+       data: {store_id: \''.$store_id.'\', date_id: \''.$date_id.'\', quantity: quantity,  product_id: product_id, color: color, [param6x]: token6x},  
+       success: function(data) {
+    $(\'#editDiv\').html(data);
+       }}); 
+}
+
+
+function up(e) {
+  if (e.value.indexOf(".") != \'-1\') {
+    e.value=e.value.substring(0, e.value.indexOf(".") + 3);
+  }
+}
+</script>';
+
+    include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+}
+
+//include"templates/bottom.php";
+
+
+
+
diff --git a/erp24/views/shipment_old/write_off.php b/erp24/views/shipment_old/write_off.php
new file mode 100644 (file)
index 0000000..111c7b9
--- /dev/null
@@ -0,0 +1,90 @@
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$date_14day=date("Y-m-d",time()-86400*7);
+$date2=date("Y-m-d",time());
+
+$where=""; $get="";
+if(!empty($_REQUEST["date1"])) {$date_14day=htmlentities($_REQUEST["date1"]); $where .=" AND date>='$date_14day'";  $get .="&date1=$date_14day";  }
+if(!empty($_REQUEST["date2"])) {$date2=htmlentities($_REQUEST["date2"]);  $where .=" AND date<='$date2'"; $get .="&date2=$date2";}
+
+
+echo'<form method=post>
+<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() . '" />
+<table><td><input type=date name=date1 value="'.$date_14day.'" class="form-control"></td>
+<td><input type=date name=date2 value="'.$date2.'" class="form-control"> </td>
+<td><button class="btn btn-success" value="1" name=show>сохранить</button></td></table></form>';
+
+
+$stores=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
+
+
+$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt, w.store_id, prices.price
+FROM write_offs as w, write_offs_products as p , products_1c as products, prices
+WHERE p.write_offs_id=w.id AND products.id=p.product_id AND products.id=prices.product_id   AND w.type='Брак'  AND  w.date>=?  AND  w.date<=? group BY w.store_id, p.product_id order by p.product_id, cnt DESC",[$date_14day,$date2]);
+
+foreach($data as $row) {
+    $write[$row["product_id"]][$row["store_id"]] =$row["cnt"];
+    $write_all[$row["store_id"]] +=$row["cnt"];
+    $all +=$row["cnt"];
+
+
+    $write_price_all[$row["store_id"]] +=$row["cnt"]*$row["price"];
+    $all_price +=$row["cnt"]*$row["price"];
+}
+
+
+echo" Данные из 1c c $date_14day по  $date2
+ <h3>% списания от общего списания по магазинам</h3> 
+ Списнаия на сумму $all_price=
+  <table class=\"table table-border\"><tbody>";
+foreach($stores as $storeId =>$store) {
+
+    $percent_all=round(100*($write_all[$storeId]/($all + 0.0001)));
+    $percantArr[$storeId]=$percent_all;
+    $percentp_all=round(100*($write_price_all[$storeId]/($all_price + 0.0001)));
+    $percantArrPrice[$storeId]=$percentp_all;
+
+}
+
+arsort($percantArr);
+foreach($percantArr as $storeId =>$percent_all)  {
+    if($percent_all>0) echo"<tr><td> ".$stores[$storeId]." </td><td>$percent_all%</td><td>".$write_price_all[$storeId]."</td><td>".$percantArrPrice[$storeId]."%</td></tr>";
+
+}
+
+echo"</tbody></table>";
+
+$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt
+FROM write_offs as w, write_offs_products as p , products_1c as products
+WHERE p.write_offs_id=w.id AND products.id=p.product_id  AND w.type='Брак' AND  w.date>=?  AND  w.date<=? group BY p.product_id order by  cnt DESC",[$date_14day,$date2]);
+echo" <h3>Списания по магазинам</h3><table class=\"table table-border\">";
+foreach($data as $row) {
+
+    echo"<tr><td><span class=\"btn btn-info btn-sm me-2\" onclick=\"$('.p".$row["product_id"]."').toggle()\">+</span>".$row["name"]."</td><td>".$row["cnt"]."</td></tr> ";
+
+    foreach($write[$row["product_id"]] ?? [] as $storeId => $cnt) {
+
+
+        $percent=round( ($cnt/$row["cnt"])*100 );
+
+        echo"<tr style=\"display:none;\" class=\"p".$row["product_id"]."\"><td>$cnt  <b>$percent%</b></td><td>".$stores[$storeId]."</td></tr>";
+
+
+    }
+
+}
+echo"</table>";
+
+
+
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file