From d519aa80e2de8f67aca1f308d32e4f4a47f34662 Mon Sep 17 00:00:00 2001 From: Alexander Smirnov Date: Tue, 12 Dec 2023 13:37:14 +0300 Subject: [PATCH] add division --- .../shipment/AjaxAdminOnlineAction.php | 12 + erp24/actions/shipment/AjaxDivisionAction.php | 12 + erp24/actions/shipment/DivisionAction.php | 12 + erp24/controllers/ShipmentController.php | 3 + erp24/views/shipment/ajax-admin-online.php | 28 + erp24/views/shipment/ajax-division.php | 35 + erp24/views/shipment/division.php | 1560 +++++++++++++++++ erp24/views/shipment/index.php | 2 +- 8 files changed, 1663 insertions(+), 1 deletion(-) create mode 100644 erp24/actions/shipment/AjaxAdminOnlineAction.php create mode 100644 erp24/actions/shipment/AjaxDivisionAction.php create mode 100644 erp24/actions/shipment/DivisionAction.php create mode 100644 erp24/views/shipment/ajax-admin-online.php create mode 100644 erp24/views/shipment/ajax-division.php create mode 100644 erp24/views/shipment/division.php diff --git a/erp24/actions/shipment/AjaxAdminOnlineAction.php b/erp24/actions/shipment/AjaxAdminOnlineAction.php new file mode 100644 index 0000000..8ab535a --- /dev/null +++ b/erp24/actions/shipment/AjaxAdminOnlineAction.php @@ -0,0 +1,12 @@ +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 index 0000000..cacdb83 --- /dev/null +++ b/erp24/actions/shipment/AjaxDivisionAction.php @@ -0,0 +1,12 @@ +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 index 0000000..69e8517 --- /dev/null +++ b/erp24/actions/shipment/DivisionAction.php @@ -0,0 +1,12 @@ +controller->render('division'); + } +} \ No newline at end of file diff --git a/erp24/controllers/ShipmentController.php b/erp24/controllers/ShipmentController.php index 2d968c7..4f66abb 100755 --- a/erp24/controllers/ShipmentController.php +++ b/erp24/controllers/ShipmentController.php @@ -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 index 0000000..4d1ac44 --- /dev/null +++ b/erp24/views/shipment/ajax-admin-online.php @@ -0,0 +1,28 @@ +=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 index 0000000..673cba0 --- /dev/null +++ b/erp24/views/shipment/ajax-division.php @@ -0,0 +1,35 @@ +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 index 0000000..91abc51 --- /dev/null +++ b/erp24/views/shipment/division.php @@ -0,0 +1,1560 @@ +$massiv) { +// echo"

Куст $kustId = "; + foreach($massiv as $storeGuid) { + // echo ' '.$storesAll[$storeGuid]. ''; + if($i>0) $sortStoreId .=","; + $sortStoreId .=$storeGuid; + $sortStore[]=$storeGuid; + $i++; + } + echo'

'; +} + + + + + +echo'

Остаток склада '.$row["name"].' id='.$row["id"].' +

+'. $store_orders_statuses[$status_order_id] .' ваша роль '.$roles[$_SESSION["group_id"]].' + +
+'; + +$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 .=''.$providers[$pid].''; + if($k!=0) $w .=" OR"; $w .=" o.provider_id='$pid'"; $k++; } +//echo'
'.$privedrs_htm.'
'; + +$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'
'.$nameProduct.'= '. $QuantitySumm[$productId] .' ostatok='.$ostatok.' '; + $ostatokReal[$productId]=$ostatok; } + // else echo'
Деление в минус '.$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''.$name.''; + +} + + +echo'
'.$data["name_full"].' '.$data["description"].' '.$data["sql_table_values"].' '.$data["name_eng"].' '; + +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="

Сортировка по магазинам по этому товару

+

Продажи за последнюю неделю в шт.

"; + $massivStoreSort=array(); + $i=1; + + + if($formulaPurchase>=$formulaFact) $allQuantity=$formulaFact; + if($formulaPurchase<=$formulaFact) $allQuantity=$formulaPurchase; + + $txt .="Считаем по $allQuantity "; + + $txt .=" $allQuantity заказ кустовых $formulaPurchase "; + /* + foreach($data as $row){ + $txt .="$i)".$storesArr[$row["store_id_1c"]]."".(int)$row["squantity"]." шт."; + $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 .="
коэфициент умножения $percentFact -умноаем каждый заказ на этот коэф + + "; + + $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 .=" + + +"; +//$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 .=""; + $do=1; + if($roundPBaseAll==$q_all) $do=0; + + $txt .="
$i)".$storesArr[$store_id_1c]."".(int)$quantity." шт.заказ ".$quantityArr[$store_id_1c]."".$percent."$formulaFact $quantity_zakaz -> $quantity_zakaz_round
Итого$q_all$roundPBaseAll
всего заказано $allQuantity По факту $formulaFact = процент $percentFact% Всего базово на заказ $roundPAll + + +установить + +"; + + + + + $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 .="
$i) ".$storesArr[$row["store_id_1c"]]." ".(int)$row["squantity"]." шт. "; + $storeArr[$row["store_id_1c"]]=$row["squantity"]; + $i++; + } + + + + +// если первый цикл совсем ничего не начислил + if($roundPBaseAll<$allQuantity) { + $txt .="
+Начинаем начисление по кругу отталкиваясь от продаж ++ $allQuantity ++"; + + $formulaFactForeach=$allQuantity; + + for($kk=0;$kk<=$formulaFactForeach;$kk++) { + if($formulaFactForeach<=0) { $txt .="
=-----выход из цикла"; break; } + + foreach($storeArr as $storeId =>$q) { + if($allQuantity>=($thiasQuantity+$formulaMinLot)) { + + $massivAddQuantity[$storeId] +=$formulaMinLot; + $thiasQuantity +=$formulaMinLot; + +//$txt .="
77777+++ ".$storesArr[$storeId]." = ".$massivAddQuantity[$storeId]." шт."; + $formulaFactForeach -=$formulaMinLot; + } + + } + } + + echo"
Цикл начисления"; + $onclick=""; + foreach($massivAddQuantity as $storeId => $q) { + $txt .="
+++ ".$storesArr[$storeId]." = ".(int)$q." шт."; + $onclick .='$(\'#autodivision_'.$productId.''.$storeId.'\').text(\''.$q.'\')'; + + } + + $txt .="
Итого по второму кругу= ".(int)$thiasQuantity." шт. + + + + +"; + + + } +// конец цикла + + $thiasQuantity=0; + $massivAddQuantity=array(); +// распределяем излишки согласно процентам + if($formulaFact>$formulaPurchase) { + + $izlishek=$formulaFact-$formulaPurchase; + + $txt .="
Начинаем начисление излишков по кругу отталкиваясь от продаж"; + + + $formulaFactForeach=$izlishek; + + for($kk=0;$kk<=$formulaFactForeach;$kk++) { + if($formulaFactForeach<=0) { $txt .="
=-----выход из цикла"; break; } + + foreach($storeArr as $storeId =>$q) { + if($izlishek>=($thiasQuantity+$formulaMinLot)) { + $massivAddQuantity[$storeId] +=$formulaMinLot; + $thiasQuantity +=$formulaMinLot; + $formulaFactForeach -=$formulaMinLot; + } + + } + } + + + + + // echo"
Цикл начисления"; + foreach($massivAddQuantity as $store_id_1c => $squantity) { + + if(($allRecommendeted+$squantity)<=$formulaFact) { + $allRecommendeted +=$squantity; + $txt .="
+++ ".$storesArr[$store_id_1c]." = ".(int)$squantity." шт."; + $autoReccomend[$store_id_1c] +=$squantity; + } + + + } + $txt .="
Итого по третьему кругу= ".(int)$thiasQuantity." шт."; + } +// конец цикла + $onclick=""; + $AutoAll=0; + $txt .="
Рекомендованое распределение с излишками"; + foreach($autoReccomend as $storeId => $count) { + if($AutoAll<$formulaFact and $formulaFact>=($AutoAll+$count)) { + $AutoAll +=$count; + $txt .="
+++ ".$storesArr[$storeId]." = ".(int)$count." шт."; + $onclick .='$(\'#autonew_'.$productId.''.$storeId.'\').text(\''.$count.'\');'; + + } + + } + $txt .="
Итого распределено= ".(int)$AutoAll." шт. + + + установить с делением излишков +"; + + + $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 .="
formulaFactForeach =$formulaFactForeach"; + $j=1; + + + + + for($kk=0;$kk<=$formulaFactForeach;$kk++) { + + + + if($formulaFactForeach<=0) { $txt .="
=-----выход из цикла"; break; } + if($print==1) $txt .="
++Цикл =$formulaFactForeach"; + + + + foreach($massivStoreSortQuantity as $storeId =>$q) { + + + //$txt .="
!!!!!! $formulaFactForeach -- minlot=$formulaMinLot---q=".$autoQuantity[$storeId]."------ "; + + + + + $ost=$formulaFact-$autoQuantityAll; + + if($print==1) $txt .="
$j ) ".$storesArr[$storeId]." (fact=$formulaFact => $ost) "; + $j++; + + + //если товар не заказ кустовым то пропускаем магазин + if(empty($quantityArr[$storeId])) { $txt .=" -- пропускаем "; continue; } + + + + + + //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла + if($autoQuantityAll>$formulaFact) { if($print==1) $txt .="
=-----выход из цикла"; 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 .="
=-----выход из цикла"; + break; } // выходим из цикла - задача выполнена + } + + } + + $ostatky=$formulaFact-$autoQuantityAll; + if(($formulaFact-$autoQuantityAll)>0) if($print==1) $txt .="
Остатки распределены между теми кто заказал но есть остатки $ostatky"; + + + + ////////////// + + $formulaFactForeach=$ostatky; + $autoQuantityAllNew=0; + if($print==1) $txt .="

