]> gitweb.erp-flowers.ru Git - yii-erp24/.git/commitdiff
add division
authorAlexander Smirnov <fredeom@mail.ru>
Tue, 12 Dec 2023 10:37:14 +0000 (13:37 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Tue, 12 Dec 2023 10:37:14 +0000 (13:37 +0300)
erp24/actions/shipment/AjaxAdminOnlineAction.php [new file with mode: 0644]
erp24/actions/shipment/AjaxDivisionAction.php [new file with mode: 0644]
erp24/actions/shipment/DivisionAction.php [new file with mode: 0644]
erp24/controllers/ShipmentController.php
erp24/views/shipment/ajax-admin-online.php [new file with mode: 0644]
erp24/views/shipment/ajax-division.php [new file with mode: 0644]
erp24/views/shipment/division.php [new file with mode: 0644]
erp24/views/shipment/index.php

diff --git a/erp24/actions/shipment/AjaxAdminOnlineAction.php b/erp24/actions/shipment/AjaxAdminOnlineAction.php
new file mode 100644 (file)
index 0000000..8ab535a
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+namespace yii_app\actions\shipment;
+
+use yii\base\Action;
+
+class AjaxAdminOnlineAction extends Action
+{
+    public function run() {
+        return $this->controller->render('ajax-admin-online');
+    }
+}
\ No newline at end of file
diff --git a/erp24/actions/shipment/AjaxDivisionAction.php b/erp24/actions/shipment/AjaxDivisionAction.php
new file mode 100644 (file)
index 0000000..cacdb83
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+namespace yii_app\actions\shipment;
+
+use yii\base\Action;
+
+class AjaxDivisionAction extends Action
+{
+    public function run() {
+        return $this->controller->render('ajax-division');
+    }
+}
\ No newline at end of file
diff --git a/erp24/actions/shipment/DivisionAction.php b/erp24/actions/shipment/DivisionAction.php
new file mode 100644 (file)
index 0000000..69e8517
--- /dev/null
@@ -0,0 +1,12 @@
+<?php
+
+namespace yii_app\actions\shipment;
+
+use yii\base\Action;
+
+class DivisionAction extends Action
+{
+    public function run() {
+        return $this->controller->render('division');
+    }
+}
\ No newline at end of file
index 2d968c7322698643cec8a5871722a66bd92b994d..4f66abb2f6b37de6b8db27e4c942430c6c6cd9c1 100755 (executable)
@@ -12,6 +12,9 @@ class ShipmentController extends \yii\web\Controller
             '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-data' => \yii_app\actions\shipment\FieldsDataAction::class,
             'ajax-update-fields-data-test' => \yii_app\actions\shipment\AjaxUpdateFieldsDataTestAction::class,
             'division-print-edit' => \yii_app\actions\shipment\DivisionPrintEditAction::class,
diff --git a/erp24/views/shipment/ajax-admin-online.php b/erp24/views/shipment/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/ajax-division.php b/erp24/views/shipment/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/division.php b/erp24/views/shipment/division.php
new file mode 100644 (file)
index 0000000..91abc51
--- /dev/null
@@ -0,0 +1,1560 @@
+<?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"templates/top.php";
+
+global $products;
+$act='division';
+$modul='shipment';
+$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=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+
+$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=$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=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' $where AND view='1' order by name ASC");
+
+$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) {
+// 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=$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=$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();
+$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=$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=$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=$db::getRows("SELECT product_id, store_id, quantity_purchase FROM store_orders_item WHERE order_id=?",[$OrderId]);
+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=$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=$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=$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=$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=$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=$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=$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';
+
index 9c2ece49fcc2f2dc1e676544ab5d64297c07245f..ffa5b3e477f7f3a698ee9a2df22a0ae8464b8d4d 100755 (executable)
@@ -55,7 +55,7 @@ foreach($storeOrders as $row) {
                     <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=/<?php echo $modul?>/fields-data/?id=<?php echo $row["id"]?> >новый интерфейс2</a>
-                    <a class="dropdown-item" href=/<?php echo $modul?>/division/?id=<?php echo $row["id"]?>>деление</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=/<?php echo $modul?>/divisionPrint/?id=<?php echo $row["id"]?>>деление - печать на складе</a>