--- /dev/null
+<?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';
+