Распределяем остатки

formulaFactForeach =$formulaFactForeach"; + $j=1; + for($kk=0;$kk<=$formulaFactForeach;$kk++) { + if($formulaFactForeach<=0) break; + if($print==1) $txt .="
++Цикл =$formulaFactForeach"; + foreach($massivStoreSortQuantity as $storeId =>$q) { + + if($print==1) $txt .="
$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 .="

================== +
Результат
"; + + foreach($autoQuantity as $q =>$s) { + if($print==1) $txt .="
".$storesArr[$q]." =>$s"; + } + */ + + if($print==1) $txt .="
Итого $autoQuantityAll шт."; + $array["auto"]=$autoQuantity; + $array["text"]=$txt; + $array["new"]=$autoQuantityNew; + + + return $array; + + + +} +echo"
Товары которые были заказны кустовыми но не пришли: было заказано "; +foreach($products_no as $productId => $cnt) echo"".$products[$productId]."=$cnt шт., "; + +echo'
показать товары которые не пришли'; + +echo'обновить данные'; + + + +echo'
+'; + +$head=""; +foreach($sortStore as $storeId) { + echo''; + $head .=''; +} +echo''; + +$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''.$head.''; $i=0; } + echo' + + + +'; + + + 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''; + + + + } + + + + $colspan=25; + + echo' + +'; + + + $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' + + + + +'; + + 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''; + + + } + + echo''; + } + + if(!empty($products_colors[$productId])) { + + echo' + + + +'; + + foreach($sortStore as $storeId) { + + echo''; + + + } + + echo''; + + } + + +//end colors + + + + } + + + +} + + +echo'
наименованиеприходсумма кустовыхостаток на складемин-ый лот деления шт.'.$storesAll[$storeId].''.$storesAll[$storeId].'
наименованиеприходсумма кустовыхостаток на складемин-ый лот деления шт.
'; + + +echo'

Излишки на складе после деления

+

Уходят на центральный склад. Минусовые деления не учитываются!

+ + + + + +'; +if (isset($ostatokReal)) { + arsort($ostatokReal); + foreach ($ostatokReal as $productId => $count) { + echo ' '; + + } +} +echo'
наименованиесотаток шт.
' . $products[$productId] . '' . $count . '
'; + + +//if(!empty($store_id)) echo''; + +$_SESSION["order_id"]=$OrderId; +$_CONFIG["jscss"]=' + + + +'; + + +include_once dirname(__DIR__, 2) . '/templates/bottom_light.php'; + diff --git a/erp24/views/shipment/index.php b/erp24/views/shipment/index.php index 9c2ece4..ffa5b3e 100755 --- a/erp24/views/shipment/index.php +++ b/erp24/views/shipment/index.php @@ -55,7 +55,7 @@ foreach($storeOrders as $row) { /view/?id=>старый интерфейс /view2/?id=>новый интерфейс /fields-data/?id= >новый интерфейс2 - /division/?id=>деление + >деление /purchase/?id=>цвета для кустовых при заказе /divisionPrint/?id=>деление - печать на складе -- 2.39.5