--- /dev/null
+<?php
+
+namespace yii_app\actions\bonus;
+
+use yii\base\Action;
+
+class SexAction extends Action
+{
+ public function run() {
+ return $this->controller->render('sex');
+ }
+}
\ No newline at end of file
'ajax-user-add-stop-list' => \yii_app\actions\bonus\AjaxUserAddStopListAction::class,
'ajax-user-remove-stop-list' => \yii_app\actions\bonus\AjaxUserRemoveStopListAction::class,
'ajax-bonus-remove' => \yii_app\actions\bonus\AjaxBonusRemoveAction::class,
+ 'sex' => \yii_app\actions\bonus\SexAction::class,
];
}
}
\ No newline at end of file
--- /dev/null
+<?php
+
+namespace app\controllers;
+
+use yii\web\Controller;
+
+class SalesChecksController extends Controller
+{
+ public function actionIndex() {
+ return $this->render('index');
+ }
+}
\ No newline at end of file
<?php
-declare(strict_types = 1);
namespace app\controllers;
-class ShipmentController extends \yii\web\Controller
-{
+use yii\web\Controller;
- public function actions()
- {
- return [
- 'index' => \yii_app\actions\shipment\IndexAction::class,
- 'add' => \yii_app\actions\shipment\AddAction::class,
- 'fields' => \yii_app\actions\shipment\FieldsAction::class,
- 'division' => \yii_app\actions\shipment\DivisionAction::class,
- 'ajax-division' => \yii_app\actions\shipment\AjaxDivisionAction::class,
- 'ajax-admin-online' => \yii_app\actions\shipment\AjaxAdminOnlineAction::class,
- 'fields-data2' => \yii_app\actions\shipment\FieldsData2Action::class,
- 'ajax-update-fields-data' => \yii_app\actions\shipment\AjaxUpdateFieldsDataAction::class,
- 'ajax-update-step' => \yii_app\actions\shipment\AjaxUpdateStepAction::class,
- 'ajax-edit-field-value' => \yii_app\actions\shipment\AjaxEditFieldValueAction::class,
- 'fields-data' => \yii_app\actions\shipment\FieldsDataAction::class,
- 'ajax-update-fields-data-test' => \yii_app\actions\shipment\AjaxUpdateFieldsDataTestAction::class,
- 'division-print' => \yii_app\actions\shipment\DivisionPrintAction::class,
- 'division-print-edit2' => \yii_app\actions\shipment\DivisionPrintEdit2Action::class,
- 'division-print-edit' => \yii_app\actions\shipment\DivisionPrintEditAction::class,
- 'set-division-priority' => \yii_app\actions\shipment\SetDivisionPriorityAction::class,
- 'store-products-fact' => \yii_app\actions\shipment\StoreProductsFactAction::class,
- 'store-products-fact-edit' => \yii_app\actions\shipment\StoreProductsFactEditAction::class,
- 'polnogramm' => \yii_app\actions\shipment\PolnogrammAction::class,
- 'store-planogram-logi' => \yii_app\actions\shipment\StorePlanogramLogiAction::class,
- 'write_off' => \yii_app\actions\shipment\WriteOffAction::class,
- ];
+class ShipmentController extends Controller
+{
+ public function actionIndex() {
+ return $this->render('index');
}
-
-}
+}
\ No newline at end of file
--- /dev/null
+<?php
+declare(strict_types = 1);
+
+namespace app\controllers;
+
+class ShipmentControllerOld extends \yii\web\Controller
+{
+
+ public function actions()
+ {
+ return [
+ 'index' => \yii_app\actions\shipment\IndexAction::class,
+ 'add' => \yii_app\actions\shipment\AddAction::class,
+ 'fields' => \yii_app\actions\shipment\FieldsAction::class,
+ 'division' => \yii_app\actions\shipment\DivisionAction::class,
+ 'ajax-division' => \yii_app\actions\shipment\AjaxDivisionAction::class,
+ 'ajax-admin-online' => \yii_app\actions\shipment\AjaxAdminOnlineAction::class,
+ 'fields-data2' => \yii_app\actions\shipment\FieldsData2Action::class,
+ 'ajax-update-fields-data' => \yii_app\actions\shipment\AjaxUpdateFieldsDataAction::class,
+ 'ajax-update-step' => \yii_app\actions\shipment\AjaxUpdateStepAction::class,
+ 'ajax-edit-field-value' => \yii_app\actions\shipment\AjaxEditFieldValueAction::class,
+ 'fields-data' => \yii_app\actions\shipment\FieldsDataAction::class,
+ 'ajax-update-fields-data-test' => \yii_app\actions\shipment\AjaxUpdateFieldsDataTestAction::class,
+ 'division-print' => \yii_app\actions\shipment\DivisionPrintAction::class,
+ 'division-print-edit2' => \yii_app\actions\shipment\DivisionPrintEdit2Action::class,
+ 'division-print-edit' => \yii_app\actions\shipment\DivisionPrintEditAction::class,
+ 'set-division-priority' => \yii_app\actions\shipment\SetDivisionPriorityAction::class,
+ 'store-products-fact' => \yii_app\actions\shipment\StoreProductsFactAction::class,
+ 'store-products-fact-edit' => \yii_app\actions\shipment\StoreProductsFactEditAction::class,
+ 'polnogramm' => \yii_app\actions\shipment\PolnogrammAction::class,
+ 'store-planogram-logi' => \yii_app\actions\shipment\StorePlanogramLogiAction::class,
+ 'write_off' => \yii_app\actions\shipment\WriteOffAction::class,
+ ];
+ }
+
+}
-<?php
+<?
function deal($deal,$field_tip='lead') {
global $arr_type, $db ;
-<?php
+<?
function func_import_json($value,$tip,$max="") {
-<?php
+<?
global $mysqli;
-<?php
+<?
// форматированно выводит ошибки при добавлении данных через формы
-//if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
+//if (get_magic_quotes_gpc()) {
// $el=stripslashes($el);
//$el = str_replace("\\","/",$el);
//$el = str_replace("\/","/",$el);
}
}
- $output .= $info;
+ @$output .= $info;
// Определяем строку запроса
$query_string_sep = (strpos($this->baseURL, '?') === FALSE) ? '?p=' : '&p=';
$this->baseURL = $this->baseURL.$query_string_sep;
// Определяем текущую страницу
- $this->currentPage = $_GET[$this->queryStringSegment];
+ $this->currentPage = @$_GET[$this->queryStringSegment];
if (!is_numeric($this->currentPage) || $this->currentPage == 0){
$this->currentPage = 1;
*/
}
-// функция генерирует GUID с префиксом и берет дату текущую и рандом 0000d701-7914-4640-8172-bc1f8c969ad8
-function create_guid_my() {
- $str= "er".date("ymd")."-".date("Hi")."-".date("hs")."-".bin2hex(random_bytes(2))."-".bin2hex(random_bytes(6))."";
+// функция генерирует GUID с префиксом и берет дату текущую и рандом 0000d701-7914-4640-8172-bc1f8c969ad8
+function create_guid_my_old($prefix="01",$id_db="") {
+ $str= "$prefix".date("ym")."-".date("di")."-".date("hs")."-".bin2hex(random_bytes(2))."-".bin2hex(random_bytes(6))."";
+ //abcdef-7b73-42c0-0001-000000001123
+ return strtolower($str);
+}
+
+
+/* $prefix
+01 - создание чека
+02 - возврат чека
+03 - add накладной
+04 - add перемещение
+06 - списание
+$id_db - уникальный номер заказа или номер AUTOINCRIMENT документа из БД
+*/
+function create_guid_my($prefix="01",$id_db="") {
+ if(empty($id_db)) $id_db=rand(0,99999999);
+ $id_db=100000000000+$id_db;
+ $str= "$prefix".date("Ym")."-".date("di")."-".date("hs")."-".bin2hex(random_bytes(2))."-".$id_db."";
return strtolower($str);
-}
\ No newline at end of file
+}
+
+
-<?php
+<?
$store_arr["Ванеева 181"]=1;
$store_arr["Белинка"]=2;
--- /dev/null
+<?
+class Cache
+{
+ public static $enable = true;
+ public static $path = '/cache';
+ private static $keys = array();
+
+ /**
+ * Получение данных из кэша.
+ */
+ public static function get($name)
+ {
+ if (self::$enable) {
+ $file = __DIR__ . self::$path . '/' . $name . '.tmp';
+ if (file_exists($file)) {
+ return file_get_contents($file);
+ } else {
+ self::$keys[] = $name;
+ return false;
+ }
+ } else {
+ return '';
+ }
+ }
+
+ /**
+ * Отправка данных в кэш.
+ */
+ public static function set($content)
+ {
+ if (self::$enable) {
+ $name = array_pop(self::$keys);
+ $dir = __DIR__ . self::$path . '/';
+ if (!is_dir($dir)) {
+ @mkdir($dir, 0777, true);
+ }
+ file_put_contents($dir . '/' . $name . '.tmp', $content);
+ }
+
+ return $content;
+ }
+
+ /**
+ * Начало кэширования фрагмента.
+ */
+ public static function begin($name)
+ {
+ if ($content = self::get($name)) {
+ echo $content;
+ return false;
+ } else {
+ ob_start();
+ return true;
+ }
+ }
+
+ /**
+ * Завершение кэширования фрагмента.
+ */
+ public static function end()
+ {
+ echo self::set(ob_get_clean());
+ }
+
+ /**
+ * Очистка кэша.
+ */
+ public static function clear()
+ {
+ $dir = __DIR__ . self::$path;
+ foreach (glob($dir . '/*') as $file) {
+ if (is_file($file)) {
+ unlink($file);
+ }
+ }
+ }
+}
+
-<?php
+<?
// обновляем заказ если его нет в системе вносим - заказ формируем из амо
function create_order_from_amo($amo_id="") {
global $db, $db2,$ACCESS_TOKEN;
if(!empty($amo_id)) {
-include_once("inc/db2.php");
+include_once("inc/db.php");
if(empty($ACCESS_TOKEN)) include_once"/var/www/www-root/data/www/amo.bazacvetov24.ru/amo/amo_inc.php";
echo"<br>НЕ удаляем cтарую информацию id=". $row["id"] ."";
$summ=0;
+/*
$data2 = $db2::getRows("SELECT * FROM site_order_items_sostav WHERE tip='1' AND guid!='' AND lid_id=?",[$row["id"]]);
foreach ($data2 as $row2) {
$items2[]=array("product_id"=>$row2["guid"], "seller_id"=>$seller_id, "quantity"=>$row2["kol"], "price"=>$row2["price"], "discount"=>0); //,"color"=>$row2["color_id"]
$summ=$summ+$row2["price"]*$row2["kol"];
}
-
+*/
$param=array();
$upper=array("id","price","pay","delivery","store_id","payment_type_id","status_id","florist_id","dostavka_povtor_tip");
foreach($upper as $pole) $param[$pole]=$row[$pole];
$param["price"]=$summ;
//$param["istochnik_id"]=1;
//$uopdet="UPDATE orders_amo SET $sql0 WHERE id=:id ";
-$db2::update("orders_amo", $where="id=:id LIMIT 1", $param);
+$db::update("orders_amo", $where="id=:id LIMIT 1", $param);
mess("Обновили заказ ");
-
-$sid=$db2::getValue("SELECT sid FROM site_orders WHERE id=? LIMIT 1",[$row["id"]]);
+/*
+$sid=$db::getValue("SELECT sid FROM site_orders WHERE id=? LIMIT 1",[$row["id"]]);
//echo" cid=$sid";
$lid_id=$row["id"];
}
///////
-
+*/
//создаем чек по заказу
function create_checks($lid_id){
-global $db;
+global $db,$db2;
if(!empty($lid_id)) {
+
+$lid_id=preg_replace('/[^0-9]/', '',$lid_id);
+
// пароверяем сделки на самовывоз и передано курьеру ставим статус положено в папку
$data = $db::getRows("SELECT * FROM orders_amo WHERE delivery!='Самовывоз' AND delivery!='Доставка из магазина' AND id=? LIMIT 1",[$lid_id]);
$seller_id="3d8f7db1-8d67-11eb-bf83-b42e991aff6c"; // продавец
$store_id="dbd70103-2c7b-11e9-9b87-c85b76f0e893"; // аэродромная
$kkm_id="d0d6c742-4db8-11ea-b917-0018f353130f"; //Мочалина Г. М. ИП(Центральный склад) ??
-$payments_type_id="5ee4c07a-36f5-11ec-8900-fc349715dc38"; // оплата на сайте - старый 5ee4c07a-36f5-11ec-8900-fc349715dc38
+$payments_type_id="cd891514-855f-11ea-a625-40618658b055"; // оплата на сайте - старый cd891514-855f-11ea-a625-40618658b055
// Оплата на карту ??
// оплата наличными курьеру ???
$terminal_id="7909401c-703b-11ea-8b4b-0018f353130f"; //Сбербанк ПАО/Мочалина Г. М. ИП 7909401c-703b-11ea-8b4b-0018f353130f
$payments_array=[
- "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f" ), // 09 Доставка Букетов
+ "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f" ), // 09 Доставка Букетов
"Перевод на карту Сбербанк"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f" ), //, "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" //payments_type_id = наличные. kkm_id 09 Доставка
"Наличными курьеру (+100 руб.)"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f" ),
- "PayPal"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" )
+ "PayPal"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" )
];
//echo" Вид оплаты ".$row["payment_type_id"]." ".$row["pay"]." ".$row["pay_text"]." florist_id=".$row["florist_id"]." seller_id =$seller_id ";
// ставим в соответствие вид оплаты
-
+if(empty($seller_id)) $seller_id="00000000-0000-0000-0000-000000000000";
$date = $db::getValue("SELECT UNIX_TIMESTAMP(date) as date FROM create_checks WHERE order_id=? AND type='Продажа' order by date desc LIMIT 1",[$lid_id]);
$summ=0;
$items2=array(); $payments2=array();
+/*
$data2 = $db::getRows("SELECT * FROM site_order_items_sostav WHERE tip='1' AND guid!='' AND lid_id=?",[$row["id"]]);
foreach ($data2 as $row2) {
$items2[]=array("product_id"=>$row2["guid"], "seller_id"=>$seller_id, "quantity"=>$row2["kol"], "price"=>$row2["price"], "discount"=>0);
$summ=$summ+$row2["price"]*$row2["kol"];
}
+
+
+*/
+
+$products_json = $db::getValue("SELECT products_json FROM orders_amo WHERE amo_id=? order by created_at DESC LIMIT 1 ",[$lid_id]);
+$products_json = json_decode($products_json, true);
+
+
+print_r($products_json);
+
+exit();
+
+
+
+
if(empty($items2)) $items2[]=array("seller_id"=>$seller_id, "product_id"=>"bdd17583-09d8-11e5-bd74-1c6f659fb563", "quantity"=>1, "price"=>1); //, "discount"=>0
if(empty($summ)) $summ=1;
$payments2 = json_encode($payments2, JSON_UNESCAPED_UNICODE);
$items2 = json_encode($items2, JSON_UNESCAPED_UNICODE);
+try{
$db::sql("INSERT IGNORE INTO create_checks (date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (NOW(),?,?,?,?,?,?,?)",
[$kkm_id, $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]);
+}
+catch (Exception $e0) {
+ echo 'Выброшено исключение: ', $e0->getMessage(), "\n";
+ file_put_contents('modul/orders/error_create_order.txt', PHP_EOL . $e0->getMessage(), FILE_APPEND);
+}
+
+
+
$param["seller_id"]=$data["seller_id"];
$param["store_id"]=$data["store_id"];
$param["order_id"]=$data["order_id"];
- $param["check_id"]=create_guid();
+ $param["check_id"]=create_guid_my("11","$id");
$param["sales_check"]=$data["check_id"];
$param["items"]=$data["items"];
- $param["payments"]=$data["payments"];
+ $param["payments"]=$data["payments"];
+
+ if(!empty($param["sales_check"])) {
$sql="INSERT INTO create_checks (`date`,`status`,type,kkm_id,seller_id,store_id,order_id, check_id,sales_check,items, payments)
VALUES (NOW(), '0', 'Возврат',:kkm_id,:seller_id,:store_id,:order_id,:check_id,:sales_check,:items,:payments)";
- // echo $sql;
+ echo $sql;
$db::sql($sql,$param);
mess("Чек на возврат создан");
+ } else echo("Чек на возврат не создан так как нет GUID чека продажи");
}
//создаем чек по заказу
function create_check($lid_id){
global $db,$db2;
-if(!empty($lid_id)) {
+if(!empty($lid_id)) {
+$lid_id=preg_replace('/[^0-9]/', '',$lid_id);
// пароверяем сделки на самовывоз и передано курьеру ставим статус положено в папку
$seller_id="3d8f7db1-8d67-11eb-bf83-b42e991aff6c"; // продавец
$store_id="dbd70103-2c7b-11e9-9b87-c85b76f0e893"; // аэродромная
$kkm_id="d0d6c742-4db8-11ea-b917-0018f353130f"; //Мочалина Г. М. ИП(Центральный склад) ??
-$payments_type_id="5ee4c07a-36f5-11ec-8900-fc349715dc38"; // оплата на сайте - старый 5ee4c07a-36f5-11ec-8900-fc349715dc38
+$payments_type_id="cd891514-855f-11ea-a625-40618658b055"; // оплата на сайте - старый cd891514-855f-11ea-a625-40618658b055
// Оплата на карту ??
// оплата наличными курьеру ???
$terminal_id="7909401c-703b-11ea-8b4b-0018f353130f"; //Сбербанк ПАО/Мочалина Г. М. ИП 7909401c-703b-11ea-8b4b-0018f353130f
$payments_array=[
- "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f" ), // 09 Доставка Букетов
+ "Оплата на сайте (Visa, Mastercard, Мир)"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f", "terminal_id"=>"7909401c-703b-11ea-8b4b-0018f353130f" ), // 09 Доставка Букетов
"Перевод на карту Сбербанк"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f" ), //, "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" //payments_type_id = наличные. kkm_id 09 Доставка
"Наличными курьеру (+100 руб.)"=>array("payments_type_id" =>"a69ea4d1-feff-11e8-8ae7-1c6f659fb563", "kkm_id"=>"d0d6c742-4db8-11ea-b917-0018f353130f" ),
- "PayPal"=>array("payments_type_id" =>"5ee4c07a-36f5-11ec-8900-fc349715dc38", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" )
+ "PayPal"=>array("payments_type_id" =>"cd891514-855f-11ea-a625-40618658b055", "kkm_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38", "terminal_id"=>"a22aeb16-1c6a-11ec-88f6-fc349715dc38" )
];
-$row = $db2::getRow("SELECT * FROM orders_amo WHERE id=? LIMIT 1",[$lid_id]);
+$row = $db::getRow("SELECT * FROM orders_amo WHERE id=? LIMIT 1",[$lid_id]);
if(!empty($row) and !in_array($row["delivery"],array("Самовывоз","Доставка из магазина"))) {
if(!empty($payments_array[$row["payment_type_id"]])) {
$payments_type_id=$payments_array[$row["payment_type_id"]]["payments_type_id"];
-
-
$summ=0;
$items2=array(); $payments2=array();
$empty_guid=0;
$tov=0;
+
+/*
$data2 = $db2::getRows("SELECT * FROM site_order_items_sostav WHERE tip='1' AND guid!='' AND lid_id=?",[$row["id"]]);
foreach ($data2 as $row2) {
if(empty($row2["guid"])) $empty_guid=1;
}
}
+ */
+
+
+
+
+$products_json = $db::getValue("SELECT products_json FROM orders_amo WHERE amo_id=? order by created_at DESC LIMIT 1 ",[$lid_id]);
+$products_json = json_decode($products_json, true);
+$tov=0;
+
+/*
+
+[{"id":8415,"name":"Букет цветов Красный глянец","url":"https://bazacvetov24.ru/flowers/buket-tsvetov-krasniy-glyanets/","selection":"","count":1,"items":[{"id":786,"name":"Гиперикум","guid":"56c5f37b-0f3b-11e5-bdc0-1c6f659fb563","price":269,"quantity":"2.00","color_id":null},{"id":457,"name":"Альстромерия","guid":"e88a4b1a-11a0-11e5-a4cf-1c6f659fb563","price":209,"quantity":"3.00","color_id":null},{"id":759,"name":"Хризантема Сантини","guid":"b469db90-37fb-11e8-bc38-1c6f659fb563","price":199,"quantity":"2.00","color_id":null},{"id":787,"name":"розы 50 эквадор","guid":"bdd1757d-09d8-11e5-bd74-1c6f659fb563","price":199,"quantity":"5.00","color_id":null},{"id":792,"name":"пленка лист","guid":"440276d6-56e3-11e9-82cb-0018f353130f","price":50,"quantity":"4.00","color_id":null},{"id":788,"name":"лента атласная","guid":"bca06e47-0dff-11e7-959c-1c6f659fb563","price":20,"quantity":"2.00","color_id":null},{"id":805,"name":"Сборка букета без упак","guid":"bca06e43-0dff-11e7-959c-1c6f659fb563","price":50,"quantity":"2.00","color_id":null},{"id":833,"name":"Илекс","guid":"b546566a-98ed-11e5-81bd-1c6f659fb563","price":550,"quantity":"1.00","color_id":null},{"id":8020,"name":"Кермек (м.пучок)","guid":"e3ec2258-4310-11ed-9336-b42e991aff6c","price":1000,"quantity":"0.10","color_id":null}]}]
+*/
+$summ=0;
+foreach($products_json as $array){
+ echo"<br><b>Комплект ".$array["name"]."</b> ";
+
+ foreach($array["items"] as $row){
+ $tov++;
+ echo"<br>".$array["name"]." кол-во".$row["quantity"]." цена ".$row["price"];
+ $items2[]=array("product_id"=>$row["guid"],"seller_id"=>$seller_id, "quantity"=>$row["quantity"], "price"=>$row["price"]);
+ $summ = $summ + $row["price"] * $row["quantity"];
+ }
+
+
+}
+
+//print_r($products_json);
+
+//exit();
+
+
+
+
+
if(empty($items2)) $items2[]=array("seller_id"=>$seller_id, "product_id"=>"bdd17583-09d8-11e5-bd74-1c6f659fb563", "quantity"=>1, "price"=>1); //, "discount"=>0
if(empty($summ)) $summ=1;
elseif(empty($empty_guid)) {
if(!empty($_POST["create_check"]) and $_POST["create_check"]==2) {
-$check_id=create_guid();
+$check_id=create_guid_my("01","$lid_id");
$db::sql("INSERT IGNORE INTO create_checks (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (?,NOW(),?,?,?,?,?,?,?)",[$check_id,$kkm_id, $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]);
//$db::sql("INSERT IGNORE INTO create_checks2 (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (?,NOW(),?,?,?,?,?,?,?)",[$check_id,$kkm_id, $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]);
//$db2::sql("INSERT IGNORE INTO create_checks (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES (?,NOW(),?,?,?,?,?,?,?)",[$check_id,$kkm_id, $seller_id ,$store_id, "Продажа", $lid_id, $items2, $payments2 ]);
-mess("Чек добавлен");
+mess("Чек добавлен Сумма чека $summ ");
}
//echo"INSERT IGNORE INTO create_checks (check_id,date,kkm_id,seller_id, store_id, type, order_id,items,payments) VALUES ('$check_id',NOW(), '$kkm_id', '$seller_id' ,'$store_id', 'Продажа', '$lid_id','$items2', '$payments2' )";
-<?php
+<?
-function import_cloudpayments($date="") {
+function import_cloudpayments($date="",$setka="bazacvetov24") {
global $db;
try{
if(empty($date)) $date=date("Y-m-d");
+
+if(!empty($_REQUEST["date"])) $date=htmlentities($_REQUEST["date"]);
+
+// если сетка база цветов
$token_pass="pk_70415dd276d150a2e00b9d89886da:4a0ce0dcdca92f59efaac8369b0f1693";
+if($setka=="region") $token_pass="pk_038cc12a228cec115e94158a5f4b4:bb580408fbc387d1455041c8ce2133fc";
+
$arrs["Date"]=$date;
//$arrs["Date"]="2022-03-07";
$arrs["TimeZone"]="MSK";
try{
$z="INSERT IGNORE INTO orders_pays SET $set ";
- echo "<br><br>".$z;
+ echo "<br>+";
$db::sql($z,$param);
}
catch (Exception $e1) {
//exit();
// write new timestamp file compress_timestamp.php for php execution code
-$infofile='<?php '.PHP_EOL;
+$infofile='<?'.PHP_EOL;
$infofile.='$compress_stamp='.$unix_timestamp.';'.PHP_EOL;
$infofile.='?>'.PHP_EOL;
file_put_contents ('compress_timestamp.php',$infofile,LOCK_EX); //file loaded by ThreeColTemplate1.php to get unique stamp id
-<?php
+<?
$compress_stamp=1646055591;
?>
-<?php
+<?
$_CONFIG_SITE["id"]="100";
$CONFIG_SETKA["id"]="100";
$CONFIG_SETKA["ftp_user_from"]="";
$_CONFIG_SITE["ftp_pass_from"]="";
$CONFIG_SETKA["ftp_pass_from"]="";
-$_CONFIG_SITE["mysql_host"]=getenv('MODE') === 'dev' ? 'db' : '127.0.0.1';
+$_CONFIG_SITE["mysql_host"]="127.0.0.1";
$_CONFIG_SITE["mysql_db"]="erp24";
$_CONFIG_SITE["mysql_user"]="bazacvetov24";
$_CONFIG_SITE["mysql_pass"]="JVJruro_Xdg456o3ir";
--- /dev/null
+<?
+
+
+class DB2
+{
+protected $sql_cnt = 0;
+protected $config2 = '';
+ const DB_PREFIX = '';
+ static private $db2;
+ protected static $instance2 = null;
+
+ public function __construct(array $config2 = null){
+
+ if (null !== $config2) { // от return в конструкторах лично я не в восторге
+ $properties = get_class_vars(static::class); // см. комментарий ниже по тексту ответа
+ foreach ( $properties as $property => $value ) {
+ if ( isset( $config2[ $property ] ) ) {
+ $this->$property = $config2[ $property ];
+ }
+ }
+ }
+
+
+
+ if (self::$instance2 === null){
+ try {
+ self::$db2 = new PDO(
+ 'mysql:host='.$config2['DB_HOST'].';dbname='.$config2['DB_NAME'],
+ $config2['DB_USER'],
+ $config2['DB_PASSWORD'],
+ $options = [
+ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+ PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES ".$config2['CHARSET']
+ ]
+ );
+ } catch (PDOException $e) {
+ throw new Exception ($e->getMessage());
+ }
+ }
+ return self::$instance2;
+ }
+
+ /**
+ * @param $stmt
+ * @return PDOStatement
+ */
+ public static function query($stmt) {
+
+ return self::$db2->query($stmt);
+ }
+
+ /**
+ * @param $stmt
+ * @return PDOStatement
+ */
+ public static function prepare($stmt) {
+ return self::$db2->prepare($stmt);
+ }
+
+ /**
+ * @param $query
+ * @return int
+ */
+ static public function exec($query) {
+ return self::$db2->exec($query);
+ }
+
+ /**
+ * @return string
+ */
+ static public function lastInsertId() {
+ return self::$db2->lastInsertId();
+ }
+
+ /**
+ * @param $query
+ * @param array $args
+ * @return PDOStatement
+ * @throws Exception
+ */
+ public static function run($query, $args = []) {
+ try{
+ if (!$args) {
+ return self::query($query);
+ }
+ $stmt = self::prepare($query);
+ $stmt->execute($args);
+ return $stmt;
+ } catch (PDOException $e) {
+ throw new Exception($e->getMessage());
+ }
+ }
+
+ /**
+ * @param $query
+ * @param array $args
+ * @return mixed
+ */
+ public static function getRow($query, $args = []) {
+ $GLOBALS["sql_cnt"]++;
+ return self::run($query, $args)->fetch();
+ }
+
+ /**
+ * @param $query
+ * @param array $args
+ * @return array
+ */
+ public static function getRows($query, $args = []) {
+ $GLOBALS["sql_cnt"]++;
+ return self::run($query, $args)->fetchAll();
+ }
+
+ /**
+ * @param $query
+ * @param array $args
+ * @return mixed
+ */
+ public static function getValue($query, $args = []) {
+ $GLOBALS["sql_cnt"]++;
+ $result = self::getRow($query, $args);
+ if (!empty($result)) {
+ $result = array_shift($result);
+ }
+ return $result;
+ }
+
+ /**
+ * @param $query
+ * @param array $args
+ * @return array
+ */
+ public static function getColumn($query, $args = []) {
+ $GLOBALS["sql_cnt"]++;
+ return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);
+ }
+
+ public static function getCol($query, $args = []) {
+ $GLOBALS["sql_cnt"]++;
+ return self::run($query, $args)->fetch(PDO::FETCH_NAMED);
+ }
+
+
+
+ public static function sql($query, $args = [])
+ { $GLOBALS["sql_cnt"]++;
+ self::run($query, $args);
+ }
+
+
+ public static function update($table, $where="id=:id LIMIT 1", $args = [])
+ {
+ $query="UPDATE $table SET ";
+ $i=0;
+ $param_sql=array();
+ foreach($args as $pole =>$val) {
+ if($i!=0) $query .=",";
+ $query .=" `$pole`=:$pole";
+ $param_sql[$pole]=$val;
+ $i++;
+ }
+ $query .=" WHERE $where";
+ self::run($query, $param_sql);
+ }
+
+
+
+}
+
+global $db,$config2;
+
+$config2 = [
+ 'DB_HOST' => '127.0.0.1',
+ 'DB_USER' => 'erp24_api_test',
+ 'DB_PASSWORD' => 'yX2hF4mO2omY7x',
+ 'DB_NAME' =>'erp24_api_test',
+ 'CHARSET' => 'utf8',
+];
+
+
+$db = new DB2($config2);
+
+
-<?php
+<?
/*
define('DB_HOST', '127.0.0.1');
define('DB_NAME', 'erp');
if (self::$instance === null){
try {
self::$db = new PDO(
- 'mysql:host='.getenv('DB_HOST').';dbname='.$config['DB_NAME'],
+ 'mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_NAME'],
$config['DB_USER'],
$config['DB_PASSWORD'],
$options = [
* @return mixed
*/
public static function getRow($query, $args = []) {
- $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+ @$GLOBALS["sql_cnt"]++;
return self::run($query, $args)->fetch();
}
* @return array
*/
public static function getRows($query, $args = []) {
- $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+ @$GLOBALS["sql_cnt"]++;
return self::run($query, $args)->fetchAll();
}
* @return mixed
*/
public static function getValue($query, $args = []) {
- $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+ @$GLOBALS["sql_cnt"]++;
$result = self::getRow($query, $args);
if (!empty($result)) {
$result = array_shift($result);
* @return array
*/
public static function getColumn($query, $args = []) {
- $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+ @$GLOBALS["sql_cnt"]++;
return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);
}
public static function getCol($query, $args = []) {
- $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+ $GLOBALS["sql_cnt"]++;
return self::run($query, $args)->fetch(PDO::FETCH_NAMED);
}
public static function sql($query, $args = [])
- {
- $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;
+ { $GLOBALS["sql_cnt"]++;
self::run($query, $args);
}
$i++;
}
$query .=" WHERE $where";
+ $GLOBALS["sql_cnt"]++;
self::run($query, $param_sql);
}
+ public static function insert($table, $args = [])
+ {
+ $query="INSERT INTO $table ";
+ $i=0;
+ $values=""; $fields="";
+ $param_sql=array();
+ foreach($args as $pole =>$val) {
+ if($i!=0) { $values .=","; $fields .=","; }
+ $values .=":$pole";
+ $fields .=" `$pole` ";
+ $param_sql[$pole]=$val;
+ $i++;
+ }
+ $GLOBALS["sql_cnt"]++;
+ $query .=" ($fields) VALUES ($values)";
+ try {
+ self::run($query, $param_sql);
+ } catch (Exception $e) {
+ echo '<br>Выброшено исключение: ', $e->getMessage(), "\n";
+ }
+ }
+
+
public static function mapping($query, $args = [])
{
$ret_arr=array();
$data= self::run($query, $args)->fetchAll();
- $GLOBALS["sql_cnt"] = ($GLOBALS["sql_cnt"] ?? 0) + 1;;
+ @$GLOBALS["sql_cnt"]++;
foreach($data as $row) $ret_arr[$row["id"]]=$row["name"];
return $ret_arr;
}
global $db,$config;
$config = [
- 'DB_HOST' => getenv('MODE') === 'dev' ? 'db' : '127.0.0.1',
+ 'DB_HOST' => getenv('MODE') === 'dev' ? 'db-yii_erp24' : '127.0.0.1',
'DB_USER' => $_CONFIG_SITE["mysql_user"],
'DB_PASSWORD' => $_CONFIG_SITE["mysql_pass"],
'DB_NAME' =>$_CONFIG_SITE["mysql_db"],
-<?php
+<?
class DB2
global $db2,$config2;
$config2 = [
- 'DB_HOST' => 'db-yii_erp24', // '127.0.0.1',
+ 'DB_HOST' => '127.0.0.1',
'DB_USER' => 'bazacvetov24',
- 'DB_PASSWORD' => 'JVJruro_Xdg456o3ir',
- 'DB_NAME' => 'erp24', // 'bazacvetov24',
+ 'DB_PASSWORD' => 'JVJruro_Xdg456o3ir',
+ 'DB_NAME' =>'bazacvetov24',
'CHARSET' => 'utf8',
];
-<?php
+<?
$config = [
'DB_HOST' => '127.0.0.1',
'DB_USER' => 'bazacvetov24',
-<?php
+<?
ob_start();
?>
<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0" />
-<title><?php if(empty($_CRM_TITLE)) echo"ERP BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+<title><? if(empty($_CRM_TITLE)) echo"ERP BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/font-icons/font-awesome/css/font-awesome.min.css"><link rel="stylesheet" href="/assets/js/jquery-ui/css/no-theme/jquery-ui-1.10.3.custom.min.css">
<link rel="stylesheet" href="/assets/css/font-icons/entypo/css/entypo.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic">
<link rel="stylesheet" href="/assets/css/bootstrap.css"><link rel="stylesheet" href="/assets/css/neon-core.css?v=1"><link rel="stylesheet" href="/assets/css/neon-theme.css"><link rel="stylesheet" href="/assets/css/neon-forms.css?v1"><link rel="stylesheet" href="/assets/css/custom.css">
-<?php
+<?
if(isset($CONFIG_SETKA["crm_color"])) $stl=$CONFIG_SETKA["crm_color"];
?><link href="/js/jquery-ui/jquery-ui.css" rel="stylesheet"><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="/js/jquery-ui/jquery-ui.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.min.js"></script>
<base href="https://<?=$_CONFIG_SITE["name_site"]?>/"/>
-</head><?php
+</head><?
if(!empty($_SESSION["admin_id"])) {
<img src="/i/logo_sm.png" height="20" alt="" />
</a>
</div>
-<?php
+<?
$manager_id=(int)$_SESSION['manager_id'];
$admin_id=(int)$_SESSION['admin_id'];
-
+if(0) {
if(!empty($CONFIG_SETKA["crm_color"])) {
}
-
+}
//echo'<script src="js/cache/topmenu_'.$admin_id.'_'.$light.'.js?v='.$t.'"></script>';
/* <!-- add class "multiple-expanded" to allow multiple submenus to open -->
<!-- class "auto-inherit-active-class" will automatically add "active" class for parent elements who are marked already with class "active" -->
- <!-- Search Bar -->*/
-?>
-<ul id="main-menu2" class="main-menu navbar-nav"></ul>
+ <!-- Search Bar --> <ul id="main-menu2" class="main-menu navbar-nav"></ul> */
+?>
+<div id="main_menu_id"/>
+
+</div>
+<script src="/yii_app/js/site/get_menu.js?v=1679062374"></script>
+
</div>
</header>
<?
if(!empty($_REQUEST["zakaz_nomer"])) { $zakaz_nomer=insert_mysql($_REQUEST["zakaz_nomer"]);}
-echo'<form method=post action="zakaz.php?go=zakaz_show">
+echo'<form method=post action="">
<input placeholder="Фамилия" type=text name=fio value="'.$fio.'">
<input placeholder="Номер заказа" type=text name=zakaz_nomer value="'.$zakaz_nomer.'"></td>
<input type=text placeholder="Телефон" name=phone value="'.$phone.'" >
-<?php
+<?
function crm_menu($time_cache=3200) {
global $light,$_CONFIG_SITE,$CONFIG_SETKA,$db;
ob_start();
?>
<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0" />
-<title><?php if(empty($_CRM_TITLE)) echo"CRM BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
+<title><? if(empty($_CRM_TITLE)) echo"CRM BioWork"; else echo $_CRM_TITLE; ?></title><link rel="stylesheet" href="/assets/css/css.css"><link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="/assets/css/font-icons/font-awesome/css/font-awesome.min.css"><link rel="stylesheet" href="/assets/js/jquery-ui/css/no-theme/jquery-ui-1.10.3.custom.min.css">
<link rel="stylesheet" href="/assets/css/font-icons/entypo/css/entypo.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic">
<link rel="stylesheet" href="/assets/css/bootstrap.css"><link rel="stylesheet" href="/assets/css/neon-core.css?v=1"><link rel="stylesheet" href="/assets/css/neon-theme.css"><link rel="stylesheet" href="/assets/css/neon-forms.css?v1"><link rel="stylesheet" href="/assets/css/custom.css">
-<?php
+<?
if(isset($CONFIG_SETKA["crm_color"])) $stl=$CONFIG_SETKA["crm_color"];
if(!empty($stl)) echo"<link rel=\"stylesheet\" href=\"/assets/css/skins/$stl.css\">";
echo'<link rel="stylesheet" href="/assets/css/status.css?'.$csst.'">';
?><link href="/js/jquery-ui/jquery-ui.css" rel="stylesheet"><script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script><script src="/js/jquery-ui/jquery-ui.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.form/4.2.2/jquery.form.min.js"></script>
<base href="https://<?=$_CONFIG_SITE["name_site"]?>/"/>
-</head><?php
+</head><?
if(!empty($_SESSION["admin_id"])) {
$db::sql("UPDATE `admin` SET lasttime=NOW() WHERE `id` = :id LIMIT 1", ['id' => $_SESSION["admin_id"]]);
}
<img src="/i/logo_sm.png" height="20" alt="" />
</a>
</div>
-<?php
+<?
$manager_id=(int)$_SESSION['manager_id'];
$admin_id=(int)$_SESSION['admin_id'];
-crm_menu(10);
+//crm_menu(10);
//echo'<script src="js/cache/topmenu_'.$admin_id.'_'.$light.'.js?v='.$t.'"></script>';
/* <!-- add class "multiple-expanded" to allow multiple submenus to open -->
<!-- class "auto-inherit-active-class" will automatically add "active" class for parent elements who are marked already with class "active" -->
- <!-- Search Bar -->*/
+ <!-- Search Bar --><ul id="main-menu2" class="main-menu navbar-nav"></ul>*/
?>
-<ul id="main-menu2" class="main-menu navbar-nav"></ul>
+<div id="main_menu_id"/>
+
</div>
+<script src="/yii_app/js/site/get_menu.js?v=1679062374"></script>
</header>
-<?php
+<?
/*<div class="sidebar-menu">
echo'<!-- Footer -->
-<footer class="main"> '.$modul.' '.$act.' <span class="text-left btn btn-lg" onclick="history.go(-1);return false;">Назад</span>
+<footer class="main"> + '.$modul.' '.$act.' <span class="text-left btn btn-lg" onclick="history.go(-1);return false;">Назад</span>
<span class="text-right" style="font-size:1.2rem;"><i><a href="#" data-toggle="modal" data-target="#modal-big" onclick="showAjaxModal();return false;">'.$tm.'</a></i></span>
</footer></div>
<style>.modal {overflow-y: auto;}
.modal-open { overflow: auto;}</style>
-<?php
+<?
<?php
-
-use yii\helpers\ArrayHelper;
-use yii_app\services\SupportService;
-use yii_app\records\StoreOrdersFieldsData;
-use yii_app\records\AdminGroup;
-use yii_app\records\Products1c;
-use yii_app\records\ShipmentProviders;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrdersFieldsProperty;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StoreOrders;
-use yii_app\records\Products1cOptions;
-use yii\db\Expression;
-use yii_app\records\ExportImportTable;
-use yii_app\records\StoreOrderStatus;
-use yii_app\records\ProductsClass;
-use yii_app\records\Balances;
-use yii_app\records\StorePlanogram;
-use yii_app\records\StoreProductsFact;
-use yii_app\records\Sales;
-use yii_app\records\WriteOffs;
-use yii_app\records\StoreOrdersItem;
-use yii_app\records\StoreOrdersPrices;
-use yii_app\records\StoreOrdersColors;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
global $products, $fieldsRows, $ProductsOptions, $FiledsDataArray, $fieldsPropertyArray,$date_start_sale, $date_start_division, $order_date_add,
-$whereInProductsId, $whereInProductsIdArr, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll;
-
+$whereInProductsId, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll, $orderCityId, $prices,
+$orderStoresArrayRelation, // массив с гуидами магазинов закупки по которым считаем статистику,
+$orderStoresArrayRelation_in // SQL условие для выборки по магазинам IN('store_id')
+, $productGroupArray
+;
+
$fieldsPropertyArray=[]; $FiledsData=[]; $FiledsDataArray=[]; $fieldsPropertyArray=[]; $DataFieldStats=[]; $productsColorsArray=[];
$k=0;
$whereGuid="";
foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
- if (!empty($guid)) {
- if ($k!=0) {
- $whereGuid .= ",";
- }
-
- $whereGuid .=" '$guid' "; $k++;
- }
+if(!empty($guid)) { if($k!=0) $whereGuid .=","; $whereGuid .=" '$guid' "; $k++; }
}
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
-if (!empty($whereGuid)) {
- $whereGuid = " AND id in($whereGuid) ";
-}
-
-$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
-//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
-
-$fields=array(
- "show"=>array(
- "name"=>"Просмотр"
- ),
- "edit"=>array(
- "name"=>"Правка"
- ),
- "dostup"=>array(
- "name"=>"Доступ",
- "array"=>array(
- ""=>"x",
- "show"=>"Просмотр",
- "edit"=>"Редактирование"
- )
- ),
- "bg"=>array(
- "name"=>"цвет",
- "array"=>array(
- ""=>"без цвета",
- "bg-white"=>"Белый",
- "bg-info"=>"Синий",
- "bg-indigo"=>"Индиго",
- "bg-success"=>"Зеленый",
- "bg-danger"=>"Красный",
- "bg-warning"=>"Оранжевый",
- "bg-lime"=>"Лайм"
- )
- )
-);
-
-$users_group = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
-$storesArray = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => 1])
- ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])
- ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
-if (empty($providers)) {
- $providers = ArrayHelper::map(ShipmentProviders::find()->select(['id', 'name'])->all(), 'id', 'name');
-// $providers = $db::mapping("SELECT id,name FROM shipment_providers ");
-}
-$storesArrayAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])
- ->where(['tip' => 'city_store', 'view' => 1])->all(), 'id', 'name');
-//$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
-// статусы закупок - массивы с доступами к полям
-$data = StoreOrdersStatuses::find()->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_statuses");
+// статусы закупок - массивы с доступами к полям
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
foreach($data as $row) {
- $store_orders_statuses[$row["id"]]=$row["name"];
- $store_orders_status_description[$row["id"]]=$row["description"];
- $statuses_groups[$row["id"]]=explode(",",$row["groups"]);
- $statuses_stores_show[$row["id"]]=$row["stores_show"];
- $statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
- $status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+$store_orders_statuses[$row["id"]]=$row["name"];
+$store_orders_status_description[$row["id"]]=$row["description"];
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
+$statuses_stores_show[$row["id"]]=$row["stores_show"];
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
}
-
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, city_id, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, DATE_FORMAT(date_add, '%Y-%m-%d') as date_add,
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"];
+$date_update=$OrderData["date_update"];
+$date_start_division=$OrderData["division_date"];
+$order_date_add=$OrderData["date_add"];
+$orderCityId=$OrderData["city_id"];
// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
-$dataF = StoreOrdersFieldsData::find()->where(['order_id' => $orderId])->asArray()->all();
-//$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
-foreach($dataF as $row0) {
- if (!empty($fieldsRows[$row0["field_name"]])) {
- //если тип поля текст то заменяем
- if ($fieldsRows[$row0["field_name"]]["tip"]=="string") {
-
- $v = $row0["value_text"];
- }
- } else {
- $v = $row0["value"];
- }
-
- $storeId=$row0["store_id"];
-
- $color=$row0["color"];
- if (empty($storeId)) {
- $storeId = "NULL";
- }
- if (empty($color)) {
- $color = "NULL";
- }
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=? AND value!='' AND field_name!=''",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
- $FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+if(isset($fieldsRows[$row0["field_name"]]["tip"]) and $fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="0";
+if(empty($color)) $color="0";
+$FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
}
// создаем массив со свойствами подсветки ячеек store_orders_fields_property
-$data = StoreOrdersFieldsProperty::find()->orderBy(['id' => SORT_ASC])->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
foreach($data as $row) {
$fieldsPropertyArray[$row["field_id"]][]=$row;
-}
+ }
// достаем поля в массив
-$data = StoreOrdersFields::find()->orderBy(['position' => SORT_ASC])->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE name_eng!='' order by position ASC");
foreach($data as $row) {
- $fieldsRows[$row["name_eng"]]=$row;
- if (array_key_exists($row["id"], $fieldsPropertyArray)) {
- $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
- }
+ @$fieldsRows[$row["name_eng"]]=$row;
+ @$fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
+
$fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]); //считаем поля и зависимые поля рекурсивно
+ if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+$prices=[];
+$data=$db::getRows("SELECT product_id, price FROM prices WHERE product_id $whereInProductsId");
+ foreach($data as $row) {
+ $prices[$row["product_id"]]=$row["price"];
+ }
+
+
- if ($row["colors_save"]==1) {
- $fields_colors[$row["name_eng"]] = $row["id"];
- }
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">") if($value>$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]==">=") if($value>=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="=") if($value==$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<=") if($value<=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<") if($value<$row["value"]) $valueCss=$row["style_class"];
+
+}
}
+ return $valueCss;
+}
-// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
-$OrderData = SupportService::storeOrdersSelect001($orderId);
-//$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, DATE_FORMAT(date_add, '%Y-%m-%d') as date_add,
-//DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
-$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
-$status_order_id=$OrderData["status"];
-$date_start_sale=$OrderData["date_start"];
-$date_update=$OrderData["date_update"];
-$date_start_division=$OrderData["division_date"];
-$order_date_add=$OrderData["date_add"];
-if (empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$orderStoresArrayRelation_in="";
+$orderStoresArrayRelation=[];
+
+$k=0; $wr="";
+foreach($data as $row) {
+ $orderStoresArrayRelation[]=$row["store_id"];
+ if($k!=0) $wr .=","; $wr .="'".$row["store_id"]."'";
+ $k++;
+}
+
+if(!empty($wr)) $orderStoresArrayRelation_in=" IN ($wr)";
+
+
+
+
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
$date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
} else {
// иначе идем к родителю и узнаем дату матери к которой будем привязываться
- if (!empty($row["parent_id"])) {
- $storeOrders = StoreOrders::find()->select(["DATE_FORMAT(date_start, '%Y-%m-%d') as date_start"])->where(['id' => $row["parent_id"]])->asArray()->one();
- $date_start = $storeOrders['date_start'];
-// $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);
- }
+if(!empty($row["parent_id"])) $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);
}
-$time = time();
-if (!empty($date_start)) {
- $time = strtotime($date_start);
-}
+
+
+$time = strtotime($date_start_sale);
$date2=date('Y-m-d 23:59:59', $time-86400);
$date1=date('Y-m-d 00:00:00', $time-86400*8);
//echo"Дата старта $date_start Считаем продажи и списания от даты $date1 до $date2";
-$group_id = $_SESSION['group_id'];
-
-foreach($statuses_dostup[$status_order_id][$group_id] ?? [] as $fieldid => $arrs) {
- $dostup_fields[$fieldid]=$arrs["dostup"];
- $bg_fields[$fieldid]=$arrs["bg"];
+if($statuses_dostup[$status_order_id][$group_id]){
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];
+}
}
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+/* можно указать перменную до подключения файла
+$whereInProductsId = ' IN ('product_id')';
+$products=['product_id'=>"name"];
+
+*/
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+if(empty($whereInProductsId)) {
+
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id, o.shipments_group_id FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) {
+ if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ $prov[$row["id"]]=$row["provider_id"];
+ $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+ $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+ $ProductsOptions[$row["id"]]["shipments_group_id"]=$row["shipments_group_id"];
+
+ $k++;
+ }
+$whereInProductsId .=")";
+}
-// получаем массив с данными по полям из таблицы store_orders_fields_data
-$FiledsData=getDataFiledsData();
-/*
+function getDataFiledsData() {
+global $orderId, $db,$whereInProductsId,$fieldsRows,$FiledsData;
$FiledsData=[];
+if(empty($whereInProductsId)) exit("У данного поставщика нет продуктов!!!");
+
+
+
+
+//глобальный массив с переменными - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]][0][0]=$r["min_order"];
+$FiledsData["min_lot"][$r["id"]][0][0]=$r["min_lot"];
+}
+
+
+
+try {
+
+
// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
-$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name!=''");
+
+
foreach($dataF as $row) {
//если тип поля текст то заменяем
if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"]; else $v=$row["value"];
if(empty($storeId)) $storeId="NULL";
if(empty($color)) $color="NULL";
-
-//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
-}
-
-*/
+//if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+}
+} catch (Exception $e) {
+ echo 'Выброшено исключение: ', $e->getMessage(), "\n";
+}
-// если не указан магазин или надо просуммировать для какого-то поля
-$dataF = StoreOrdersFieldsData::find()->select(['field_name', 'product_id', 'sum(value) as sum'])->where(['order_id' => $orderId])
- ->andWhere(['IS', 'store_id', new Expression('null')])->andWhere(['IS', 'color', new Expression('null')])->groupBy(['field_name', 'product_id'])->asArray()->all();
-//$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
-//store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
-foreach($dataF as $row) {
- $FiledsDataSumm[$row["field_name"]][$row["product_id"]] = $row["sum"];
+return $FiledsData;
}
-$dataF = StoreOrdersFieldsData::find()->select(['field_name', 'product_id', 'sum(value) as sum', 'color'])->where(['order_id' => $orderId])
- ->andWhere(['IS NOT', 'store_id', new Expression('null')])->groupBy(['field_name', 'product_id', 'color'])->asArray()->all();
-//$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-//store_id IS NOT NULL group by field_name,product_id, color",[$orderId]);
-foreach($dataF as $row) {
- $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]] = $row["sum"];
-}
+//функция обновления данных
+function updatefieldsRows() {
+ global $db,$fieldsRows,$whereInProductsId,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
+ $products, $productsColorsArray,$prices;
+
+$html="";
+ $fieldsArr=[];
+foreach($fieldsRows as $pole => $array) {
+
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b> ";
+
+}
+foreach($fieldsArr as $fieldName) {
+//echo"<br> $fieldName";
+ $data_up=getArrayByFiledName($fieldName,@$date1,@$date2);
+ insert_store_orders_fields($data_up,$fieldName);
+ $FiledsData[$fieldName]=$data_up;
+
+}
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ @$data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ @$FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}
+ $html .= "<br><b>$fieldName</b> считаем массив! ";
-$whereProvidersId="";
-$k=0;
-foreach($providersIdInThisOrder as $pid) {
- if ($k!=0) {
- $whereProvidersId .= ",";
- }
+insert_store_orders_fields($data_up,$fieldName);
- $whereProvidersId .="'$pid'";
- $k++;
}
+
+
+
+
+// полнограммы факт по всем магазинам
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
+$data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
+$whereInProductsId",[$date_id]);
+foreach($data3 as $row2) {
+ if($row2["color"]=="" or $row2["color"]=="NULL")
+ $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"];
+ else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];
+}
+
+
+
+$html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($data as $row) {
+ if(empty($row["color"])) $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"];
+ else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+
+}
-/* можно указать перменную до подключения файла
-$whereInProductsId = ' IN ('product_id')';
-$products=['product_id'=>"name"];
+
+
-*/
-// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
-if (empty($whereInProductsId)) {
- $whereInProductsId=" in (";
-// $z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p
-// WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
-// $data2=$db::getRows($z);
- $data2 = SupportService::products1cOptionsProducts1cSelect001($providersIdInThisOrder);
- $whereInProductsIdArr = ArrayHelper::getColumn($data2, 'id');
- $k=0;
- foreach($data2 as $row) {
- if ($k!=0) {
- $whereInProductsId .= ",";
- }
- $whereInProductsId .="'".$row["id"]."'";
+$massivSQLColor=[];$inProduct=[];
- $products[$row["id"]]=$row["name"];
- $prov[$row["id"]]=$row["provider_id"];
- $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
- $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
- $k++;
- }
- $whereInProductsId .=")";
-}
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
-//глобальный массив с переменными - только по определнным товарам - лишнего не берем
-$da = Products1cOptions::find()->select(['id', 'min_lot', 'min_order'])->where(['in', 'id', $whereInProductsIdArr])->asArray()->all();
-//$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
-foreach($da as $r) {
- $FiledsData["min_order"][$r["id"]]=$r["min_order"];
- $FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
+ foreach($data4 as $row2) {
+ $colors=explode(";",$row2["colors"]);
+ $productId=$row2["id"];
+
+ if(!in_array($productId,$inProduct)) {
+
+ $html .="<h3>".$products[$productId]."</h3>";
+ $inProduct[]=$productId;
+
+ }
+
+ $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+ <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+
+
+ foreach($colors as $color) {
+ $color=trim($color);
+ // пробегаемся по каждому магазинам
+ foreach($storesArrayAll as $storeId => $nameSt) {
+
+
+ if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color])) {
+ //получаем процент цвета в полнограмме
+ if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
+ $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+ else $percentColor=0;
+ // округляем до сотых
+ $percentColor=round($percentColor,3);
+
+ $massivSQLColor[$productId][$storeId][$color]=$percentColor;
+
+ //заносим в глобальную переменную
+ $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
+ $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+ <td>$percentColor</td></tr>";
+
+ }
+ }
+ }
+ $html .="</tbody></table>";
}
+insert_store_orders_fields($massivSQLColor,"color_percent","",false);
+
+
+//////
+$data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=\"table table-bordered table-sm\">";
+foreach($data as $row) {
+ $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
+ if(trim($row["name"])!=trim($row["description"])) $html .=$row["description"];
+
+ $html .="</td><td> <b>".$row["field_name"]."</b>
+ ".$row["field_type"]."</td><td>";
+
+
+ if(is_array($FiledsData[$row["field_name"]])) {
+ $html .="<font color=green>++</font>";
+ }
+ //<td>".$row["sql_table_values"]."</td>
+ //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
-$data2 = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors'])
- ->innerJoin(['products_1c as p', 'p.id = o.id'])
- ->where(['in', 'p.id', $whereInProductsIdArr])
- ->orderBy(['o.provider_id' => SORT_ASC, 'p.name' => SORT_ASC])
- ->asArray()->all();
-//$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
-//WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) {
- $providers_products[$row["provider_id"]][]=$row["id"];
-
- if (!empty($row["colors"])) {
- $productsColorsArray[$row["id"]] = explode(";", $row["colors"]);
- }
-}
-
+
+
+/*
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
-if (!empty($_REQUEST["update"])) {
- $FiledsData=updatefieldsRows();
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
}
+*/
-if ($date_update <= time()-260) {
- //echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";
- //$FiledsData=updatefieldsRows();
-
-}
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
-if (!empty($_GET["update1113"])) {
- $html="";
- $fieldsArr=[];
- foreach($fieldsRows as $pole => $array) {
+
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
- if ($array["field_type"]=="stats")
- $fieldsArr[]=$pole;
+
+ if($row["field_type"]=="stats_formula") {
+ // echo"<h2>".$row["field_name"]." формула</h2>";
+
+ // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+
+ foreach($products as $productId => $nameProduct) {
+ $massivSQL=array();
+ // считать или нет по каждому магазину
+ $storesArr=["NULL"=>"NULL"];
+
+ // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+
+ if($row["field_name"]!="storehouse_balance") {
+ if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
+ $storesArr = array_merge($storesArr, $storesArrayAll);
+ }
- if ($array["field_type"]=="stats_summ")
- $fieldsStatsSum[]=$pole;
- //echo"<br> <b>$pole </b> ";
+ $k=1;
+ foreach($storesArr as $storeId => $nameStore) {
+
+ // if($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+
+ $k++; $color="";
+ $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+ // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+ if(!empty($array["value"])) {
+ $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+ $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+ if(!empty($array2["value"])) {
+ // if($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+ $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+ $massivSQL[$productId][$storeId][$color]=$array2["value"];
+ }
+
+ }
+ }
+ }
+ //if(!empty($array["value"]))
+
+ insert_store_orders_fields($massivSQL,$row["field_name"]);
+
+ }
+
}
- foreach($fieldsArr as $fieldName) {
- //echo"<br> $fieldName";
- $data_up=getArrayByFiledName($fieldName,$date1,$date2);
- insert_store_orders_fields($data_up,$fieldName);
- $FiledsData[$fieldName]=$data_up;
+
+ // $FiledsData[$row["field_name"]]
+ $html .="</td>
+
+
+
+ </tr> ";
+}
+
+ $html .="</table>";
+ /////////
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+/*
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+
+ if(!empty($val)) $division_auto_need_all +=$val;
}
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ insert_store_orders_fields($data_uper,"division_auto_need_all");
+
+ }
+}
- foreach($fieldsStatsSum as $fieldName) {
- //$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
- $pole=trim($fieldsRows[$fieldName]["func_content"]);
- $data_up=array();
- $dataF = StoreOrdersFieldsData::find()->select(['product_id', 'sum(value) as sum', 'color'])->where(['order_id' => $orderId])
- ->andWhere(['NOT IN', 'store_id', ['', 'NULL']])->andWhere(['field_name' => $pole])
- ->groupBy(['product_id', 'color'])
- ->asArray()->all();
-// $dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-// store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
+*/
- foreach($dataF as $row) {
- if (empty($row["color"]))
- $row["color"]="NULL";
+//пробегаемся по всем продуктам
+/*
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
- $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
- $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
- }
- $html .= "<br><b>$fieldName</b> считаем массив! ";
+if(!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>";
+$productInner[]=$productId;
- insert_store_orders_fields($data_up,$fieldName);
+$html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+получаено по факту ".$quantity_warehouseman_fact."";
- }
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+$html .="<font color=red>коэффициент $division_ratio</font>";
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
- //////
- $data = StoreOrdersFields::find()->select(['id,name_eng as field_name', 'position', 'field_type', 'description', 'sql_table_values'])
- ->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
- ->asArray()->all();
-// $data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
-// FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
- $html .="<table class=t>";
+
+}
- foreach($data as $row) {
- $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
- </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
- </td> <td>";
+*/
+
+
+
+//division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_summ_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
+ if(!empty($val)) $division_summ_all +=$val;
+ }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_summ_all)) {
+ $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
+ insert_store_orders_fields($data_uper,"division_summ_all");
+
+ }
+}
+
+
- //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
- if (is_array($FiledsData[$row["field_name"]])) {
+
+// вычисляем массив по цветам привязанным к товару
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row2) {
+ $colors=explode(";",$row2["colors"]);
+ $productId=$row2["id"];
+
+ foreach($colors as $color) {
+ $color=trim($color);
+ $colorsProductsArray[$productId][$color]=$color;
+
+ }
+ }
+
- $html .="<font color=green>++</font>";
+//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_summ_all' or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance' ) AND order_id='$orderId'");
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='storehouse_balance' AND store_id!='' AND order_id='$orderId'");
- }
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need' AND order_id='$orderId'");
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+ // $storesArr = array_merge($storesArrayAll);
+ $all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+
+ $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
+ // echo"<br>$nameProduct -$nameStore division_auto_need =".$valueArray["value"];
+ $all =$all + $valueArray["value"];
+ $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"];
+
+ $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
+ if($orderId!=263) insert_store_orders_fields($data_up2,"division_auto_need");
+
+ }
+
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all;
+ $data_up[$productId]["NULL"]["NULL"]=$all;
- /*
- // готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
- $dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
- foreach($dataF as $row0) {
- //если тип поля текст то заменяем
- if ($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+ }
+ if($orderId!=263) insert_store_orders_fields($data_up,"division_auto_need_all");
+ // exit("+++++++exit +++++");
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact quantity_zakup_fact
- $storeId=$row0["store_id"];
- $color=$row0["color"];
- if (empty($storeId)) $storeId="NULL";
- if (empty($color)) $color="NULL";
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_auto','division_summ') AND order_id='$orderId'");
- $FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
- }
- */
- // получаем массив с данными по полям из таблицы store_orders_fields_data
- $FiledsData=getDataFiledsData();
+
+foreach($products as $productId => $nameProduct) {
+$massivSQL=array();
+$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
+ $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
+}
+else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
- // if (is_array($FiledsDataSumm[$row["field_name"]])) {
+ $data_up=[];
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ insert_store_orders_fields($data_up,"division_ratio");
+
+ $data_up=[];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId][0][0]);
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
+
+
+ insert_store_orders_fields($data_up,"division_auto");
+}
- if ($row["field_type"]=="stats_formula") {
- // echo"<h2>".$row["field_name"]." формула</h2>";
- // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+$productInner=[];
+$rp="";
+foreach($products as $productId => $nameProduct) {
+ $data_up=[];
+ //$storesArr = array_merge($storesArrayAll);
+
+ if(empty($FiledsData["min_lot"][$productId][0][0])) $FiledsData["min_lot"][$productId][0][0]=1;
- foreach($products as $productId => $nameProduct) {
- $massivSQL=array();
- // считать или нет по каждому магазину
- $storesArr=["NULL"=>"NULL"];
+$planogram_all=[];
+$planogram_fact_all=[];
- // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
- if ($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
- $storesArr = array_merge($storesArr, $storesArrayAll);
+if(!in_array($productId,$productInner)) {}
- $k=1;
- foreach($storesArr as $storeId => $nameStore) {
- // if ($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+$rp .="
+<div class=\"expanel expanel-secondary\">
+<div class=\"expanel-heading\">
- $k++; $color="";
- $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
- // добавляем в массив глобальные новые значение которые мы посчитали по формулам
- if (!empty($array["value"])) {
- $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
- $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
-
- foreach($productsColorsArray[$productId] as $color) {
- $color=trim($color);
- $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
- if (!empty($array2["value"])) {
- // if ($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
- $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
- $massivSQL[$productId][$storeId][$color]=$array2["value"];
- }
- }
- }
- }
- //if (!empty($array["value"]))
-
- insert_store_orders_fields($massivSQL,$row["field_name"]);
- }
- }
+<h3 class=\"expanel-title\">$nameProduct
+</h3>
+</div> <div class=\"expanel-body p-0 m-0\">
+факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
+, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
+мин лот=".$FiledsData["min_lot"][$productId][0][0]."
+<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
+<th>Магазин</th>
+<th><b>полнограмма</b></th>
+<th><b>факт</b></th>
+<th><b>потребность</b></th>
+<th><b>авто-деление с коэффицентом</b></th>
+<th><b>ручная добавка</b></th>
+<th><b>авто-деление с ручной добавкой</b></th></tr>
+</thead>";
- // $FiledsData[$row["field_name"]]
- $html .="".$row["description"]." </td>
+$all=0;
+$productInner[]=$productId;
+$data_uper=[];
+$division_summ_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+ //if($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c") $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
+
+
+ $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+
+ $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+
+ $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
+ $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
+
+
+ $rp .="<tr><td class=\"text-right\">$nameStore</td>
+ <td>".$store_planogram[$productId][$storeId]."</td>
+ <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
+
+ <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
+ </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
+ <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
+ <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
+ </tr> ";
+
+
+ foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+ $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
+ if( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {
+
+ $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
+ $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+ $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+ $division_summ_color=$division_auto_color+$division_hand_color;
+
+ $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color;
+ $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
+ $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
+
+
+
+ $percent_color_per=$percent_color*100;
+ $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
+ <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
+ <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
+ <td>".$division_auto_need_color."
+ </td><td>".$division_auto_color."</td>
+ <td>".$division_hand_color."</td>
+ <td>".$division_summ_color."</td>
+ </tr> ";
+ }
+
+ }
+
- </tr> ";
- }
+
+
+ }
+
+ $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+
+
+
+ $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all;
+
+ insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need");
+ insert_store_orders_fields($data_uper["division_auto_color"],"division_auto");
+ insert_store_orders_fields($data_uper["division_summ_color"],"division_summ");
+
+ $data_up=[];
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
+ insert_store_orders_fields($data_up,"division_auto_all");
+
+ // $data_up=[];
+ // $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+ // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+
+ // insert_store_orders_fields($data_up,"division_summ_all");
- $html .="</table>";
+
+
+
+ $rp .="<tfooter>
+ <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
+ <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
+
+ <td>
+ ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
+</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
+<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
+<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
- /////////
+</td></tr></tfooter></table>
+Остаток склада (факт-сумма даления Итого)
+(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].")
+Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
+</div> </div>";
+}
+
+//$FiledsData=getDataFiledsData();
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+ $division_summ_all=0;
+
+ echo"<h1>$nameProduct</h1>";
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ echo"<br> $nameStore
+ ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ." ";
+ /*
+ foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+ $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
+ $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+ $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+ $division_summ_color=$division_auto_color+$division_hand_color;
+ $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
+ $data_up[$productId][$storeId][$color]=$division_summ_color;
+ }
+ */
+
+ $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];
+
+ }
+
+ echo"<br><b>division_summ_all=$division_summ_all</b>";
+ $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+ $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
- //$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+}
+ insert_store_orders_fields($data_up,"division_summ_all");
- // суммируем деление и заносим данные в таблицу хранения данных по полям
- foreach($products as $productId => $name) {
- $division_auto_need_all=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
- // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
- // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
- $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
- }
- $field_name="division_auto_need_all";
- //echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
- if (!empty($division_auto_need_all)) {
- $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
- $data_uper=[];
- $data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
- insert_store_orders_fields($data_uper,"division_auto_need_all");
- }
- }
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] - $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
+ $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
+
+
+ echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
+ = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]." - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]." ";
+
+}
+ insert_store_orders_fields($data_up,"storehouse_balance");
- //пробегаемся по всем продуктам
- foreach($products as $productId => $name) {
- $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
- $quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+echo $html.$rp;
- $html .="<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
- Сумма потребности =".$division_auto_need_all."
- Сумма получаено по факту ".$quantity_warehouseman_fact."";
- $division_ratio=1;
- if ($division_auto_need_all > $quantity_warehouseman_fact) {
- $division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+$db::sql("DELETE FROM store_orders_fields_data WHERE value='0.000' AND value_text=''",[$orderId]);
- $html .="<font color=red>-меньше!</font>";
- $html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+$db::sql("UPDATE store_orders SET date_update=NOW(), update_html=? WHERE id=?",["$html.$rp",$orderId]);
+
+ if(!empty($_REQUEST["html_print"])) echo $html;
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
- }
+//$FiledsData=getDataFiledsData();
- $html .="<font color=red>коэффициент $division_ratio</font>";
+return $FiledsData;
+
+}
- $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
- insert_store_orders_fields($data_uper,"division_ratio");
- }
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
- StoreOrders::updateAll(['date_update' => new Expression('NOW()')], ['id' => $orderId]);
-// $db::sql("UPDATE store_orders SET date_update=NOW() WHERE id='$orderId'");
+//ini_set('error_reporting', E_ALL);
+//ini_set('display_errors', 1);
+$FiledsData=[];
- if (!empty($_REQUEST["html_print"])) echo $html;
+//глобальный массив с переменными - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]][0][0]=$r["min_order"];
+$FiledsData["min_lot"][$r["id"]][0][0]=$r["min_lot"];
+}
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$data2=$db::getRows("SELECT field_name, product_id, store_id, color,value_text,value FROM store_orders_fields_data
+WHERE order_id='$orderId' AND field_name!=''");
- // получаем массив с данными по полям из таблицы store_orders_fields_data
+foreach($data2 as $row3) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row3["field_name"]]["tip"]=="string") $v=$row3["value_text"]; else $v=$row3["value"];
- $FiledsData=getDataFiledsData();
+$storeId=$row3["store_id"];
+$color=$row3["color"];
+if(empty($storeId)) $storeId="0";
+if(empty($color)) $color="0";
+//echo"<br>".$row3["field_name"]." ".$row3["product_id"]." $storeId - $color";
+$FiledsData[$row3["field_name"]][$row3["product_id"]][$storeId][$color]=$v;
+//if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
-}/// end update3
+}
/*
+$FiledsData=[];
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"]; else $v=$row["value"];
-if (!empty($_GET["update2"])) {
-
-echo"UPDATYE=2";
-foreach($fieldsRows as $fieldName =>$array) {
-if ($array["field_type"]=="stats_summ") {
-
-
-// echo"DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";
-//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
-$pole=trim($array["func_content"]);
-$FiledsDataSummStatsFuntion=array();
-$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-store_id!='' AND field_name='$pole' group by product_id, color",[$orderId]);
-foreach($dataF as $row) {
- if (empty($row["color"])) $row["color"]="NULL";
- $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
- $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
- // echo"<br> $fieldName = ".$row["product_id"]." = ".$row["color"]." = ".$row["color"]." ".$row["sum"]." ";
-}
-
-
-echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]." ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
- $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
-insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
+//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
}
+*/
-if ($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
-echo"<h4>division_summ_all !!</h4>";
-//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");
- $massivS=[];
-foreach($products as $productId => $value) {
-$array=getValueStatsFormula("division_summ_all",$productId,"","");
- $massivS[$productId]["NULL"]["NULL"]=$array["value"];
- //echo"<br>$value value=".$array["value"]." ";
-}
- insert_store_orders_fields($massivS,"division_summ_all");
-}
+// если не указан магазин или надо просуммировать для какого-то поля
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
+foreach($dataF as $row) $FiledsDataSumm[$row["field_name"]][$row["product_id"]]=$row["sum"];
-if ($array["name_eng"]=="auto_purchase_formula") {
-echo"<h4>auto_purchase_formula !!</h4>";
-//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");
- $massivS=[];
-foreach($products as $productId => $value) {
-
- $storesArr=["NULL"=>"NULL"];
-
-// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
-if ($fieldsRows[$array["name_eng"]]["stores_stats"]==1) $storesArr = array_merge($storesArr, $storesArrayAll);
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NOT NULL group by field_name,product_id, color",[$orderId]);
+foreach($dataF as $row) $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]]=$row["sum"];
-foreach($storesArr as $storeId => $nameStore) {
- $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");
- $massivS[$productId]["NULL"]["NULL"]=$array["value"];
- echo"<br>$value value=".$array["value"]." ";
-foreach($productsColorsArray[$productId] as $color) {
-
- $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);
- $massivS[$productId][$storeId][$color]=$array["value"];
- echo"<br>++$color value=".$array["value"]." ";
-}
-}
-}
- insert_store_orders_fields($massivS,"auto_purchase_formula");
+$products_class=[];
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+if(!empty($products_class[$categoryId])) $tip=$products_class[$categoryId];
+// если это срезка у нее нет группы
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
+ $productGroupArray["flowers"][]=$pid;
+
+}elseif($tip=="potted") { $daysCounterSales=14; $daysCounterWriteOffs=14; $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30; $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip $categoryId";
}
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
-}
-
-
-//foreach($products as $productId => $value) { echo "<br> $value => value = ++ ". $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
+//глобальный массив с переменными - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]][0][0]=$r["min_order"];
+$FiledsData["min_lot"][$r["id"]][0][0]=$r["min_lot"];
}
-*/
-//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
-//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
-//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+}
-if (!empty($_SESSION)) {
- if (array_key_exists("group_id", $_SESSION)) {
- if ($_SESSION["group_id"]==1) {
- if (!empty($rp)) {
- echo $rp;
- }
- }
- }
+
+if(!empty($_REQUEST["update"])) {
+$FiledsData=updatefieldsRows();
}
-/*
- $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
- foreach($data as $row) {
- if (empty($row["color"])) $row["color"]="NULL";
- $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
- $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+if($date_update <= time()-260) {
+//echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";
+//$FiledsData=updatefieldsRows();
+
+}
- }
-*/
-// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
+if(!empty($_GET["update1113"])) {
+$html="";
+ $fieldsArr=[];
+foreach($fieldsRows as $pole => $array) {
+
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b> ";
+
+}
-//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
-if (0 and $date_start_sale!='000-00-00') {
- //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
- $dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
- $orders_where=implode("','",$dataOrders);
- if (!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
- $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0 $orders_where group by product_id,color");
- foreach($data as $row) {
- if (empty($row["color"]))
- $color="NULL";
- else
- $color=$row["color"];
-
- $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
- $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];
- }
+foreach($fieldsArr as $fieldName) {
+//echo"<br> $fieldName";
+ $data_up=getArrayByFiledName($fieldName,$date1,$date2);
+ insert_store_orders_fields($data_up,$fieldName);
+ $FiledsData[$fieldName]=$data_up;
+
+}
- // quantity_purchase_last_week
- $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0 $orders_where group by product_id,color,store_id");
- foreach($data as $row) {
- if (empty($row["color"])) $color="NULL"; else $color=$row["color"];
- if (empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];
- $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];
- }
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}
+ $html .= "<br><b>$fieldName</b> считаем массив! ";
+insert_store_orders_fields($data_up,$fieldName);
+}
+
+
+
+//////
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=t>";
+foreach($data as $row) {
+ $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
+ </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+ </td> <td>";
+ //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
+ if(is_array($FiledsData[$row["field_name"]])) {
+
+ $html .="<font color=green>++</font>";
+
+ }
+
+
+/*
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
- // товар в пути date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
- $dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");
- $orders_where=implode("','",$dataOrders);
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
- echo"$orders_where = $orders_where";
- if (!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
- //echo" товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color";
- $data=$db::getRows("SELECT sum(value) as value, product_id, color FROM
- store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
- foreach($data as $row) {
- if (empty($row["color"])) $color="NULL"; else $color=$row["color"];
- $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
- }
+
+ if($row["field_type"]=="stats_formula") {
+ // echo"<h2>".$row["field_name"]." формула</h2>";
+
+ // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+
+ foreach($products as $productId => $nameProduct) {
+ $massivSQL=array();
+ // считать или нет по каждому магазину
+ $storesArr=["NULL"=>"NULL"];
+
+ // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+ if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
+ $storesArr = array_merge($storesArr, $storesArrayAll);
+ $k=1;
+ foreach($storesArr as $storeId => $nameStore) {
+
+ // if($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+
+ $k++; $color="";
+ $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
- //quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
- $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p
- WHERE p.write_offs_id=w.id AND (w.type='Брак' or w.type='Брак с поставки') AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day group BY p.product_id,w.store_id");
- foreach($data2 as $row) {
- $a=ceil($row["cnt"]/2);
- if (!empty($a)) {
- $FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
- $FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a;
+ // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+ if(!empty($array["value"])) {
+ $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+ $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+ if(!empty($array2["value"])) {
+ // if($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+ $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+ $massivSQL[$productId][$storeId][$color]=$array2["value"];
+ }
+
}
- }
- $FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
-}
-
-
-// пересчитываем данные - берем из страых таблиц и вписываем в новые.
-if (!empty($_GET["insert"])) {
-
-// массив соответствия ID магазинов и GUID
- $data = ExportImportTable::find()->select(['entity_id', 'export_val'])->where(['entity' => 'city_store', 'export_id' => 1])->asArray()->all();
-// $data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
- foreach($data as $row) {
- $export[$row["entity_id"]]=$row["export_val"];
- $export_revers[$row["export_val"]]=$row["entity_id"];
+ }
+ }
+ //if(!empty($array["value"]))
+
+ insert_store_orders_fields($massivSQL,$row["field_name"]);
+
+ }
+
}
- $data_values_new=data_values_insert_sql($date1,$date2);
+
+ // $FiledsData[$row["field_name"]]
+ $html .="".$row["description"]." </td>
+
+
+
+ </tr> ";
+}
- $fieldsArrayFlip=array_flip($fieldsArray);
- foreach($data_values_new as $Field => $fArray) {
+ $html .="</table>";
+
- if ($Field=="quantity_purchase_last_week1")
- {
- echo"<h2>$Field</h2>";
+
+
+ /////////
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+ }
- foreach($fArray as $ProductId => $ArrayP) {
- echo"<br>ProductId =".$products[$ProductId]." $ProductId";
- foreach($ArrayP as $StoreId => $ArrayP2) {
- if (!empty($StoreId)) {}
- echo"<br>StoreId = ";
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+}
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
- if (!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
- else echo $StoreId;
- print_r($ArrayP2);
- }
- }
- }
- global $storeIdToGuidArray;
- $storeIdToGuidArray=$export;
- // $field_id=$fieldsArrayFlip[$Field];
- insert_store_orders_fields($fArray,$Field);
+$html .="<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
- }
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
- StoreOrdersFieldsData::deleteAll(['and', ['or', ['value' => '0.000'], ['value' => '0.00']], ['value_text' => '']]); // ??? order id
-// $db::sql("DELETE FROM store_orders_fields_data WHERE (value='0.000' or value='0.00') AND value_text=''",[$orderId]);
+$html .="<font color=red>коэффициент $division_ratio</font>";
-}
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+}
+
+$db::sql("UPDATE store_orders SET date_update=NOW() WHERE id='$orderId'");
+
+ if(!empty($_REQUEST["html_print"])) echo $html;
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
-$_CONFIG["jscss"]='
-<style>
+$FiledsData=getDataFiledsData();
+
+
+}/// end update3
-table.table tbody tr:hover td{background:#cdcdcd}
-.zak tbody tr:hover td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal; max-height:60px;overflow:hidden}
-.zak> thead> tr>th b{font-weight:normal;}
-.zak> :not(caption)>*>* {
- padding: 0.05rem;
- background-color: 1px;
- box-shadow: none;
-}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak {
- border-collapse: collapse;
- border-spacing: 0;
- overflow: hidden;
-}
-.zak th, .zak td {
- border: 1px solid #e6e6e6;
- padding: 0.1rem;
- vertical-align: middle;
- position: relative;
-}
+/*
+
+if(!empty($_GET["update2"])) {
+
+echo"UPDATYE=2";
+foreach($fieldsRows as $fieldName =>$array) {
+if($array["field_type"]=="stats_summ") {
-.zak td:hover:before {
- background-color: #e3e3e3;
- content: \'\';
- height: 100%;
- left: -5000px;
- position: absolute;
- top: 0;
- width: 10000px;
- z-index: -2;
-}
-.zak td:hover:after {
- background-color: #cdcdcd;
- content: \'\';
- height: 10000px;
- left: 0;
- position: absolute;
- top: -5000px;
- width: 100%;
- z-index: -1;
+// echo"DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+
+
+$pole=trim($array["func_content"]);
+$FiledsDataSummStatsFuntion=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ // echo"<br> $fieldName = ".$row["product_id"]." = ".$row["color"]." = ".$row["color"]." ".$row["sum"]." ";
+}
+
+
+echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]." ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
+ $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
+insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
}
+if($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
+echo"<h4>division_summ_all !!</h4>";
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");
- .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
- .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
-.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+ $massivS=[];
+foreach($products as $productId => $value) {
+$array=getValueStatsFormula("division_summ_all",$productId,"","");
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
-table.zak thead th:not(:first-child),
-table.zak tr.zg th th:not(:first-child) {
- vertical-align: bottom;
- line-height: normal;
+ //echo"<br>$value value=".$array["value"]." ";
}
-table.zak thead b {
- writing-mode: vertical-rl;
- transform: scale(-1);
-
+ insert_store_orders_fields($massivS,"division_summ_all");
}
-table.zak tr.zg th b,table.zak tr.zg td b {
- writing-mode: vertical-rl;
- transform: scale(-1);
- font-weight:normal; font-size:0.6rem;
-}
+if($array["name_eng"]=="auto_purchase_formula") {
+echo"<h4>auto_purchase_formula !!</h4>";
- .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
- .app-content .side-app {
- padding: 25px 0.5rem 0 0.5rem;
-}
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");
-.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
-.zak td.td_product:hover {background:#fff;}
+ $massivS=[];
+foreach($products as $productId => $value) {
+
+ $storesArr=["NULL"=>"NULL"];
+
+// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+if($fieldsRows[$array["name_eng"]]["stores_stats"]==1) $storesArr = array_merge($storesArr, $storesArrayAll);
-</style>
-<script>
-const param5x = $(\'meta[name=csrf-param]\').attr(\'content\');
-const token5x = $(\'meta[name=csrf-token]\').attr(\'content\');
+foreach($storesArr as $storeId => $nameStore) {
-function changef(id,typeint)
-{
-var uname=$(\'#\'+id+\'\').val();
-if (typeint==\'double\') uname = uname.replace(/[^0-9.\s]/gi, \'\');
-if (typeint==\'int\') uname = uname.replace(/[^0-9\s]/gi, \'\');
-$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+ echo"<br>$value value=".$array["value"]." ";
+foreach($productsColorsArray[$productId] as $color) {
+
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);
+ $massivS[$productId][$storeId][$color]=$array["value"];
+
+ echo"<br>++$color value=".$array["value"]." ";
+}
}
+}
+ insert_store_orders_fields($massivS,"auto_purchase_formula");
+
-function ajaxEditFieldValue(name_eng,product_id,color)
-{
-$.ajax({
- url: \'/shipment/ajax-edit-field-value/\',
- method: \'post\',
- dataType: \'html\',
- data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\', [param5x] : token5x },
- success: function(data){
- $(\'#edit_div\').html(data);
- }});
-$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
-setTimeout(function(){
- $(\'.okk\').remove();
-}, 3000);
}
-function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
-{
-$.ajax({
- url: \'/shipment/ajaxEditFieldValue/\',
- method: \'post\',
- dataType: \'html\',
- data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },
- success: function(data){
- $(\'#edit_div\').html(data);
- }});
-$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
-setTimeout(function(){
- $(\'.okk\').remove();
-}, 3000);
}
-</script>';
+//foreach($products as $productId => $value) { echo "<br> $value => value = ++ ". $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
-$finish = '?';
-//показываем панель со статусом и магазинами в зависимости от доступа
-function showOrderStoresPanel() {
- global $db, $status_order_id, $status_edit_dostup, $store_orders_status_description, $storesArray, $store_id, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id;
+}
-//action="/shipment/'.$act.'/?id='.$orderId.'"
- echo'<form method=post >
- <table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
- echo \yii\helpers\Html::input('hidden', Yii::$app->request->csrfParam,Yii::$app->request->csrfToken);
+*/
- if (!empty($status_edit_dostup[$status_order_id][$group_id])) {
- echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
- foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
- echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';
- }
- echo'</select></td><td>
- <button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
- }
- echo'</table>';
- echo'</form>';
- //показываем магазины если статус закупки подразумевает разбивку данных по магазинам
- if (true) {//if ($statuses_stores_show[$status_order_id]) {
- $stores_arr = ArrayHelper::map(Products1c::find()->where(['tip' => 'city_store', 'view' => 1])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-// $stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
- $stores_cnt=count($stores_arr);
- $vnesli = StoreOrderStatus::find()->where(['order_id' => $orderId, 'status_id' => $status_order_id, 'status' => 1])
- ->groupBy(['order_id', 'store_id', 'status_id'])->count();
-// $vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status
-// WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
- $store_order_status=array();
- $data2 = StoreOrderStatus::find()->select(['store_id', 'status'])->where(['order_id' => $orderId, 'status_id' => $status_order_id])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
- foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];
+//функция обновляет по массиву ID продуктов информацию в таблице data
+/*
+$products - массив ID product_id=>name_product
+*/
+function updateProductArrayDataField($fieldsNamesArr) {
+ global $db,$products,$prices;
+
+print_r($products);
- echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
- if ($vnesli==$stores_cnt)
- echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>";
+$whereF=implode("','",$fieldsNamesArr);
+$whereF =" name_eng in('$whereF') ";
+
+echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields
+WHERE $whereF order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+
+
+echo"<br>== ".$row["field_name"]." ".$row["field_type"]." ";
+
+}
+
+ echo"</table>";
+
+}
- echo'<div class="row"><div class="col-12">';
+//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
+//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
+//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
- echo'<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if (empty($store_id)) echo'success'; else echo'danger'; echo' m-1">без магазина</a>';
- foreach($storesArray as $strid=>$namestore) {
- echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
-// if ($store_order_status_value[$strid]) {
-// echo 'outline-';
-// }
- if ($store_id==$strid) {
- echo"success";
- } else {
- echo "info";
- }
+//if($_SESSION["group_id"]==1) echo $rp;
- echo" btn-sm m-1\"> ";
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $status_order_id, $status_edit_dostup, $orderCityId, $store_orders_status_description, $storesArray, $store_id, $whereInProductsId, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id,$prices;
-// if ($store_order_status_value[$strid]==1) {
-// echo "<i class=\"fe fe-check me-2\"></i>";
-// }
- echo"$namestore</a>";
- }
- echo'</div></div>';
-
-
- //////
- $status_store="";
- if (!empty($store_id)) {
-
- if (!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
- $storeOrderStatus = StoreOrderStatus::find()->where(['order_id' => $orderId, 'store_id' => $store_Id, 'status_id' => $status_order_id])->one();
- if (!$storeOrderStatus) {
- $storeOrderStatus = new StoreOrderStatus;
- $storeOrderStatus->order_id = $orderId;
- $storeOrderStatus->store_id = $store_id;
- $storeOrderStatus->status_id = $status_order_id;
- $storeOrderStatus->status = 1;
- $storeOrderStatus->date = date('Y-m-d H:i:s');
- $storeOrderStatus->admin_id = $_SESSION["admin_id"];
- $storeOrderStatus->save();
- }
-// $db::sql("INSERT IGNORE INTO store_order_status SET order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=? ",
-// [$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
- }
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+
+
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) {
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';
+
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
- $sosStatus = StoreOrderStatus::find()->select(['status'])->where(['order_id' => $orderId, 'store_id' => $store_id, 'status_id' => $status_order_id])->asArray()->one();
- $store_order_status_value = $sosStatus['status'];
-// $store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+echo'</table></form>';
- $status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+$nameCity=$db::getValue("SELECT name FROM universal_catalog_item WHERE id=?",[$orderCityId]);
+//echo '<div style="border-bottom:1px #cdcdcd solid; background:#e6e6e6; margin-bottom:2rem;"> ';
- if (!empty($store_order_status_value))
- $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
- else
- $status_store .="<a class=\"btn btn-danger\" href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
- echo $status_store;
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$storesArrayRelation=[];
- }
- }
+foreach($data as $row) {
+ $storesArrayRelation[]=$row["store_id"];
+ //echo' <span class="btn btn-sm m-1 btn-blue">'.$storesOrderArray[$row["store_id"]].'</span> ';
}
+//echo'</div>';
-// получаем занчение перменнй по ее названию товару и магазину и цвету
-function getValueFieldGlobal($field_name,$productId){
- global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats;
- // if ($field_name=="min_order" or $field_name=="min_lot") $value=$globalValuesArray[$field_name][$productId];
- if (empty($value)) {
- $value = $DataFieldStatsSumm[$productId][$field_name];
- }
- if (empty($value)) {
- $value = $FiledsData[$field_name][$productId]["NULL"]["NULL"];
- }
- return $value;
-}
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id]) {
-// получаем занчение перменнй по ее названию товару и магазину и цвету
-function getValueFieldGlobalHand($field_name,$productId){
- global $db,$DataFieldStatsSumm,$FiledsData;
- $value=$DataFieldStatsSumm[$productId][$field_name];
- if (empty($value)) {
- $value = $FiledsData[$field_name][$productId]["NULL"]["NULL"];
- }
- return $value;
-}
-
-// получаем занчение перменнй по ее названию тип stats
-function getValueFieldStats($field_name, $productId, $storeId, $color){
-global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll;
- if (empty($storeId)) $storeId="NULL";
- if (empty($color)) $color="NULL";
- $value=$FiledsData[$field_name][$productId][$storeId][$color];
-
- if (empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
-
-
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+$stores_cnt=count($stores_arr);
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];
-
- return $value;
-}
-// получаем занчение перменнй по ее названию тип stats
-function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
-global $db,$FiledsData,$DataFieldStats;
- if (empty($storeId)) $storeId="NULL";
- if (empty($color)) $color="NULL";
- $value=$FiledsData[$field_name][$productId][$storeId][$color];
- // if (empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
- return $value;
-}
+if($vnesli>0)
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
- // получаем занчение перменнй по ее названию тип stats
-function getValueFieldStatsSumm($field_name, $productId, $color){
-global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm;
- if (empty($color)) $color="NULL";
- $value=$FiledsData[$field_name][$productId]["NULL"][$color];
- if (empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
- if (empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>";
- return $value;
-}
+echo'<div class="row"><div class="col-12">';
-function function_auto_purchase_formula($param,$print=0) {
-global $db;
-$goods_in_transit=(float)$param["goods_in_transit"];
-$sale_7day=(float)$param["sale_7day"];
-$quantity_fact=(float)$param["quantity_fact"];
-$quantity=$param["quantity"];
+$group_show_percent_array=[50,11];
+
+$data=$db::getRows("SELECT product_id FROM store_orders_fields_data WHERE order_id=? AND product_id $whereInProductsId AND field_name='sales_cnt' AND color='' AND store_id='' AND value>0 group by product_id",[$orderId]);
+$whereInProductSaleId="";
+$productsIds=[];
+$i=0;
+foreach($data as $row) {
+ $whereInProductSaleId .=" '".$row["product_id"]."' ";
+ $productsIds[]=$row["product_id"];
+ if($i<(count($data)-1)) $whereInProductSaleId .=" , ";
+ $i++;
+}
+
+
+
+//echo"<br>Всего товаров ".count($productsIds)." = $orderId";
+
+if($whereInProductSaleId) {
+$storeCount=[];
+$data=$db::getRows("SELECT product_id, store_id FROM store_orders_fields_data WHERE order_id=? AND product_id IN ($whereInProductSaleId) AND field_name='quantity_zakup_new' AND color='' AND store_id!='' AND value>0 group by product_id, store_id",[$orderId]);
+ foreach($data as $row) {
+ $storeCount[$row["store_id"]] +=1;
+
+ }
+
+$storeCount2=[];
+ foreach($storeCount as $sid => $cnt) {
+ $storeCount2[$sid]=round(($cnt/count($productsIds))*100);
+ }
+}
+
+echo'
+<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">Весь заказ '.$nameCity.'</a>';
+
+foreach($storesArray as $strid=>$namestore){
+
+
+if(in_array($strid,$storesArrayRelation) or empty($orderCityId)) {
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
+
+if(!empty($store_order_status_value) and $store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success"; } else echo"info"; echo" btn-sm m-1\"> ";
+if(!empty($store_order_status_value) and $store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore ";
+// массив с группами-ролями тех кто может просматривать заполеннность по магазинам
+if($status_order_id==2 and in_array($_SESSION["group_id"],$group_show_percent_array)) {
+
+ echo" <span class=\"btn btn-info btn-xs ml-1\" title=\"".$storeCount[$strid]." из ".count($productsIds)."\">".$storeCount2[$strid]."%</span>";
+}
+echo"</a>";
+} else {
+
+ echo'<span class="btn btn-danger">к городу нет доступа '.$namestore.'</span>';
+
+}
+
+
+
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO store_order_status SET order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=? ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}
+
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\" href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+
+}
+
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldGlobal($field_name,$productId){
+ global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$prices;
+ // if($field_name=="min_order" or $field_name=="min_lot") $value=$globalValuesArray[$field_name][$productId];
+ if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+return $value;
+}
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldGlobalHand($field_name,$productId){
+ global $db,$DataFieldStatsSumm,$FiledsData,$prices;
+ $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+ return $value;
+}
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStats($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll,$prices;
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+
+ if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+
+
+
+
+
+
+
+ return $value;
+}
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$prices;
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ // if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+ return $value;
+}
+
+
+
+
+
+
+
+ // получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsSumm($field_name, $productId, $color){
+global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm,$prices;
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId]["NULL"][$color];
+ if(empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
+ if(empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+
+ return $value;
+}
+
+
+
+//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
+if(0 and $date_start_sale!='000-00-00') {
+ //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
+$dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+$orders_where=implode("','",$dataOrders);
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+ $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0 $orders_where group by product_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ }
+
+
+// quantity_purchase_last_week
+ $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0 $orders_where group by product_id,color,store_id");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ if(empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];
+ $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];
+ }
+
+
+
+ // товар в пути date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
+$dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");
+$orders_where=implode("','",$dataOrders);
+
+echo"$orders_where = $orders_where";
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+
+
+//echo" товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color";
+ $data=$db::getRows("SELECT sum(value) as value, product_id, color FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ }
+
+
+//quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND (w.type='Брак' or w.type='Брак с поставки') AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day group BY p.product_id,w.store_id");
+foreach($data2 as $row) {
+$a=ceil($row["cnt"]/2);
+if(!empty($a)) {
+$FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
+$FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a;
+}
+}
+$FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
+}
+
+
+
+
+
+
+/*
+ $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+
+ }
+*/
+// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
+
+
+
+function function_auto_purchase_formula($param,$print=0) {
+global $db;
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
$min_lot=$param["min_lot"];
$min_order=$param["min_order"];
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
// считаем запас на 2 дня
$fact=$quantity_fact + $goods_in_transit;
$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
-if (($fact-$fact_sale)>0) {
+if(($fact-$fact_sale)>0) {
$saleweek1=$fact-$fact_sale ;
-$zakaz= (float)$sale_7day + (float)$sale_2day + (float)$quantity - (float)$saleweek1;
+$zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
}
else {
-$zakaz= (float)$sale_7day + (float)$sale_2day + (float)$quantity ;
+$zakaz= $sale_7day + $sale_2day + $quantity ;
}
// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
-if ($zakaz<0) $zakaz=0;
+if($zakaz<0) $zakaz=0;
//округлить до минимального лота деления
$ceil=ceilCoefficient($zakaz,$min_lot);
-//if (!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
-$ttl="".($param["color"] ?? '')."
+$ttl="".$param["color"]."
Товар в пути goods_in_transit =$goods_in_transit
Продажи sale_7day= $sale_7day
Страховой запас sale_2day= $sale_2day
}
+
// округляет до определенного числа
function roundCoefficientQuantity($number, $rate = 1)
{
return $rest;
}
+
// функция для формулы автоделения
function deivisionFormula($param,$print=0) {
$goods_in_transit=$param["goods_in_transit"];
-$sale_7day=(float)$param["sale_7day"];
-$quantity_fact=(float)$param["quantity_fact"];
-$quantity=(float)$param["quantity"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
$min_lot=$param["min_lot"];
$min_order=$param["min_order"];
$quantity_purchase_summ=$param["quantity_purchase_summ"];
$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
$quantity_purchase=$param["quantity_purchase"];
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
// считаем запас на 3 дня
$sale_2day=ceil(2*($sale_7day/7));
$fact=$quantity_fact ; //$goods_in_transit
$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
-if (($fact-$fact_sale)>0) {
+if(($fact-$fact_sale)>0) {
$saleweek1=$fact-$fact_sale ;
$zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
}
$zakaz=roundCoefficientQuantity($zakaz, $min_lot);
-if (empty($zakaz)) $zakaz=$quantity;
+if(empty($zakaz)) $zakaz=$quantity;
return $zakaz;
}
+
function ratioDivisionPercent($param){
$zakazDivision=deivisionFormula($param);
$percent=1;
-if ($param["quantity_warehouseman_fact"]<$zakazDivision) {
+if($param["quantity_warehouseman_fact"]<$zakazDivision) {
$percent=round($param["quantity_warehouseman_fact"]/$zakazDivision,2);
}
$quantity_purchase=(int)$param["quantity_purchase"];
$sale_2day=ceil(2*($sale_7day/7));
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
$zakazDivision=deivisionFormula($param);
$zakaz=$zakazDivision;
/*
-if ($quantity_warehouseman_fact>=$zakazDivision) {
+if($quantity_warehouseman_fact>=$zakazDivision) {
// считаем запас на 2 дня
$zakaz=$zakazDivision;
*/
-if ($zakaz<0) $zakaz=0;
+if($zakaz<0) $zakaz=0;
//округлить до минимального лота деления
//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
$ceil=$zakaz;
-if ($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
-//if (!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
//Заказано кустовыми $quantity_purchase_summ шт.
//Заказано на магазин $quantity_purchase шт.
-$ttl=" формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
+$ttl="$txt формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
Мин. лот деления $min_lot!
Куплено по факту $quantity_warehouseman_fact шт
Продажи 7 дней=".$sale_7day."шт
Полнограмма ".$quantity."шт
факт ".$quantity_fact."шт
Заказ ".$zakaz."шт
-Округляем -> $ceil шт";
+Округляем -> $ceilшт";
$array_r["value"]=$ceil;
$array_r["title"]=$ttl;
$quantity_purchase=$param["quantity_purchase"];
-if (empty($min_lot)) $min_lot=1;
+if(empty($min_lot)) $min_lot=1;
$zakazDivision=deivisionFormula($param);
$zakaz=$zakazDivision;
/*
-if ($quantity_warehouseman_fact>=$zakazDivision) {
+if($quantity_warehouseman_fact>=$zakazDivision) {
// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
} else {
// если товара пришло меньше
}
*/
-if ($zakaz<0) $zakaz=0;
+if($zakaz<0) $zakaz=0;
//округлить до минимального лота деления
//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
$ceil=$zakaz;
-if ($ceil>=$zakazDivision) $zakaz=$zakazDivision;
-//if (!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
$ttl="$txt
формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
}
+
+
function return_quantity_zakup_fact_week_formula($productId, $color){
global $FiledsData;
-$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color] ?? '';
+$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color];
//$value=rand(1,999);
return $value;
}
+
+
+
function returnFormula($field_name, $productId, $storeId, $color){
-global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;
+global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;
- if (empty($storeId)) $storeId="NULL";
- if (empty($color)) $color="NULL";
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
$type=$fieldsRows[$field_name]["type"];
$formula=$fieldsRows[$field_name]["func_content"];
$avg_arr=explode(",",$func_content_arr[0]);
$field[0]=$avg_arr[0];
-$field[1]=$avg_arr[1] ?? '';
+$field[1]=$avg_arr[1];
-$field_type1=$fieldsRows[$field[0]]["field_type"] ?? '';
-$field_type2=$fieldsRows[$field[1]]["field_type"] ?? '';
+@$field_type1=$fieldsRows[$field[0]]["field_type"];
+@$field_type2=$fieldsRows[$field[1]]["field_type"];
$storeId1=$storeId;
-$store_save=$fieldsRows[$field[0]]["store_save"] ?? '';
-if ($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio" or $field_type1=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[0]=="division_auto_need"
+$store_save=$fieldsRows[$field[0]]["store_save"];
+if($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio" or $field_type1=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[0]=="division_auto_need"
{
$storeId1="NULL";
}
-$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color] ?? 0;
+$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color];
$storeId2=$storeId;
-$store_save=$fieldsRows[$field[1]]["store_save"] ?? '';
-if ($store_save==0 or $field[1]=="division_ratio" or $field_type2=="global" or $field_type2=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[1]=="division_auto_need"
+$store_save=$fieldsRows[$field[1]]["store_save"];
+if($store_save==0 or $field[1]=="division_ratio" or $field_type2=="global" or $field_type2=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[1]=="division_auto_need"
{
$storeId2="NULL";
}
-$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color] ?? 0;
+$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color];
-if (!empty($formula)) {
+if(!empty($formula)) {
// среднее арифметичнкое func_content = a1,a2;
-if ($type=="avg") {
- if (!empty($avg2)) $avg=round(($value/$avg2)*100); else $value=0;
+if($type=="avg") {
+ if(!empty($avg2)) $avg=round(($value/$avg2)*100); else $value=0;
$data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
$data_uper[$productId][$storeId][$color]=$value;
insert_store_orders_fields($data_uper,$field_name);
}
}
// умножение func_content = a1,a2;
-elseif ($type=="multiplication") {
+elseif($type=="multiplication") {
$value=$avg1*$avg2;
-if ($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);
+if($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);
-//if ($field[1]=="division_ratio")
+//if($field[1]=="division_ratio")
//echo"<br> {$field[1]} store=$storeId2 $avg2 color=$color "; умножение ".$field[0]." $field_type1 $avg1 ".$field[1]." $avg2 $field_type2
$value_title=" ( ".$field[0]."=$avg1) * (".$field[1]."=$avg2)";
$data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
$data_uper[$productId][$storeId][$color]=$value;
insert_store_orders_fields($data_uper,$field_name);
}
}
// разница func_content = a1,a2;
-elseif ($type=="difference") { $value=$avg1-$avg2;
+elseif($type=="difference") { $value=$avg1-$avg2;
$value=round($value);
$value_title="$avg1(".$field[0].") -$avg2(".$field[1].")";
$data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
$data_uper[$productId][$storeId][$color]=$value;
insert_store_orders_fields($data_uper,$field_name,"", false);
}
// суммирование
-elseif ($type=="addition") {
-$avg1=$FiledsData[$field[0]][$productId][$storeId][$color] ?? 0;
-$avg2=$FiledsData[$field[1]][$productId][$storeId][$color] ?? 0;
+elseif($type=="addition") {
+$avg1=$FiledsData[$field[0]][$productId][$storeId][$color];
+$avg2=$FiledsData[$field[1]][$productId][$storeId][$color];
$value=$avg1+$avg2;
$value_title="$avg1(".$field[0].") + $avg2(".$field[1].") ";
$value=round($value);
-//if ($field_name=="division_summ" and $storeId!="NULL") echo"<br> ".$field[0]." $productId = $avg1 + ".$field[1]." =$avg2 stireId=$storeId color=$color summ=$value";
+//if($field_name=="division_summ" and $storeId!="NULL") echo"<br> ".$field[0]." $productId = $avg1 + ".$field[1]." =$avg2 stireId=$storeId color=$color summ=$value";
//$FiledsData[$field_name][$productId][$storeId][$color]=$value;
-if ($field_name=="division_summ") {
+if($field_name=="division_summ") {
//echo"<br>. Продукт ".$products[$productId]." ".$storesArrayAll[$storeId]." $avg1(".$field[0].") + $avg2(".$field[1].") = $value";
}
$data_uper=[];
-if (!empty($value)) {
+if(!empty($value)) {
$data_uper[$productId][$storeId][$color]=$value;
insert_store_orders_fields($data_uper,$field_name);
}
}
-if ($type=="division" || $type=="division_auto_need" || $type=="auto_purchase_formula" || $type=="division_ratio" ) {
- if ($formula==true){ } else $value_arr=["value"=>0,"title"=>"не сичтаем.."];
+if($type=="division" || $type=="division_auto_need" || $type=="auto_purchase_formula" || $type=="division_ratio" ) {
+ if($formula==true){ } else $value_arr=["value"=>0,"title"=>"не сичтаем.."];
}
- if (empty($color)) $color="NULL";
- if ($storeId=="NULL" and $color=="NULL") $formula=false;
- if ($storeId=="NULL" and $color!="NULL") $formula=false;
- if ($storeId!="NULL" and $color=="NULL") $formula=true;
+ if(empty($color)) $color="NULL";
+ if($storeId=="NULL" and $color=="NULL") $formula=false;
+ if($storeId=="NULL" and $color!="NULL") $formula=false;
+ if($storeId!="NULL" and $color=="NULL") $formula=true;
$value_arr=[];
$param=array();
- $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color] ?? '';
- $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color] ?? '';
- $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color] ?? '';
- $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color] ?? '';
- $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color] ?? '';
+ $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color];
+ $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color];
+ $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color];
+ $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color];
+ $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color];
- if (empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color] ?? 0;
+ if(empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color];
- $param["min_lot"]=$FiledsData["min_lot"][$productId];
- if (empty($store_id)) $param["min_order"]=$FiledsData["min_order"][$productId];
+ $param["min_lot"]=$FiledsData["min_lot"][$productId][0][0];
+ if(empty($store_id)) $param["min_order"]=$FiledsData["min_order"][$productId][0][0];
- $param["quantity_purchase_summ"]=$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color] ?? '';
- $param["quantity_warehouseman_fact"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color] ?? '';
- $param["quantity_purchase"]=$FiledsData["quantity_purchase"][$productId][$storeId][$color] ?? '';
+ $param["quantity_purchase_summ"]=@$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color];
+ $param["quantity_warehouseman_fact"]=@$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+ $param["quantity_purchase"]=@$FiledsData["quantity_purchase"][$productId][$storeId][$color];
// считаем авто деление
-if ($type=="division") {
- $value="устарело";
+if($type=="division") {
+ $value="устарело";
}
// считаем авто деление
-if ($type=="division_ratio") {
- $value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
- $value_title="коэффицент";
+if($type=="division_ratio") {
+$value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+$value_title="коэффицент";
}
/*
*/
- // считаем авто деление
- if ($type=="division_auto_need") {
- $value_arr=function_division_auto_need_formula($param);
- $value=$value_arr["value"];
- $value_title=$value_arr["title"];
+// считаем авто деление
+if($type=="division_auto_need") {
+$value_arr=function_division_auto_need_formula($param);
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto_need");
+//echo"<br>!!!+$value";
+
+}
+
+}
- $data_uper = [];
- if (!empty($value)) {
- $data_uper[$productId][$storeId][$color]=$value;
- insert_store_orders_fields($data_uper,"division_auto_need");
- //echo"<br>!!!+$value";
+// вторая формула автозаказа
+ if($type=="auto_purchase_formula") {
- }
- }
+if(empty($storesAll)) $storesAll=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
- // вторая формула автозаказа
- if ($type=="auto_purchase_formula") {
- if (empty($storesAll)) {
- $storesAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store'])->all(), 'id', 'name');
-// $storesAll = $db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
- }
+
+
$value_arr=function_auto_purchase_formula($param);
$value=$value_arr["value"];
$value_title=$value_arr["title"];
- if ($color=="NULL" and !empty($storesAll[$storeId])) {
- $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
-
- $itog=($FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] ?? 0) - ($param["goods_in_transit"] ?? 0);
-
- $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] = ($FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] ?? 0) + $value;
- echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";
- }
+ if($color=="NULL" and !empty($storesAll[$storeId])) {
+
+
+ $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+
+
+ $itog=$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]-$param["goods_in_transit"];
+
+ $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] +=$value;
+ echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";
+ }
- $data_uper = [];
-
- if (!empty($value)) {
- $data_uper[$productId][$storeId][$color] = $value;
- $data_ttl[$productId][$storeId][$color] = $value_title;
- insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
- }
- }
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+$data_ttl[$productId][$storeId][$color]=$value_title;
+insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
+}
+}
- // формула подсчета за неделю - товар в пути
- if ($type=="quantity_zakup_fact_week") {
+ // формула подсчета за неделю - товар в пути
+ if($type=="quantity_zakup_fact_week") {
$value=return_quantity_zakup_fact_week_formula($productId,$color);
}
- if ($type=="quantity_purchase_last_week") {
- $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color] ?? '';
+ if($type=="quantity_purchase_last_week") {
+ $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color];
}
/*
- if ($type=="auto_purchase") {
+ if($type=="auto_purchase") {
//Мин планограмма -остатки факт на витрине +продажи +(продажи:7*3)+(продажи *5%)
$sale_zapas3=($data_values["sales_cnt"][$pid]/7)*3;
$sale_week=$data_values["sales_cnt"][$pid];
*/
- $array=["value"=>$value ?? 0,"title"=>$value_title ?? ''];
-
- return $array;
+$array=["value"=>$value,"title"=>$value_title];
+return $array;
}
-function getValueStatsFormula($field_name, $productId, $storeId, $color){
- global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;
-
- $array = returnFormula($field_name, $productId, $storeId, $color);
- return $array;
-}
-
-// получаем занчение перменнй по ее названию товару и магазину и цвету
-function getValueField($field_name,$productId,$storeId="NULL",$color="NULL") {
- global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
-
- if (empty($storeId)) {
- $storeId = "NULL";
- }
-
- if (empty($color)) {
- $color = "NULL";
- }
-
- $type_field = $fieldsRows[$field_name]["field_type"];
- if ($type_field=="global") {
- $value=getValueFieldGlobal($field_name,$productId);
- // echo"<br> $field_name pid=$productsId = value= $value";
- } elseif ($type_field=="global_hand") {
- $value=getValueFieldGlobalHand($field_name,$productId);
-
- if (empty($value)) {
- $value = $DataFieldStatsSumm[$productId][$field_name];
- }
- if (empty($value)) {
- $value = $FiledsData[$field_name][$productId]["NULL"]["NULL"];
- }
- } elseif ($type_field == "stats") {
- $value = getValueFieldStats($field_name, $productId, $storeId, $color);
- } elseif ($type_field == "static_hand" or $type_field == "stats_hand" ) {
- $value=getValueFieldStats($field_name,$productId,$storeId,$color);
- echo $type_field;
- } elseif ($type_field == "stats_formula") {
- $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+function getValueStatsFormula($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;
- } elseif ($type_field=="stats_store_summ") {
- $value = getValueFieldStatsSumm($field_name, $productId, $color);
+ $array = returnFormula($field_name, $productId, $storeId, $color);
+ return $array;
+}
- } elseif ($type_field=="stats_summ") {
- $value = getValueFieldStatsSumm($field_name, $productId, $color);
+
- } elseif ($type_field=="stats_store_hand") {
- $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);
- //echo $type_field." p=$productId $storeId $color ";
- } else {
- $value=$FiledsData[$field_name][$productId][$storeId][$color];
- }
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueField($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $type_field=$fieldsRows[$field_name]["field_type"];
+ if($type_field=="global") {
+ $value=getValueFieldGlobal($field_name,$productId);
+ // echo"<br> $field_name pid=$productsId = value= $value";
+ }
+
+ elseif($type_field=="global_hand") {
+ $value=getValueFieldGlobalHand($field_name,$productId);
+
+ if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+
+
+ } elseif($type_field=="stats") $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+ elseif($type_field=="static_hand" or $type_field=="stats_hand" ) {
+ $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+ echo $type_field;
+ }elseif($type_field=="stats_formula") {
+ $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+
- $tip = $fieldsRows[$field_name]["tip"];
+
+ } elseif($type_field=="stats_store_summ") $value=getValueFieldStatsSumm($field_name,$productId,$color);
+ elseif($type_field=="stats_summ") $value=getValueFieldStatsSumm($field_name,$productId,$color);
+ elseif($type_field=="stats_store_hand") {
+
+ $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);
+ //echo $type_field." p=$productId $storeId $color ";
+ }
+ else {
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ }
+
+
+$tip=$fieldsRows[$field_name]["tip"];
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.00','',$value);
- if ($tip!="string" and $tip!="double" ) {
- $value = round($value);
- }
+
- $value=str_replace('.00','',$value);
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];
+
+return $array;
+}
- if (empty($array)) {
- $array = [
- "value" => $value,
- "title" => $value_title
- ];
- }
- return $array;
-}
// получаем занчение перменнй по ее названию товару и магазину и цвету
function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
- global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
+global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll, $prices;
- if (empty($storeId)) $storeId="NULL";
- if (empty($color)) $color="NULL";
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
- $colorFirst=$color;
+ $colorFirst=$color;
- $type_field=$fieldsRows[$field_name]["field_type"];
-
-
- if (
- $field_name=="division_ratio"
- or $field_name=="division_auto_need_all"
- or $field_name=="quantity_zakup_fact"
- or $field_name=="quantity_warehouseman_fact"
- or $field_name=="storehouse_balance"
- or $field_name=="min_lot"
- or $field_name=="purchase_fact_difference"
- or $field_name=="division_hand_summ"
- or $field_name=="division_auto_all"
- or $field_name=="division_summ_all"
- or $field_name=="delta_zakup"
- or $field_name=="quantity_zakup"
- or $field_name=="quantity_zakup_fact_summa"
-
- or $field_name=="comment_zakup"
- or $field_name=="quantity_zakup_info"
- or $field_name=="purchase_kust_summ"
- or $field_name=="quantity_zakup_fact_week"
- or $field_name=="quantity_purchase_summ"
- or $field_name=="delta_rejection"
- or $field_name=="quantity_warehouseman_defective"
- or $field_name=="write_offs_comments_all"
- or $field_name=="goods_in_transit"
- or $field_name=="auto_purchase_formula_all"
- or $field_name=="quantity_storage"
- ) {
- $storeId="NULL";
- $color="NULL";
- }
+ $type_field=$fieldsRows[$field_name]["field_type"];
+
+
+ if($field_name=="division_ratio"
+ or $field_name=="division_auto_need_all"
+ or $field_name=="quantity_zakup_fact"
+ or $field_name=="quantity_warehouseman_fact"
+ or $field_name=="storehouse_balance"
+ or $field_name=="min_lot"
+ or $field_name=="purchase_fact_difference"
+ or $field_name=="division_hand_summ"
+ or $field_name=="division_auto_all"
+ or $field_name=="division_summ_all"
+ or $field_name=="delta_zakup"
+ or $field_name=="quantity_zakup"
+ or $field_name=="quantity_zakup_fact_summa"
+
+ or $field_name=="comment_zakup"
+ or $field_name=="quantity_zakup_info"
+ or $field_name=="purchase_kust_summ"
+ or $field_name=="quantity_zakup_fact_week"
+ or $field_name=="quantity_purchase_summ"
+ or $field_name=="delta_rejection"
+ or $field_name=="quantity_warehouseman_defective"
+ or $field_name=="write_offs_comments_all"
+ or $field_name=="goods_in_transit"
+ or $field_name=="auto_purchase_formula_all"
+ or $field_name=="quantity_storage"
+ ) {$storeId="NULL"; $color="NULL"; }
+
+
+ if($field_name=="quantity_zakup_fact"
+ or $field_name=="quantity_warehouseman_fact"
+ or $field_name=="delta_zakup"
+ or $field_name=="quantity_zakup"
+ or $field_name=="quantity_zakup_info"
+ ) {$storeId="NULL"; $color=$colorFirst; }
+
- if (
- $field_name=="quantity_zakup_fact"
- or $field_name=="quantity_warehouseman_fact"
- or $field_name=="delta_zakup"
- or $field_name=="quantity_zakup"
- or $field_name=="quantity_zakup_info"
- ) {
- $storeId="NULL";
- $color=$colorFirst;
- }
-
- //TODO TUT
- $roo = $FiledsData[$field_name][$productId] ?? '';
- try {
- $roo2 = $FiledsData[$field_name][$productId][$storeId] ?? '';
- } catch (\Exception $e) {
- $roo2 = '';
- }
- try {
- $value=$FiledsData[$field_name][$productId][$storeId][$color] ?? '';
- } catch (\Exception $e) {
- $value = '';
- }
- $tip=$fieldsRows[$field_name]["tip"];
-
- if ($field_name=="min_lot") {
- $value = $FiledsData[$field_name][$productId];
- }
-
- if ($field_name=="min_order") {
- $value = $FiledsData[$field_name][$productId];
- }
-
- if ($field_name == "color_percent") {
+
+
+ @$value=$FiledsData[$field_name][$productId][$storeId][$color];
+ @$tip=$fieldsRows[$field_name]["tip"];
+
+ if($field_name=="min_lot") $value=$FiledsData[$field_name][$productId][0][0];
+ if($field_name=="min_order") $value=$FiledsData[$field_name][$productId][0][0];
+
+
+ if($field_name=="color_percent") {
//$tip="string";
- $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
- $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);
- }
+ $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);
+
+ }
- if ($field_name=="comment_zakup") {
+ if($field_name=="comment_zakup") {
- // $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+// $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
- }
+ }
- $value_title = $FiledsData["title__".$field_name][$productId][$storeId][$color] ?? '';
+@$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) @$value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) @$value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
- if (empty($value_title)) {
- $value_title = $FiledsData["title__" . $field_name][$productId][$storeId]["NULL"] ?? '';
- }
-
- if (empty($value_title)) {
- $value_title = $FiledsData["title__" . $field_name][$productId]["NULL"]["NULL"] ?? '';
- }
-
-
- if ($tip!="string" and $tip!="double") {
- $value = round($value);
- }
-
- $value = str_replace('.000','',$value);
+
- if ($tip=="double") {
- $value = round($value, 2);
- }
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
- if (empty($array)) {
- $array = [
- "value" => $value,
- "title" => $value_title
- ];
- }
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];
- return $array;
+return $array;
}
-function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
- global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll ;
- $value=$valueArray["value"];
- $value_title=$valueArray["title"];
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices ;
+
- $colorName=trim(str_replace(['\\','/'],['',''],$color));
- $md5Color=md5($color);
- $show=1;
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
- if (!empty($color) and $color!='NULL') {
+ $colorName=trim(str_replace(['\\','/'],['',''],$color));
+ $md5Color=md5($color);
+ $show=1;
+ if(!empty($color) and $color!='NULL') {
$nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';
$idInput=''.$fieldName.''.$productId.''.$md5Color.'';
- $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';
-
- if (!empty($storeId)) {
- if ($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) {
- $show = 1;
- } else {
- $show = 0;
- }
+ $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';
+ if(!empty($storeId)) {
+ if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1; else $show=0;
+
+ if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"])) $show=1;
+
- if (in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"])) {
- $show = 1;
- }
}
- } else {
+ }
+ else {
$nameInput=''.$fieldName.'['.$productId.']';
$idInput=''.$fieldName.''.$productId.'';
- $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';
+ $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';
}
- if (in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {
+ if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {
echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
- if (!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
- if (isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
- if (isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+ if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+ if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
echo'>';
- } elseif ($fieldsRows[$fieldName]["type"]=="textarea") {
+ }
+ elseif($fieldsRows[$fieldName]["type"]=="textarea") {
echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'" name='.$nameInput.' class="form-control"';
-
- if (isset($fieldsRows[$fieldName]["placeholder"])) {
- echo ' placeholder="' . $fieldsRows[$fieldName]["placeholder"] . '"';
- }
-
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
echo'>'.$value.'</textarea>';
- } else {
- if (!empty($value_title)) {
- echo "<span title=\"$value_title\">$value</span>";
- } else {
- echo $value;
- }
- }
+ }
+ else {
+ if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+ else echo $value;
+ }
+
}
-function printFieldTd($fieldName,$productId,$storeId,$color="") {
- global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum, $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
- $fieldId = $fieldsRows[$fieldName]["id"];
- $dostup = $dostup_fields[$fieldId];
- $bg = $bg_fields[$fieldId];
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum, $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;
- // $dostup="edit";
- if (empty($storeId)) {
- $storeId = "NULL";
- }
+ $fieldId=$fieldsRows[$fieldName]["id"];
+
+
+ @$dostup=$dostup_fields[$fieldId];
+ @$bg=$bg_fields[$fieldId];
+ // $dostup="edit";
+ if(empty($storeId) or $fieldName=="purchase_price") $storeId="NULL";
- if ($dostup=="edit" or $dostup=="show") {
+if($dostup=="edit" or $dostup=="show") {
+
+ //можно ли это поле в принципе редактировать
+ $edit=$fieldsRows[$fieldName]["field_edit"];
+ //можно ли это поле редактировать если выбран магазин
+ if($storeId!="NULL") {
+ $edit=$fieldsRows[$fieldName]["field_store_edit"];
+ $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+ } else {
+ $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина
+
+
+ if($fieldsRows[$fieldName]["field_type"]=="stats_store_hand") $edit=0;
+
+ }
- //можно ли это поле в принципе редактировать
- $edit=$fieldsRows[$fieldName]["field_edit"];
+ echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'" class="p-1 text-center ';
- //можно ли это поле редактировать если выбран магазин
- if ($storeId!="NULL") {
- $edit=$fieldsRows[$fieldName]["field_store_edit"];
- $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
- } else {
- $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина
- }
+ $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+
+
+ //$value=$FiledsData[$fieldName][$productId][$storeId][$color];
- echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'" class="p-1 text-center ';
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";
+
+
+///$valueArray["value"]=$value;
+//$valueArray["title"]=$value_title;
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
- $valueArray = getValueFieldTrue($fieldName,$productId,$storeId,$color);
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++; }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value; }
+}
+
- //$value=$FiledsData[$fieldName][$productId][$storeId][$color];
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
- //echo $FiledsData[$fieldName][$productId][$storeId][$color];
- //$tip=$fieldsRows[$fieldName]["tip"];
- //if ($tip!="string" and $tip!="double" ) $value=round($value);
- //$value=str_replace('.00','',$value);
- //$value_title="";
+ if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';
+
+ // показываем поле настройки поля позволяют.
+ if($store_show==1) {
- ///$valueArray["value"]=$value;
- //$valueArray["title"]=$value_title;
+ if($dostup=="edit" and $edit==1) {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";
+ printFieldType($valueArray,$fieldName,$productId,$storeId,$color);
+
+ }
+ else {
+ if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+ else {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit";
+ echo $value;
+
+
+ }
+
+
+
+ }
+ }
+ else { //если значение поля не нужно выводить то показвываем заглушку
+
+ echo'XXX';
+
+ }
+
+
+
+
+ echo'</td>';
+}
+
+
+
+}
- $value=$valueArray["value"];
- $value_title=$valueArray["title"];
- if (empty($color)) {
- if ($fieldsRows[$fieldName]["row_type_sum"]=="sum") {
- $rowArraySum[$fieldId] = ($rowArraySum[$fieldId] ?? 0) + $value;
- }
- if ($fieldsRows[$fieldName]["row_type_sum"]=="avg") {
- $rowArraySum[$fieldId] = ($rowArraySum[$fieldId] ?? 0) + $value;
- $rowArraySum["cnt__".$fieldId] = ($rowArraySum["cnt__".$fieldId] ?? 0) + 1;
- }
- if ($fieldsRows[$fieldName]["row_type_sum"]=="amount") {
- $rowArraySum[$fieldId] = ($rowArraySum[$fieldId] ?? 0) + $value;
- }
- }
- $bgNew = returnRowCssClassByFieldValue($fieldName,$value);
- if (!empty($bgNew)) {
- $bg = $bgNew;
- }
+//вставляем данные в таблицу дашборда
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData, $prices;
+
+@$field_id=$fieldsRows[$field_name]["id"];
+@$type=$fieldsRows[$field_name]["type"];
+foreach($massivSQL as $productId =>$array) {
+ foreach($array as $storeId =>$valueArr) {
+ foreach($valueArr as $color =>$value) {
+ if(empty($color) or $storeId=="NULL") $color="";
+ if($color=="NULL") $color="";
+
+ if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL') $storeId=$storeIdToGuidArray[$storeId];
+ if(empty($storeId) or $storeId=="NULL") $storeId="";
+
+ if($type=="string") {$value_text=$value; $value="";}
+ else { $value_text=""; }
- if (isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';
+ try {
+ // if($field_name=="division_auto_need") echo"<br>$field_name pid=$productId + storeId=$storeId + color=$color + =$value ".print_r($value)." ";
+ if(!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
+
+
+ if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ if(empty($color)) $colorData="NULL"; else $colorData=$color;
+ @$oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+ @$oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+
+ if($print==true) echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle $title";
+
+
+
+ if(($type!="string") or ($type=="string" and $value_text!="")) {
+
+
+ @$title=$massivTitle[$productId][$storeIdData][$colorData];
+
+ $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)
+ VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
+ [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+
+ }
+
+ if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+ if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+
+ // echo"<br>По этому товару не обновляем так ка значение старое уже есть";
+
+ }
+
+ if(((empty($value) or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and $type!="string") or ($type=="string" and $value_text=="")) {
+
+ }
+ else {
+ // if($print==true) echo"<br>!!! $field_name =$value";
+ // $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title) VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?", [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+ }
+
+ // if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ //if(empty($color)) $colorData="NULL"; else $colorData=$color;
+
+ // echo"<br>$field_name pid=$productId color=$color =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]." ";
+
+
+ }
+ }
+
+ } catch (Exception $e)
+ {
+ echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+ }
+
+
+ }
+ }
+ }
+}
- // показываем поле настройки поля позволяют.
- if ($store_show==1) {
- if ($dostup=="edit" and $edit==1) {
- // if ($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";
- printFieldType($valueArray,$fieldName,$productId,$storeId,$color);
- } else {
- if (!empty($value_title)) {
- echo "<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
- } else {
- // if ($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit";
- echo $value;
+// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
+// собираем массив с данными по названию поля - входной параметр Имя поля
+function getArrayByFiledName($field_name,$date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;
+$data_values=[];
+$products_class=[];
+$data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"];
- }
- }
- } else {
- //если значение поля не нужно выводить то показвываем заглушку
- echo'XXX';
- }
- echo'</td>';
- }
+
+
+$periodDaysStats=14; //количество дней статистики по продажам и списанию
+
+// сколько на складе по 1с
+if($field_name=="quantity_storage") {
+$data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND product_id $whereInProductsId ");
+foreach($data2 as $row2) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+@$data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
}
-//вставляем данные в таблицу дашборда
-function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
- global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData;
-
- $field_id=$fieldsRows[$field_name]["id"];
- $type=$fieldsRows[$field_name]["type"];
-
- foreach($massivSQL ?? [] as $productId =>$array) {
- foreach($array as $storeId =>$valueArr) {
- foreach($valueArr as $color =>$value) {
- if (empty($color) or $storeId=="NULL") {
- $color = "";
- }
-
- if ($color=="NULL") {
- $color = "";
- }
-
- if (is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL') {
- $storeId = $storeIdToGuidArray[$storeId];
- }
-
- if (empty($storeId) or $storeId=="NULL") {
- $storeId = "";
- }
-
- if ($type=="string") {
- $value_text=$value; $value="";
- }
- else {
- $value_text="";
- }
-
- try {
- // if ($field_name=="division_auto_need") echo"<br>$field_name pid=$productId + storeId=$storeId + color=$color + =$value ".print_r($value)." ";
- if (!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
-
-
- if (empty($storeId))
- $storeIdData="NULL";
- else
- $storeIdData=$storeId;
- if (empty($color))
- $colorData="NULL";
- else
- $colorData=$color;
- $oldvalue = $FiledsData[$field_name][$productId][$storeIdData][$colorData];
- $oldtitle = $FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
-
- if ($print==true) {
- echo "<br>!!!--------$field_name =$value oldtitle=$oldtitle $title";
- }
-
-
- if (($type!="string") or ($type=="string" and $value_text!="")) {
-
- $title=$massivTitle[$productId][$storeIdData][$colorData];
- $storeOrdersFieldsData = StoreOrdersFieldsData::find()->where(['order_id' => $orderId, 'product_id' => $productId, 'store_id' => $storeId,
- 'field_id' => $field_id, 'field_name' => $field_name, 'color' => $color])->one();
- if (!$storeOrdersFieldsData) {
- $storeOrdersFieldsData = new StoreOrdersFieldsData;
- $storeOrdersFieldsData->order_id = $orderId;
- $storeOrdersFieldsData->product_id = $productId;
- $storeOrdersFieldsData->store_id = $storeId;
- $storeOrdersFieldsData->field_id = $field_id;
- $storeOrdersFieldsData->field_name = $field_name;
- $storeOrdersFieldsData->color = $color;
- $storeOrdersFieldsData->hand = -1;
- } else {
- $storeOrdersFieldsData->hand = 0;
- }
- $storeOrdersFieldsData->value = $value;
- $storeOrdersFieldsData->value_text = $value_text;
- $storeOrdersFieldsData->date_update = date('Y-m-d H:i:s');
- $storeOrdersFieldsData->title = $title;
-// $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)
-// VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
-// [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
-
- }
-
- if (($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
- if (($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
-
- // echo"<br>По этому товару не обновляем так ка значение старое уже есть";
-
- }
-
- if (
- (
- (
- empty($value)
- or
- $value=="0.000"
- or
- $oldvalue==$value
- or
- $oldvalue=="$value.000"
- or
- $oldtitle==$title
- )
- and
- $type!="string"
- )
- or
- (
- $type=="string"
- and
- $value_text==""
- )
- ) {
-
- //
- }
- else {
- // if ($print==true) echo"<br>!!! $field_name =$value";
- // $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title) VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?", [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
- }
-
- // if (empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
- //if (empty($color)) $colorData="NULL"; else $colorData=$color;
-
- // echo"<br>$field_name pid=$productId color=$color =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]." ";
-
-
- }
- }
-
- } catch (Exception $e)
- {
- echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param ?? '').' error='. $e->getMessage();
- }
- }
- }
- }
+//полнограмма
+if($field_name=="quantity") {
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($store_planogram as $row) {
+
+
+ // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} g ={$row["quantity"]}";
+ @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ @$data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+
+}
}
-// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
-// собираем массив с данными по названию поля - входной параметр Имя поля
-function getArrayByFiledName($field_name,$date1,$date2) {
- global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$whereInProductsIdArr, $date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;
- $products_class=[];
- $data = ProductsClass::find()->where(['in', 'tip', ['potted', 'wrap']])->asArray()->all();
-// $data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
- foreach($data as $row) {
- $products_class[$row["category_id"]] = $row["tip"];
- }
+//плнограмма факт quantity_fact
+if($field_name=="quantity_fact") {
+$db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
+
+
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+ // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} quantity ={$row["quantity"]}";
+ @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ @$data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+}
+}
- $periodDaysStats=14; //количество дней статистики по продажам и списанию
- // сколько на складе по 1с
- if ($field_name=="quantity_storage") {
- $data2 = Balances::find()->where(['>', 'quantity', 0])->andWhere(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-// $data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND product_id $whereInProductsId ");
- foreach($data2 as $row2) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
- $data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
- }
- }
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
- //полнограмма
- if ($field_name=="quantity") {
- $store_planogram = StorePlanogram::find()->select(['product_id', 'quantity', 'store_id', 'color'])->where(['>', 'quantity', 0])
- ->andWhere(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-// $store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
- foreach($store_planogram as $row) {
+//узнаем категорибю товара
+@$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+@$tip=$products_class[$categoryId];
+// если это срезка у нее нет группы
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
+ $productGroupArray["flowers"][]=$pid;
+
+}elseif($tip=="potted") { $daysCounterSales=14; $daysCounterWriteOffs=14; $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30; $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in)
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ @$data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+}
+}
- // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} g ={$row["quantity"]}";
- $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
- $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
- }
- }
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt111") {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id $whereInProductsId
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ @$data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
- //плнограмма факт quantity_fact
- if ($field_name=="quantity_fact") {
- StoreOrdersFieldsData::deleteAll(['order_id' => $orderId, 'field_name' => 'quantity_fact']);
-// $db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
- $spf = StoreProductsFact::find()->select(['date_id'])->orderBy(['date_id' => SORT_DESC])->asArray()->one();
- $date_id = $spf['date_id'];
-// $date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
- $store_products_fact = StoreProductsFact::find()->select(['product_id', 'quantity', 'store_id', 'color'])
- ->where(['>', 'quantity', 0])->andWhere(['date_id' => $date_id])
- ->andWhere(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-// $store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id $whereInProductsId",[$date_id]);
- foreach($store_products_fact as $row) {
- // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} quantity ={$row["quantity"]}";
+//продажи количество штук привязанные к дате деления
+if($field_name=="sales_7day_division") {
- $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
- $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
- }
- }
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+if(!empty($whereInProductsId_in)) {
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ @$data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+//echo"<br> Дата атуальных продаж для деления $date_start_division ";
+//print_r($data_values);
+
+}
+}
- //разбиваем продукты по группам - у каждой группы будет свой запрос
- $productGroupArray=[];
- foreach($products as $pid => $pName) {
+//продажи сумма привязанные к дате деления
+if($field_name=="sales_7day_amount_division" ) {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
- //узнаем категорибю товара
- $categoryId=$ProductsOptions[$pid]["parent_id"];
- // по категории узнаем тип товара горшечка или упаковка
- $tip=$products_class[$categoryId];
- // если это срезка у нее нет группы
- if (empty($tip)) {
- $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
- $productGroupArray["flowers"][] = $pid;
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
- } elseif ($tip=="potted") {
- $daysCounterSales=14;
- $daysCounterWriteOffs=14;
- $productGroupArray["potted"][] = $pid;
- } elseif ($tip=="wrap") {
- $daysCounterSales=30;
- $daysCounterWriteOffs=30;
- $productGroupArray["wrap"][] = $pid;
- }
- //echo"<br> $pid => $pName $tip $categoryId";
- }
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");
+foreach($data2 as $row2) {
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+@$data_values[$row2["product_id"]][0][0] +=$sale;
+}
+}
+}
+}
+}
- // настройки для срезки
- $configGroupProducts["flowers"]["day_sales"]=7;
- $configGroupProducts["flowers"]["day_write_offs"]=7;
- //для горшечки
- $configGroupProducts["potted"]["day_sales"]=14;
- $configGroupProducts["potted"]["day_write_offs"]=14;
- //для упаковки
- $configGroupProducts["wrap"]["day_sales"]=30;
- $configGroupProducts["wrap"]["day_write_offs"]=30;
-
-
-
- //продажи количество штук привязанные к дате старта продаж
- if ($field_name=="sales_cnt") {
- // пробегаем по каждому типу товара и группируем запросы к БД
- foreach($productGroupArray as $group =>$pArray) {
- $day_sales=$configGroupProducts[$group]["day_sales"];
- echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
- //собираем условие по выборке товаров
- $whereInProductsId_in="";
- $j=0;
- foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
-
- if (!empty($whereInProductsId_in)) {
- $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
- "sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt", "sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt"])
- ->innerJoin('sales_products as i', 's.id = i.check_id')
- ->where(['in', 'i.product_id', $pArray])
- ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
- ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL ' . $day_sales . ' day')])
- ->groupBy(['i.product_id', 's.store_id', 's.operation'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt
-// FROM sales as s, sales_products as i
-// WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in)
-// AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
- foreach($data2 as $row2) {
- $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
- $cnt=(int)$cnt;
- if (!empty($cnt)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
- $data_values[$row2["product_id"]][0][0] +=$cnt;
- }
- }
- }
- }
- }
+//продажи сумма
+if($field_name=="sales_amount" ) {
+
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
- //продажи количество штук привязанные к дате старта продаж
- if ($field_name=="sales_cnt111") {
- $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
- "sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt", "sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt"])
- ->innerJoin('sales_products as i', 's.id = i.check_id')
- ->where(['in', 'i.product_id', $pArray])
- ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
- ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL 7 day')])
- ->groupBy(['i.product_id', 's.store_id', 's.operation'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt
-// FROM sales as s, sales_products as i
-// WHERE s.id=i.check_id AND i.product_id $whereInProductsId
-// AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation ");
- foreach($data2 as $row2) {
- $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
- $cnt=(int)$cnt;
- if (!empty($cnt)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
- $data_values[$row2["product_id"]][0][0] +=$cnt;
- }
- }
- }
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id,sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");
+foreach($data2 as $row2) {
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+@$data_values[$row2["product_id"]][0][0] +=$sale;
+}
+}
+}
+}
+}
- //продажи количество штук привязанные к дате деления
- if ($field_name=="sales_7day_division") {
-
- // пробегаем по каждому типу товара и группируем запросы к БД
- foreach($productGroupArray as $group =>$pArray) {
- $day_sales=$configGroupProducts[$group]["day_sales"];
- echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
- //собираем условие по выборке товаров
- $whereInProductsId_in="";
- $j=0;
- foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
-
- if (!empty($whereInProductsId_in)) {
-
- $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
- "sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt", "sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt"])
- ->innerJoin('sales_products as i', 's.id = i.check_id')
- ->where(['in', 'i.product_id', $pArray])
- ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
- ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL ' . $day_sales . ' day')])
- ->groupBy(['i.product_id', 's.store_id', 's.operation'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if (s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if (s.operation='Возврат',i.quantity,0)) as vozvr_cnt
-// FROM sales as s, sales_products as i
-// WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
- foreach($data2 as $row2) {
- $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
- $cnt=(int)$cnt;
-
- if (!empty($cnt)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
- $data_values[$row2["product_id"]][0][0] +=$cnt;
- }
- }
- }
- //echo"<br> Дата атуальных продаж для деления $date_start_division ";
- //print_r($data_values);
- }
- }
+//списания за 14 дней среднее - недельное списание от даты 1
+if($field_name=="write_downs" or $field_name=="quantity_rejection") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
- //продажи сумма привязанные к дате деления
- if ($field_name=="sales_7day_amount_division" ) {
-
- // пробегаем по каждому типу товара и группируем запросы к БД
- foreach($productGroupArray as $group =>$pArray) {
- $day_sales=$configGroupProducts[$group]["day_sales"];
- echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
- //собираем условие по выборке товаров
- $whereInProductsId_in="";
- $j=0;
- foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
-
- if (!empty($whereInProductsId_in)) {
- $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
- "sum(if (s.operation='Продажа',i.summ,0)) as sale", "sum(if (s.operation='Возврат',i.summ,0)) as vozvr"])
- ->innerJoin('sales_products as i', 's.id = i.check_id')
- ->where(['in', 'i.product_id', $pArray])
- ->andWhere(['<=', 's.date', "$date_start_division 00:00:00"])
- ->andWhere(['>=', 's.date', new Expression($date_start_division . ' - INTERVAL ' . $day_sales . ' day')])
- ->groupBy(['i.product_id', 's.store_id', 's.operation'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT i.product_id, sum(if (s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if (s.operation='Возврат', i.summ ,0)) as vozvr
-// FROM sales as s, sales_products as i
-// WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");
- foreach($data2 as $row2) {
- $sale=$row2["sale"]-$row2["vozvr"];
- $sale=(int)$sale;
- if (!empty($sale)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
- $data_values[$row2["product_id"]][0][0] +=$sale;
- }
- }
- }
- }
- }
+if(!empty($whereInProductsId_in)) {
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND
- //продажи сумма
- if ($field_name=="sales_amount" ) {
- // пробегаем по каждому типу товара и группируем запросы к БД
- foreach($productGroupArray as $group =>$pArray) {
- $day_sales=$configGroupProducts[$group]["day_sales"];
- echo"<br>+++ <h1>$group дней $day_sales</h1> ";
-
- //собираем условие по выборке товаров
- $whereInProductsId_in="";
- $j=0;
- foreach($pArray as $prodId) {if ($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
-
- if (!empty($whereInProductsId_in)) {
- $data2 = Sales::find()->alias('s')->select(["i.product_id", "s.store_id_1c as store_id",
- "sum(if (s.operation='Продажа',i.summ,0)) as sale", "sum(if (s.operation='Возврат',i.summ,0)) as vozvr"])
- ->innerJoin('sales_products as i', 's.id = i.check_id')
- ->where(['in', 'i.product_id', $pArray])
- ->andWhere(['<=', 's.date', "$date_start_sale 00:00:00"])
- ->andWhere(['>=', 's.date', new Expression($date_start_sale . ' - INTERVAL ' . $day_sales . ' day')])
- ->groupBy(['i.product_id', 's.store_id', 's.operation'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT i.product_id,sum(if (s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if (s.operation='Возврат', i.summ ,0)) as vozvr
-// FROM sales as s, sales_products as i
-// WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");
- foreach($data2 as $row2) {
- $sale=$row2["sale"]-$row2["vozvr"];
- $sale=(int)$sale;
- if (!empty($sale)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
- $data_values[$row2["product_id"]][0][0] +=$sale;
- }
- }
- }
- }
- }
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
+echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND
- //списания за 14 дней среднее - недельное списание от даты 1
- if ($field_name=="write_downs" or $field_name=="quantity_rejection") {
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
- // пробегаем по каждому типу товара и группируем запросы к БД
- foreach($productGroupArray as $group =>$pArray) {
- $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
- echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+$valAll=0;
+foreach($data2 as $row2) {
+
+if($periodDaysStats==7) $a=ceil($row2["cnt"]/2);
+else $a=ceil($row2["cnt"]);
- //собираем условие по выборке товаров
- $whereInProductsId_in="";
- $j=0;
- foreach($pArray as $prodId) {
- if ($j>0)
- $whereInProductsId_in .=",";
+if(!empty($a)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+@$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
- $whereInProductsId_in .="'$prodId'";
- $j++;
- }
+//списания за 14 дней среднее - недельное списание от даты деления
+if($field_name=="write_offs_division") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+foreach($data2 as $row2) {
+
+$a=ceil($row2["cnt"]);
+
- if (!empty($whereInProductsId_in)) {
- //$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
- //echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
-
- if ($periodDaysStats==7) $periodDaysStats_where=14;
- else $periodDaysStats_where=$periodDaysStats;
- $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(p.quantity) as cnt", "w.store_id"])
- ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
- ->where(['w.type' => 'Брак'])
- ->andWhere(['in', 'p.product_id', $pArray])
- ->andWhere(['<=', 'w.date', "$date_start_sale 00:00:00"])
- ->andWhere(['>=', 'w.date', new Expression($date_start_sale . ' - INTERVAL ' . $periodDaysStats_where . ' day')])
- ->groupBy(['p.product_id', 'w.store_id'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
-// FROM write_offs as w, write_offs_products as p
-// WHERE p.write_offs_id=w.id AND w.type='Брак' AND
-//
-// w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
-// AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
-
-
- echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
- FROM write_offs as w, write_offs_products as p
- WHERE p.write_offs_id=w.id AND w.type='Брак' AND
-
- w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
- AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
-
- $valAll=0;
- foreach($data2 as $row2) {
-
- if ($periodDaysStats==7) {
- $a = ceil($row2["cnt"] / 2);
- }
- else {
- $a = ceil($row2["cnt"]);
- }
-
- if (!empty($a)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
- $data_values[$row2["product_id"]][0][0] +=$a;
- }
- }
+if(!empty($a)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+@$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
- }
- }
- }
- //списания за 14 дней среднее - недельное списание от даты деления
- if ($field_name=="write_offs_division") {
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_cnt_avg") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+//$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+//echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+*/
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) {
+ $a=round($row2["cnt"]/4);
+ if(!empty($a)) {
+ @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ @$data_values[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+}
+}
+}
- // пробегаем по каждому типу товара и группируем запросы к БД
- foreach($productGroupArray as $group =>$pArray) {
- $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
- echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
- //собираем условие по выборке товаров
- $whereInProductsId_in="";
- $j=0;
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+*/
- foreach($pArray as $prodId) {
- if ($j>0)
- $whereInProductsId_in .=",";
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) {
+ $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]/4) );
+ if(!empty($a)) {
+ @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ @$data_values[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+}
+}
+}
- $whereInProductsId_in .="'$prodId'";
- $j++;
- }
- if (!empty($whereInProductsId_in)) {
- $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(p.quantity) as cnt", "w.store_id"])
- ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
- ->where(['w.type' => 'Брак'])
- ->andWhere(['in', 'p.product_id', $pArray])
- ->andWhere(['<=', 'w.date', "$date_start_division 00:00:00"])
- ->andWhere(['>=', 'w.date', new Expression($date_start_division . ' - INTERVAL ' . $periodDaysStats . ' day')])
- ->groupBy(['p.product_id', 'w.store_id'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
-// FROM write_offs as w, write_offs_products as p
-// WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
- $valAll=0;
- foreach ($data2 as $row2) {
-
- $a=ceil($row2["cnt"]);
-
-
- if (!empty($a)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
- $data_values[$row2["product_id"]][0][0] +=$a;
- }
- }
- }
- }
- }
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=7;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+*/
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) {
+ $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]) );
+
+ echo"<br> write_offs_sum ".$row2["product_id"]." ".$row2["cnt"]." шт. цена=".$prices[$row2["product_id"]]." ";
+
+ if(!empty($a)) {
+ @$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ @$data_values[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+}
+}
+}
- //комментарии к ксписанию по магазину
- if ($field_name=="write_offs_comments") {
- //$time = strtotime($date1);
- //$time2 = strtotime($date2);
- //$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
- //echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
- //echo"<br>$field_name $date1 - $date_14day";
+//комментарии к ксписанию по магазину
+if($field_name=="write_offs_comments") {
+//$time = strtotime($date1);
+//$time2 = strtotime($date2);
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
- // пробегаем по каждому типу товара и группируем запросы к БД
- foreach($productGroupArray as $group => $pArray) {
- $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
- echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
- //собираем условие по выборке товаров
- $whereInProductsId_in="";
- $j=0;
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
- foreach($pArray as $prodId) {
- if ($j>0)
- $whereInProductsId_in .=",";
+if(!empty($whereInProductsId_in)) {
- $whereInProductsId_in .="'$prodId'";
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
- $j++;
- }
+$date_start_sale2=date("Y-m-d");
- if (!empty($whereInProductsId_in)) {
-
- if ($periodDaysStats==7) {
- $periodDaysStats_where = 14;
- }
- else {
- $periodDaysStats_where = $periodDaysStats;
- }
-
- $date_start_sale2=date("Y-m-d");
-
- $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(c.quantity) as cnt", "w.store_id", "c.comment_id"])
- ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
- ->innerJoin('write_offs_comments as c', 'c.write_offs_id = p.write_offs_id AND p.product_id = c.product_id')
- ->where(['w.type' => 'Брак'])
- ->andWhere(['>', 'c.quantity', 0])
- ->andWhere(['in', 'p.product_id', $pArray])
- ->andWhere(['<=', 'w.date', "$date_start_sale2 00:00:00"])
- ->andWhere(['>=', 'w.date', new Expression($date_start_sale2 . ' - INTERVAL ' . $periodDaysStats_where . ' day')])
- ->groupBy(['p.product_id', 'w.store_id', 'c.comment_id'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
-// FROM write_offs as w, write_offs_products as p, write_offs_comments as c
-// WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0
-//
-// AND p.product_id in($whereInProductsId_in)
-//
-// AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
-//
-// group BY p.product_id,w.store_id, c.comment_id");
-
- $valAll=0;
-
- foreach($data2 as $row2) {
- $a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
- //echo"<br> $a";
- if (!empty($a)) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
- //$data_values[$row2["product_id"]][0][0] +=$a;
- }
- }
- }
- }
- }
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+FROM write_offs as w, write_offs_products as p, write_offs_comments as c
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0
- //комментарии к ксписанию по магазинам суммарно
- if ($field_name=="write_offs_comments_all") {
- $time = strtotime($date1);
- $time2 = strtotime($date2);
-
- $date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
- //echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
- //echo"<br>$field_name $date1 - $date_14day";
- $data2 = WriteOffs::find()->alias('w')->select(["p.product_id", "sum(c.quantity) as cnt", "c.comment_id"])
- ->innerJoin('write_offs_products as p', 'p.write_offs_id = w.id')
- ->innerJoin('write_offs_comments as c', 'c.write_offs_id = p.write_offs_id AND p.product_id = c.product_id')
- ->where(['w.type' => 'Брак'])
- ->andWhere(['>', 'c.quantity', 0])
- ->andWhere(['>=', 'w.date', $date_14day])
- ->andWhere(['<=', 'w.date', $date2])
- ->groupBy(['p.product_id', 'c.comment_id'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, c.comment_id
-// FROM write_offs as w, write_offs_products as p, write_offs_comments as c
-// WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=? AND w.date<=?
-// group BY p.product_id, c.comment_id",[$date_14day,$date2]);
- $valAll=0;
-
- foreach($data2 as $row2) {
- $a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
- //echo"<br> $a";
- $data_values[$row2["product_id"]][0][0] .=$a;
- }
- }
+AND p.product_id in($whereInProductsId_in)
+AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
- //quantity_purchase_last_week заказ за последние неделю который приедет
- if ($field_name=="quantity_purchase_last_week") {
- if ($date_start_sale!='000-00-00') {
+group BY p.product_id,w.store_id, c.comment_id");
+$valAll=0;
+foreach($data2 as $row2) {
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
+//echo"<br> $a";
+if(!empty($a)) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+//$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
- // старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+//комментарии к ксписанию по магазинам суммарно
+if($field_name=="write_offs_comments_all") {
+$time = strtotime($date1);
+$time2 = strtotime($date2);
- //echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
- $dataOrders = StoreOrders::find()->select(['id', 'name', 'date_start'])
- ->where(['<=', 'date_start', $date_start_sale . ' 00:00:00'])
- ->andWhere(['>=', 'date_start', new Expression($date_start_sale . ' - INTERVAL 7 day')])
- ->asArray()->all();
-// $dataOrders=$db::getRows("SELECT id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, c.comment_id
+FROM write_offs as w, write_offs_products as p, write_offs_comments as c
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=? AND w.date<=?
+group BY p.product_id, c.comment_id",[$date_14day,$date2]);
+$valAll=0;
+foreach($data2 as $row2) {
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
+//echo"<br> $a";
+@$data_values[$row2["product_id"]][0][0] .=$a;
+}
+}
- $orders_whereArr = ArrayHelper::getColumn($dataOrders, 'id');
- $orders_where="";
- $i=0;
- echo"В этих закупках считаем закупленный товар";
- foreach($dataOrders as $row22) {
- echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";
- if ($i>0)
- $orders_where .=",";
+//quantity_purchase_last_week заказ за последние неделю который приедет
+if($field_name=="quantity_purchase_last_week") {
+if($date_start_sale!='000-00-00') {
+
+
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+
+
+//echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
+$dataOrders=$db::getRows("SELECT id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+
+$orders_where="";
+$i=0;
+echo"В этих закупках считаем закупленный товар";
+foreach($dataOrders as $row22) {
+ echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";
+ if($i>0) $orders_where .=",";
+ $orders_where .="'".$row22["id"]."'";
+ $i++;
+}
+if(!empty($orders_where)) $orders_where=" AND order_id in($orders_where)";
+$data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0 $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+@$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];
+@$data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];
+}
+}
- $orders_where .="'".$row22["id"]."'";
- $i++;
- }
+}
- if (!empty($orders_where)) {
- $orders_where = " AND order_id in($orders_where)";
- }
- $data3 = StoreOrdersItem::find()->select(['sum(quantity_purchase) as quantity_purchase', 'product_id', 'store_id'])
- ->where(['>', 'quantity_purchase', 0])->andWhere(['in', 'order_id', $orders_whereArr])
- ->groupBy(['product_id', 'store_id'])->asArray()->all();
-// $data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0 $orders_where group by product_id, store_id");
+if($field_name=="goods_in_transit") {
+
+ echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
+if($order_date_add!='000-00-00') {
+
+
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+if(!empty($orders_where)) {
+//$orders_where=" AND order_id in($orders_where)";
+//$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0 $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+//$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];
+//$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];
+}
+}
- foreach($data3 as $row2) {
- $data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];
- $data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];
- }
- }
- }
+$dataOrders2=$db::getRows("SELECT id,date_add FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");
+$idss="";
+$k=0;
- if ($field_name=="goods_in_transit") {
+echo"<b>Товар в пути участвуют заказы:</b>";
+foreach($dataOrders2 as $row) {
+ if($k>0) $idss.=" OR"; $idss.= " order_id='".$row["id"]."'"; $k++;
+
+ echo"<br> id=".$row["id"]." дата старта:".$row["date_add"]." ";
+
+}
- echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
- if ($order_date_add!='000-00-00') {
+if(!empty($idss)) $orders_where=" AND ( $idss) AND order_id!='$orderId'";
- // старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
- if (!empty($orders_where)) {
- //$orders_where=" AND order_id in($orders_where)";
- //$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0 $orders_where group by product_id, store_id");
- foreach($data3 as $row2) {
- //$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];
- //$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];
- }
- }
- $dataOrders2 = StoreOrders::find()->select(['id', 'date_add'])
- ->where(['<=', 'date_add', $order_date_add])
- ->andWhere(['>=', 'date_add', new Expression($order_date_add . ' - INTERVAL 7 day')])
- ->asArray()->all();
-// $dataOrders2=$db::getRows("SELECT id,date_add FROM store_orders
-// WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");
-
- $idssArr = ArrayHelper::getColumn($dataOrders2, 'id');
- $idss="";
- $k=0;
-
- echo"<b>Товар в пути участвуют заказы:</b>";
- foreach($dataOrders2 as $row) {
- if ($k>0) $idss.=" OR"; $idss.= " order_id='".$row["id"]."'"; $k++;
+echo"order_date_add = $order_date_add orders_where=$orders_where ";
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, color FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
+
+ // echo"<br> SQL SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color ";
+
+ foreach($data2 as $row2) {
+ @$data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];
+ // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"];
+
+ echo"<br> ".@$products[$row2["product_id"]]." = ".$row2["value"]." ";
+ }
- echo"<br> id=".$row["id"]." дата старта:".$row["date_add"]." ".$row["name"]."";
- }
+}
- if (!empty($idss)) $orders_where=" AND ( $idss) AND order_id!='$orderId'";
- echo"order_date_add = $order_date_add orders_where=$orders_where ";
- $data2 = StoreOrdersFieldsData::find()->select(['sum(value) as value', 'product_id', 'color'])
- ->where(['field_name' => 'quantity_zakup_fact'])
- ->andWhere(['>', 'value', 0])->andWhere(['in', 'order_id', $idssArr])
- ->andWhere(['!=', 'order_id', $orderId])
- ->groupBy(['product_id', 'color'])
- ->asArray()->all();
-// $data2=$db::getRows("SELECT sum(value) as value, product_id, color FROM
-// store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
- // echo"<br> SQL SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color ";
- foreach($data2 as $row2) {
- $data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];
- // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"];
- echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
- }
- }
- }
+}
- // если мы попадаем в поля сохраненные в таблице store_orders_prices типа global_hand
- $inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
- if (in_array($field_name,$inFieldTable)) {
+// если мы попадаем в поля сохраненные в таблице store_orders_prices типа global_hand
- /// echo"+$field_name+ order_id=$orderId";
- $data = StoreOrdersPrices::find()->select(['product_id', $field_name])->where(['order_id' => $orderId])->asArray()->all();
-// $data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
- foreach($data as $row) {
- //foreach($inFieldTable as $field)
- $data_values[$row["product_id"]][0][0]=$row[$field_name];
- }
+$inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
+if(in_array($field_name,$inFieldTable)) {
+
+ /// echo"+$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
+foreach($data as $row) {
+ //foreach($inFieldTable as $field)
+ @$data_values[$row["product_id"]][0][0]=$row[$field_name];
+ }
- $inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
- $field_id=$fieldsRows[$field_name]["id"];
- if (!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
- $data = StoreOrdersColors::find()->select(['product_id', 'store_id', 'quantity', 'color'])
- ->where(['order_id' => $orderId, 'field_id' => $field_id])->andWhere(['!=', 'color', ''])
- ->andWhere(['!=', 'store_id', 'undefined'])->asArray()->all();
-// $data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
- foreach($data as $row) {
- if (empty($row["store_id"])) $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
- }
- }
- }
-
-
- // если мы попадаем в поля сохраненные в таблице store_orders_item типа global_hand
- $inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
- if (in_array($field_name,$inFieldTable)) {
+$inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) {
+ if(empty($row["store_id"])) @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+ }
+}
+}
- //echo"+!!!!!$field_name+ order_id=$orderId";
- $data = StoreOrdersItem::find()->select(['product_id', 'store_id', $field_name])
- ->where(['order_id' => $orderId])
- ->andWhere(['!=', 'store_id', 'undefined'])->asArray()->all();
-// $data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=? AND store_id!='undefined'",[$orderId]);
- foreach($data as $row) {
- $data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
- }
- $inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
- $field_id=$fieldsRows[$field_name]["id"];
- if (!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
- $data = StoreOrdersColors::find()->select(['product_id', 'store_id', 'quantity', 'color'])
- ->where(['order_id' => $orderId, 'field_id' => $field_id])->andWhere(['!=', 'color', ''])
- ->andWhere(['!=', 'store_id', 'undefined'])->asArray()->all();
-// $data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
- foreach($data as $row) {
- $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
- }
- }
+// если мы попадаем в поля сохраненные в таблице store_orders_item типа global_hand
+$inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+if(in_array($field_name,$inFieldTable)) {
+
+//echo"+!!!!!$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=? AND store_id!='undefined'",[$orderId]);
+foreach($data as $row) {
+ @$data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
+ }
+
+$inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) {
+ @$data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+ }
+}
+
+
+
+}
+return $data_values;
+}
- }
- return $data_values;
-}
// функция заносит в массив данные по полям в заказеЗакупщика исходные данные ID заказа Дата 1 Дата2 И магазин Может быть =0
function data_values_insert_sql($date1,$date2) {
global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$date_start_division,$orderId,$fieldsRows;
-$data = StoreOrdersFields::find()->select(['id', 'name_eng as field_name', 'position', 'field_type', 'description', 'sql_table_values'])
- ->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
- ->asArray()->all();
-//$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
echo"<table class=t>";
foreach($data as $row) {
echo "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."</td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
// print_r($data_values[$row["field_name"]]);
/*
-if ($printArray==true) {
+if($printArray==true) {
foreach($fArray as $ProductId => $ArrayP) {
echo"<br>ProductId =".$products[$ProductId]." $ProductId";
foreach($ArrayP as $StoreId => $ArrayP2) {
- if (!empty($StoreId)) {}
+ if(!empty($StoreId)) {}
echo"<br>StoreId = ";
- if (!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
+ if(!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
else echo $StoreId;
//print_r($ArrayP2);
}
-// вытаскиваем зависимые перменные
-/*
-foreach($fieldsArrayDepended as $fId =>$DependedArray) {
- // echo"<br> $fId";
- if (!empty($DependedArray)) {
- foreach($DependedArray as $Field) {
- $Field=trim($Field);
- if (!empty($Field)) {
- // if (is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field]."";
- // else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
- // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт. - не привязана к магазину
- // stats суммарная по магазинам - на основе данных из других таблиц сумма продаж в шт, сумма спсиания
- // stats_store_hand суммарная по магазинам - на основе вводных данных
- // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
- }
- }
- }
-}
-// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
-$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
-foreach($dataF as $row) {
-$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];
-foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
-}
-// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
-$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
-foreach($dataF as $row) {
-$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];
-foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
-}
-
-*/
-// возвращаем css класс по значению ячейки
-function returnRowCssClassByFieldValue($fieldName,$value){
- global $fieldsRows;
- $valueCss="";
- if (!empty($fieldsRows[$fieldName]["property"] )) {
- foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
- if ($row["type"]==">") if ($value>$row["value"]) $valueCss=$row["style_class"];
- if ($row["type"]==">=") if ($value>=$row["value"]) $valueCss=$row["style_class"];
- if ($row["type"]=="=") if ($value==$row["value"]) $valueCss=$row["style_class"];
- if ($row["type"]=="<=") if ($value<=$row["value"]) $valueCss=$row["style_class"];
- if ($row["type"]=="<") if ($value<$row["value"]) $valueCss=$row["style_class"];
-
- }
- }
- return $valueCss;
-}
-
-function getDataFiledsData() {
- global $orderId, $db, $whereInProductsId, $whereInProductsIdArr, $fieldsRows;
-//глобальный массив с переменными - только по определнным товарам - лишнего не берем
- $da = Products1cOptions::find()->select(['id', 'min_lot', 'min_order'])
- ->where(['in', 'id', $whereInProductsIdArr ?? []])
- ->asArray()->all();
-// $da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
- foreach($da as $r) {
- $FiledsData["min_order"][$r["id"]]=$r["min_order"];
- $FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
- }
-
-// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
- $dataF = StoreOrdersFieldsData::find()->where(['order_id' => $orderId])->asArray()->all();
-// $dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
- foreach($dataF as $row) {
-//если тип поля текст то заменяем
- if ($fieldsRows[$row["field_name"]]["tip"]=="string")
- $v=$row["value_text"];
- else
- $v=$row["value"];
-
- $storeId=$row["store_id"];
- $color=$row["color"];
- if (empty($storeId)) $storeId="NULL";
- if (empty($color)) $color="NULL";
-
- $FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
-
+// пересчитываем данные - берем из страых таблиц и вписываем в новые.
+if(!empty($_GET["insert"])) {
+
+// массив соответствия ID магазинов и GUID
+$data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
+foreach($data as $row) {
+$export[$row["entity_id"]]=$row["export_val"];
+$export_revers[$row["export_val"]]=$row["entity_id"];
+}
+
+$data_values_new=data_values_insert_sql($date1,$date2);
+$fieldsArrayFlip=array_flip($fieldsArray);
+foreach($data_values_new as $Field => $fArray) {
- if (!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+if($Field=="quantity_purchase_last_week1")
+{
+ echo"<h2>$Field</h2>";
- }
- return $FiledsData;
+ foreach($fArray as $ProductId => $ArrayP) {
+ echo"<br>ProductId =".$products[$ProductId]." $ProductId";
+ foreach($ArrayP as $StoreId => $ArrayP2) {
+ if(!empty($StoreId)) {}
+ echo"<br>StoreId = ";
+
+
+ if(!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
+ else echo $StoreId;
+ print_r($ArrayP2);
+
+ }
+ }
}
+ global $storeIdToGuidArray;
+ $storeIdToGuidArray=$export;
+ // $field_id=$fieldsArrayFlip[$Field];
+ insert_store_orders_fields($fArray,$Field);
-//функция обновления данных
-function updatefieldsRows() {
- global $db,$fieldsRows,$whereInProductsId,$whereInProductsIdArr,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
- $products, $productsColorsArray;
-
- $html="";
- $fieldsArr=[];
- foreach($fieldsRows as $pole => $array) {
-
- if ($array["field_type"]=="stats") $fieldsArr[]=$pole;
- if ($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
-//echo"<br> <b>$pole </b> ";
-
- }
-
-// foreach($fieldsArr as $fieldName) {
-////echo"<br> $fieldName";
-// $data_up=getArrayByFiledName($fieldName,$date1,$date2);
-// insert_store_orders_fields($data_up,$fieldName);
-// $FiledsData[$fieldName]=$data_up;
-//
-// }
-
-
- foreach($fieldsStatsSum as $fieldName) {
-//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
- $pole=trim($fieldsRows[$fieldName]["func_content"]);
- $data_up=array();
- $dataF = StoreOrdersFieldsData::find()->select(['product_id', 'sum(value) as sum', 'color'])
- ->where(['order_id' => $orderId])->andWhere(['not in', 'store_id', ['', 'NULL']])
- ->andWhere(['field_name' => $pole])->groupBy(['product_id', 'color'])
- ->asArray()->all();
-// $dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
-//store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
- foreach($dataF as $row) {
- if (empty($row["color"])) $row["color"]="NULL";
- $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
- $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
- }
- $html .= "<br><b>$fieldName</b> считаем массив! ";
-
- insert_store_orders_fields($data_up,$fieldName);
-
- }
-
-
-
-
-// полнограммы факт по всем магазинам
- $spf005 = StoreProductsFact::find()->select(['date_id'])->orderBy(['date_id' => SORT_DESC])->one();
- $date_id = $spf005['date_id'];
-// $date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
- $data3 = StoreProductsFact::find()->select(['store_id', 'product_id', 'quantity,color'])
- ->where(['date_id' => $date_id])->andWhere(['>', 'quantity', 0])
- ->andWhere(['in', 'product_id', $whereInProductsIdArr])
- ->asArray()->all();
-// $data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
-//$whereInProductsId",[$date_id]);
- foreach($data3 as $row2) {
- if ($row2["color"]=="" or $row2["color"]=="NULL")
- $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"];
- else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];
- }
-
-
-
- $html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";
- $data = StorePlanogram::find()->select(['product_id', 'store_id', 'quantity', 'color'])->where(['>', 'quantity', 0])
- ->andWhere(['in', 'product_id', $whereInProductsIdArr])
- ->asArray()->all();
-// $data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
- foreach($data as $row) {
- if (empty($row["color"])) $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"];
- else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
-
- }
-
-
-
-
-
- $massivSQLColor=[];$inProduct=[];
-
-
-
- $data4 = Products1cOptions::find()->select(['id', 'colors'])->where(['>', 'provider_id', 0])->andWhere(['!-', 'colors', ''])
- ->andWhere(['in', 'id', $whereInProductsIdArr])->groupBy(['id'])->orderBy(['id' => SORT_DESC])
- ->asArray()->all();
-// $data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
-
- foreach($data4 as $row2) {
- $colors=explode(";",$row2["colors"]);
- $productId=$row2["id"];
-
- if (!in_array($productId,$inProduct)) {
-
- $html .="<h3>".$products[$productId]."</h3>";
- $inProduct[]=$productId;
-
- }
-
- $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
- <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
-
-
- foreach($colors as $color) {
- $color=trim($color);
- // пробегаемся по каждому магазинам
- foreach($storesArrayAll as $storeId => $nameSt) {
-
-
- if (!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color])) {
- //получаем процент цвета в полнограмме
- if (!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
- $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
- else $percentColor=0;
- // округляем до сотых
- $percentColor=round($percentColor,3);
-
- $massivSQLColor[$productId][$storeId][$color]=$percentColor;
-
- //заносим в глобальную переменную
- $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
- $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
- <td>$percentColor</td></tr>";
-
- }
- }
- }
- $html .="</tbody></table>";
- }
-
- insert_store_orders_fields($massivSQLColor,"color_percent","",false);
-
-
-//////
- $data = StoreOrdersFields::find()->select(['id', 'name_eng as field_name', 'name', 'position', 'field_type', 'description', 'sql_table_values'])
- ->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
- ->asArray()->all();
-// $data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
-//FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
- $html .="<table class=\"table table-bordered table-sm\">";
- foreach($data as $row) {
- $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
- if (trim($row["name"])!=trim($row["description"])) $html .=$row["description"];
-
- $html .="</td><td> <b>".$row["field_name"]."</b>
- ".$row["field_type"]."</td><td>";
-
-
- if (is_array($FiledsData[$row["field_name"]] ?? '')) {
- $html .="<font color=green>++</font>";
- }
- //<td>".$row["sql_table_values"]."</td>
- //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
-
-
-
- /*
- // готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
- $dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
- foreach($dataF as $row0) {
- //если тип поля текст то заменяем
- if ($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
-
- $storeId=$row0["store_id"];
- $color=$row0["color"];
- if (empty($storeId)) $storeId="NULL";
- if (empty($color)) $color="NULL";
-
- $FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
- }
- */
-
-// получаем массив с данными по полям из таблицы store_orders_fields_data
- $FiledsData=getDataFiledsData();
-
-
-
- // if (is_array($FiledsDataSumm[$row["field_name"]])) {
-
-
- if ($row["field_type"]=="stats_formula") {
- // echo"<h2>".$row["field_name"]." формула</h2>";
-
- // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
-
- foreach($products as $productId => $nameProduct) {
- $massivSQL=array();
- // считать или нет по каждому магазину
- $storesArr=["NULL"=>"NULL"];
-
- // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
-
- if ($row["field_name"]!="storehouse_balance") {
- if ($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
- $storesArr = array_merge($storesArr, $storesArrayAll);
- }
-
- $k=1;
- foreach($storesArr as $storeId => $nameStore) {
-
- // if ($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+ }
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE (value='0.000' or value='0.00') AND value_text=''",[$orderId]);
+
+}
+
- $k++; $color="";
- $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
- // добавляем в массив глобальные новые значение которые мы посчитали по формулам
- if (!empty($array["value"])) {
- $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
- $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+$_CONFIG["jscss"]='
+<style>
- foreach($productsColorsArray[$productId] as $color) {
- $color=trim($color);
- $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
- if (!empty($array2["value"])) {
- // if ($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
- $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
- $massivSQL[$productId][$storeId][$color]=$array2["value"];
- }
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal; max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+ padding: 0.05rem;
+ background-color: 1px;
+ box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+}
+.zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+}
- }
- }
- }
- //if (!empty($array["value"]))
+
+.zak td:hover:before {
+ background-color: #e3e3e3;
+ content: \'\';
+ height: 100%;
+ left: -5000px;
+ position: absolute;
+ top: 0;
+ width: 10000px;
+ z-index: -2;
+}
+
+.zak td:hover:after {
+ background-color: #cdcdcd;
+ content: \'\';
+ height: 10000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+}
- insert_store_orders_fields($massivSQL,$row["field_name"]);
- }
- }
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
- // $FiledsData[$row["field_name"]]
- $html .="</td>
-
-
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+ vertical-align: bottom;
+ line-height: normal;
+}
+table.zak thead b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
- </tr> ";
- }
-
- $html .="</table>";
- /////////
-
-
-//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+}
- /*
- // суммируем деление и заносим данные в таблицу хранения данных по полям
- foreach($products as $productId => $name) {
- $division_auto_need_all=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
- // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
- // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
- $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
- if (!empty($val)) $division_auto_need_all +=$val;
- }
+table.zak tr.zg th b,table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight:normal; font-size:0.6rem;
+}
- //$field_name="division_auto_need_all";
- //echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
- if (!empty($division_auto_need_all)) {
- $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
- $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
- insert_store_orders_fields($data_uper,"division_auto_need_all");
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+}
- }
- }
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+.zak td.td_product:hover {background:#fff;}
- */
+</style>
+<script>
-//пробегаемся по всем продуктам
- /*
- foreach($products as $productId => $name) {
- $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
- $quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+function changef(id,typeint)
+{
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\') uname = uname.replace(/[^0-9.\s]/gi, \'\');
+if(typeint==\'int\') uname = uname.replace(/[^0-9\s]/gi, \'\');
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
- if (!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>";
- $productInner[]=$productId;
+function ajaxEditFieldValue(name_eng,product_id,color)
+{
+$.ajax({
+ url: \'/shipment/ajaxEditFieldValue/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+ }});
+$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
- $html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
- получаено по факту ".$quantity_warehouseman_fact."";
- $division_ratio=1;
- if ($division_auto_need_all > $quantity_warehouseman_fact) {
- $division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
- $html .="<font color=red>-меньше!</font>";
- $html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
- }
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{
+$.ajax({
+ url: \'/shipment/ajaxEditFieldValue/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+ }});
+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
- $html .="<font color=red>коэффициент $division_ratio</font>";
+</script>';
- $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
- insert_store_orders_fields($data_uper,"division_ratio");
- }
- */
- /*
- //division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
- foreach($products as $productId => $name) {
- $division_summ_all=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
- $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
- if (!empty($val)) $division_summ_all +=$val;
- }
- //$field_name="division_auto_need_all";
- //echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
- if (!empty($division_summ_all)) {
- $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
- $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
- insert_store_orders_fields($data_uper,"division_summ_all");
+// вытаскиваем зависимые перменные
+/*
+foreach($fieldsArrayDepended as $fId =>$DependedArray) {
+ // echo"<br> $fId";
+ if(!empty($DependedArray)) {
+ foreach($DependedArray as $Field) {
+ $Field=trim($Field);
+ if(!empty($Field)) {
+ // if(is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field]."";
+ // else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
+ // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт. - не привязана к магазину
+ // stats суммарная по магазинам - на основе данных из других таблиц сумма продаж в шт, сумма спсиания
+ // stats_store_hand суммарная по магазинам - на основе вводных данных
+ // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
+ }
}
}
- */
-
-
-
-// вычисляем массив по цветам привязанным к товару
- $data4 = Products1cOptions::find()->select(['id', 'colors'])->where(['>', 'provider_id', 0])->andWhere(['!=', 'colors', ''])
- ->andWhere(['in', 'id', $whereInProductsIdArr])->groupBy(['id'])->orderBy(['id' => SORT_DESC])
- ->asArray()->all();
-// $data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
- foreach($data4 as $row2) {
- $colors=explode(";",$row2["colors"]);
- $productId=$row2["id"];
-
- foreach($colors as $color) {
- $color=trim($color);
- $colorsProductsArray[$productId][$color]=$color;
-
- }
- }
-
-
-//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_summ_all' or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance' ) AND order_id='$orderId'");
-//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='storehouse_balance' AND store_id!='' AND order_id='$orderId'");
-
-//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need' AND order_id='$orderId'");
- $data_up=[];
- foreach($products as $productId => $nameProduct) {
-
- // $storesArr = array_merge($storesArrayAll);
- $all=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
-
- $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
- // echo"<br>$nameProduct -$nameStore division_auto_need =".$valueArray["value"];
- $all =$all + $valueArray["value"];
- $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"];
-
- $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
- if ($orderId!=263) insert_store_orders_fields($data_up2,"division_auto_need");
-
- }
-
- $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all;
- $data_up[$productId]["NULL"]["NULL"]=$all;
-
- }
- if ($orderId!=263) insert_store_orders_fields($data_up,"division_auto_need_all");
- // exit("+++++++exit +++++");
- $rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact quantity_zakup_fact
-
- StoreOrdersFieldsData::deleteAll(['and', ['in', 'field_name', ['division_auto', 'division_summ']], ['order_id' => $orderId]]);
-// $db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_auto','division_summ') AND order_id='$orderId'");
-
-
-
- foreach($products as $productId => $nameProduct) {
- $massivSQL=array();
- $FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
-
- if ($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
- $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
- }
- else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
-
- $data_up=[];
- $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
- insert_store_orders_fields($data_up,"division_ratio");
-
- $data_up=[];
- $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
- $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
- $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
-
-
- insert_store_orders_fields($data_up,"division_auto");
-
- }
-
-
- $productInner=[];
- $rp="";
- foreach($products as $productId => $nameProduct) {
- $data_up=[];
- //$storesArr = array_merge($storesArrayAll);
-
- if (empty($FiledsData["min_lot"][$productId])) $FiledsData["min_lot"][$productId]=1;
-
- $planogram_all=[];
- $planogram_fact_all=[];
-
- if (!in_array($productId,$productInner)) {}
-
-
- $rp .="
-<div class=\"expanel expanel-secondary\">
-<div class=\"expanel-heading\">
-
-
-<h3 class=\"expanel-title\">$nameProduct
-</h3>
-</div> <div class=\"expanel-body p-0 m-0\">
-факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
-, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
-мин лот=".$FiledsData["min_lot"][$productId]."
-<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
-<th>Магазин</th>
-<th><b>полнограмма</b></th>
-<th><b>факт</b></th>
-<th><b>потребность</b></th>
-<th><b>авто-деление с коэффицентом</b></th>
-<th><b>ручная добавка</b></th>
-<th><b>авто-деление с ручной добавкой</b></th></tr>
-</thead>";
-
-
- $all=0;
- $productInner[]=$productId;
- $data_uper=[];
- $division_summ_all=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
-
- $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
- $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
- //if ($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c") $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
-
-
- $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
-
- $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
-
- $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
- $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
-
-
- $rp .="<tr><td class=\"text-right\">$nameStore</td>
- <td>".$store_planogram[$productId][$storeId]."</td>
- <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
-
- <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
- </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
- <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
- <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
- </tr> ";
-
-
- foreach($store_planogram_colors[$productId][$storeId] ?? [] as $color => $quantity) {
- $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
- if ( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {
-
- $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
- $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
- $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
- $division_summ_color=$division_auto_color+$division_hand_color;
-
- $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color;
- $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
- $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
-
-
-
- $percent_color_per=$percent_color*100;
- $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
- <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
- <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
- <td>".$division_auto_need_color."
- </td><td>".$division_auto_color."</td>
- <td>".$division_hand_color."</td>
- <td>".$division_summ_color."</td>
- </tr> ";
- }
-
- }
-
-
-
-
- }
-
- $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
-
-
-
- $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all;
-
- insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need");
- insert_store_orders_fields($data_uper["division_auto_color"],"division_auto");
- insert_store_orders_fields($data_uper["division_summ_color"],"division_summ");
-
- $data_up=[];
- $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
- insert_store_orders_fields($data_up,"division_auto_all");
-
- // $data_up=[];
- // $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
- // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
-
- // insert_store_orders_fields($data_up,"division_summ_all");
-
-
-
-
-
- $rp .="<tfooter>
- <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
- <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
-
- <td>
- ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
-</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
-<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
-
-<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
-
-
-</td></tr></tfooter></table>
-Остаток склада (факт-сумма даления Итого)
-(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].")
-Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
-</div> </div>";
- }
-
- $FiledsData=getDataFiledsData();
- $data_up=[];
- foreach($products as $productId => $nameProduct) {
- $division_summ_all=0;
-
- echo"<h1>$nameProduct</h1>";
- foreach($storesArrayAll as $storeId => $nameStore) {
- echo"<br> $nameStore
- ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ." ";
- /*
- foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
- $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
- $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
- $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
- $division_summ_color=$division_auto_color+$division_hand_color;
- $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
- $data_up[$productId][$storeId][$color]=$division_summ_color;
- }
- */
-
- $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];
-
- }
-
- echo"<br><b>division_summ_all=$division_summ_all</b>";
-
- $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
- $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
-
- }
- insert_store_orders_fields($data_up,"division_summ_all");
-
-
- $data_up=[];
- foreach($products as $productId => $nameProduct) {
-
- $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] - $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
- $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
-
-
- echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
- = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]." - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]." ";
-
- }
- insert_store_orders_fields($data_up,"storehouse_balance");
-
-
- echo $html.$rp;
-
-
- StoreOrdersFieldsData::deleteAll(['value' => '0.000', 'value_text' => '']); // ???
-// $db::sql("DELETE FROM store_orders_fields_data WHERE value='0.000' AND value_text=''",[$orderId]);
-
- StoreOrders::updateAll(['date_update' => new Expression("NOW()"), 'update_html' => "%html.$rp"], ['id' => $orderId]);
-// $db::sql("UPDATE store_orders SET date_update=NOW(), update_html=? WHERE id=?",["$html.$rp",$orderId]);
-
- if (!empty($_REQUEST["html_print"])) echo $html;
-
-// получаем массив с данными по полям из таблицы store_orders_fields_data
-
- $FiledsData=getDataFiledsData();
-
- return $FiledsData;
+}
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) {
+$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];
+foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
}
-//функция обновляет по массиву ID продуктов информацию в таблице data
-/*
-$products - массив ID product_id=>name_product
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) {
+$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];
+foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
+}
*/
-function updateProductArrayDataField($fieldsNamesArr) {
- global $db,$products;
-
- print_r($products);
-
-
- $whereF=implode("','",$fieldsNamesArr);
- $whereF =" name_eng in('$whereF') ";
-
- echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";
-
- $data = StoreOrdersFields::find()->select(['id', 'name_eng as field_name', 'position', 'field_type', 'description', 'sql_table_values'])
- ->where(['in', 'name_eng', $fieldsNamesArr])->orderBy(['position' => SORT_ASC, 'id' => SORT_ASC])
- ->asArray()->all();
-// $data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields
-// WHERE $whereF order by position ASC, id ASC");
- echo"<table class=t>";
- foreach($data as $row) {
- echo"<br>== ".$row["field_name"]." ".$row["field_type"]." ";
-
- }
-
- echo"</table>";
-
-}
\ No newline at end of file
--- /dev/null
+<?php
+
+global $products, $fieldsRows, $ProductsOptions, $FiledsDataArray, $fieldsPropertyArray,$date_start_sale, $date_start_division, $order_date_add,
+$whereInProductsId, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll;
+
+
+$fieldsPropertyArray=[]; $FiledsData=[]; $FiledsDataArray=[]; $fieldsPropertyArray=[]; $DataFieldStats=[]; $productsColorsArray=[];
+
+$k=0;
+$whereGuid="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+if(!empty($guid)) { if($k!=0) $whereGuid .=","; $whereGuid .=" '$guid' "; $k++; }
+}
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
+
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
+
+$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+
+// статусы закупок - массивы с доступами к полям
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];
+$store_orders_status_description[$row["id"]]=$row["description"];
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
+$statuses_stores_show[$row["id"]]=$row["stores_show"];
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+}
+
+
+
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+$FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+
+
+
+
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
+foreach($data as $row) {
+ $fieldsPropertyArray[$row["field_id"]][]=$row;
+ }
+
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
+foreach($data as $row) {
+ $fieldsRows[$row["name_eng"]]=$row;
+ $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
+
+
+ $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]); //считаем поля и зависимые поля рекурсивно
+ if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+
+
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">") if($value>$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]==">=") if($value>=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="=") if($value==$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<=") if($value<=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<") if($value<$row["value"]) $valueCss=$row["style_class"];
+
+}
+}
+ return $valueCss;
+}
+
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, DATE_FORMAT(date_add, '%Y-%m-%d') as date_add,
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"];
+$date_update=$OrderData["date_update"];
+$date_start_division=$OrderData["division_date"];
+$order_date_add=$OrderData["date_add"];
+
+
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+ $date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
+} else {
+ // иначе идем к родителю и узнаем дату матери к которой будем привязываться
+ $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);
+}
+
+
+
+$time = strtotime($date_start);
+$date2=date('Y-m-d 23:59:59', $time-86400);
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+//echo"Дата старта $date_start Считаем продажи и списания от даты $date1 до $date2";
+
+
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];
+}
+
+
+
+
+function getDataFiledsData() {
+global $orderId, $db,$whereInProductsId,$fieldsRows;
+
+
+//глобальный массив с переменными - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
+}
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"]; else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+
+
+
+
+if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+
+}
+
+return $FiledsData;
+}
+
+
+//функция обновления данных
+function updatefieldsRows() {
+ global $db,$fieldsRows,$whereInProductsId,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
+ $products, $productsColorsArray;
+
+$html="";
+ $fieldsArr=[];
+foreach($fieldsRows as $pole => $array) {
+
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b> ";
+
+}
+
+foreach($fieldsArr as $fieldName) {
+//echo"<br> $fieldName";
+ $data_up=getArrayByFiledName($fieldName,$date1,$date2);
+ insert_store_orders_fields($data_up,$fieldName);
+ $FiledsData[$fieldName]=$data_up;
+
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}
+ $html .= "<br><b>$fieldName</b> считаем массив! ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+
+
+
+
+// полнограммы факт по всем магазинам
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
+$data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
+$whereInProductsId",[$date_id]);
+foreach($data3 as $row2) {
+ if($row2["color"]=="" or $row2["color"]=="NULL")
+ $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"];
+ else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];
+}
+
+
+
+$html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($data as $row) {
+ if(empty($row["color"])) $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"];
+ else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+
+}
+
+
+
+
+
+$massivSQLColor=[];$inProduct=[];
+
+
+
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+
+ foreach($data4 as $row2) {
+ $colors=explode(";",$row2["colors"]);
+ $productId=$row2["id"];
+
+ if(!in_array($productId,$inProduct)) {
+
+ $html .="<h3>".$products[$productId]."</h3>";
+ $inProduct[]=$productId;
+
+ }
+
+ $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+ <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+
+
+ foreach($colors as $color) {
+ $color=trim($color);
+ // пробегаемся по каждому магазинам
+ foreach($storesArrayAll as $storeId => $nameSt) {
+
+
+ if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color])) {
+ //получаем процент цвета в полнограмме
+ if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
+ $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+ else $percentColor=0;
+ // округляем до сотых
+ $percentColor=round($percentColor,3);
+
+ $massivSQLColor[$productId][$storeId][$color]=$percentColor;
+
+ //заносим в глобальную переменную
+ $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
+ $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+ <td>$percentColor</td></tr>";
+
+ }
+ }
+ }
+ $html .="</tbody></table>";
+}
+
+insert_store_orders_fields($massivSQLColor,"color_percent","",false);
+
+
+//////
+$data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=\"table table-bordered table-sm\">";
+foreach($data as $row) {
+ $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
+ if(trim($row["name"])!=trim($row["description"])) $html .=$row["description"];
+
+ $html .="</td><td> <b>".$row["field_name"]."</b>
+ ".$row["field_type"]."</td><td>";
+
+
+ if(is_array($FiledsData[$row["field_name"]])) {
+ $html .="<font color=green>++</font>";
+ }
+ //<td>".$row["sql_table_values"]."</td>
+ //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
+
+
+
+/*
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+
+
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+
+ if($row["field_type"]=="stats_formula") {
+ // echo"<h2>".$row["field_name"]." формула</h2>";
+
+ // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+
+ foreach($products as $productId => $nameProduct) {
+ $massivSQL=array();
+ // считать или нет по каждому магазину
+ $storesArr=["NULL"=>"NULL"];
+
+ // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+
+ if($row["field_name"]!="storehouse_balance") {
+ if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
+ $storesArr = array_merge($storesArr, $storesArrayAll);
+ }
+
+ $k=1;
+ foreach($storesArr as $storeId => $nameStore) {
+
+ // if($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+
+ $k++; $color="";
+ $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+ // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+ if(!empty($array["value"])) {
+ $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+ $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+ if(!empty($array2["value"])) {
+ // if($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+ $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+ $massivSQL[$productId][$storeId][$color]=$array2["value"];
+ }
+
+ }
+ }
+ }
+ //if(!empty($array["value"]))
+
+ insert_store_orders_fields($massivSQL,$row["field_name"]);
+
+ }
+
+ }
+
+
+ // $FiledsData[$row["field_name"]]
+ $html .="</td>
+
+
+
+ </tr> ";
+}
+
+ $html .="</table>";
+ /////////
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+/*
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+
+ if(!empty($val)) $division_auto_need_all +=$val;
+ }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ insert_store_orders_fields($data_uper,"division_auto_need_all");
+
+ }
+}
+
+*/
+
+//пробегаемся по всем продуктам
+/*
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+if(!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>";
+$productInner[]=$productId;
+
+$html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+ /*
+//division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_summ_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
+ if(!empty($val)) $division_summ_all +=$val;
+ }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_summ_all)) {
+ $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
+ insert_store_orders_fields($data_uper,"division_summ_all");
+
+ }
+}
+ */
+
+
+
+// вычисляем массив по цветам привязанным к товару
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row2) {
+ $colors=explode(";",$row2["colors"]);
+ $productId=$row2["id"];
+
+ foreach($colors as $color) {
+ $color=trim($color);
+ $colorsProductsArray[$productId][$color]=$color;
+
+ }
+ }
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_summ_all' or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance' ) AND order_id='$orderId'");
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='storehouse_balance' AND store_id!='' AND order_id='$orderId'");
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need' AND order_id='$orderId'");
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+
+ // $storesArr = array_merge($storesArrayAll);
+ $all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+
+ $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
+ // echo"<br>$nameProduct -$nameStore division_auto_need =".$valueArray["value"];
+ $all =$all + $valueArray["value"];
+ $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"];
+
+ $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
+ if($orderId!=263) insert_store_orders_fields($data_up2,"division_auto_need");
+
+ }
+
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all;
+ $data_up[$productId]["NULL"]["NULL"]=$all;
+
+ }
+ if($orderId!=263) insert_store_orders_fields($data_up,"division_auto_need_all");
+ // exit("+++++++exit +++++");
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact quantity_zakup_fact
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_auto','division_summ') AND order_id='$orderId'");
+
+
+
+foreach($products as $productId => $nameProduct) {
+$massivSQL=array();
+$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+
+if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
+ $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
+}
+else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
+
+ $data_up=[];
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ insert_store_orders_fields($data_up,"division_ratio");
+
+ $data_up=[];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
+
+
+ insert_store_orders_fields($data_up,"division_auto");
+
+}
+
+
+$productInner=[];
+$rp="";
+foreach($products as $productId => $nameProduct) {
+ $data_up=[];
+ //$storesArr = array_merge($storesArrayAll);
+
+ if(empty($FiledsData["min_lot"][$productId])) $FiledsData["min_lot"][$productId]=1;
+
+$planogram_all=[];
+$planogram_fact_all=[];
+
+if(!in_array($productId,$productInner)) {}
+
+
+$rp .="
+<div class=\"expanel expanel-secondary\">
+<div class=\"expanel-heading\">
+
+
+<h3 class=\"expanel-title\">$nameProduct
+</h3>
+</div> <div class=\"expanel-body p-0 m-0\">
+факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
+, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
+мин лот=".$FiledsData["min_lot"][$productId]."
+<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
+<th>Магазин</th>
+<th><b>полнограмма</b></th>
+<th><b>факт</b></th>
+<th><b>потребность</b></th>
+<th><b>авто-деление с коэффицентом</b></th>
+<th><b>ручная добавка</b></th>
+<th><b>авто-деление с ручной добавкой</b></th></tr>
+</thead>";
+
+
+$all=0;
+$productInner[]=$productId;
+$data_uper=[];
+$division_summ_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+ //if($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c") $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
+
+
+ $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+
+ $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+
+ $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
+ $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
+
+
+ $rp .="<tr><td class=\"text-right\">$nameStore</td>
+ <td>".$store_planogram[$productId][$storeId]."</td>
+ <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
+
+ <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
+ </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
+ <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
+ <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
+ </tr> ";
+
+
+ foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+ $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
+ if( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {
+
+ $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
+ $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+ $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+ $division_summ_color=$division_auto_color+$division_hand_color;
+
+ $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color;
+ $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
+ $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
+
+
+
+ $percent_color_per=$percent_color*100;
+ $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
+ <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
+ <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
+ <td>".$division_auto_need_color."
+ </td><td>".$division_auto_color."</td>
+ <td>".$division_hand_color."</td>
+ <td>".$division_summ_color."</td>
+ </tr> ";
+ }
+
+ }
+
+
+
+
+ }
+
+ $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+
+
+
+ $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all;
+
+ insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need");
+ insert_store_orders_fields($data_uper["division_auto_color"],"division_auto");
+ insert_store_orders_fields($data_uper["division_summ_color"],"division_summ");
+
+ $data_up=[];
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
+ insert_store_orders_fields($data_up,"division_auto_all");
+
+ // $data_up=[];
+ // $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+ // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+
+ // insert_store_orders_fields($data_up,"division_summ_all");
+
+
+
+
+
+ $rp .="<tfooter>
+ <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
+ <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
+
+ <td>
+ ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
+</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
+<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
+
+<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
+
+
+</td></tr></tfooter></table>
+Остаток склада (факт-сумма даления Итого)
+(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].")
+Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
+</div> </div>";
+}
+
+$FiledsData=getDataFiledsData();
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+ $division_summ_all=0;
+
+ echo"<h1>$nameProduct</h1>";
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ echo"<br> $nameStore
+ ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ." ";
+ /*
+ foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+ $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
+ $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+ $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+ $division_summ_color=$division_auto_color+$division_hand_color;
+ $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
+ $data_up[$productId][$storeId][$color]=$division_summ_color;
+ }
+ */
+
+ $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];
+
+ }
+
+ echo"<br><b>division_summ_all=$division_summ_all</b>";
+
+ $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+ $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+
+}
+ insert_store_orders_fields($data_up,"division_summ_all");
+
+
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] - $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
+ $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
+
+
+ echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
+ = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]." - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]." ";
+
+}
+ insert_store_orders_fields($data_up,"storehouse_balance");
+
+
+echo $html.$rp;
+
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE value='0.000' AND value_text=''",[$orderId]);
+
+$db::sql("UPDATE store_orders SET date_update=NOW(), update_html=? WHERE id=?",["$html.$rp",$orderId]);
+
+ if(!empty($_REQUEST["html_print"])) echo $html;
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData();
+
+return $FiledsData;
+
+}
+
+
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+/*
+$FiledsData=[];
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"]; else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+
+//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+}
+
+*/
+
+
+
+// если не указан магазин или надо просуммировать для какого-то поля
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
+foreach($dataF as $row) $FiledsDataSumm[$row["field_name"]][$row["product_id"]]=$row["sum"];
+
+
+
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NOT NULL group by field_name,product_id, color",[$orderId]);
+foreach($dataF as $row) $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]]=$row["sum"];
+
+
+
+
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+/* можно указать перменную до подключения файла
+$whereInProductsId = ' IN ('product_id')';
+$products=['product_id'=>"name"];
+
+*/
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+if(empty($whereInProductsId)) {
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) {
+ if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ $prov[$row["id"]]=$row["provider_id"];
+ $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+ $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+ $k++;
+ }
+$whereInProductsId .=")";
+}
+
+
+//глобальный массив с переменными - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
+}
+
+
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+}
+
+
+
+if(!empty($_REQUEST["update"])) {
+$FiledsData=updatefieldsRows();
+}
+
+
+if($date_update <= time()-260) {
+//echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";
+//$FiledsData=updatefieldsRows();
+
+}
+
+
+if(!empty($_GET["update1113"])) {
+$html="";
+ $fieldsArr=[];
+foreach($fieldsRows as $pole => $array) {
+
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b> ";
+
+}
+
+foreach($fieldsArr as $fieldName) {
+//echo"<br> $fieldName";
+ $data_up=getArrayByFiledName($fieldName,$date1,$date2);
+ insert_store_orders_fields($data_up,$fieldName);
+ $FiledsData[$fieldName]=$data_up;
+
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}
+ $html .= "<br><b>$fieldName</b> считаем массив! ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+
+
+
+//////
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=t>";
+foreach($data as $row) {
+ $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
+ </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+ </td> <td>";
+ //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
+ if(is_array($FiledsData[$row["field_name"]])) {
+
+ $html .="<font color=green>++</font>";
+
+ }
+
+
+/*
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+
+ if($row["field_type"]=="stats_formula") {
+ // echo"<h2>".$row["field_name"]." формула</h2>";
+
+ // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+
+ foreach($products as $productId => $nameProduct) {
+ $massivSQL=array();
+ // считать или нет по каждому магазину
+ $storesArr=["NULL"=>"NULL"];
+
+ // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+ if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
+ $storesArr = array_merge($storesArr, $storesArrayAll);
+
+ $k=1;
+ foreach($storesArr as $storeId => $nameStore) {
+
+ // if($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+
+ $k++; $color="";
+ $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+ // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+ if(!empty($array["value"])) {
+ $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+ $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+ if(!empty($array2["value"])) {
+ // if($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+ $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+ $massivSQL[$productId][$storeId][$color]=$array2["value"];
+ }
+
+ }
+ }
+ }
+ //if(!empty($array["value"]))
+
+ insert_store_orders_fields($massivSQL,$row["field_name"]);
+
+ }
+
+ }
+
+
+ // $FiledsData[$row["field_name"]]
+ $html .="".$row["description"]." </td>
+
+
+
+ </tr> ";
+}
+
+ $html .="</table>";
+
+
+
+
+ /////////
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+ }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+$html .="<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+$db::sql("UPDATE store_orders SET date_update=NOW() WHERE id='$orderId'");
+
+ if(!empty($_REQUEST["html_print"])) echo $html;
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData();
+
+
+}/// end update3
+
+
+/*
+
+if(!empty($_GET["update2"])) {
+
+echo"UPDATYE=2";
+foreach($fieldsRows as $fieldName =>$array) {
+if($array["field_type"]=="stats_summ") {
+
+
+// echo"DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+
+
+$pole=trim($array["func_content"]);
+$FiledsDataSummStatsFuntion=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ // echo"<br> $fieldName = ".$row["product_id"]." = ".$row["color"]." = ".$row["color"]." ".$row["sum"]." ";
+}
+
+
+echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]." ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
+ $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
+insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
+}
+
+
+if($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
+echo"<h4>division_summ_all !!</h4>";
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");
+
+ $massivS=[];
+foreach($products as $productId => $value) {
+$array=getValueStatsFormula("division_summ_all",$productId,"","");
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+
+ //echo"<br>$value value=".$array["value"]." ";
+}
+ insert_store_orders_fields($massivS,"division_summ_all");
+}
+
+
+if($array["name_eng"]=="auto_purchase_formula") {
+echo"<h4>auto_purchase_formula !!</h4>";
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");
+
+ $massivS=[];
+foreach($products as $productId => $value) {
+
+ $storesArr=["NULL"=>"NULL"];
+
+// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+if($fieldsRows[$array["name_eng"]]["stores_stats"]==1) $storesArr = array_merge($storesArr, $storesArrayAll);
+
+foreach($storesArr as $storeId => $nameStore) {
+
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+ echo"<br>$value value=".$array["value"]." ";
+foreach($productsColorsArray[$productId] as $color) {
+
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);
+ $massivS[$productId][$storeId][$color]=$array["value"];
+
+ echo"<br>++$color value=".$array["value"]." ";
+}
+}
+
+}
+ insert_store_orders_fields($massivS,"auto_purchase_formula");
+
+
+}
+
+
+
+
+}
+
+
+//foreach($products as $productId => $value) { echo "<br> $value => value = ++ ". $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
+
+
+}
+
+*/
+
+
+
+
+
+
+
+
+
+
+//функция обновляет по массиву ID продуктов информацию в таблице data
+/*
+$products - массив ID product_id=>name_product
+
+*/
+function updateProductArrayDataField($fieldsNamesArr) {
+ global $db,$products;
+
+print_r($products);
+
+
+$whereF=implode("','",$fieldsNamesArr);
+$whereF =" name_eng in('$whereF') ";
+
+echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields
+WHERE $whereF order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+
+
+echo"<br>== ".$row["field_name"]." ".$row["field_type"]." ";
+
+}
+
+ echo"</table>";
+
+}
+
+//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
+//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
+//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
+
+
+
+
+if($_SESSION["group_id"]==1) echo $rp;
+
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $status_order_id, $status_edit_dostup, $store_orders_status_description, $storesArray, $store_id, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id;
+
+
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+
+
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) {
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';
+
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
+
+echo'</table>
+
+
+';
+
+
+
+
+
+echo'</form>';
+
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id]) {
+
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+$stores_cnt=count($stores_arr);
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
+
+
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];
+
+
+
+
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
+
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>";
+
+echo'<div class="row"><div class="col-12">';
+
+
+echo'<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">без магазина</a>';
+
+foreach($storesArray as $strid=>$namestore){
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
+
+if($store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success"; } else echo"info"; echo" btn-sm m-1\"> ";
+if($store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore</a>";
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO store_order_status SET order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=? ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}
+
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\" href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+
+}
+
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldGlobal($field_name,$productId){
+ global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats;
+ // if($field_name=="min_order" or $field_name=="min_lot") $value=$globalValuesArray[$field_name][$productId];
+ if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+return $value;
+}
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldGlobalHand($field_name,$productId){
+ global $db,$DataFieldStatsSumm,$FiledsData;
+ $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+ return $value;
+}
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStats($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll;
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+
+ if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+
+
+
+
+
+
+
+ return $value;
+}
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats;
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ // if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+ return $value;
+}
+
+
+
+
+
+
+
+ // получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsSumm($field_name, $productId, $color){
+global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm;
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId]["NULL"][$color];
+ if(empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
+ if(empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+
+ return $value;
+}
+
+
+
+//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
+if(0 and $date_start_sale!='000-00-00') {
+ //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
+$dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+$orders_where=implode("','",$dataOrders);
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+ $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0 $orders_where group by product_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ }
+
+
+// quantity_purchase_last_week
+ $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0 $orders_where group by product_id,color,store_id");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ if(empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];
+ $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];
+ }
+
+
+
+ // товар в пути date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
+$dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");
+$orders_where=implode("','",$dataOrders);
+
+echo"$orders_where = $orders_where";
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+
+
+//echo" товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color";
+ $data=$db::getRows("SELECT sum(value) as value, product_id, color FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ }
+
+
+//quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND (w.type='Брак' or w.type='Брак с поставки') AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day group BY p.product_id,w.store_id");
+foreach($data2 as $row) {
+$a=ceil($row["cnt"]/2);
+if(!empty($a)) {
+$FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
+$FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a;
+}
+}
+$FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
+}
+
+
+
+
+
+
+/*
+ $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+
+ }
+*/
+// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
+
+
+
+function function_auto_purchase_formula($param,$print=0) {
+global $db;
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+if(empty($min_lot)) $min_lot=1;
+
+
+// считаем запас на 2 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact + $goods_in_transit;
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ;
+$zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
+}
+else {
+$zakaz= $sale_7day + $sale_2day + $quantity ;
+}
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+$ceil=ceilCoefficient($zakaz,$min_lot);
+
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="".$param["color"]."
+Товар в пути goods_in_transit =$goods_in_transit
+Продажи sale_7day= $sale_7day
+Страховой запас sale_2day= $sale_2day
+Полнограмма $quantity
+факт $quantity_fact
+Заказ $zakaz
+Округляем -> $ceil
+";
+
+
+$arr["value"]=$ceil;
+$arr["title"]=$ttl;
+return $arr;
+
+}
+
+
+// округляет до определенного числа
+function roundCoefficientQuantity($number, $rate = 1)
+{
+ $rest = $rate * floor($number / $rate);
+
+ return $rest;
+}
+
+
+// функция для формулы автоделения
+function deivisionFormula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+if(empty($min_lot)) $min_lot=1;
+
+// считаем запас на 3 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact ; //$goods_in_transit
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ;
+$zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
+}
+else {
+$zakaz= $sale_7day + $sale_2day + $quantity ;
+}
+
+//echo"<br>$zakaz";
+
+$zakaz=roundCoefficientQuantity($zakaz, $min_lot);
+
+
+if(empty($zakaz)) $zakaz=$quantity;
+return $zakaz;
+
+
+}
+
+
+function ratioDivisionPercent($param){
+
+$zakazDivision=deivisionFormula($param);
+$percent=1;
+if($param["quantity_warehouseman_fact"]<$zakazDivision) {
+$percent=round($param["quantity_warehouseman_fact"]/$zakazDivision,2);
+
+}
+ $array["value"]=$percent;
+ $array["title"]="Автоделение = $zakazDivision Куплено ".$param["quantity_warehouseman_fact"]."";
+
+ return $array;
+
+}
+
+// функция для формулы потребности при автоделении
+function function_division_auto_need_formula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=(int)$param["sale_7day"];
+$sale_7day=(int)$param["sales_7day_division"];
+$quantity_fact=(int)$param["quantity_fact"];
+$quantity=(int)$param["quantity"];
+$min_lot=(int)$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=(int)$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=(int)$param["quantity_warehouseman_fact"];
+$quantity_purchase=(int)$param["quantity_purchase"];
+$sale_2day=ceil(2*($sale_7day/7));
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем запас на 2 дня
+
+$zakaz=$zakazDivision;
+
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+
+
+}
+*/
+
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+
+//Заказано кустовыми $quantity_purchase_summ шт.
+//Заказано на магазин $quantity_purchase шт.
+
+$ttl="$txt формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
+Мин. лот деления $min_lot!
+Куплено по факту $quantity_warehouseman_fact шт
+Продажи 7 дней=".$sale_7day."шт
+Страховой запас на 2 дня= ".$sale_2day."шт
+Полнограмма ".$quantity."шт
+факт ".$quantity_fact."шт
+Заказ ".$zakaz."шт
+Округляем -> $ceilшт";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+// функция для формулы автоделения
+function function_division_auto_formula1($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+}
+*/
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="$txt
+формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+Минимальный лот деления $min_lot
+Заказано кустовыми ".$quantity_purchase_summ."шт.
+Заказано на магазин ".$quantity_purchas."шт.
+Куплено к-м факту ".$quantity_warehouseman_fact."шт.
+Продажи 7 дней= ".$sale_7day."шт.
+Страховой запас 2дня".$sale_2day."шт.
+Полнограмма $quantityшт.
+факт $quantity_factшт.
+Заказ $zakazшт.
+Округляем -> $ceilшт.
+";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+
+
+function return_quantity_zakup_fact_week_formula($productId, $color){
+global $FiledsData;
+
+$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color];
+//$value=rand(1,999);
+return $value;
+}
+
+
+
+
+function returnFormula($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+
+$type=$fieldsRows[$field_name]["type"];
+$formula=$fieldsRows[$field_name]["func_content"];
+$func_content_arr=explode(";",$formula);
+$avg_arr=explode(",",$func_content_arr[0]);
+
+$field[0]=$avg_arr[0];
+$field[1]=$avg_arr[1];
+
+
+$field_type1=$fieldsRows[$field[0]]["field_type"];
+$field_type2=$fieldsRows[$field[1]]["field_type"];
+
+$storeId1=$storeId;
+$store_save=$fieldsRows[$field[0]]["store_save"];
+if($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio" or $field_type1=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[0]=="division_auto_need"
+{
+
+$storeId1="NULL";
+}
+$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color];
+
+
+$storeId2=$storeId;
+$store_save=$fieldsRows[$field[1]]["store_save"];
+if($store_save==0 or $field[1]=="division_ratio" or $field_type2=="global" or $field_type2=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[1]=="division_auto_need"
+{
+
+$storeId2="NULL";
+}
+
+$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color];
+
+
+
+if(!empty($formula)) {
+
+// среднее арифметичнкое func_content = a1,a2;
+if($type=="avg") {
+ if(!empty($avg2)) $avg=round(($value/$avg2)*100); else $value=0;
+
+ $data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+}
+
+// умножение func_content = a1,a2;
+elseif($type=="multiplication") {
+
+$value=$avg1*$avg2;
+if($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);
+
+//if($field[1]=="division_ratio")
+
+
+//echo"<br> {$field[1]} store=$storeId2 $avg2 color=$color "; умножение ".$field[0]." $field_type1 $avg1 ".$field[1]." $avg2 $field_type2
+$value_title=" ( ".$field[0]."=$avg1) * (".$field[1]."=$avg2)";
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+}
+
+// разница func_content = a1,a2;
+elseif($type=="difference") { $value=$avg1-$avg2;
+$value=round($value);
+$value_title="$avg1(".$field[0].") -$avg2(".$field[1].")";
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name,"", false);
+}
+
+}
+
+
+// суммирование
+elseif($type=="addition") {
+$avg1=$FiledsData[$field[0]][$productId][$storeId][$color];
+$avg2=$FiledsData[$field[1]][$productId][$storeId][$color];
+
+$value=$avg1+$avg2;
+$value_title="$avg1(".$field[0].") + $avg2(".$field[1].") ";
+$value=round($value);
+//if($field_name=="division_summ" and $storeId!="NULL") echo"<br> ".$field[0]." $productId = $avg1 + ".$field[1]." =$avg2 stireId=$storeId color=$color summ=$value";
+
+//$FiledsData[$field_name][$productId][$storeId][$color]=$value;
+
+if($field_name=="division_summ") {
+
+//echo"<br>. Продукт ".$products[$productId]." ".$storesArrayAll[$storeId]." $avg1(".$field[0].") + $avg2(".$field[1].") = $value";
+
+
+}
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+
+}
+
+
+
+}
+
+
+if($type=="division" || $type=="division_auto_need" || $type=="auto_purchase_formula" || $type=="division_ratio" ) {
+ if($formula==true){ } else $value_arr=["value"=>0,"title"=>"не сичтаем.."];
+}
+
+
+ if(empty($color)) $color="NULL";
+ if($storeId=="NULL" and $color=="NULL") $formula=false;
+ if($storeId=="NULL" and $color!="NULL") $formula=false;
+ if($storeId!="NULL" and $color=="NULL") $formula=true;
+ $value_arr=[];
+ $param=array();
+ $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color];
+ $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color];
+ $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color];
+ $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color];
+ $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color];
+
+
+ if(empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color];
+
+ $param["min_lot"]=$FiledsData["min_lot"][$productId];
+ if(empty($store_id)) $param["min_order"]=$FiledsData["min_order"][$productId];
+
+ $param["quantity_purchase_summ"]=$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color];
+ $param["quantity_warehouseman_fact"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+ $param["quantity_purchase"]=$FiledsData["quantity_purchase"][$productId][$storeId][$color];
+
+
+// считаем авто деление
+if($type=="division") {
+ $value="устарело";
+}
+
+
+// считаем авто деление
+if($type=="division_ratio") {
+$value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+$value_title="коэффицент";
+}
+
+/*
+// считаем авто деление
+if($type=="division_auto") {
+
+$value_arr=function_division_auto_formula($param);
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto");
+}
+
+}
+
+*/
+
+// считаем авто деление
+if($type=="division_auto_need") {
+$value_arr=function_division_auto_need_formula($param);
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto_need");
+//echo"<br>!!!+$value";
+
+}
+
+}
+
+
+// вторая формула автозаказа
+ if($type=="auto_purchase_formula") {
+
+if(empty($storesAll)) $storesAll=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
+
+
+
+
+ $value_arr=function_auto_purchase_formula($param);
+ $value=$value_arr["value"];
+ $value_title=$value_arr["title"];
+
+ if($color=="NULL" and !empty($storesAll[$storeId])) {
+
+
+ $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+
+
+ $itog=$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]-$param["goods_in_transit"];
+
+ $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] +=$value;
+ echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";
+ }
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+$data_ttl[$productId][$storeId][$color]=$value_title;
+insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
+}
+}
+
+
+ // формула подсчета за неделю - товар в пути
+ if($type=="quantity_zakup_fact_week") {
+ $value=return_quantity_zakup_fact_week_formula($productId,$color);
+
+ }
+
+ if($type=="quantity_purchase_last_week") {
+ $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color];
+
+ }
+
+
+
+
+
+/*
+ if($type=="auto_purchase") {
+ //Мин планограмма -остатки факт на витрине +продажи +(продажи:7*3)+(продажи *5%)
+ $sale_zapas3=($data_values["sales_cnt"][$pid]/7)*3;
+ $sale_week=$data_values["sales_cnt"][$pid];
+ $percent5=$data_values["sales_cnt"][$pid]*0.05;
+ $valuef = $data_values["quantity"][$pid] - $data_values["quantity_fact"][$pid] + $sale_week + $sale_zapas3 + $percent5;
+ $valuef=ceil($valuef);
+ $value="$valuef" ;
+ }
+
+
+
+ */
+
+
+$array=["value"=>$value,"title"=>$value_title];
+return $array;
+}
+
+
+
+
+
+function getValueStatsFormula($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll;
+
+ $array = returnFormula($field_name, $productId, $storeId, $color);
+ return $array;
+}
+
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueField($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $type_field=$fieldsRows[$field_name]["field_type"];
+ if($type_field=="global") {
+ $value=getValueFieldGlobal($field_name,$productId);
+ // echo"<br> $field_name pid=$productsId = value= $value";
+ }
+
+ elseif($type_field=="global_hand") {
+ $value=getValueFieldGlobalHand($field_name,$productId);
+
+ if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+
+
+ } elseif($type_field=="stats") $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+ elseif($type_field=="static_hand" or $type_field=="stats_hand" ) {
+ $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+ echo $type_field;
+ }elseif($type_field=="stats_formula") {
+ $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+
+
+
+ } elseif($type_field=="stats_store_summ") $value=getValueFieldStatsSumm($field_name,$productId,$color);
+ elseif($type_field=="stats_summ") $value=getValueFieldStatsSumm($field_name,$productId,$color);
+ elseif($type_field=="stats_store_hand") {
+
+ $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);
+ //echo $type_field." p=$productId $storeId $color ";
+ }
+ else {
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ }
+
+
+$tip=$fieldsRows[$field_name]["tip"];
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.00','',$value);
+
+
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];
+
+return $array;
+}
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+
+ $colorFirst=$color;
+
+ $type_field=$fieldsRows[$field_name]["field_type"];
+
+
+ if($field_name=="division_ratio"
+ or $field_name=="division_auto_need_all"
+ or $field_name=="quantity_zakup_fact"
+ or $field_name=="quantity_warehouseman_fact"
+ or $field_name=="storehouse_balance"
+ or $field_name=="min_lot"
+ or $field_name=="purchase_fact_difference"
+ or $field_name=="division_hand_summ"
+ or $field_name=="division_auto_all"
+ or $field_name=="division_summ_all"
+ or $field_name=="delta_zakup"
+ or $field_name=="quantity_zakup"
+ or $field_name=="quantity_zakup_fact_summa"
+
+ or $field_name=="comment_zakup"
+ or $field_name=="quantity_zakup_info"
+ or $field_name=="purchase_kust_summ"
+ or $field_name=="quantity_zakup_fact_week"
+ or $field_name=="quantity_purchase_summ"
+ or $field_name=="delta_rejection"
+ or $field_name=="quantity_warehouseman_defective"
+ or $field_name=="write_offs_comments_all"
+ or $field_name=="goods_in_transit"
+ or $field_name=="auto_purchase_formula_all"
+ or $field_name=="quantity_storage"
+ ) {$storeId="NULL"; $color="NULL"; }
+
+
+ if($field_name=="quantity_zakup_fact"
+ or $field_name=="quantity_warehouseman_fact"
+ or $field_name=="delta_zakup"
+ or $field_name=="quantity_zakup"
+ or $field_name=="quantity_zakup_info"
+ ) {$storeId="NULL"; $color=$colorFirst; }
+
+
+
+
+
+
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ $tip=$fieldsRows[$field_name]["tip"];
+
+ if($field_name=="min_lot") $value=$FiledsData[$field_name][$productId];
+ if($field_name=="min_order") $value=$FiledsData[$field_name][$productId];
+
+
+ if($field_name=="color_percent") {
+ //$tip="string";
+ $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);
+
+ }
+
+ if($field_name=="comment_zakup") {
+
+// $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+
+ }
+
+$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
+
+
+
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
+
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];
+
+return $array;
+}
+
+
+
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll ;
+
+
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
+
+ $colorName=trim(str_replace(['\\','/'],['',''],$color));
+ $md5Color=md5($color);
+ $show=1;
+ if(!empty($color) and $color!='NULL') {
+ $nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';
+ $idInput=''.$fieldName.''.$productId.''.$md5Color.'';
+ $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';
+ if(!empty($storeId)) {
+ if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1; else $show=0;
+
+ if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"])) $show=1;
+
+
+ }
+ }
+ else {
+ $nameInput=''.$fieldName.'['.$productId.']';
+ $idInput=''.$fieldName.''.$productId.'';
+ $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';
+
+ }
+
+ if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {
+ echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
+ if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+ if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+ echo'>';
+ }
+ elseif($fieldsRows[$fieldName]["type"]=="textarea") {
+ echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'" name='.$nameInput.' class="form-control"';
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+ echo'>'.$value.'</textarea>';
+ }
+ else {
+ if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+ else echo $value;
+ }
+
+}
+
+
+
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum, $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll;
+
+ $fieldId=$fieldsRows[$fieldName]["id"];
+
+
+ $dostup=$dostup_fields[$fieldId];
+ $bg=$bg_fields[$fieldId];
+ // $dostup="edit";
+ if(empty($storeId)) $storeId="NULL";
+
+
+if($dostup=="edit" or $dostup=="show") {
+
+ //можно ли это поле в принципе редактировать
+ $edit=$fieldsRows[$fieldName]["field_edit"];
+ //можно ли это поле редактировать если выбран магазин
+ if($storeId!="NULL") {
+ $edit=$fieldsRows[$fieldName]["field_store_edit"];
+ $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+ } else {
+ $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина
+
+ }
+
+ echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'" class="p-1 text-center ';
+
+
+ $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+
+
+ //$value=$FiledsData[$fieldName][$productId][$storeId][$color];
+
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";
+
+
+///$valueArray["value"]=$value;
+//$valueArray["title"]=$value_title;
+
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
+
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++; }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value; }
+}
+
+
+
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
+
+
+ if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';
+
+ // показываем поле настройки поля позволяют.
+ if($store_show==1) {
+
+ if($dostup=="edit" and $edit==1) {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";
+ printFieldType($valueArray,$fieldName,$productId,$storeId,$color);
+
+ }
+ else {
+ if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+ else {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit";
+ echo $value;
+
+
+ }
+
+
+
+ }
+ }
+ else { //если значение поля не нужно выводить то показвываем заглушку
+
+ echo'XXX';
+
+ }
+
+
+
+
+ echo'</td>';
+}
+
+
+
+}
+
+
+
+
+
+
+
+//вставляем данные в таблицу дашборда
+
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData;
+
+$field_id=$fieldsRows[$field_name]["id"];
+$type=$fieldsRows[$field_name]["type"];
+foreach($massivSQL as $productId =>$array) {
+ foreach($array as $storeId =>$valueArr) {
+ foreach($valueArr as $color =>$value) {
+ if(empty($color) or $storeId=="NULL") $color="";
+ if($color=="NULL") $color="";
+
+ if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL') $storeId=$storeIdToGuidArray[$storeId];
+ if(empty($storeId) or $storeId=="NULL") $storeId="";
+
+ if($type=="string") {$value_text=$value; $value="";}
+ else { $value_text=""; }
+
+ try {
+ // if($field_name=="division_auto_need") echo"<br>$field_name pid=$productId + storeId=$storeId + color=$color + =$value ".print_r($value)." ";
+ if(!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
+
+
+ if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ if(empty($color)) $colorData="NULL"; else $colorData=$color;
+ $oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+ $oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+
+ if($print==true) echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle $title";
+
+
+
+ if(($type!="string") or ($type=="string" and $value_text!="")) {
+
+
+ $title=$massivTitle[$productId][$storeIdData][$colorData];
+
+ $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)
+ VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
+ [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+
+ }
+
+ if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+ if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+
+ // echo"<br>По этому товару не обновляем так ка значение старое уже есть";
+
+ }
+
+ if(((empty($value) or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and $type!="string") or ($type=="string" and $value_text=="")) {
+
+ }
+ else {
+ // if($print==true) echo"<br>!!! $field_name =$value";
+ // $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title) VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?", [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+ }
+
+ // if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ //if(empty($color)) $colorData="NULL"; else $colorData=$color;
+
+ // echo"<br>$field_name pid=$productId color=$color =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]." ";
+
+
+ }
+ }
+
+ } catch (Exception $e)
+ {
+ echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+ }
+
+
+ }
+ }
+ }
+}
+
+
+
+
+// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
+// собираем массив с данными по названию поля - входной параметр Имя поля
+function getArrayByFiledName($field_name,$date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;
+
+$products_class=[];
+$data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"];
+
+
+
+
+
+$periodDaysStats=14; //количество дней статистики по продажам и списанию
+
+// сколько на складе по 1с
+if($field_name=="quantity_storage") {
+$data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND product_id $whereInProductsId ");
+foreach($data2 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+$data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
+}
+
+//полнограмма
+if($field_name=="quantity") {
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($store_planogram as $row) {
+
+
+ // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} g ={$row["quantity"]}";
+ $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+
+}
+}
+
+
+
+//плнограмма факт quantity_fact
+if($field_name=="quantity_fact") {
+$db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
+
+
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+ // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} quantity ={$row["quantity"]}";
+
+ $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+}
+}
+
+
+
+
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+// если это срезка у нее нет группы
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
+ $productGroupArray["flowers"][]=$pid;
+
+}elseif($tip=="potted") { $daysCounterSales=14; $daysCounterWriteOffs=14; $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30; $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in)
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ $data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+}
+}
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt111") {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id $whereInProductsId
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ $data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+
+
+
+//продажи количество штук привязанные к дате деления
+if($field_name=="sales_7day_division") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ $data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+//echo"<br> Дата атуальных продаж для деления $date_start_division ";
+//print_r($data_values);
+
+}
+}
+
+
+//продажи сумма привязанные к дате деления
+if($field_name=="sales_7day_amount_division" ) {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");
+foreach($data2 as $row2) {
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale;
+}
+}
+}
+}
+}
+
+
+//продажи сумма
+if($field_name=="sales_amount" ) {
+
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id,sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");
+foreach($data2 as $row2) {
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale;
+}
+
+}
+}
+}
+}
+
+
+
+//списания за 14 дней среднее - недельное списание от даты 1
+if($field_name=="write_downs" or $field_name=="quantity_rejection") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
+
+
+echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
+
+$valAll=0;
+foreach($data2 as $row2) {
+
+if($periodDaysStats==7) $a=ceil($row2["cnt"]/2);
+else $a=ceil($row2["cnt"]);
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
+
+//списания за 14 дней среднее - недельное списание от даты деления
+if($field_name=="write_offs_division") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+foreach($data2 as $row2) {
+
+$a=ceil($row2["cnt"]);
+
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
+
+
+//комментарии к ксписанию по магазину
+if($field_name=="write_offs_comments") {
+//$time = strtotime($date1);
+//$time2 = strtotime($date2);
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+
+$date_start_sale2=date("Y-m-d");
+
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+FROM write_offs as w, write_offs_products as p, write_offs_comments as c
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0
+
+AND p.product_id in($whereInProductsId_in)
+
+AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
+
+group BY p.product_id,w.store_id, c.comment_id");
+$valAll=0;
+foreach($data2 as $row2) {
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
+//echo"<br> $a";
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+//$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
+
+//комментарии к ксписанию по магазинам суммарно
+if($field_name=="write_offs_comments_all") {
+$time = strtotime($date1);
+$time2 = strtotime($date2);
+
+$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, c.comment_id
+FROM write_offs as w, write_offs_products as p, write_offs_comments as c
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=? AND w.date<=?
+group BY p.product_id, c.comment_id",[$date_14day,$date2]);
+$valAll=0;
+foreach($data2 as $row2) {
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
+//echo"<br> $a";
+$data_values[$row2["product_id"]][0][0] .=$a;
+}
+}
+
+
+//quantity_purchase_last_week заказ за последние неделю который приедет
+if($field_name=="quantity_purchase_last_week") {
+if($date_start_sale!='000-00-00') {
+
+
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+
+
+//echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
+$dataOrders=$db::getRows("SELECT id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+
+$orders_where="";
+$i=0;
+echo"В этих закупках считаем закупленный товар";
+foreach($dataOrders as $row22) {
+ echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";
+ if($i>0) $orders_where .=",";
+ $orders_where .="'".$row22["id"]."'";
+ $i++;
+}
+if(!empty($orders_where)) $orders_where=" AND order_id in($orders_where)";
+$data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0 $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];
+$data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];
+}
+}
+
+}
+
+
+if($field_name=="goods_in_transit") {
+
+ echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
+if($order_date_add!='000-00-00') {
+
+
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+if(!empty($orders_where)) {
+//$orders_where=" AND order_id in($orders_where)";
+//$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0 $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+//$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];
+//$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];
+}
+}
+
+
+$dataOrders2=$db::getRows("SELECT id,date_add FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");
+
+$idss="";
+$k=0;
+
+echo"<b>Товар в пути участвуют заказы:</b>";
+foreach($dataOrders2 as $row) {
+ if($k>0) $idss.=" OR"; $idss.= " order_id='".$row["id"]."'"; $k++;
+
+ echo"<br> id=".$row["id"]." дата старта:".$row["date_add"]." ".$row["name"]."";
+
+}
+
+if(!empty($idss)) $orders_where=" AND ( $idss) AND order_id!='$orderId'";
+
+
+echo"order_date_add = $order_date_add orders_where=$orders_where ";
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, color FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
+
+ // echo"<br> SQL SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color ";
+
+ foreach($data2 as $row2) {
+ $data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];
+ // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"];
+
+ echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
+ }
+
+
+}
+
+
+
+
+
+
+
+}
+
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_prices типа global_hand
+
+$inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
+if(in_array($field_name,$inFieldTable)) {
+
+ /// echo"+$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
+foreach($data as $row) {
+ //foreach($inFieldTable as $field)
+ $data_values[$row["product_id"]][0][0]=$row[$field_name];
+ }
+
+
+
+$inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) {
+ if(empty($row["store_id"])) $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+ }
+}
+}
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_item типа global_hand
+$inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+if(in_array($field_name,$inFieldTable)) {
+
+//echo"+!!!!!$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=? AND store_id!='undefined'",[$orderId]);
+foreach($data as $row) {
+ $data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
+ }
+
+$inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) {
+ $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+ }
+}
+
+
+
+}
+return $data_values;
+}
+
+
+
+
+
+// функция заносит в массив данные по полям в заказеЗакупщика исходные данные ID заказа Дата 1 Дата2 И магазин Может быть =0
+function data_values_insert_sql($date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$date_start_division,$orderId,$fieldsRows;
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+ echo "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."</td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+ </td> <td>";
+ //$date_start_sale
+ $data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
+ echo"<b>".$row["field_name"]."</b> - собираем данные и сохраняем в таблицу ";
+
+
+ // print_r($data_values[$row["field_name"]]);
+
+ /*
+if($printArray==true) {
+
+ foreach($fArray as $ProductId => $ArrayP) {
+ echo"<br>ProductId =".$products[$ProductId]." $ProductId";
+ foreach($ArrayP as $StoreId => $ArrayP2) {
+ if(!empty($StoreId)) {}
+ echo"<br>StoreId = ";
+ if(!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
+ else echo $StoreId;
+ //print_r($ArrayP2);
+
+ }
+ }
+ }
+*/
+
+
+
+ echo"</td><td>".$row["description"]."</td> </tr> ";
+
+}
+echo"</table>";
+return $data_values;
+
+}
+
+
+
+
+
+
+// пересчитываем данные - берем из страых таблиц и вписываем в новые.
+if(!empty($_GET["insert"])) {
+
+// массив соответствия ID магазинов и GUID
+$data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
+foreach($data as $row) {
+$export[$row["entity_id"]]=$row["export_val"];
+$export_revers[$row["export_val"]]=$row["entity_id"];
+}
+
+$data_values_new=data_values_insert_sql($date1,$date2);
+
+$fieldsArrayFlip=array_flip($fieldsArray);
+foreach($data_values_new as $Field => $fArray) {
+
+if($Field=="quantity_purchase_last_week1")
+{
+ echo"<h2>$Field</h2>";
+
+
+ foreach($fArray as $ProductId => $ArrayP) {
+ echo"<br>ProductId =".$products[$ProductId]." $ProductId";
+ foreach($ArrayP as $StoreId => $ArrayP2) {
+ if(!empty($StoreId)) {}
+ echo"<br>StoreId = ";
+
+
+ if(!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
+ else echo $StoreId;
+ print_r($ArrayP2);
+
+ }
+ }
+}
+ global $storeIdToGuidArray;
+ $storeIdToGuidArray=$export;
+ // $field_id=$fieldsArrayFlip[$Field];
+ insert_store_orders_fields($fArray,$Field);
+
+ }
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE (value='0.000' or value='0.00') AND value_text=''",[$orderId]);
+
+}
+
+
+
+$_CONFIG["jscss"]='
+<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal; max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+ padding: 0.05rem;
+ background-color: 1px;
+ box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+}
+.zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+}
+
+
+.zak td:hover:before {
+ background-color: #e3e3e3;
+ content: \'\';
+ height: 100%;
+ left: -5000px;
+ position: absolute;
+ top: 0;
+ width: 10000px;
+ z-index: -2;
+}
+
+.zak td:hover:after {
+ background-color: #cdcdcd;
+ content: \'\';
+ height: 10000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+}
+
+
+
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+ vertical-align: bottom;
+ line-height: normal;
+}
+table.zak thead b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+.zak td.td_product:hover {background:#fff;}
+
+</style>
+<script>
+
+function changef(id,typeint)
+{
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\') uname = uname.replace(/[^0-9.\s]/gi, \'\');
+if(typeint==\'int\') uname = uname.replace(/[^0-9\s]/gi, \'\');
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+function ajaxEditFieldValue(name_eng,product_id,color)
+{
+$.ajax({
+ url: \'/shipment/ajaxEditFieldValue/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+ }});
+$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+
+
+
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{
+$.ajax({
+ url: \'/shipment/ajaxEditFieldValue/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+ }});
+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+</script>';
+
+
+
+
+
+
+
+
+// вытаскиваем зависимые перменные
+/*
+foreach($fieldsArrayDepended as $fId =>$DependedArray) {
+ // echo"<br> $fId";
+ if(!empty($DependedArray)) {
+ foreach($DependedArray as $Field) {
+ $Field=trim($Field);
+ if(!empty($Field)) {
+ // if(is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field]."";
+ // else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
+ // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт. - не привязана к магазину
+ // stats суммарная по магазинам - на основе данных из других таблиц сумма продаж в шт, сумма спсиания
+ // stats_store_hand суммарная по магазинам - на основе вводных данных
+ // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
+ }
+ }
+ }
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) {
+$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];
+foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) {
+$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];
+foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
+}
+
+*/
--- /dev/null
+<?php
+
+global $products, $fieldsRows, $ProductsOptions, $FiledsDataArray, $fieldsPropertyArray,$date_start_sale, $date_start_division, $order_date_add,
+$whereInProductsId, $DataFieldStats, $FiledsData, $productsColorsArray, $storesArrayAll, $orderCityId, $prices,
+$orderStoresArrayRelation, // массив с гуидами магазинов закупки по которым считаем статистику,
+$orderStoresArrayRelation_in // SQL условие для выборки по магазинам IN('store_id')
+, $productGroupArray
+;
+
+
+$fieldsPropertyArray=[]; $FiledsData=[]; $FiledsDataArray=[]; $fieldsPropertyArray=[]; $DataFieldStats=[]; $productsColorsArray=[];
+
+$k=0;
+$whereGuid="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+if(!empty($guid)) { if($k!=0) $whereGuid .=","; $whereGuid .=" '$guid' "; $k++; }
+}
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
+
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
+
+$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+
+// статусы закупок - массивы с доступами к полям
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];
+$store_orders_status_description[$row["id"]]=$row["description"];
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
+$statuses_stores_show[$row["id"]]=$row["stores_show"];
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+}
+
+
+
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+$FiledsDataArray[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+
+
+
+
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
+foreach($data as $row) {
+ $fieldsPropertyArray[$row["field_id"]][]=$row;
+ }
+
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
+foreach($data as $row) {
+ $fieldsRows[$row["name_eng"]]=$row;
+ $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
+
+
+ $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]); //считаем поля и зависимые поля рекурсивно
+ if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+$prices=[];
+$data=$db::getRows("SELECT product_id, price FROM prices WHERE product_id $whereInProductsId");
+ foreach($data as $row) {
+ $prices[$row["product_id"]]=$row["price"];
+ }
+
+
+
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">") if($value>$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]==">=") if($value>=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="=") if($value==$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<=") if($value<=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<") if($value<$row["value"]) $valueCss=$row["style_class"];
+
+}
+}
+ return $valueCss;
+}
+
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, city_id, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, DATE_FORMAT(date_add, '%Y-%m-%d') as date_add,
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"];
+$date_update=$OrderData["date_update"];
+$date_start_division=$OrderData["division_date"];
+$order_date_add=$OrderData["date_add"];
+$orderCityId=$OrderData["city_id"];
+
+
+
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$orderStoresArrayRelation_in="";
+$orderStoresArrayRelation=[];
+
+$k=0; $wr="";
+foreach($data as $row) {
+ $orderStoresArrayRelation[]=$row["store_id"];
+ if($k!=0) $wr .=","; $wr .="'".$row["store_id"]."'";
+ $k++;
+}
+
+if(!empty($wr)) $orderStoresArrayRelation_in=" IN ($wr)";
+
+
+
+
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+ $date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
+} else {
+ // иначе идем к родителю и узнаем дату матери к которой будем привязываться
+ $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);
+}
+
+
+
+$time = strtotime($date_start);
+$date2=date('Y-m-d 23:59:59', $time-86400);
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+//echo"Дата старта $date_start Считаем продажи и списания от даты $date1 до $date2";
+
+
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];
+}
+
+
+
+
+function getDataFiledsData() {
+global $orderId, $db,$whereInProductsId,$fieldsRows,$prices;
+
+
+//глобальный массив с переменными - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
+}
+
+
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"]; else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+
+
+
+
+if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+
+}
+
+return $FiledsData;
+}
+
+
+
+//функция обновления данных
+function updatefieldsRows() {
+ global $db,$fieldsRows,$whereInProductsId,$ProductsOptions,$date_start_sale, $order_date_add, $date_start_division, $DataFieldStats ,$orderId, $FiledsData,$storesArr, $storesArrayAll,
+ $products, $productsColorsArray,$prices;
+
+$html="";
+ $fieldsArr=[];
+foreach($fieldsRows as $pole => $array) {
+
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ" and $pole!=="division_auto_need_all") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b> ";
+
+}
+
+foreach($fieldsArr as $fieldName) {
+//echo"<br> $fieldName";
+ $data_up=getArrayByFiledName($fieldName,$date1,$date2);
+ insert_store_orders_fields($data_up,$fieldName);
+ $FiledsData[$fieldName]=$data_up;
+
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}
+ $html .= "<br><b>$fieldName</b> считаем массив! ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+
+
+
+
+// полнограммы факт по всем магазинам
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id desc LIMIT 1");
+$data3=$db::getRows("SELECT store_id,product_id,quantity,color FROM store_products_fact WHERE date_id=? AND quantity>0 AND product_id
+$whereInProductsId",[$date_id]);
+foreach($data3 as $row2) {
+ if($row2["color"]=="" or $row2["color"]=="NULL")
+ $polnogrammaFact[$row2["product_id"]][$row2["store_id"]]["NULL"]=$row2["quantity"];
+ else $polnogrammaFact[$row2["product_id"]][$row2["store_id"]][$row2["color"]]=$row2["quantity"];
+}
+
+
+
+$html .="<h4>Считаем коэффиценты по цветам для полнограммы </h4>";
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($data as $row) {
+ if(empty($row["color"])) $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"];
+ else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+
+}
+
+
+
+
+
+$massivSQLColor=[];$inProduct=[];
+
+
+
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+
+ foreach($data4 as $row2) {
+ $colors=explode(";",$row2["colors"]);
+ $productId=$row2["id"];
+
+ if(!in_array($productId,$inProduct)) {
+
+ $html .="<h3>".$products[$productId]."</h3>";
+ $inProduct[]=$productId;
+
+ }
+
+ $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+ <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+
+
+ foreach($colors as $color) {
+ $color=trim($color);
+ // пробегаемся по каждому магазинам
+ foreach($storesArrayAll as $storeId => $nameSt) {
+
+
+ if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color])) {
+ //получаем процент цвета в полнограмме
+ if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<$store_planogram[$productId][$storeId])
+ $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+ else $percentColor=0;
+ // округляем до сотых
+ $percentColor=round($percentColor,3);
+
+ $massivSQLColor[$productId][$storeId][$color]=$percentColor;
+
+ //заносим в глобальную переменную
+ $FiledsData["color_percent"][$productId][$storeId][$color]=$percentColor;
+ $html .="<tr><td>$color</td><td>$nameSt</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+ <td>$percentColor</td></tr>";
+
+ }
+ }
+ }
+ $html .="</tbody></table>";
+}
+
+insert_store_orders_fields($massivSQLColor,"color_percent","",false);
+
+
+//////
+$data=$db::getRows("SELECT id,name_eng as field_name, name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=\"table table-bordered table-sm\">";
+foreach($data as $row) {
+ $html .= "<tr><td>".$row["position"]."</td><td class=\"text-left\"><b>".$row["name"]."</b>";
+ if(trim($row["name"])!=trim($row["description"])) $html .=$row["description"];
+
+ $html .="</td><td> <b>".$row["field_name"]."</b>
+ ".$row["field_type"]."</td><td>";
+
+
+ if(is_array($FiledsData[$row["field_name"]])) {
+ $html .="<font color=green>++</font>";
+ }
+ //<td>".$row["sql_table_values"]."</td>
+ //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
+
+
+
+/*
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+//$FiledsData=getDataFiledsData();
+
+
+
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+
+ if($row["field_type"]=="stats_formula") {
+ // echo"<h2>".$row["field_name"]." формула</h2>";
+
+ // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+
+ foreach($products as $productId => $nameProduct) {
+ $massivSQL=array();
+ // считать или нет по каждому магазину
+ $storesArr=["NULL"=>"NULL"];
+
+ // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+
+ if($row["field_name"]!="storehouse_balance") {
+ if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
+ $storesArr = array_merge($storesArr, $storesArrayAll);
+ }
+
+ $k=1;
+ foreach($storesArr as $storeId => $nameStore) {
+
+ // if($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+
+ $k++; $color="";
+ $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+ // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+ if(!empty($array["value"])) {
+ $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+ $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+ if(!empty($array2["value"])) {
+ // if($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+ $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+ $massivSQL[$productId][$storeId][$color]=$array2["value"];
+ }
+
+ }
+ }
+ }
+ //if(!empty($array["value"]))
+
+ insert_store_orders_fields($massivSQL,$row["field_name"]);
+
+ }
+
+ }
+
+
+ // $FiledsData[$row["field_name"]]
+ $html .="</td>
+
+
+
+ </tr> ";
+}
+
+ $html .="</table>";
+ /////////
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+/*
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $val=(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+
+ if(!empty($val)) $division_auto_need_all +=$val;
+ }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ insert_store_orders_fields($data_uper,"division_auto_need_all");
+
+ }
+}
+
+*/
+
+//пробегаемся по всем продуктам
+/*
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+if(!in_array($productId,$productInner)) $html .="<br><h5>$name</h5>";
+$productInner[]=$productId;
+
+$html .=" потребность всего =".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+
+//division_summ_all суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_summ_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ $val=$FiledsData["division_hand_summ"][$productId][$storeId]["NULL"]+$FiledsData["division_summ_all"][$productId][$storeId]["NULL"];
+ if(!empty($val)) $division_summ_all +=$val;
+ }
+
+//$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_summ_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_summ_all)) {
+ $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_summ_all;
+ insert_store_orders_fields($data_uper,"division_summ_all");
+
+ }
+}
+
+
+
+
+// вычисляем массив по цветам привязанным к товару
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row2) {
+ $colors=explode(";",$row2["colors"]);
+ $productId=$row2["id"];
+
+ foreach($colors as $color) {
+ $color=trim($color);
+ $colorsProductsArray[$productId][$color]=$color;
+
+ }
+ }
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_summ_all' or field_name='division_auto_need' or field_name='division_summ' or field_name='storehouse_balance' ) AND order_id='$orderId'");
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='storehouse_balance' AND store_id!='' AND order_id='$orderId'");
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need' AND order_id='$orderId'");
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+
+ // $storesArr = array_merge($storesArrayAll);
+ $all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+
+ $valueArray=getValueField("division_auto_need",$productId,$storeId,"NULL");
+ // echo"<br>$nameProduct -$nameStore division_auto_need =".$valueArray["value"];
+ $all =$all + $valueArray["value"];
+ $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]=$valueArray["value"];
+
+ $data_up2[$productId]["NULL"]["NULL"]=$valueArray["value"];
+ if($orderId!=263) insert_store_orders_fields($data_up2,"division_auto_need");
+
+ }
+
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$all;
+ $data_up[$productId]["NULL"]["NULL"]=$all;
+
+ }
+ if($orderId!=263) insert_store_orders_fields($data_up,"division_auto_need_all");
+ // exit("+++++++exit +++++");
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact quantity_zakup_fact
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_auto','division_summ') AND order_id='$orderId'");
+
+
+
+foreach($products as $productId => $nameProduct) {
+$massivSQL=array();
+$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+
+if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]) {
+ $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
+}
+else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_theory_all"][$productId]["NULL"]["NULL"],2);
+
+ $data_up=[];
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ insert_store_orders_fields($data_up,"division_ratio");
+
+ $data_up=[];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto"][$productId]["NULL"]["NULL"];
+
+
+ insert_store_orders_fields($data_up,"division_auto");
+
+}
+
+
+$productInner=[];
+$rp="";
+foreach($products as $productId => $nameProduct) {
+ $data_up=[];
+ //$storesArr = array_merge($storesArrayAll);
+
+ if(empty($FiledsData["min_lot"][$productId])) $FiledsData["min_lot"][$productId]=1;
+
+$planogram_all=[];
+$planogram_fact_all=[];
+
+if(!in_array($productId,$productInner)) {}
+
+
+$rp .="
+<div class=\"expanel expanel-secondary\">
+<div class=\"expanel-heading\">
+
+
+<h3 class=\"expanel-title\">$nameProduct
+</h3>
+</div> <div class=\"expanel-body p-0 m-0\">
+факт ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."
+, коэффициент (потребность/факт) =".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"].",
+мин лот=".$FiledsData["min_lot"][$productId]."
+<table class=\"zak table table-sm\"><thead><tr class=\"zg\">
+<th>Магазин</th>
+<th><b>полнограмма</b></th>
+<th><b>факт</b></th>
+<th><b>потребность</b></th>
+<th><b>авто-деление с коэффицентом</b></th>
+<th><b>ручная добавка</b></th>
+<th><b>авто-деление с ручной добавкой</b></th></tr>
+</thead>";
+
+
+$all=0;
+$productInner[]=$productId;
+$data_uper=[];
+$division_summ_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]*$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+ $FiledsData["division_auto"][$productId][$storeId]["NULL"]=ceilCoefficient($FiledsData["division_auto"][$productId][$storeId]["NULL"],$FiledsData["min_lot"][$productId]);
+ //if($storeId=="56524cb1-4763-11ea-8cce-b42e991aff6c") $FiledsData["division_auto"][$productId][$storeId]["NULL"]=0;
+
+
+ $data_uper["division_auto_color"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+
+ $all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"];
+
+ $planogram_all[$productId] +=$store_planogram[$productId][$storeId];
+ $planogram_fact_all[$productId] +=$polnogrammaFact[$productId][$storeId]["NULL"];
+
+
+ $rp .="<tr><td class=\"text-right\">$nameStore</td>
+ <td>".$store_planogram[$productId][$storeId]."</td>
+ <td>".$polnogrammaFact[$productId][$storeId]["NULL"]."</td>
+
+ <td>".(int)$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]."
+ </td><td>".(int)$FiledsData["division_auto"][$productId][$storeId]["NULL"]."</td>
+ <td>".(int)$FiledsData["division_hand"][$productId][$storeId]["NULL"]."</td>
+ <td>".(int)$FiledsData["division_summ"][$productId][$storeId]["NULL"]."</td>
+ </tr> ";
+
+
+ foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+ $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
+ if( (!empty($quantity) and !empty($percent_color) ) or !empty($FiledsData["division_hand"][$productId][$storeId]["NULL"]) ) {
+
+ $division_auto_need_color=round($percent_color * $FiledsData["division_auto_need"][$productId][$storeId]["NULL"]);
+ $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+ $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+ $division_summ_color=$division_auto_color+$division_hand_color;
+
+ $data_uper["division_auto_need_color"][$productId][$storeId][$color]=$division_auto_need_color;
+ $data_uper["division_auto_color"][$productId][$storeId][$color]=$division_auto_color;
+ $data_uper["division_summ_color"][$productId][$storeId][$color]=$division_summ_color;
+
+
+
+ $percent_color_per=$percent_color*100;
+ $rp .="<tr class=\"bg-warning\"><td class=\"text-right\">--$color ($percent_color_per%)</td>
+ <td>".$store_planogram_color[$productId][$storeId][$color]."</td>
+ <td>".$polnogrammaFact[$productId][$storeId][$color]."</td>
+ <td>".$division_auto_need_color."
+ </td><td>".$division_auto_color."</td>
+ <td>".$division_hand_color."</td>
+ <td>".$division_summ_color."</td>
+ </tr> ";
+ }
+
+ }
+
+
+
+
+ }
+
+ $division_summ_all=$all+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+
+
+
+ $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$all;
+
+ insert_store_orders_fields($data_uper["division_auto_need_color"],"division_auto_need");
+ insert_store_orders_fields($data_uper["division_auto_color"],"division_auto");
+ insert_store_orders_fields($data_uper["division_summ_color"],"division_summ");
+
+ $data_up=[];
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"];
+ insert_store_orders_fields($data_up,"division_auto_all");
+
+ // $data_up=[];
+ // $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+ // $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+
+ // insert_store_orders_fields($data_up,"division_summ_all");
+
+
+
+
+
+ $rp .="<tfooter>
+ <tr class=\"bg-success\"><td class=\"text-right\"><b>Итого</b></td>
+ <td>".$planogram_all[$productId]."</td><td>".$planogram_fact_all[$productId]."</td>
+
+ <td>
+ ".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."</td>
+</td><td>".$FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]."</td>
+<td>".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]."</td>
+
+<td>".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]."
+
+
+</td></tr></tfooter></table>
+Остаток склада (факт-сумма даления Итого)
+(".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."-".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"].")
+Остаток склада =".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." шт.
+</div> </div>";
+}
+
+//$FiledsData=getDataFiledsData();
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+ $division_summ_all=0;
+
+ echo"<h1>$nameProduct</h1>";
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ echo"<br> $nameStore
+ ".$FiledsData["division_auto"][$productId][$storeId]["NULL"] ." + ".$FiledsData["division_hand"][$productId][$storeId]["NULL"] ." ";
+ /*
+ foreach($store_planogram_colors[$productId][$storeId] as $color => $quantity) {
+ $percent_color=$FiledsData["color_percent"][$productId][$storeId][$color];
+ $division_auto_color=round($percent_color * $FiledsData["division_auto"][$productId][$storeId]["NULL"]);
+ $division_hand_color=(int)$FiledsData["division_hand"][$productId][$storeId][$color];
+ $division_summ_color=$division_auto_color+$division_hand_color;
+ $FiledsData["division_summ_all"][$productId][$storeId][$color]=$division_summ_color;
+ $data_up[$productId][$storeId][$color]=$division_summ_color;
+ }
+ */
+
+ $division_summ_all +=$FiledsData["division_auto"][$productId][$storeId]["NULL"]+$FiledsData["division_hand"][$productId][$storeId]["NULL"];
+
+ }
+
+ echo"<br><b>division_summ_all=$division_summ_all</b>";
+
+ $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=$division_summ_all;
+ $data_up[$productId]["NULL"]["NULL"]=$division_summ_all;
+
+}
+ insert_store_orders_fields($data_up,"division_summ_all");
+
+
+ $data_up=[];
+foreach($products as $productId => $nameProduct) {
+
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"] - $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];
+ $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"] = $data_up[$productId]["NULL"]["NULL"];
+
+
+ echo"<br>$nameProduct storehouse_balance =<b>".$data_up[$productId]["NULL"]["NULL"]."</b>
+ = ".$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]." - ".$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]." ";
+
+}
+ insert_store_orders_fields($data_up,"storehouse_balance");
+
+
+echo $html.$rp;
+
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE value='0.000' AND value_text=''",[$orderId]);
+
+$db::sql("UPDATE store_orders SET date_update=NOW(), update_html=? WHERE id=?",["$html.$rp",$orderId]);
+
+ if(!empty($_REQUEST["html_print"])) echo $html;
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData();
+
+return $FiledsData;
+
+}
+
+
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+/*
+$FiledsData=[];
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row["field_name"]]["tip"]=="string") $v=$row["value_text"]; else $v=$row["value"];
+
+$storeId=$row["store_id"];
+$color=$row["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+
+//if($row["field_name"]=="division_summ_all" and $storeId!="NULL") $v=$FiledsData[$row["field_name"]][$row["product_id"]]["NULL"]["NULL"];
+$FiledsData[$row["field_name"]][$row["product_id"]][$storeId][$color]=$v;
+}
+
+*/
+
+
+
+
+
+// если не указан магазин или надо просуммировать для какого-то поля
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NULL AND color IS NULL group by field_name,product_id",[$orderId]);
+foreach($dataF as $row) $FiledsDataSumm[$row["field_name"]][$row["product_id"]]=$row["sum"];
+
+
+
+$dataF=$db::getRows("SELECT field_name,product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id IS NOT NULL group by field_name,product_id, color",[$orderId]);
+foreach($dataF as $row) $FiledsDataSummStats[$row["field_name"]][$row["product_id"]][$row["color"]]=$row["sum"];
+
+
+
+
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+/* можно указать перменную до подключения файла
+$whereInProductsId = ' IN ('product_id')';
+$products=['product_id'=>"name"];
+
+*/
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+if(empty($whereInProductsId)) {
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id, o.shipments_group_id FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) {
+ if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ $prov[$row["id"]]=$row["provider_id"];
+ $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+ $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+ $ProductsOptions[$row["id"]]["shipments_group_id"]=$row["shipments_group_id"];
+
+ $k++;
+ }
+$whereInProductsId .=")";
+}
+
+
+
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+// если это срезка у нее нет группы
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
+ $productGroupArray["flowers"][]=$pid;
+
+}elseif($tip=="potted") { $daysCounterSales=14; $daysCounterWriteOffs=14; $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30; $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+
+
+//глобальный массив с переменными - только по определнным товарам - лишнего не берем
+$da=$db::getRows("SELECT id,min_lot,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($da as $r) {
+$FiledsData["min_order"][$r["id"]]=$r["min_order"];
+$FiledsData["min_lot"][$r["id"]]=$r["min_lot"];
+}
+
+
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+}
+
+
+
+if(!empty($_REQUEST["update"])) {
+$FiledsData=updatefieldsRows();
+}
+
+
+if($date_update <= time()-260) {
+//echo"Обновляем данные в таблице так как от момента последнего обнволения прошло более 1 минуты ";
+//$FiledsData=updatefieldsRows();
+
+}
+
+
+if(!empty($_GET["update1113"])) {
+$html="";
+ $fieldsArr=[];
+foreach($fieldsRows as $pole => $array) {
+
+if($array["field_type"]=="stats") $fieldsArr[]=$pole;
+if($array["field_type"]=="stats_summ") $fieldsStatsSum[]=$pole;
+//echo"<br> <b>$pole </b> ";
+
+}
+
+foreach($fieldsArr as $fieldName) {
+//echo"<br> $fieldName";
+ $data_up=getArrayByFiledName($fieldName,$date1,$date2);
+ insert_store_orders_fields($data_up,$fieldName);
+ $FiledsData[$fieldName]=$data_up;
+
+}
+
+
+foreach($fieldsStatsSum as $fieldName) {
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+$pole=trim($fieldsRows[$fieldName]["func_content"]);
+$data_up=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND store_id!='NULL' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $data_up[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$pole][$row["product_id"]][$storeId][$row["color"]]=$array["sum"];
+}
+ $html .= "<br><b>$fieldName</b> считаем массив! ";
+
+insert_store_orders_fields($data_up,$fieldName);
+
+}
+
+
+
+//////
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values
+FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+$html .="<table class=t>";
+foreach($data as $row) {
+ $html .= "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."
+ </td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+ </td> <td>";
+ //$data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
+ if(is_array($FiledsData[$row["field_name"]])) {
+
+ $html .="<font color=green>++</font>";
+
+ }
+
+
+/*
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT * FROM store_orders_fields_data WHERE order_id=?",[$orderId]);
+foreach($dataF as $row0) {
+//если тип поля текст то заменяем
+if($fieldsRows[$row0["field_name"]]["tip"]=="string") $v=$row0["value_text"]; else $v=$row0["value"];
+
+$storeId=$row0["store_id"];
+$color=$row0["color"];
+if(empty($storeId)) $storeId="NULL";
+if(empty($color)) $color="NULL";
+
+$FiledsData[$row0["field_name"]][$row0["product_id"]][$storeId][$color]=$v;
+}
+*/
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData();
+
+
+ // if(is_array($FiledsDataSumm[$row["field_name"]])) {
+
+
+ if($row["field_type"]=="stats_formula") {
+ // echo"<h2>".$row["field_name"]." формула</h2>";
+
+ // $db::sql("DELETE FROM store_orders_fields_data WHERE field_name=? AND order_id=?",[$row["field_name"], $orderId]);
+
+ foreach($products as $productId => $nameProduct) {
+ $massivSQL=array();
+ // считать или нет по каждому магазину
+ $storesArr=["NULL"=>"NULL"];
+
+ // если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+ if($fieldsRows[$row["field_name"]]["stores_stats"]==1 or $row["field_name"]=="division_auto_need" or $row["field_name"]=="division_summ")
+ $storesArr = array_merge($storesArr, $storesArrayAll);
+
+ $k=1;
+ foreach($storesArr as $storeId => $nameStore) {
+
+ // if($row["field_name"]=="division_auto_need") $html .="<br><h4>Магазин $k $nameStore</h4>";
+
+ $k++; $color="";
+ $array=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+
+ // добавляем в массив глобальные новые значение которые мы посчитали по формулам
+ if(!empty($array["value"])) {
+ $FiledsData[$row["field_name"]][$productId][$storeId]["NULL"]=$array["value"];
+ $massivSQL[$productId][$storeId]["NULL"]=$array["value"];
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $array2=getValueStatsFormula($row["field_name"],$productId,$storeId,$color);
+ if(!empty($array2["value"])) {
+ // if($row["field_name"]=="division_summ_all") echo "<br>+ ЦВЕТ $color = ".$array2["value"]." " ;
+ $FiledsData[$row["field_name"]][$productId][$storeId][$color]=$array2["value"];
+ $massivSQL[$productId][$storeId][$color]=$array2["value"];
+ }
+
+ }
+ }
+ }
+ //if(!empty($array["value"]))
+
+ insert_store_orders_fields($massivSQL,$row["field_name"]);
+
+ }
+
+ }
+
+
+ // $FiledsData[$row["field_name"]]
+ $html .="".$row["description"]." </td>
+
+
+
+ </tr> ";
+}
+
+ $html .="</table>";
+
+
+
+
+ /////////
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+ }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+$html .="<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+$db::sql("UPDATE store_orders SET date_update=NOW() WHERE id='$orderId'");
+
+ if(!empty($_REQUEST["html_print"])) echo $html;
+
+// получаем массив с данными по полям из таблицы store_orders_fields_data
+
+$FiledsData=getDataFiledsData();
+
+
+}/// end update3
+
+
+
+/*
+
+if(!empty($_GET["update2"])) {
+
+echo"UPDATYE=2";
+foreach($fieldsRows as $fieldName =>$array) {
+if($array["field_type"]=="stats_summ") {
+
+
+// echo"DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'";
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='$fieldName' AND order_id='$orderId'");
+
+
+$pole=trim($array["func_content"]);
+$FiledsDataSummStatsFuntion=array();
+$dataF=$db::getRows("SELECT product_id,sum(value) as sum, color FROM store_orders_fields_data WHERE order_id=? AND
+store_id!='' AND field_name='$pole' group by product_id, color",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $FiledsDataSummStatsFuntion[$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ $FiledsData[$fieldName][$row["product_id"]]["NULL"][$row["color"]]=$row["sum"];
+ // echo"<br> $fieldName = ".$row["product_id"]." = ".$row["color"]." = ".$row["color"]." ".$row["sum"]." ";
+}
+
+
+echo"<br><b>$fieldName</b> считаем массив! value=".$FiledsData[$fieldName]["4e6203b5-3b59-11e5-835e-1c6f659fb563"]["NULL"]["NULL"]." ";// <br>".print_r($FiledsDataSummStatsFuntion).""; //
+ $DataFieldStatsSumm[$fieldName]=$FiledsDataSummStatsFuntion;
+insert_store_orders_fields($FiledsDataSummStatsFuntion,$fieldName);
+}
+
+
+if($array["field_type"]=="stats_formula" and $array["name_eng"]=="division_summ_all") {
+echo"<h4>division_summ_all !!</h4>";
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_summ_all' AND order_id='$orderId'");
+
+ $massivS=[];
+foreach($products as $productId => $value) {
+$array=getValueStatsFormula("division_summ_all",$productId,"","");
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+
+ //echo"<br>$value value=".$array["value"]." ";
+}
+ insert_store_orders_fields($massivS,"division_summ_all");
+}
+
+
+if($array["name_eng"]=="auto_purchase_formula") {
+echo"<h4>auto_purchase_formula !!</h4>";
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='auto_purchase_formula' AND order_id='$orderId'");
+
+ $massivS=[];
+foreach($products as $productId => $value) {
+
+ $storesArr=["NULL"=>"NULL"];
+
+// если нужна статистика по магазинам для этого поля то добавляем к массиву все магазины
+if($fieldsRows[$array["name_eng"]]["stores_stats"]==1) $storesArr = array_merge($storesArr, $storesArrayAll);
+
+foreach($storesArr as $storeId => $nameStore) {
+
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,"","");
+
+ $massivS[$productId]["NULL"]["NULL"]=$array["value"];
+ echo"<br>$value value=".$array["value"]." ";
+foreach($productsColorsArray[$productId] as $color) {
+
+ $array=getValueStatsFormula("auto_purchase_formula",$productId,$storeId,$color);
+ $massivS[$productId][$storeId][$color]=$array["value"];
+
+ echo"<br>++$color value=".$array["value"]." ";
+}
+}
+
+}
+ insert_store_orders_fields($massivS,"auto_purchase_formula");
+
+
+}
+
+
+
+
+}
+
+
+//foreach($products as $productId => $value) { echo "<br> $value => value = ++ ". $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"];}
+
+
+}
+
+*/
+
+
+
+
+
+
+
+
+
+
+//функция обновляет по массиву ID продуктов информацию в таблице data
+/*
+$products - массив ID product_id=>name_product
+
+*/
+function updateProductArrayDataField($fieldsNamesArr) {
+ global $db,$products,$prices;
+
+print_r($products);
+
+
+$whereF=implode("','",$fieldsNamesArr);
+$whereF =" name_eng in('$whereF') ";
+
+echo"<h3>Обновляем данные по выбранным полям и перезаписываем их в таблицу </h3>";
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields
+WHERE $whereF order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+
+
+echo"<br>== ".$row["field_name"]." ".$row["field_type"]." ";
+
+}
+
+ echo"</table>";
+
+}
+
+//$whereInProductsId=" in('4e6203b5-3b59-11e5-835e-1c6f659fb563') ";
+//$products=["4e6203b5-3b59-11e5-835e-1c6f659fb563"=>"товар"];
+//updateProductArrayDataField(["price_zakup_summ","quantity_purchase","auto_purchase","purchase_price_zakup","quantity_zakup","goods_in_transit","quantity_fact"]);
+
+
+
+
+if($_SESSION["group_id"]==1) echo $rp;
+
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $status_order_id, $status_edit_dostup, $orderCityId, $store_orders_status_description, $storesArray, $store_id, $whereInProductsId, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id,$prices;
+
+
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+
+
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) {
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';
+
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
+
+echo'</table></form>';
+
+
+$nameCity=$db::getValue("SELECT name FROM universal_catalog_item WHERE id=?",[$orderCityId]);
+//echo '<div style="border-bottom:1px #cdcdcd solid; background:#e6e6e6; margin-bottom:2rem;"> ';
+
+$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$storesArrayRelation=[];
+
+foreach($data as $row) {
+ $storesArrayRelation[]=$row["store_id"];
+ //echo' <span class="btn btn-sm m-1 btn-blue">'.$storesOrderArray[$row["store_id"]].'</span> ';
+}
+//echo'</div>';
+
+
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id]) {
+
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+$stores_cnt=count($stores_arr);
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
+
+
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];
+
+
+
+if($vnesli>0)
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
+
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>";
+
+echo'<div class="row"><div class="col-12">';
+
+$group_show_percent_array=[50,11];
+
+$data=$db::getRows("SELECT product_id FROM store_orders_fields_data WHERE order_id=? AND product_id $whereInProductsId AND field_name='sales_cnt' AND color='' AND store_id='' AND value>0 group by product_id",[$orderId]);
+$whereInProductSaleId="";
+$productsIds=[];
+$i=0;
+foreach($data as $row) {
+ $whereInProductSaleId .=" '".$row["product_id"]."' ";
+ $productsIds[]=$row["product_id"];
+ if($i<(count($data)-1)) $whereInProductSaleId .=" , ";
+ $i++;
+}
+
+
+
+//echo"<br>Всего товаров ".count($productsIds)." = $orderId";
+
+if($whereInProductSaleId) {
+$storeCount=[];
+$data=$db::getRows("SELECT product_id, store_id FROM store_orders_fields_data WHERE order_id=? AND product_id IN ($whereInProductSaleId) AND field_name='quantity_zakup_new' AND color='' AND store_id!='' AND value>0 group by product_id, store_id",[$orderId]);
+ foreach($data as $row) {
+ $storeCount[$row["store_id"]] +=1;
+
+ }
+
+$storeCount2=[];
+ foreach($storeCount as $sid => $cnt) {
+ $storeCount2[$sid]=round(($cnt/count($productsIds))*100);
+ }
+}
+
+echo'
+<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">Весь заказ '.$nameCity.'</a>';
+
+foreach($storesArray as $strid=>$namestore){
+
+
+if(in_array($strid,$storesArrayRelation) or empty($orderCityId)) {
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-";
+
+if($store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success"; } else echo"info"; echo" btn-sm m-1\"> ";
+if($store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore ";
+// массив с группами-ролями тех кто может просматривать заполеннность по магазинам
+if($status_order_id==2 and in_array($_SESSION["group_id"],$group_show_percent_array)) {
+
+ echo" <span class=\"btn btn-info btn-xs ml-1\" title=\"".$storeCount[$strid]." из ".count($productsIds)."\">".$storeCount2[$strid]."%</span>";
+}
+echo"</a>";
+} else {
+
+ echo'<span class="btn btn-danger">к городу нет доступа '.$namestore.'</span>';
+
+}
+
+
+
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO store_order_status SET order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=? ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}
+
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\" href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+
+}
+
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldGlobal($field_name,$productId){
+ global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$prices;
+ // if($field_name=="min_order" or $field_name=="min_lot") $value=$globalValuesArray[$field_name][$productId];
+ if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+return $value;
+}
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldGlobalHand($field_name,$productId){
+ global $db,$DataFieldStatsSumm,$FiledsData,$prices;
+ $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+ return $value;
+}
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStats($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$storesArrayAll,$prices;
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+
+ if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+
+
+
+
+
+
+
+ return $value;
+}
+
+
+// получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsStoreHand($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$prices;
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ // if(empty($value)) $value=$DataFieldStats[$productId][$storeId][$field_name];
+ return $value;
+}
+
+
+
+
+
+
+
+ // получаем занчение перменнй по ее названию тип stats
+function getValueFieldStatsSumm($field_name, $productId, $color){
+global $FiledsData,$db, $orderId, $DataFieldStats, $FiledsDataSumm,$prices;
+ if(empty($color)) $color="NULL";
+ $value=$FiledsData[$field_name][$productId]["NULL"][$color];
+ if(empty($value)) $value=$FiledsDataSumm[$field_name][$productId];
+ if(empty($value)) $value=$DataFieldStatsSumm[$field_name][$productId][$color];
+
+ return $value;
+}
+
+
+
+//Суммируем данные в других закупках по дате от даты старта или от сегодняшней даты сколько было закуплено. Заказано закупщиком quantity_zakup
+if(0 and $date_start_sale!='000-00-00') {
+ //echo"<b>Дата старта продаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
+$dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+$orders_where=implode("','",$dataOrders);
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+ $data=$db::getRows("SELECT sum(value) as value,product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup' AND store_id='' AND value>0 $orders_where group by product_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ $FiledsData["quantity_zakup_fact_week_formula"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ $FiledsData["quantity_purchase_fact_week"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ }
+
+
+// quantity_purchase_last_week
+ $data=$db::getRows("SELECT sum(value) as value,product_id, color, store_id FROM store_orders_fields_data WHERE field_name='quantity_purchase' AND value>0 $orders_where group by product_id,color,store_id");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ if(empty($row["store_id"])) $store_id="NULL"; else $store_id=$row["store_id"];
+ $FiledsData["quantity_purchase_last_week"][$row["product_id"]][$store_id][$color]=$row["value"];
+ }
+
+
+
+ // товар в пути date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day quantity_zakup_info
+$dataOrders=$db::getRows("SELECT id FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add'");
+$orders_where=implode("','",$dataOrders);
+
+echo"$orders_where = $orders_where";
+if(!empty($orders_where)) $orders_where=" AND order_id in('$orders_where') AND order_id!='$orderId'";
+
+
+//echo" товар в пути. ($orders_where) SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color";
+ $data=$db::getRows("SELECT sum(value) as value, product_id, color FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ $FiledsData["goods_in_transit"][$row["product_id"]]["NULL"][$color]=$row["value"];
+ }
+
+
+//quantity_rejection echo"Дата старта $date_start Считаем списания от даты $date_start_sale и делим на 2 = среднее арифметическое списание за 1 неделю";
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND (w.type='Брак' or w.type='Брак с поставки') AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale'-interval 14 day group BY p.product_id,w.store_id");
+foreach($data2 as $row) {
+$a=ceil($row["cnt"]/2);
+if(!empty($a)) {
+$FiledsData["quantity_rejection"][$row["product_id"]][$row["store_id"]]["NULL"]=$a;
+$FiledsData["quantity_rejection"][$row["product_id"]]["NULL"]["NULL"] +=$a;
+}
+}
+$FiledsData["write_downs"]=$FiledsData["quantity_rejection"];
+}
+
+
+
+
+
+
+/*
+ $data=$db::getRows("SELECT sum(value) as value,product_id, store_id, color FROM store_orders_fields_data WHERE (field_name='division_hand' or field_name='division_auto') AND store_id='' AND value>0 AND order_id='$orderId' group by product_id,store_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $FiledsData["division_summ"][$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ $FiledsData["division_summ_all"][$row["product_id"]]["NULL"][$row["color"]] +=$row["value"];
+
+ }
+*/
+// quantity_rejection write_downs списания за 14 дней среднее - недельное списание от даты 1
+
+
+
+function function_auto_purchase_formula($param,$print=0) {
+global $db;
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+if(empty($min_lot)) $min_lot=1;
+
+
+// считаем запас на 2 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact + $goods_in_transit;
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ;
+$zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
+}
+else {
+$zakaz= $sale_7day + $sale_2day + $quantity ;
+}
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+$ceil=ceilCoefficient($zakaz,$min_lot);
+
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="".$param["color"]."
+Товар в пути goods_in_transit =$goods_in_transit
+Продажи sale_7day= $sale_7day
+Страховой запас sale_2day= $sale_2day
+Полнограмма $quantity
+факт $quantity_fact
+Заказ $zakaz
+Округляем -> $ceil
+";
+
+
+$arr["value"]=$ceil;
+$arr["title"]=$ttl;
+return $arr;
+
+}
+
+
+// округляет до определенного числа
+function roundCoefficientQuantity($number, $rate = 1)
+{
+ $rest = $rate * floor($number / $rate);
+
+ return $rest;
+}
+
+
+// функция для формулы автоделения
+function deivisionFormula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+if(empty($min_lot)) $min_lot=1;
+
+// считаем запас на 3 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact ; //$goods_in_transit
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ;
+$zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
+}
+else {
+$zakaz= $sale_7day + $sale_2day + $quantity ;
+}
+
+//echo"<br>$zakaz";
+
+$zakaz=roundCoefficientQuantity($zakaz, $min_lot);
+
+
+if(empty($zakaz)) $zakaz=$quantity;
+return $zakaz;
+
+
+}
+
+
+function ratioDivisionPercent($param){
+
+$zakazDivision=deivisionFormula($param);
+$percent=1;
+if($param["quantity_warehouseman_fact"]<$zakazDivision) {
+$percent=round($param["quantity_warehouseman_fact"]/$zakazDivision,2);
+
+}
+ $array["value"]=$percent;
+ $array["title"]="Автоделение = $zakazDivision Куплено ".$param["quantity_warehouseman_fact"]."";
+
+ return $array;
+
+}
+
+// функция для формулы потребности при автоделении
+function function_division_auto_need_formula($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=(int)$param["sale_7day"];
+$sale_7day=(int)$param["sales_7day_division"];
+$quantity_fact=(int)$param["quantity_fact"];
+$quantity=(int)$param["quantity"];
+$min_lot=(int)$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=(int)$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=(int)$param["quantity_warehouseman_fact"];
+$quantity_purchase=(int)$param["quantity_purchase"];
+$sale_2day=ceil(2*($sale_7day/7));
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем запас на 2 дня
+
+$zakaz=$zakazDivision;
+
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+
+
+}
+*/
+
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+
+//Заказано кустовыми $quantity_purchase_summ шт.
+//Заказано на магазин $quantity_purchase шт.
+
+$ttl="$txt формула = продажи_7_дней + запас_на_3дня + полнограмма - продажи_7дней
+Мин. лот деления $min_lot!
+Куплено по факту $quantity_warehouseman_fact шт
+Продажи 7 дней=".$sale_7day."шт
+Страховой запас на 2 дня= ".$sale_2day."шт
+Полнограмма ".$quantity."шт
+факт ".$quantity_fact."шт
+Заказ ".$zakaz."шт
+Округляем -> $ceilшт";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+// функция для формулы автоделения
+function function_division_auto_formula1($param,$print=0) {
+$goods_in_transit=$param["goods_in_transit"];
+$sale_7day=$param["sale_7day"];
+$quantity_fact=$param["quantity_fact"];
+$quantity=$param["quantity"];
+$min_lot=$param["min_lot"];
+$min_order=(int)$param["min_order"];
+$quantity_purchase_summ=$param["quantity_purchase_summ"];
+$quantity_warehouseman_fact=$param["quantity_warehouseman_fact"];
+$quantity_purchase=$param["quantity_purchase"];
+
+
+if(empty($min_lot)) $min_lot=1;
+$zakazDivision=deivisionFormula($param);
+$zakaz=$zakazDivision;
+/*
+if($quantity_warehouseman_fact>=$zakazDivision) {
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+} else {
+// если товара пришло меньше
+$percent=round($quantity_warehouseman_fact/$zakazDivision,2);
+$zakaz=round($zakazDivision*$percent);
+$txt="куплено меньше чем заказано * $percent % = $zakaz";
+}
+*/
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+
+//$ceil=roundCoefficientQuantity($zakaz,$min_lot);
+
+$ceil=$zakaz;
+
+if($ceil>=$zakazDivision) $zakaz=$zakazDivision;
+//if(!empty($min_order) and $ceil<$min_order) $ceil=$min_order;
+
+$ttl="$txt
+формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+Минимальный лот деления $min_lot
+Заказано кустовыми ".$quantity_purchase_summ."шт.
+Заказано на магазин ".$quantity_purchas."шт.
+Куплено к-м факту ".$quantity_warehouseman_fact."шт.
+Продажи 7 дней= ".$sale_7day."шт.
+Страховой запас 2дня".$sale_2day."шт.
+Полнограмма $quantityшт.
+факт $quantity_factшт.
+Заказ $zakazшт.
+Округляем -> $ceilшт.
+";
+
+$array_r["value"]=$ceil;
+$array_r["title"]=$ttl;
+return $array_r;
+
+}
+
+
+
+function return_quantity_zakup_fact_week_formula($productId, $color){
+global $FiledsData;
+
+$value=$FiledsData["quantity_zakup_fact_week_formula"][$productId]["NULL"][$color];
+//$value=rand(1,999);
+return $value;
+}
+
+
+
+
+function returnFormula($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$DataFieldStats,$orderId,$fieldsRows,$products, $storesAll, $date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+
+$type=$fieldsRows[$field_name]["type"];
+$formula=$fieldsRows[$field_name]["func_content"];
+$func_content_arr=explode(";",$formula);
+$avg_arr=explode(",",$func_content_arr[0]);
+
+$field[0]=$avg_arr[0];
+$field[1]=$avg_arr[1];
+
+
+$field_type1=$fieldsRows[$field[0]]["field_type"];
+$field_type2=$fieldsRows[$field[1]]["field_type"];
+
+$storeId1=$storeId;
+$store_save=$fieldsRows[$field[0]]["store_save"];
+if($store_save==0 or $field_type1=="global" or $field[0]=="division_ratio" or $field_type1=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[0]=="division_auto_need"
+{
+
+$storeId1="NULL";
+}
+$avg1=$FiledsData[$field[0]][$productId][$storeId1][$color];
+
+
+$storeId2=$storeId;
+$store_save=$fieldsRows[$field[1]]["store_save"];
+if($store_save==0 or $field[1]=="division_ratio" or $field_type2=="global" or $field_type2=="global_hand" or $field_type2=="stats_summ") // если это поле глобальное и его нельзя суммировать и считать по магазину - то or $field[1]=="division_auto_need"
+{
+
+$storeId2="NULL";
+}
+
+$avg2=$FiledsData[$field[1]][$productId][$storeId2][$color];
+
+
+
+if(!empty($formula)) {
+
+// среднее арифметичнкое func_content = a1,a2;
+if($type=="avg") {
+ if(!empty($avg2)) $avg=round(($value/$avg2)*100); else $value=0;
+
+ $data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+}
+
+// умножение func_content = a1,a2;
+elseif($type=="multiplication") {
+
+$value=$avg1*$avg2;
+if($field_name=="division_auto" or $field_name=="division_auto_need") $value=round($value,0);
+
+//if($field[1]=="division_ratio")
+
+
+//echo"<br> {$field[1]} store=$storeId2 $avg2 color=$color "; умножение ".$field[0]." $field_type1 $avg1 ".$field[1]." $avg2 $field_type2
+$value_title=" ( ".$field[0]."=$avg1) * (".$field[1]."=$avg2)";
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+}
+
+// разница func_content = a1,a2;
+elseif($type=="difference") { $value=$avg1-$avg2;
+$value=round($value);
+$value_title="$avg1(".$field[0].") -$avg2(".$field[1].")";
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name,"", false);
+}
+
+}
+
+
+// суммирование
+elseif($type=="addition") {
+$avg1=$FiledsData[$field[0]][$productId][$storeId][$color];
+$avg2=$FiledsData[$field[1]][$productId][$storeId][$color];
+
+$value=$avg1+$avg2;
+$value_title="$avg1(".$field[0].") + $avg2(".$field[1].") ";
+$value=round($value);
+//if($field_name=="division_summ" and $storeId!="NULL") echo"<br> ".$field[0]." $productId = $avg1 + ".$field[1]." =$avg2 stireId=$storeId color=$color summ=$value";
+
+//$FiledsData[$field_name][$productId][$storeId][$color]=$value;
+
+if($field_name=="division_summ") {
+
+//echo"<br>. Продукт ".$products[$productId]." ".$storesArrayAll[$storeId]." $avg1(".$field[0].") + $avg2(".$field[1].") = $value";
+
+
+}
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,$field_name);
+}
+
+
+}
+
+
+
+}
+
+
+if($type=="division" || $type=="division_auto_need" || $type=="auto_purchase_formula" || $type=="division_ratio" ) {
+ if($formula==true){ } else $value_arr=["value"=>0,"title"=>"не сичтаем.."];
+}
+
+
+ if(empty($color)) $color="NULL";
+ if($storeId=="NULL" and $color=="NULL") $formula=false;
+ if($storeId=="NULL" and $color!="NULL") $formula=false;
+ if($storeId!="NULL" and $color=="NULL") $formula=true;
+ $value_arr=[];
+ $param=array();
+ $param["sale_7day"]=$FiledsData["sales_cnt"][$productId][$storeId][$color];
+ $param["sales_7day_division"]=$FiledsData["sales_7day_division"][$productId][$storeId][$color];
+ $param["quantity"]=$FiledsData["quantity"][$productId][$storeId][$color];
+ $param["quantity_fact"]=$FiledsData["quantity_fact"][$productId][$storeId][$color];
+ $param["goods_in_transit"]=$FiledsData["quantity_zakup_fact_week"][$productId][$storeId][$color];
+
+
+ if(empty($param["goods_in_transit"])) $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId][$storeId][$color];
+
+ $param["min_lot"]=$FiledsData["min_lot"][$productId];
+ if(empty($store_id)) $param["min_order"]=$FiledsData["min_order"][$productId];
+
+ $param["quantity_purchase_summ"]=$FiledsData["quantity_purchase_summ"][$productId]["NULL"][$color];
+ $param["quantity_warehouseman_fact"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+ $param["quantity_purchase"]=$FiledsData["quantity_purchase"][$productId][$storeId][$color];
+
+
+// считаем авто деление
+if($type=="division") {
+ $value="устарело";
+}
+
+
+// считаем авто деление
+if($type=="division_ratio") {
+$value_arr=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+$value_title="коэффицент";
+}
+
+/*
+// считаем авто деление
+if($type=="division_auto") {
+
+$value_arr=function_division_auto_formula($param);
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto");
+}
+
+}
+
+*/
+
+// считаем авто деление
+if($type=="division_auto_need") {
+$value_arr=function_division_auto_need_formula($param);
+$value=$value_arr["value"];
+$value_title=$value_arr["title"];
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+insert_store_orders_fields($data_uper,"division_auto_need");
+//echo"<br>!!!+$value";
+
+}
+
+}
+
+
+// вторая формула автозаказа
+ if($type=="auto_purchase_formula") {
+
+if(empty($storesAll)) $storesAll=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
+
+
+
+
+ $value_arr=function_auto_purchase_formula($param);
+ $value=$value_arr["value"];
+ $value_title=$value_arr["title"];
+
+ if($color=="NULL" and !empty($storesAll[$storeId])) {
+
+
+ $param["goods_in_transit"]=$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+
+
+ $itog=$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]-$param["goods_in_transit"];
+
+ $FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"] +=$value;
+ echo"<br><font color=blue>".$products[$productId]." ".$storesAll[$storeId]." = $value all= ".$FiledsData["auto_purchase_formula_all"]["NULL"]["NULL"]." transit=".$param["goods_in_transit"]." itog=$itog</font>";
+ }
+
+$data_uper=[];
+if(!empty($value)) {
+$data_uper[$productId][$storeId][$color]=$value;
+$data_ttl[$productId][$storeId][$color]=$value_title;
+insert_store_orders_fields($data_uper,"auto_purchase_formula",$data_ttl);
+}
+}
+
+
+ // формула подсчета за неделю - товар в пути
+ if($type=="quantity_zakup_fact_week") {
+ $value=return_quantity_zakup_fact_week_formula($productId,$color);
+
+ }
+
+ if($type=="quantity_purchase_last_week") {
+ $value=$FiledsData["quantity_purchase_last_week"][$productId][$storeId][$color];
+
+ }
+
+
+
+
+
+/*
+ if($type=="auto_purchase") {
+ //Мин планограмма -остатки факт на витрине +продажи +(продажи:7*3)+(продажи *5%)
+ $sale_zapas3=($data_values["sales_cnt"][$pid]/7)*3;
+ $sale_week=$data_values["sales_cnt"][$pid];
+ $percent5=$data_values["sales_cnt"][$pid]*0.05;
+ $valuef = $data_values["quantity"][$pid] - $data_values["quantity_fact"][$pid] + $sale_week + $sale_zapas3 + $percent5;
+ $valuef=ceil($valuef);
+ $value="$valuef" ;
+ }
+
+
+
+ */
+
+
+$array=["value"=>$value,"title"=>$value_title];
+return $array;
+}
+
+
+
+
+
+function getValueStatsFormula($field_name, $productId, $storeId, $color){
+global $db,$FiledsData,$products,$DataFieldStats,$orderId,$fieldsRows,$date_start_sale, $order_date_add, $date_start_division,$storesArrayAll,$prices;
+
+ $array = returnFormula($field_name, $productId, $storeId, $color);
+ return $array;
+}
+
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueField($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $db,$FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+ $type_field=$fieldsRows[$field_name]["field_type"];
+ if($type_field=="global") {
+ $value=getValueFieldGlobal($field_name,$productId);
+ // echo"<br> $field_name pid=$productsId = value= $value";
+ }
+
+ elseif($type_field=="global_hand") {
+ $value=getValueFieldGlobalHand($field_name,$productId);
+
+ if(empty($value)) $value=$DataFieldStatsSumm[$productId][$field_name];
+ if(empty($value)) $value=$FiledsData[$field_name][$productId]["NULL"]["NULL"];
+
+
+ } elseif($type_field=="stats") $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+ elseif($type_field=="static_hand" or $type_field=="stats_hand" ) {
+ $value=getValueFieldStats($field_name,$productId,$storeId,$color);
+ echo $type_field;
+ }elseif($type_field=="stats_formula") {
+ $array=getValueStatsFormula($field_name,$productId,$storeId,$color);
+
+
+
+ } elseif($type_field=="stats_store_summ") $value=getValueFieldStatsSumm($field_name,$productId,$color);
+ elseif($type_field=="stats_summ") $value=getValueFieldStatsSumm($field_name,$productId,$color);
+ elseif($type_field=="stats_store_hand") {
+
+ $value=getValueFieldStatsStoreHand($field_name,$productId,$storeId,$color);
+ //echo $type_field." p=$productId $storeId $color ";
+ }
+ else {
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ }
+
+
+$tip=$fieldsRows[$field_name]["tip"];
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.00','',$value);
+
+
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];
+
+return $array;
+}
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $FiledsData, $products, $DataFieldStatsSumm, $fieldsRows, $orderId, $FiledsDataSummStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll, $prices;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+
+ $colorFirst=$color;
+
+ $type_field=$fieldsRows[$field_name]["field_type"];
+
+
+ if($field_name=="division_ratio"
+ or $field_name=="division_auto_need_all"
+ or $field_name=="quantity_zakup_fact"
+ or $field_name=="quantity_warehouseman_fact"
+ or $field_name=="storehouse_balance"
+ or $field_name=="min_lot"
+ or $field_name=="purchase_fact_difference"
+ or $field_name=="division_hand_summ"
+ or $field_name=="division_auto_all"
+ or $field_name=="division_summ_all"
+ or $field_name=="delta_zakup"
+ or $field_name=="quantity_zakup"
+ or $field_name=="quantity_zakup_fact_summa"
+
+ or $field_name=="comment_zakup"
+ or $field_name=="quantity_zakup_info"
+ or $field_name=="purchase_kust_summ"
+ or $field_name=="quantity_zakup_fact_week"
+ or $field_name=="quantity_purchase_summ"
+ or $field_name=="delta_rejection"
+ or $field_name=="quantity_warehouseman_defective"
+ or $field_name=="write_offs_comments_all"
+ or $field_name=="goods_in_transit"
+ or $field_name=="auto_purchase_formula_all"
+ or $field_name=="quantity_storage"
+ ) {$storeId="NULL"; $color="NULL"; }
+
+
+ if($field_name=="quantity_zakup_fact"
+ or $field_name=="quantity_warehouseman_fact"
+ or $field_name=="delta_zakup"
+ or $field_name=="quantity_zakup"
+ or $field_name=="quantity_zakup_info"
+ ) {$storeId="NULL"; $color=$colorFirst; }
+
+
+
+
+
+
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+ $tip=$fieldsRows[$field_name]["tip"];
+
+ if($field_name=="min_lot") $value=$FiledsData[$field_name][$productId];
+ if($field_name=="min_order") $value=$FiledsData[$field_name][$productId];
+
+
+ if($field_name=="color_percent") {
+ //$tip="string";
+ $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);
+
+ }
+
+ if($field_name=="comment_zakup") {
+
+// $value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+
+ }
+
+$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
+
+
+
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
+
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];
+
+return $array;
+}
+
+
+
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices ;
+
+
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
+
+ $colorName=trim(str_replace(['\\','/'],['',''],$color));
+ $md5Color=md5($color);
+ $show=1;
+ if(!empty($color) and $color!='NULL') {
+ $nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';
+ $idInput=''.$fieldName.''.$productId.''.$md5Color.'';
+ $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';
+ if(!empty($storeId)) {
+ if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1; else $show=0;
+
+ if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"])) $show=1;
+
+
+ }
+ }
+ else {
+ $nameInput=''.$fieldName.'['.$productId.']';
+ $idInput=''.$fieldName.''.$productId.'';
+ $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';
+
+ }
+
+ if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {
+ echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
+ if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+ if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+ echo'>';
+ }
+ elseif($fieldsRows[$fieldName]["type"]=="textarea") {
+ echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'" name='.$nameInput.' class="form-control"';
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+ echo'>'.$value.'</textarea>';
+ }
+ else {
+ if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+ else echo $value;
+ }
+
+}
+
+
+
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$products,$bg_fields,$fieldsRows, $rowArraySum, $FiledsData,$DataFieldStatsSumm,$DataFieldStats,$date_start_sale,$order_date_add,$date_start_division,$storesArrayAll,$prices;
+
+ $fieldId=$fieldsRows[$fieldName]["id"];
+
+
+ $dostup=$dostup_fields[$fieldId];
+ $bg=$bg_fields[$fieldId];
+ // $dostup="edit";
+ if(empty($storeId) or $fieldName=="purchase_price") $storeId="NULL";
+
+
+if($dostup=="edit" or $dostup=="show") {
+
+ //можно ли это поле в принципе редактировать
+ $edit=$fieldsRows[$fieldName]["field_edit"];
+ //можно ли это поле редактировать если выбран магазин
+ if($storeId!="NULL") {
+ $edit=$fieldsRows[$fieldName]["field_store_edit"];
+ $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+ } else {
+ $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина
+
+
+ if($fieldsRows[$fieldName]["field_type"]=="stats_store_hand") $edit=0;
+
+ }
+
+ echo'<td data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'" class="p-1 text-center ';
+
+
+ $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+
+
+ //$value=$FiledsData[$fieldName][$productId][$storeId][$color];
+
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";
+
+
+///$valueArray["value"]=$value;
+//$valueArray["title"]=$value_title;
+
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
+
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++; }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value; }
+}
+
+
+
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
+
+
+ if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';
+
+ // показываем поле настройки поля позволяют.
+ if($store_show==1) {
+
+ if($dostup=="edit" and $edit==1) {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";
+ printFieldType($valueArray,$fieldName,$productId,$storeId,$color);
+
+ }
+ else {
+ if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+ else {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit";
+ echo $value;
+
+
+ }
+
+
+
+ }
+ }
+ else { //если значение поля не нужно выводить то показвываем заглушку
+
+ echo'XXX';
+
+ }
+
+
+
+
+ echo'</td>';
+}
+
+
+
+}
+
+
+
+
+
+
+
+//вставляем данные в таблицу дашборда
+
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsDataArray,$FiledsData, $prices;
+
+$field_id=$fieldsRows[$field_name]["id"];
+$type=$fieldsRows[$field_name]["type"];
+foreach($massivSQL as $productId =>$array) {
+ foreach($array as $storeId =>$valueArr) {
+ foreach($valueArr as $color =>$value) {
+ if(empty($color) or $storeId=="NULL") $color="";
+ if($color=="NULL") $color="";
+
+ if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL') $storeId=$storeIdToGuidArray[$storeId];
+ if(empty($storeId) or $storeId=="NULL") $storeId="";
+
+ if($type=="string") {$value_text=$value; $value="";}
+ else { $value_text=""; }
+
+ try {
+ // if($field_name=="division_auto_need") echo"<br>$field_name pid=$productId + storeId=$storeId + color=$color + =$value ".print_r($value)." ";
+ if(!in_array($field_name,["division","quantity_ostatok_sklad","quantity_rejection_delta"])) {
+
+
+ if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ if(empty($color)) $colorData="NULL"; else $colorData=$color;
+ $oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+ $oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+
+ if($print==true) echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle $title";
+
+
+
+ if(($type!="string") or ($type=="string" and $value_text!="")) {
+
+
+ $title=$massivTitle[$productId][$storeIdData][$colorData];
+
+ $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)
+ VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
+ [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+
+ }
+
+ if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+ if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+
+ // echo"<br>По этому товару не обновляем так ка значение старое уже есть";
+
+ }
+
+ if(((empty($value) or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and $type!="string") or ($type=="string" and $value_text=="")) {
+
+ }
+ else {
+ // if($print==true) echo"<br>!!! $field_name =$value";
+ // $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title) VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?", [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+ }
+
+ // if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ //if(empty($color)) $colorData="NULL"; else $colorData=$color;
+
+ // echo"<br>$field_name pid=$productId color=$color =$value valuetext=$value_text old=".$FiledsDataArray[$field_name][$productId][$storeIdData][$colorData]." ";
+
+
+ }
+ }
+
+ } catch (Exception $e)
+ {
+ echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+ }
+
+
+ }
+ }
+ }
+}
+
+
+
+
+// работает на перенос данных из старого формата в новый обнуляя введенную информацию! аккуратно с применением. применяем 1 раз перед переходом на новые талицы
+// собираем массив с данными по названию поля - входной параметр Имя поля
+function getArrayByFiledName($field_name,$date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$order_date_add,$date_start_division, $printArray,$orderId,$fieldsRows;
+
+$products_class=[];
+$data=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"];
+
+
+
+
+
+$periodDaysStats=14; //количество дней статистики по продажам и списанию
+
+// сколько на складе по 1с
+if($field_name=="quantity_storage") {
+$data2=$db::getRows("SELECT * FROM balances WHERE quantity>0 AND product_id $whereInProductsId ");
+foreach($data2 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+$data_values[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
+}
+
+//полнограмма
+if($field_name=="quantity") {
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_planogram WHERE quantity>0 AND product_id $whereInProductsId");
+foreach($store_planogram as $row) {
+
+
+ // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} g ={$row["quantity"]}";
+ $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+
+}
+}
+
+
+
+//плнограмма факт quantity_fact
+if($field_name=="quantity_fact") {
+$db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId' AND field_name='quantity_fact'");
+
+
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0 AND date_id=? AND product_id $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+ // echo"<br>$field_name {$row["product_id"]} = {$row["store_id"]} quantity ={$row["quantity"]}";
+
+ $data_values[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ $data_values[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+}
+}
+
+
+
+
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+// если это срезка у нее нет группы
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
+ $productGroupArray["flowers"][]=$pid;
+
+}elseif($tip=="potted") { $daysCounterSales=14; $daysCounterWriteOffs=14; $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30; $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip $categoryId";
+}
+
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in)
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ $data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+}
+}
+
+
+
+//продажи количество штук привязанные к дате старта продаж
+if($field_name=="sales_cnt111") {
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id $whereInProductsId
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ $data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+
+
+
+//продажи количество штук привязанные к дате деления
+if($field_name=="sales_7day_division") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ $data_values[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+//echo"<br> Дата атуальных продаж для деления $date_start_division ";
+//print_r($data_values);
+
+}
+}
+
+
+//продажи сумма привязанные к дате деления
+if($field_name=="sales_7day_amount_division" ) {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");
+foreach($data2 as $row2) {
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale;
+}
+}
+}
+}
+}
+
+
+//продажи сумма
+if($field_name=="sales_amount" ) {
+
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id,sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in) AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation");
+foreach($data2 as $row2) {
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_values[$row2["product_id"]][0][0] +=$sale;
+}
+
+}
+}
+}
+}
+
+
+
+//списания за 14 дней среднее - недельное списание от даты 1
+if($field_name=="write_downs" or $field_name=="quantity_rejection") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id");
+
+
+echo "<br>SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND
+
+w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats_where day
+AND p.product_id in($whereInProductsId_in) group BY p.product_id,w.store_id";
+
+$valAll=0;
+foreach($data2 as $row2) {
+
+if($periodDaysStats==7) $a=ceil($row2["cnt"]/2);
+else $a=ceil($row2["cnt"]);
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
+
+//списания за 14 дней среднее - недельное списание от даты деления
+if($field_name=="write_offs_division") {
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+foreach($data2 as $row2) {
+
+$a=ceil($row2["cnt"]);
+
+
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
+
+
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_cnt_avg") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+//$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+//echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+*/
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) {
+ $a=round($row2["cnt"]/4);
+ if(!empty($a)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ $data_values[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+}
+}
+}
+
+
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_4week_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=28;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+*/
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) {
+ $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]/4) );
+ if(!empty($a)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ $data_values[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+}
+}
+}
+
+
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+if($field_name=="write_offs_sum") {
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=7;
+//собираем условие по выборке товаров
+/*
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+*/
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND p.product_id in($whereInProductsId_in) AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) {
+ $a=round( $prices[$row2["product_id"]] * ($row2["cnt"]) );
+
+ echo"<br> write_offs_sum ".$row2["product_id"]." ".$row2["cnt"]." шт. цена=".$prices[$row2["product_id"]]." ";
+
+ if(!empty($a)) {
+ $data_values[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ $data_values[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+}
+}
+}
+
+//комментарии к ксписанию по магазину
+if($field_name=="write_offs_comments") {
+//$time = strtotime($date1);
+//$time2 = strtotime($date2);
+//$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+
+if($periodDaysStats==7) $periodDaysStats_where=14;
+else $periodDaysStats_where=$periodDaysStats;
+
+$date_start_sale2=date("Y-m-d");
+
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+FROM write_offs as w, write_offs_products as p, write_offs_comments as c
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0
+
+AND p.product_id in($whereInProductsId_in)
+
+AND w.date<='$date_start_sale2 00:00:00' AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
+
+group BY p.product_id,w.store_id, c.comment_id");
+$valAll=0;
+foreach($data2 as $row2) {
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
+//echo"<br> $a";
+if(!empty($a)) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+//$data_values[$row2["product_id"]][0][0] +=$a;
+}
+}
+}
+}
+}
+
+//комментарии к ксписанию по магазинам суммарно
+if($field_name=="write_offs_comments_all") {
+$time = strtotime($date1);
+$time2 = strtotime($date2);
+
+$date_14day=date('Y-m-d 00:00:00', $time2-86400*$periodDaysStats); /////// списание за 14 дней AND ($whereInProductsId) w.date>=NOW() - INTERVAL 14 DAY
+//echo"Дата старта $date_start Считаем списания от даты $date1 до $date_14day и делим на 2 = среднее арифметическое списание за 1 неделю";
+//echo"<br>$field_name $date1 - $date_14day";
+$data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, c.comment_id
+FROM write_offs as w, write_offs_products as p, write_offs_comments as c
+WHERE p.write_offs_id=w.id AND w.type='Брак' AND c.write_offs_id=p.write_offs_id AND p.product_id=c.product_id AND c.quantity>0 AND w.date>=? AND w.date<=?
+group BY p.product_id, c.comment_id",[$date_14day,$date2]);
+$valAll=0;
+foreach($data2 as $row2) {
+$a="".$row2["comment_id"]."=".$row2["cnt"]."шт. ";
+//echo"<br> $a";
+$data_values[$row2["product_id"]][0][0] .=$a;
+}
+}
+
+
+//quantity_purchase_last_week заказ за последние неделю который приедет
+if($field_name=="quantity_purchase_last_week") {
+if($date_start_sale!='000-00-00') {
+
+
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+
+
+//echo"<b>Дата старта проаж $date_start_sale от нее вычитаем 7 дней и получаем Закупки для формирования суммарного заказа от предыдущих недель.</b>";
+$dataOrders=$db::getRows("SELECT id, name,date_start FROM store_orders WHERE date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day");
+
+$orders_where="";
+$i=0;
+echo"В этих закупках считаем закупленный товар";
+foreach($dataOrders as $row22) {
+ echo"<span class=\"btn btn-default btn-sm m-1\">".$row22["name"]."</span>";
+ if($i>0) $orders_where .=",";
+ $orders_where .="'".$row22["id"]."'";
+ $i++;
+}
+if(!empty($orders_where)) $orders_where=" AND order_id in($orders_where)";
+$data3=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase, product_id, store_id FROM store_orders_item WHERE quantity_purchase>0 $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_purchase"];
+$data_values[$row2["product_id"]][0][0] +=$row2["quantity_purchase"];
+}
+}
+
+}
+
+
+if($field_name=="goods_in_transit") {
+
+ echo"<h1>goods_in_transit -ТОВАР В ПУТИ</h1>";
+if($order_date_add!='000-00-00') {
+
+
+// старый формат и старая таблица данных - нужно заменить на данные из таблицы store_orders_fields_data - сначала берем старые
+if(!empty($orders_where)) {
+//$orders_where=" AND order_id in($orders_where)";
+//$data3=$db::getRows("SELECT sum(quantity_zakup_fact) as quantity, product_id, store_id FROM store_orders_item WHERE quantity_zakup_fact>0 $orders_where group by product_id, store_id");
+foreach($data3 as $row2) {
+//$data_values[$row2["product_id"]][$row2["store_id"]][0]=$row2["quantity_zakup_fact"];
+//$data_values[$row2["product_id"]][0][0] +=$row2["quantity_zakup_fact"];
+}
+}
+
+
+$dataOrders2=$db::getRows("SELECT id,date_add FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");
+
+$idss="";
+$k=0;
+
+echo"<b>Товар в пути участвуют заказы:</b>";
+foreach($dataOrders2 as $row) {
+ if($k>0) $idss.=" OR"; $idss.= " order_id='".$row["id"]."'"; $k++;
+
+ echo"<br> id=".$row["id"]." дата старта:".$row["date_add"]." ".$row["name"]."";
+
+}
+
+if(!empty($idss)) $orders_where=" AND ( $idss) AND order_id!='$orderId'";
+
+
+echo"order_date_add = $order_date_add orders_where=$orders_where ";
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, color FROM
+ store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color");
+
+ // echo"<br> SQL SELECT sum(value) as value, product_id, color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0 $orders_where group by product_id,color ";
+
+ foreach($data2 as $row2) {
+ $data_values[$row2["product_id"]][0][$row2["color"]]=$row2["value"];
+ // $data_values[$row2["product_id"]][0][$row2["color"]] +=$row2["value"];
+
+ echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
+ }
+
+
+}
+
+
+
+
+
+
+
+}
+
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_prices типа global_hand
+
+$inFieldTable=["purchase_price","purchase_summ","purchase_price_zakup","price_zakup_summ","quantity_purchase_summ","quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","cost_price","additional_quantity"];
+if(in_array($field_name,$inFieldTable)) {
+
+ /// echo"+$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id,$field_name FROM store_orders_prices WHERE order_id=?",[$orderId]);
+foreach($data as $row) {
+ //foreach($inFieldTable as $field)
+ $data_values[$row["product_id"]][0][0]=$row[$field_name];
+ }
+
+
+
+$inFieldTableColor=["quantity_zakup","quantity_zakup_fact","comment_zakup","comment_discrepancy_polnogramm","quantity_warehouseman_fact","quantity_rejection","quantity_zakup_info","additional_quantity"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) {
+ if(empty($row["store_id"])) $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+ }
+}
+}
+
+
+// если мы попадаем в поля сохраненные в таблице store_orders_item типа global_hand
+$inFieldTable=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+if(in_array($field_name,$inFieldTable)) {
+
+//echo"+!!!!!$field_name+ order_id=$orderId";
+$data=$db::getRows("SELECT product_id, store_id, $field_name FROM store_orders_item WHERE order_id=? AND store_id!='undefined'",[$orderId]);
+foreach($data as $row) {
+ $data_values[$row["product_id"]][$row["store_id"]][0]=$row[$field_name];
+ }
+
+$inFieldTableColor=["quantity_purchase","goods_in_transit122","division_quantity","division_fact"];
+$field_id=$fieldsRows[$field_name]["id"];
+if(!empty($field_id) and in_array($field_name,$inFieldTableColor)) {
+$data=$db::getRows("SELECT product_id, store_id, quantity, color FROM store_orders_colors WHERE order_id=? AND field_id=? AND color!='' AND store_id!='undefined'",[$orderId,$field_id]);
+foreach($data as $row) {
+ $data_values[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+ }
+}
+
+
+
+}
+return $data_values;
+}
+
+
+
+
+
+// функция заносит в массив данные по полям в заказеЗакупщика исходные данные ID заказа Дата 1 Дата2 И магазин Может быть =0
+function data_values_insert_sql($date1,$date2) {
+global $db,$providers,$products,$ProductsOptions,$whereInProductsId,$date_start_sale,$date_start_division,$orderId,$fieldsRows;
+$data=$db::getRows("SELECT id,name_eng as field_name, position, field_type, description, sql_table_values FROM store_orders_fields WHERE 1 order by position ASC, id ASC");
+echo"<table class=t>";
+foreach($data as $row) {
+ echo "<tr><td>".$row["position"]."</td><td> ".$row["field_name"]."</td><td> ".$row["field_type"]."</td><td>".$row["sql_table_values"]."
+ </td> <td>";
+ //$date_start_sale
+ $data_values[$row["field_name"]]=getArrayByFiledName($row["field_name"],$date1,$date2);
+ echo"<b>".$row["field_name"]."</b> - собираем данные и сохраняем в таблицу ";
+
+
+ // print_r($data_values[$row["field_name"]]);
+
+ /*
+if($printArray==true) {
+
+ foreach($fArray as $ProductId => $ArrayP) {
+ echo"<br>ProductId =".$products[$ProductId]." $ProductId";
+ foreach($ArrayP as $StoreId => $ArrayP2) {
+ if(!empty($StoreId)) {}
+ echo"<br>StoreId = ";
+ if(!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
+ else echo $StoreId;
+ //print_r($ArrayP2);
+
+ }
+ }
+ }
+*/
+
+
+
+ echo"</td><td>".$row["description"]."</td> </tr> ";
+
+}
+echo"</table>";
+return $data_values;
+
+}
+
+
+
+
+
+
+// пересчитываем данные - берем из страых таблиц и вписываем в новые.
+if(!empty($_GET["insert"])) {
+
+// массив соответствия ID магазинов и GUID
+$data=$db::getRows("SELECT entity_id, export_val FROM export_import_table WHERE entity='city_store' AND export_id='1'");
+foreach($data as $row) {
+$export[$row["entity_id"]]=$row["export_val"];
+$export_revers[$row["export_val"]]=$row["entity_id"];
+}
+
+$data_values_new=data_values_insert_sql($date1,$date2);
+
+$fieldsArrayFlip=array_flip($fieldsArray);
+foreach($data_values_new as $Field => $fArray) {
+
+if($Field=="quantity_purchase_last_week1")
+{
+ echo"<h2>$Field</h2>";
+
+
+ foreach($fArray as $ProductId => $ArrayP) {
+ echo"<br>ProductId =".$products[$ProductId]." $ProductId";
+ foreach($ArrayP as $StoreId => $ArrayP2) {
+ if(!empty($StoreId)) {}
+ echo"<br>StoreId = ";
+
+
+ if(!is_numeric($StoreId)) echo "".$export_revers[$StoreId];
+ else echo $StoreId;
+ print_r($ArrayP2);
+
+ }
+ }
+}
+ global $storeIdToGuidArray;
+ $storeIdToGuidArray=$export;
+ // $field_id=$fieldsArrayFlip[$Field];
+ insert_store_orders_fields($fArray,$Field);
+
+ }
+
+$db::sql("DELETE FROM store_orders_fields_data WHERE (value='0.000' or value='0.00') AND value_text=''",[$orderId]);
+
+}
+
+
+
+$_CONFIG["jscss"]='
+<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal; max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+ padding: 0.05rem;
+ background-color: 1px;
+ box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+}
+.zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+}
+
+
+.zak td:hover:before {
+ background-color: #e3e3e3;
+ content: \'\';
+ height: 100%;
+ left: -5000px;
+ position: absolute;
+ top: 0;
+ width: 10000px;
+ z-index: -2;
+}
+
+.zak td:hover:after {
+ background-color: #cdcdcd;
+ content: \'\';
+ height: 10000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+}
+
+
+
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+ vertical-align: bottom;
+ line-height: normal;
+}
+table.zak thead b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+.zak td.td_product:hover {background:#fff;}
+
+</style>
+<script>
+
+function changef(id,typeint)
+{
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\') uname = uname.replace(/[^0-9.\s]/gi, \'\');
+if(typeint==\'int\') uname = uname.replace(/[^0-9\s]/gi, \'\');
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+function ajaxEditFieldValue(name_eng,product_id,color)
+{
+$.ajax({
+ url: \'/shipment/ajaxEditFieldValue/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+ }});
+$(\'#\'+name_eng+\'\'+product_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+
+
+
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{
+$.ajax({
+ url: \'/shipment/ajaxEditFieldValue/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+ }});
+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+setTimeout(function(){
+ $(\'.okk\').remove();
+}, 3000);
+}
+
+</script>';
+
+
+
+
+
+
+
+
+// вытаскиваем зависимые перменные
+/*
+foreach($fieldsArrayDepended as $fId =>$DependedArray) {
+ // echo"<br> $fId";
+ if(!empty($DependedArray)) {
+ foreach($DependedArray as $Field) {
+ $Field=trim($Field);
+ if(!empty($Field)) {
+ // if(is_numeric($Field)) echo"id=$Field name=".$fieldsArray[$Field]."";
+ // else echo" глобальная=$Field"; // не зависит от закупки - не привязана к товару global
+ // static_hand статическая - заполняется 1 раз на всю закупку привязана к товару цена розничная - себестоимость, Куплено по факту, Дозакупка шт. - не привязана к магазину
+ // stats суммарная по магазинам - на основе данных из других таблиц сумма продаж в шт, сумма спсиания
+ // stats_store_hand суммарная по магазинам - на основе вводных данных
+ // stats_store_summ суммарная по магазинам - на основе вводимых данных для каждого магазина - считаеся сумма по всем позициям
+ }
+ }
+ }
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_prices WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) {
+$fieldsArrs=["quantity_zakup","purchase_price", "purchase_summ", "quantity_zakup_fact", "purchase_price_zakup", "price_zakup_summ", "comment_zakup" , "quantity_warehouseman_fact", "quantity_rejection", "quantity_zakup_info", "cost_price", "quantity_purchase_summ" , "comment_discrepancy_polnogramm"];
+foreach($fieldsArrs as $field) $DataFieldStatsSumm[$row["product_id"]][$field]=$row[$field];
+}
+
+// не актуально - данные из старых таблиц = > должно все браться из табицы store_orders_fields_data
+$dataF=$db::getRows("SELECT * FROM store_orders_item WHERE order_id=? ",[$orderId]);
+foreach($dataF as $row) {
+$fieldsArrs=["quantity_purchase","quantity_fact", "quantity"];
+foreach($fieldsArrs as $field) $DataFieldStats[$row["product_id"]][$row["store_id"]][$field]=$row[$field];
+}
+
+*/
-<?php
+<?
function latlng2distance($gps, $gps2) {
$gpsarr=explode(",",$gps);
-<?php
+<?
//require_once dirname(__FILE__)."/image_bmp.php";
/*
Пример использования:
-<?php
+<?
function get_export_id($export_val, $entity="admin", $export_id=1) {
global $db,$arr__export;
if(empty($arr__export["$entity$export_id"])) {
-<?php
+<?
require "startup.php";
if(!is_administrator()) header("Location: index.php");
if($_SESSION['group_id']==0) header("Location: index.php");
</body>
</html>
-<?php
+<?
--- /dev/null
+<?
+
+$_MODEL["shipment"]=[
+"model"=>"shipment",
+"table" => "store_orders",
+"model_related" => "",
+"statuses" => "",
+"status_name" => "status",
+"uid_name" =>"id",
+"uid_tip" =>"int",
+"uid_name_from_related_model" =>"",
+"url_model_add" =>"/shipment/add/",
+"url_model_view" =>"/shipment/edit/",
+];
\ No newline at end of file
--- /dev/null
+<?
+
+$_MODEL["shipment_waybill_products"]=[
+"model"=>"shipment_waybill_products",
+"table" => "shipment_waybill_products",
+"model_related" => "",
+"parent" => "shipment_waybills",
+"statuses" => "",
+"status_name" => "status_id",
+"uid_name" =>"id",
+"uid_tip" =>"int",
+"uid_name_from_parent_model" =>"waybill_id",
+"url_model_add" =>"/shipment_waybill_products/add/",
+"url_model_view" =>"/shipment/shipment_waybill_products/",
+];
\ No newline at end of file
--- /dev/null
+<?
+
+$_MODEL["shipment_waybills"]=[
+"model"=>"shipment_waybills",
+"table" => "shipment_waybills",
+"model_related" => "shipment_waybill_products",
+"statuses" => "",
+"status_name" => "status_id",
+"uid_name" =>"id",
+"uid_tip" =>"int",
+"uid_name_from_related_model" =>"waybill_id",
+"url_model_add" =>"/shipment_waybills/add/",
+"url_model_view" =>"/shipment/shipment_waybills/",
+];
\ No newline at end of file
Notice: probably you should'nt use all of this in same script :)
-<?php
+<?phpb
//include only that one, rest required files will be included from it
include "qrlib.php"
-<?php
+<?
$_CONFIG["salary"]["normal_count_shift"]=[25=>15,30=>15,35=>15,50=>15];
-<?php
+<?
function make_links_clickable($text)
{
-<?php
+<?
// округляет до определенного числа
function ceilCoefficient($number, $rate = 1)
return (string) "{$this->url}/xml/";
}
- protected function parseXml($xml)
+ protected static function parseXml($xml)
{
$domXml = simplexml_load_string($xml);
$arr = array();
return (string) "{$this->url}/xml/state.php";
}
- protected function parseXml($xml)
+ protected static function parseXml($xml)
{
$domXml = simplexml_load_string($xml);
$arr = array();
return (string) "{$this->url}/xml/balance.php";
}
- protected function parseXml($xml)
+ protected static function parseXml($xml)
{
$domXml = simplexml_load_string($xml);
$arr = array();
$this->item['end'] = $end;
}
- protected function parseXml($xml)
+ protected static function parseXml($xml)
{
$domXml = simplexml_load_string($xml);
$arr = array();
-<?php
+<?
class Thumbs
{
public function __construct($filename)
-<?php
+<?
function store_select($form=1,$pole_name="id",$store_all=0) {
global $db;
});
});
</script>
-<?php
+<?
}
function get_sql_array($sql_table, $id, $name, $where ) {
global $db;
-$data = Yii::$app->db->createCommand("SELECT $id,$name FROM $sql_table $where")->queryAll();
-//$data = $db::getRows("SELECT $id,$name FROM $sql_table $where");
-$array = [];
+$data = $db::getRows("SELECT $id,$name FROM $sql_table $where");
foreach ($data as $it) {
$array[$it[$id]]=$it[$name];
}
-<?php
+<?
$_CONFIG["entity_arr"]=array(
"lead"=>array("name"=>"Сделки/заказы", "table"=>"orders_amo"),
"client"=>array("name"=>"Клиент", "table"=>"contacts","type_id"=>0),
global $db,$modul, $act,$fields_edit,$h1;
$validate_config=validate_config();
-
+
$data=$db::getRows("SELECT id,name FROM uni_status WHERE type='".$modul."_group' order by posit ASC");
foreach ($data as $row) $sel_group[$row["id"]] = $row["name"];
$fields_table_edit="";
if(!empty($_POST["position"])) {
$n=count($_POST["position"]);
-foreach($_POST["position"] as $v =>$p) {
- $item = \yii_app\records\ModulesUniFields::find()->where(['and', ['modul' => $modul], ['id' => $v]])->one();
- $item->posit = $n;
- $item->save();
-// $db::sql("UPDATE modules_uni_fields SET posit=? WHERE modul='$modul' AND id=?",[$n,$v]);
- $n--;
-}
+foreach($_POST["position"] as $v =>$p) {$db::sql("UPDATE modules_uni_fields SET posit=? WHERE modul='$modul' AND id=?",[$n,$v]); $n--; }
$mess="Сохранили";
}
-$sel_group=get_sql_array("uni_status", "id", "name", " WHERE type='".$modul."_group' order by posit DESC");
-$data2 = Yii::$app->db->createCommand("SELECT * FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC")->queryAll();
-//$data2=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC");
+$sel_group=get_sql_array("uni_status", "id", "name", " WHERE type='".$modul."_group' order by posit DESC");
+$data2=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC");
if(count($data2)>0) {
unif_fields_show($forma, $table_sql) ;
-$idname=$forma["id"]["name"] ?? '';
+$idname=$forma["id"]["name"];
$item=array();
if(!empty($id)) {
$where_sql="";
if(!empty($form_parametr["WHERE_SQL"])) $where_sql=$form_parametr["WHERE_SQL"];
-
-
-$q = "SELECT name,id FROM $table_sql WHERE id=:id $where_sql LIMIT 1";
-$data = Yii::$app->db->createCommand($q, [':id' => $id])->queryAll();
-//$data = $db::getRows($q,[$id]);
+
+
+$q = "SELECT name,id FROM $table_sql WHERE id=? $where_sql LIMIT 1";
+$data = $db::getRows($q,[$id]);
$n=count($data);
if($n>0) {
foreach ($data as $row) {
}
} else {
//top("Ошибка 404 - запись не найдена");
-//include"templates/top.php";
+include"templates/top.php";
error_mess("ID не найден");
//bottom();
-include dirname(__DIR__, 1) . '/templates/bottom_light.php';
+include"templates/bottom.php";
exit();
}
}
-if(!empty($id)) {
- $q = \yii_app\records\ModulesUniFields::find()->alias('o')->select(['*', 'v.id as id_value', 'v.val as val', 'o.group_id as group_id', 'o.name', 'o.image_config'])
- ->leftJoin('uni_fields_value as v', 'o.id = v.field_id AND v.uni_id = ' . $id)
- ->where(['o.modul' => $modul])->orderBy(['o.posit' => SORT_DESC])->asArray();
-// $q = "SELECT *,v.id as id_value, v.val as val, o.group_id as group_id,o.name, o.image_config FROM modules_uni_fields as o
-//LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id='$id') WHERE o.modul='$modul' ORDER BY o.posit DESC";
-} else {
- $q = \yii_app\records\ModulesUniFields::find()->select(['*', 'select_val as val'])->where(['modul' => $modul])
- ->orderBy(['posit' => SORT_DESC])->asArray();
-// $q = "SELECT *,select_val as val FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC";
-}
+if(!empty($id))
+$q = "SELECT *,v.id as id_value,v.val as val, o.group_id as group_id,o.name, o.image_config FROM modules_uni_fields as o
+LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id='$id') WHERE o.modul='$modul' ORDER BY o.posit DESC";
+ else
+ $q = "SELECT *,select_val as val FROM modules_uni_fields WHERE modul='$modul' ORDER BY posit DESC";
if(empty($fields_edit)) {
-foreach($forma as $key_name => $massiv_k) $no_uni_fields[]=$key_name;
-$data = $q->all();
-//$data = $db::getRows($q);
+foreach($forma as $key_name => $massiv_k) $no_uni_fields[]=$key_name;
+$data = $db::getRows($q);
foreach ($data as $row) {
if(empty($row["val"]) and !empty($row["select_val"])) $row["val"]=$row["select_val"];
$image_config=json_decode($row["image_config"], true,JSON_UNESCAPED_UNICODE);
-$ext_1=explode(",",$image_config["ext"] ?? '');
+$ext_1=explode(",",$image_config["ext"]);
$forma[$row["name_eng"]]=["name"=>$row["name_eng"], "tip"=>"string", "name_pole"=>$row["name"], "ext"=>$ext_1, "image_config"=>$row["image_config"], "class_row"=>'fdiv f_'.$row["group_id"], "type"=>$row["type"], "sql_func"=>$row["sql_func"], "value"=>$row["val"], "val_arr"=>explode(";",$row["val"]), "select_val"=>explode(";",$row["select_val"]), "required"=>$row["required"], "attr"=>str_replace('"','"',$row["attr"]), "leftclass"=>$row["leftclass"], "class"=>$row["class"], "placeholder"=>$row["placeholder"], "class_block"=>$row["class_block"], "style"=>$row["style"], "html"=>$row["html"], "dostup_arr"=>$row["dostup_arr"] ] ;
}
*/
-$item = Yii::$app->db->createCommand("SELECT * FROM $table_sql WHERE $idname=:idname LIMIT 1", [':idname' => $id])->queryAll()[0] ?? '';
-//$item = $db::getRow("SELECT * FROM $table_sql WHERE $idname=? LIMIT 1",[$id]);
+$item = $db::getRow("SELECT * FROM $table_sql WHERE $idname=? LIMIT 1",[$id]);
-/*заносим свойства для категории товара в массив*/
-$data = \yii_app\records\ProductsCatProperty::find()->select(['id'])->where(['cat_id' => $catid])->asArray()->all();
-//$data = $db::getRows("SELECT id FROM products_cat_property WHERE cat_id=?",[$catid]);
+/*заносим свойства для категории товара в массив*/
+$data = $db::getRows("SELECT id FROM products_cat_property WHERE cat_id=?",[$catid]);
foreach ($data as $row) $data_items[]=$row["id"];
/*заносим все характеристики в общий массив*/
-$data = \yii_app\records\CatProperty::find()->select(['id', 'name', 'tip', 'parent_id'])->asArray()->all();
-//$data = $db::getRows("SELECT id,name,tip,parent_id FROM cat_property");
+$data = $db::getRows("SELECT id,name,tip,parent_id FROM cat_property");
foreach ($data as $row) {
$cat_property[$row["id"]]=$row["name"];
if($row["tip"]==0) $select_all[$row["id"]]= $row["name"];
/*запрашиваем какие возможные свойства есть у товара в категории cat_id=$id*/
-$data = \yii_app\records\ProductsCatProperty::find()->select(['cat_id', 'id'])->where(['cat_id' => $catid])->asArray()->all();
-//$data = $db::getRows("SELECT cat_id,id FROM products_cat_property WHERE cat_id=?",[$catid]);
+$data = $db::getRows("SELECT cat_id,id FROM products_cat_property WHERE cat_id=?",[$catid]);
foreach ($data as $row){
$select[$row["id"]]=$cat_property[$row["id"]];
$selec[]=$row["cat_id"];
/*сохраняем даные свойств товара */
if(!empty($_POST["save"])) {
- // удаляем старые записи перед записью новых
- \yii_app\records\ProductsPropertyValue::deleteAll(['id' => $id]);
- //$db::sql("DELETE FROM products_property_value WHERE id=?",[$id]);
- foreach($_POST["in"] as $v =>$p) {
- if(!empty($p) and !empty($id)) {
- $item = new \yii_app\records\ProductsPropertyValue;
- $item->property_id = $p;
- $item->id = $id;
- $item->val = '';
- $item->save();
-// $db::sql("INSERT IGNORE INTO products_property_value VALUES(?,?,?)",[$p,$id,'']);
- }
- }
+// удаляем старые записи перед записью новых
+$db::sql("DELETE FROM products_property_value WHERE id=?",[$id]);
+foreach($_POST["in"] as $v =>$p) {
+if(!empty($p) and !empty($id)) $db::sql("INSERT IGNORE INTO products_property_value VALUES(?,?,?)",[$p,$id,'']);
}
-/*запрашиваем даные свойств товара */
-$data = \yii_app\records\ProductsPropertyValue::find()->where(['id' => $id])->asArray()->all();
-//$data = $db::getRows("SELECT * FROM products_property_value WHERE id=?",[$id]);
+}
+
+/*запрашиваем даные свойств товара */
+$data = $db::getRows("SELECT * FROM products_property_value WHERE id=?",[$id]);
foreach ($data as $row) $prop_val[$row["property_id"]]=$row["property_id"];
/*вывод свойств у товара*/
}
-if(!empty($modul_uni)) {
-$q = \yii_app\records\ModulesUniFields::find()->alias('o')
- ->select(['v.val as val', 'o.name_eng as name_eng', 'o.type', 'o.attr', 'o.name', 'o.tip', 'o.sql_func', 'o.required',
- 'o.leftclass', 'o.class', 'o.placeholder', 'o.class_block', 'o.style', 'o.html', 'o.dostup_values', 'o.image_config'])
- ->leftJoin('uni_fields_value as v', 'o.id = v.field_id AND v.uni_id = ' . $id)
- ->where(['o.modul' => $modul_uni])->orderBy(['o.posit' => SORT_DESC])->asArray();
-//$q = "SELECT v.val as val, o.name_eng as name_eng, o.type,o.attr, o.name,o.tip,o.sql_func,o.required,o.leftclass,o.class,o.placeholder,o.class_block,
-//o.style, o.html, o.dostup_values,
-//o.image_config FROM modules_uni_fields as o LEFT JOIN uni_fields_value as v ON o.id=v.field_id AND v.uni_id='$id' WHERE o.modul='$modul_uni'";
-//echo "$q";
+if(!empty($modul_uni)) {
+
+$q = "SELECT v.val as val, o.name_eng as name_eng, o.type,o.attr, o.name,o.tip,o.sql_func,o.required,o.leftclass,o.class,o.placeholder,o.class_block,
+o.style, o.html, o.dostup_values,
+o.image_config FROM modules_uni_fields as o LEFT JOIN uni_fields_value as v ON o.id=v.field_id AND v.uni_id='$id' WHERE o.modul='$modul_uni'";
+echo "$q";
+
-$data = $q->all();
-//$data = $db::getRows($q);
-$form_field_uni = [];
+$data = $db::getRows($q);
foreach ($data as $row) {
//echo" ++ {$row["name_eng"]}={$row["val"]} ";
/////////
-$data = \yii_app\records\ModulesUniFields::find()->alias('o')
- ->select(['*', 'v.val as val', 'o.name_eng as name_eng', 'o.type', 'o.required', 'o.attr', 'o.dostup_values', 'o.image_config'])
- ->leftJoin('uni_fields_value as v', 'o.id = v.field_id AND v.uni_id = ' . $id)
- ->where(['o.modul' => $modul_uni])
- ->asArray()->all();
-//$q = "SELECT *,v.val as val, o.name_eng as name_eng, o.type, o.required,o.attr, o.dostup_values, o.image_config FROM modules_uni_fields as o LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id=?) WHERE o.modul=? ";
-//$data = $db::getRows($q,[$id,$modul_uni]);
+
+$q = "SELECT *,v.val as val, o.name_eng as name_eng, o.type, o.required,o.attr, o.dostup_values, o.image_config FROM modules_uni_fields as o LEFT JOIN uni_fields_value as v ON (o.id=v.field_id AND v.uni_id=?) WHERE o.modul=? ";
+$data = $db::getRows($q,[$id,$modul_uni]);
foreach ($data as $row) {
$attr=$row["attr"];
if($row["type"]=="multiple") { $val_2=explode(",",$row["val"]); $row["val"]=$val_2; $tip="array"; } else $val_err='';
//foreach($form_field_hide_array as $keys => $vals) { echo"<br>Скрываем поле $keys => $vals"; }
/////////
-$data = \yii_app\records\ModulesUniFields::find()->select(['name_eng'])->where(['modul' => $modul_uni_fields])->asArray()->all();
-//$q = "SELECT name_eng FROM modules_uni_fields WHERE modul=?";
-//$data = $db::getRows($q,[$modul_uni_fields]);
+
+$q = "SELECT name_eng FROM modules_uni_fields WHERE modul=?";
+$data = $db::getRows($q,[$modul_uni_fields]);
foreach ($data as $row) {
$form_field_hide_array[$row["name_eng"]]=$row["name_eng"];
//echo"<br>Скрываем поле {$row["name_eng"]} ";
-$sql_up='';
-$sql_upvalue = [];
+$sql_up='';
foreach($_POST as $name => $value) {
-
+ // echo" <br> $name => $value ";
if(!in_array($name,array('id','save')) and isset($form_field_hide_array[$name]) and $forma[$name]["type"]!="table") {
if($forma[$name]["type"]=="multiple") {$val=""; $i=0; foreach($_POST[$name] as $keys1 => $values1){ if($i!=0) $val .=","; $val .="$values1"; $i++; }}
$p=0;
$sql="";
$param2=array();
-if (isset($id)) $param2['id2']=$id;
+$param2['id2']=$id;
foreach($sql_upvalue as $nm => $vl) {
if($p>0) $sql .=",";
$sql .=" `$nm` = :$nm";
$val='';
if($name!="save" and $name!="id" and $forma[$name]["type"]!="image" and $forma[$name]["type"]!="table" and $forma[$name]["type"]!="video" and $forma[$name]["type"]!="file" and !isset($forma[$name]["no_form"]) and $forma[$name]["type"]!="html") {
-if(isset($_POST[$name])) {
-$val=htmlentities(is_array($_POST[$name]) ? implode(',', $_POST[$name]) : $_POST[$name]);
+if(isset($_POST[$name])) {
+$val=htmlentities($_POST[$name]);
//echo"<br> $name value=$val ";
if(empty($forma[$name]["mysql_table"])) {
-//$sql1 .=",$name"; $sql2 .=", '$val' ";
+$sql1 .=",$name"; $sql2 .=", '$val' ";
$sql_up .=", $name='$val' ";
$sql_up1_array[] = $name;
// echo "$q ".print_r($param)."";
//exit($q);
$db::sql($q, $param);
-$mess="Запись обновлена $q";
+$mess="Запись обновлена";
if(!empty($_POST)) {
// удаляем из массива поля универсальные чтобы не было ошибки в базе
-//foreach($form_field_hide_array as $k =>$val) {
-////unset($sql_up_array[$k]);
-////echo" <br> ------ $k =>$val";
-//}
+foreach($form_field_hide_array as $k =>$val) {
+//unset($sql_up_array[$k]);
+//echo" <br> ------ $k =>$val";
+}
}
-//include_once"templates/top.php";
+include_once"templates/top.php";
if(!empty($_GET["mess"])) $mess=htmlentities($_GET["mess"]);
echo"<div class=\"panel-body\">
<div class=\"tab-content\">
<div class=\"tab-pane active\" id=\"profile-1\">
-<form method=post role=\"form\" class=\"form-horizontal was-validated\" id=\"erpform\" autocomplete=\"off\" enctype=\"multipart/form-data\" >";
-?><input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" /><?php
+<form method=post role=\"form\" class=\"form-horizontal was-validated\" id=\"erpform\" autocomplete=\"off\" enctype=\"multipart/form-data\" action=\"$action\">";
//<input name=go value=\"".htmlentities($_REQUEST["go"])."\" type=hidden>
////////// конец групп
if(!empty($forma["save"])) {$save=$forma["save"]; unset($forma["save"]); }
-$form_field_uni = [];
+
foreach($form_field_uni as $name => $pole_arr2) {
$forma[$name]=$pole_arr2;
//echo" +++++ {$name} {$pole_arr2["value"]} ";
//echo" dostup_arr=". $pole_arr["dostup_arr"] ."";
if(!empty($pole_arr["br"]) ) echo"<div class=\"row\"></div>";
-$id_pole=$forma["id"]["name"] ?? '';
+$id_pole=$forma["id"]["name"];
/*HEDDEN*/
if($forma[$name]["type"]=="hidden" and !empty($id) and !empty($idname) and $id_pole==$idname) { echo"<input type=hidden name=".$idname." value=\"".$id."\">"; if(!empty($forma[$name]["html"])) echo $forma[$name]["html"];}
if(!empty($forma[$name]["name_pole_txt"])) $forma[$name]["name_pole"]=$forma[$name]["name_pole_txt"];
-$dostup_arr=isset($pole_arr["dostup_arr"]) ? unserialize($pole_arr["dostup_arr"]) : [];
-if(isset($_CONFIG_SITE["dostup_fields"]) && $_CONFIG_SITE["dostup_fields"][$modul]==1) {$show=0; $edit=0;}
+$dostup_arr=unserialize($pole_arr["dostup_arr"]);
+if($_CONFIG_SITE["dostup_fields"][$modul]==1) {$show=0; $edit=0;}
else {$show=1; $edit=1;}
if(!empty($dostup_arr[$_SESSION["group_id"]][0]["show"])) {
$arr2=array();
-if(!empty($forma[$name]["val_arr"])) {$arr[0]=implode(";",$forma[$name]["val_arr"]); }
+if(!empty($forma[$name]["val_arr"])) {
+
+ $arr[0]=implode(";",$forma[$name]["val_arr"]);
+}
+
+
$count_pole=explode(",",$sql_z[0]);
if(count($count_pole)==2) $arr2=select_sql_func($sql_z[0],$sql_z[1],$sql_z[2]);
foreach($arr2 as $idd =>$vall) $arr[$idd]=$vall;
+
+
/*
if($name=="group_id" and $modul=="admin") {
// echo" +++ ".$forma[$name]["dostup_values"]." ". $_SESSION['admin_group_add_arr'];
}
+
+
+
+
+if(!empty($forma[$name]["val_arr"]) and $forma[$name]["tip"]=="string") {
+//$arr=[];
+//$ars=implode(";",$forma[$name]["val_arr"]);
+ //foreach($ars as $idd =>$vall) $forma[$name]["val_arr"][$vall]=$vall;
+ //echo" $name ++++++ ".$forma[$name]["tip"]."";
+}
/*multy-select*/
if($pole_arr["type"]=="multiple") {
-$item[$name]=explode(",",$item[$name] ?? '');
+$item[$name]=explode(",",$item[$name]);
echo"<label class=\"control-label2 form-label";
if(empty($forma[$name]["class_left"])) echo" col-xs-12 col-sm-3";
echo" text-lg-right\">"; if(!empty($forma[$name]["required"])) echo"*"; echo"".$forma[$name]["name_pole"]."</label><div class=\"";
if(!empty($forma[$name]["val_arr"])) {
foreach($forma[$name]["val_arr"] as $vid =>$namev) { echo"<option value=$vid";
-if(in_array($vid,$item[$name])) echo" selected";
-if (is_array($forma[$name]["value"]) && in_array($vid, $forma[$name]["value"])) echo " selected";
+if(in_array($vid,$item[$name])) echo" selected";
+if(in_array($vid,$forma[$name]["value"])) echo" selected";
echo">$namev</option>"; }
}
echo"</select></div></div>";
function construct_modul_form_azea($modul) {
-global /*$modul,*/$db,$h1,$group_menu,$uni_fields, $_CONFIG,$forma_sql_table;
-
-$data = \yii_app\records\ModulesUniFields::find()->where(['modul' => $modul])->orderBy(['posit' => SORT_DESC])->asArray()->all();
-//$data=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul=? ORDER BY posit DESC",[$modul]);
+global $modul,$db,$h1,$group_menu,$uni_fields, $_CONFIG,$forma_sql_table;
+$data=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul=? ORDER BY posit DESC",[$modul]);
foreach ($data as $row) {
- $image_config=json_decode(empty($row["image_config"]) ? '{}' : $row["image_config"], true,JSON_UNESCAPED_UNICODE);
- $ext_1=explode(",",$image_config["ext"] ?? '');
+$image_config=json_decode($row["image_config"], true,JSON_UNESCAPED_UNICODE);
+$ext_1=explode(",",$image_config["ext"]);
- if(empty($row["val"]) and !empty($row["select_val"])) $row["val"]=$row["select_val"];
- $forma[$row["name_eng"]]=["name"=>$row["name_eng"], "tip"=>$row["tip"], "name_pole"=>$row["name"], "ext"=>$ext_1, "dostup_values"=>$row["dostup_values"], "image_config"=>$row["image_config"], "class_row"=>'fdiv f_'.$row["group_id"], "sql_func"=>$row["sql_func"],"value"=>$row["default_val"], "val_arr"=>explode(";",$row["val"] ?? ''), "select_val"=>explode(";",$row["select_val"]), "default_val"=>$row["default_val"], "type"=>$row["type"], "class_block"=>$row["class_block"], "class"=>$row["class"], "style"=>$row["style"], "attr"=>$row["attr"], "placeholder"=>$row["placeholder"], "leftclass"=>$row["leftclass"], "required"=>$row["required"], "dostup_arr"=>$row["dostup_arr"], "html"=>$row["html"]];
- if(!empty($ext_1)) $forma[$row["name_eng"]]["ext"]=$ext_1;
- //echo"<br> {$row["name_eng"]} {$row["required"]} ";
+if(empty($row["val"]) and !empty($row["select_val"])) $row["val"]=$row["select_val"];
+$forma[$row["name_eng"]]=["name"=>$row["name_eng"], "tip"=>$row["tip"], "name_pole"=>$row["name"], "ext"=>$ext_1, "dostup_values"=>$row["dostup_values"], "image_config"=>$row["image_config"], "class_row"=>'fdiv f_'.$row["group_id"], "sql_func"=>$row["sql_func"],"value"=>$row["default_val"], "val_arr"=>explode(";",$row["val"]), "select_val"=>explode(";",$row["select_val"]), "default_val"=>$row["default_val"], "type"=>$row["type"], "class_block"=>$row["class_block"], "class"=>$row["class"], "style"=>$row["style"], "attr"=>$row["attr"], "placeholder"=>$row["placeholder"], "leftclass"=>$row["leftclass"], "required"=>$row["required"], "dostup_arr"=>$row["dostup_arr"], "html"=>$row["html"]];
+if(!empty($ext_1)) $forma[$row["name_eng"]]["ext"]=$ext_1;
+//echo"<br> {$row["name_eng"]} {$row["required"]} ";
}
if(empty($forma["save"])) $forma["save"]=["name"=>"save","type"=>"submit","value"=>"сохранить"];
construct_form_azea($forma,$modul,$h1,"2",$uni_fields);
if(!empty($_CONFIG["bottom_content"])) echo $_CONFIG["bottom_content"];
-
-include dirname(__DIR__, 1) . '/templates/bottom_light.php';
+
+include"templates/bottom.php";
}
}
-//$spiski_arr=array(
-// "id,name;city_store;WHERE 1 order by name ASC"=>"Список магазинов в НН",
-// "admin_id,name_admin;admin;WHERE group_id=27 order by name_admin ASC"=>"Список курьеров",
-// "admin_id,name_admin;admin;WHERE group_id=12 order by name_admin ASC"=>"Список курьеров 2",
-//
-// "id,name;city_geo;WHERE city_id='1343' order by name ASC"=>"Список районов",
-// "id_city,city_name_ru;city;WHERE main='1' order by city_name_ru ASC"=>"Список городов",
-// "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC"=>"Список менеджеров",
-// "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC" =>"Список флористов",
-// "admin_id,name_admin;admin;WHERE group_id=10 or group_id=4 order by name_admin ASC"=>"Список менеджеров и операторов",
-// "status_id,status;status;WHERE type='istochnik'"=>"Список источников сделки",
-// "status_id,status;status;WHERE type='problem'"=>"Список Жалоб",
-// "status_id,status;status;WHERE type='otkaz'"=>"Список Отказов",
-// "status_id,status;status;WHERE type='otkaz_rop'"=>"Список Отказов РОП",
-// "status_id,status;status;WHERE type='status_vozvrat'"=>"Список Статусов на возврат",
-// "setka_id,brend;setka;WHERE 1"=>"Список Брендов",
-// "site_id,url_site;setka_site;WHERE 1 order by city_id, city ASC"=>"Список сайтов",
-// "status_id,status;status;WHERE type='payment'"=>"Список типов оплат",
-// "status_id,status;status;WHERE type='povod'"=>"Список поводов для букета",
-// "status_id,status;status;WHERE type='opozdal'"=>"Список причин опозданий курьеров",
-// "status_id,status;status;WHERE type='brend'"=>"Список брендов",
-//
-//
-//
-// );
-
-//$zz = $zz ?? '';
-//$zz=preg_replace_callback("|{RAND}|","generate_r", $zz);
-//$zz=str_replace('[YEAR]',date("Y",time()),$zz);
-//$zz=str_replace('[MONTH]',date("m",time()),$zz);
-//$zz=str_replace('[DAY]',date("d",time()),$zz);
-//$zz=str_replace('[HOUR]',date("H",time()),$zz);
-//$zz=str_replace('[MINUT]',date("i",time()),$zz);
-//$zz=str_replace('[SECUND]',date("s",time()),$zz);
-//$zz=str_replace('[ADMIN_ID]',$_SESSION["admin_id"],$zz);
-//$zz=str_replace('[ADMIN_NAME]',$_SESSION["name_admin"],$zz);
-//$zz=str_replace('[RANDN]',rand(0,9),$zz);
-//$zz=str_replace('[TIME]',time(),$zz);
\ No newline at end of file
+$spiski_arr=array(
+ "id,name;city_store;WHERE 1 order by name ASC"=>"Список магазинов в НН",
+ "admin_id,name_admin;admin;WHERE group_id=27 order by name_admin ASC"=>"Список курьеров",
+ "admin_id,name_admin;admin;WHERE group_id=12 order by name_admin ASC"=>"Список курьеров 2",
+
+ "id,name;city_geo;WHERE city_id='1343' order by name ASC"=>"Список районов",
+ "id_city,city_name_ru;city;WHERE main='1' order by city_name_ru ASC"=>"Список городов",
+ "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC"=>"Список менеджеров",
+ "admin_id,name_admin;admin;WHERE group_id=30 order by name_admin ASC" =>"Список флористов",
+ "admin_id,name_admin;admin;WHERE group_id=10 or group_id=4 order by name_admin ASC"=>"Список менеджеров и операторов",
+ "status_id,status;status;WHERE type='istochnik'"=>"Список источников сделки",
+ "status_id,status;status;WHERE type='problem'"=>"Список Жалоб",
+ "status_id,status;status;WHERE type='otkaz'"=>"Список Отказов",
+ "status_id,status;status;WHERE type='otkaz_rop'"=>"Список Отказов РОП",
+ "status_id,status;status;WHERE type='status_vozvrat'"=>"Список Статусов на возврат",
+ "setka_id,brend;setka;WHERE 1"=>"Список Брендов",
+ "site_id,url_site;setka_site;WHERE 1 order by city_id, city ASC"=>"Список сайтов",
+ "status_id,status;status;WHERE type='payment'"=>"Список типов оплат",
+ "status_id,status;status;WHERE type='povod'"=>"Список поводов для букета",
+ "status_id,status;status;WHERE type='opozdal'"=>"Список причин опозданий курьеров",
+ "status_id,status;status;WHERE type='brend'"=>"Список брендов",
+
+
+
+ );
+
+$zz=preg_replace_callback("|{RAND}|","generate_r", $zz);
+$zz=str_replace('[YEAR]',date("Y",time()),$zz);
+$zz=str_replace('[MONTH]',date("m",time()),$zz);
+$zz=str_replace('[DAY]',date("d",time()),$zz);
+$zz=str_replace('[HOUR]',date("H",time()),$zz);
+$zz=str_replace('[MINUT]',date("i",time()),$zz);
+$zz=str_replace('[SECUND]',date("s",time()),$zz);
+$zz=str_replace('[ADMIN_ID]',$_SESSION["admin_id"],$zz);
+$zz=str_replace('[ADMIN_NAME]',$_SESSION["name_admin"],$zz);
+$zz=str_replace('[RANDN]',rand(0,9),$zz);
+$zz=str_replace('[TIME]',time(),$zz);
\ No newline at end of file
-<?php
+<?
function connect_mysql_crm(){
global $_CONFIG_SITE;
--- /dev/null
+<?
+global $show_design;
+
+
+ini_set('display_errors', '1');
+ini_set('display_startup_errors', '1');
+error_reporting(E_ALL);
+
+function get_table_name_from_model($model){
+$model_config=get_config_universal_model($model);
+if(!empty($model_config["table"])) $table=$model_config["table"]; else $table=$model;
+ return $table;
+}
+
+function get_name_filed_status_from_universal_model($model){
+
+$related=[
+"universal_model"=>"",
+"shipment"=>"status",
+"shipment_waybills"=>"status_id",
+"shipment_waybill_products"=>""
+ ];
+
+if(!empty($related[$model])) $status_name=$related[$model]; else $status_name="";
+return $status_name;
+
+}
+
+
+function get_filed_value_from_universal_model($model,$field,$id){
+global $db;
+$table=get_table_name_from_model($model);
+$value="";
+ try {
+ $value=$db::getValue("SELECT $field FROM $table WHERE id=?",[$id]);
+ } catch (Exception $e) { echo 'Ошибка '.$model.' '.$table.' : ', $e->getMessage(), "\n";}
+
+ return $value;
+}
+
+function get_config_universal_model($model){
+global $db;
+if(is_numeric($model)) $field_name="id"; else $field_name="model";
+
+$config=[];
+
+ if($model=="universal_model") {
+
+ $config=["table"=>"universal_model","uid_name"=>"id"];
+
+ }
+
+ try {
+ $row=$db::getRow("SELECT * FROM universal_model WHERE $field_name=?",[$model]);
+ $config=$row;
+ if(!empty($row["json_params"])) {
+ $json_params=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+ if(!empty($json_params)) {
+ foreach($json_params as $field => $array) {
+ $config[$field]=$array;
+ }
+ }
+ }
+
+ if(!empty($row["json_access"])) {
+ $json_params=json_decode($row["json_access"], true, 512, JSON_UNESCAPED_UNICODE);
+ if(!empty($json_params)) {
+ foreach($json_params as $field => $array) {
+ $config["access"][$field]=$array;
+ }
+ }
+ }
+
+
+
+ } catch (Exception $e) { echo 'Ошибка '.$model.' '.$table.' : ', $e->getMessage(), "\n";}
+
+
+ return $config;
+}
+
+
+function get_access_from_universal_model($model) {
+global $db,$access_array;
+if(empty($access_array)) {
+$data=$db::getRows("SELECT status_id,group_id,access_json FROM universal_model_status_relationsip_group WHERE model=?",[$model]);
+$access_array=[];
+ foreach ($data as $row) {
+ if(!empty($row["access_json"])) $json=json_decode($row["access_json"], true, 512, JSON_UNESCAPED_UNICODE); else $json=true;
+ $access_array[$row["status_id"]][$row["group_id"]]=$json;
+ }
+}
+ return $access_array;
+}
+
+
+function get_access_action_from_universal_model($model) {
+global $db;
+$access_model_array=$db::getValue("SELECT json_access FROM universal_model WHERE model=?",[$model]);
+if(!empty($access_model_array)) $access_model_array=json_decode($access_model_array, true, 512, JSON_UNESCAPED_UNICODE); else $access_model_array=true;
+ return $access_model_array;
+}
+
+
+function get_universal_model_field($model,$field) {
+global $db;
+$data=$db::getRows("SELECT parent_field,field FROM universal_model_fields WHERE model=?",[$model]);
+$related_fields=[];
+ foreach ($data as $fieldRow) {
+ if(!empty($fieldRow["parent_field"])) $related_fields[$fieldRow["parent_field"]][]=$fieldRow["field"];
+ }
+ $data=$db::getRows("SELECT * FROM universal_model_fields WHERE model=? AND field=? ORDER BY posit DESC",[$model,$field]);
+
+ $universal_model_fields=[];
+ foreach($data as $row) {
+ $universal_model_fields=$row;
+ if(!empty($related_fields[$row["field"]])) $universal_model_fields["dependent_fields"] =$related_fields[$row["field"]];
+ $json_params=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+ foreach($json_params as $field => $value) $universal_model_fields[$field]=$value;
+ unset($universal_model_fields["json_params"]);
+ }
+return $universal_model_fields;
+}
+
+function get_universal_model_fields($model) {
+global $db;
+$data=$db::getRows("SELECT parent_field,field FROM universal_model_fields WHERE model=?",[$model]);
+$related_fields=[];
+ foreach ($data as $fieldRow) {
+ if(!empty($fieldRow["parent_field"])) $related_fields[$fieldRow["parent_field"]][]=$fieldRow["field"];
+ }
+ $data=$db::getRows("SELECT * FROM universal_model_fields WHERE model=? ORDER BY posit DESC",[$model]);
+
+ $universal_model_fields=[];
+ foreach($data as $row) {
+ $universal_model_fields[$row["field"]]=$row;
+ if(!empty($related_fields[$row["field"]])) $universal_model_fields[$row["field"]]["dependent_fields"] =$related_fields[$row["field"]];
+ $json_params=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+ if(!empty($json_params)) {
+ foreach($json_params as $field => $value) {
+
+ if(!empty($value)) {
+ //echo"<br> $field - $value";
+ $universal_model_fields[$row["field"]][$field]=$value; }
+
+ }
+ unset($universal_model_fields[$row["field"]]["json_params"]);
+ }
+ }
+return $universal_model_fields;
+}
+
+
+function get_query_field_model_alias($field_model_alias) {
+$query=[];
+if($field_model_alias=="shipment_waybill_products") include"inc/universal_model_types/universal_lists/products_with_prices.php";
+else {
+$f="inc/universal_model_types/universal_lists/$field_model_alias.php";
+if(is_file($f)) include($f);
+}
+
+ return $query;
+}
+
+
+function get_name_from_string($select="id,name", $table_name,$id){
+global $db;
+$select_arr=explode(",",$select);
+$idname=$select_arr[0];
+$name=$select_arr[1];
+$nameP="";
+ try {
+ $nameP = $db::getValue("SELECT $name FROM $table_name WHERE $idname=? LIMIT 1",[$id]);
+ } catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+ return $nameP;
+}
+
+
+function get_array_from_string($select="id,name", $table_name, $where="") {
+global $db;
+$where=str_replace(["{","}"],["'","'"],$where);
+$select_arr=explode(",",$select);
+try {
+ $data = $db::getRows("SELECT $select FROM $table_name $where");
+
+$sel_group=[];
+$i=1;
+foreach ($data as $row) {
+ // $sel_group[$row[$select_arr[0]]] = $row[$select_arr[1]];
+ $sel_group[$row["id"]] = $row["name"];
+ if($i>500) {
+ //echo"Отображаются только 500 записей.. ";
+ break; }
+ $i++;
+}
+
+
+} catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+
+ return $sel_group;
+}
+
+
+//сохраняем логи для универальной модели
+function universal_model_logs($entity_id,$json_param,$type="update"){
+ global $db,$model,$model_config;
+ if(empty($model_config)) $model_config=get_config_universal_model($model);
+ $log_fields=[];
+ $log_fields["type"]=$type;
+ $log_fields["created_at"]=date('c');
+ $log_fields["created_by"]=$_SESSION["admin_id"];
+ $log_fields["entity_id"]=$entity_id;
+ $log_fields["json_param"]=json_encode($json_param,JSON_UNESCAPED_UNICODE);
+ $log_fields["model_id"]=$model_config["id"];
+ if(!empty($log_fields["model_id"]) and !empty($type) and !empty($entity_id) and !empty($json_param)) {
+ try{
+ $db::insert("universal_model_logs",$log_fields);
+ // $idNew = $db -> lastInsertId();
+ // mess("Добавлен лог ID=$idNew");
+ } catch(Exception $e) { echo 'Ошибка при внесении логов: ', $e->getMessage(), "\n";}
+ }
+}
+
+
+function select_universal_catalog($alias,$value) {
+ global $db;
+ $html .="<select name=status_id>";
+ foreach($data["val_arr"] as $vid =>$namev) {
+ $html .="<option value=\"$vid\"";
+ if($vid==$val) $html .=" selected";
+ $html .=">$namev</option>";
+ }
+ $html .="</select>";
+}
+
+function form_field_print($data,$dataValues,$model) {
+global $db,$form_config,$access_array_this_status,$status_id_real,$model_config;
+$model_config=get_config_universal_model($model);
+if(isset($model_config["status_name"])) $name_field_status=$model_config["status_name"]; else $name_field_status="";
+if(isset($model_config["uid_name"])) $uid_name=$model_config["uid_name"]; else $uid_name="id";
+//print_r($data["json_params"]);
+ if(!empty($data["json_params"])) {
+ $json_params=json_decode($data["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+ if(is_array($json_params)) foreach($json_params as $field => $value) $data[$field]=$value;
+ if(!empty($json_params["field_groups"])) $data["field_groups"]=json_decode($json_params["field_groups"], true, 512, JSON_UNESCAPED_UNICODE);
+ }
+ if(!empty(@$access_array_this_status[$data[$uid_name]])) $access=$access_array_this_status[$data[$uid_name]];
+ else $access="";
+
+ // echo"<br> $data[$uid_name] "; echo print_r($access_array_this_status[$data[$uid_name]]);
+
+ // print_r($access_array_this_status);
+ // exit();
+
+ if($form_config) $access="edit";
+ // if(empty($name_field_status)) $access="edit";
+
+ if($access!="close") {
+ if(!in_array($data["tip"],["table"])){
+
+ if(empty($data["autoincriment"]) and !in_array($data["type"],["hidden","table_field"])) {
+ echo '<tr';
+ if(!empty($model_config["status_name"]) and $model_config["status_name"]==$data["field"]) {
+ echo' style="background:lime;"';
+ }
+ $class_block="blgroup";
+ if(!empty($data["field_groups"])) {
+ foreach($data["field_groups"] as $field_group_id) $class_block .=" blgroup_$field_group_id";
+ }
+ if(!empty($data["class_block"])) $class_block .=" ".$data["class_block"];
+
+ if(!empty($class_block)) echo' class="'.$class_block.'"';
+ echo'><td class="w-20 text-right">';
+
+
+
+ if(!empty($data["required"])) { echo'<b title="field_id='.@$data[$uid_name].'"> * '.@$data["name"].'</b>'; }
+ else echo $data["name"];
+ // echo foreach($data["dependent_fields"] as $k => $f_name)
+
+
+ if(@$data["json_params"] and $form_config) echo'<span class="tag tag-sm tag-warning ms-1">json</span>';
+ echo'</td><td id="tdform'.$data["field"].'" class="text-left
+ '.@$data["class_block"].'"';
+ if(!empty($data["style_block"])) echo' style="'.$data["style_block"].'"';
+ echo'>';
+ if($data["type"]!="hidden") { } elseif($data["type"]=="hidden" and !empty($data["autoincriment"])) {
+ }
+ }
+ } else echo'<tr><td colspan=2>';
+
+
+ // заменяем значение у мультисписка на значения из таблицы универсальных связей.
+ if(in_array($data["type"],["multiple"])) {
+ if(!empty($data["tip_relation"])) {
+ if($data["tip_relation"]=="universal") { //при типе харанения данных в универсальной таблице связей
+ $dataValues[$data["field"]]=@$dataValues[$data["field"]."__relations"]; // заменяем на подготовленный массив
+ }
+ if($data["tip_relation"]=="json") { //при типе харанения данных в таблице для модели в формате JSON
+
+ // $dataValues[$data["field"]]=$dataValues[$data["field"]];
+
+ }
+ if($data["tip_relation"]=="custom") { // связи хранятся в отдельной таблице
+ $dataValues[$data["field"]]=@$dataValues[$data["field"]."__relations_custom"];
+ }
+
+ } else $dataValues[$data["field"]]=explode(",",@$dataValues[$data["field"]]); // если не указано где хранить связь по умолчанию храним как спроку с разделителем,
+ }
+ // end multiple
+ if($access=="edit") echo get_form_field_type($data,$dataValues,$model);
+ else {
+ if(in_array($data["type"],["table","table_field","table_function_row"])) echo get_form_field_type($data,$dataValues,$model);
+ elseif(!in_array($data["type"],["hidden"])) echo get_form_field_value($data,$dataValues,$model);
+ }
+
+
+ if(empty($data["autoincriment"]) or $data["type"]!="hidden") {
+ if(!empty($data["description"])) echo '<div class="descr_info">'.html_entity_decode($data["description"]).'</div>';
+
+ if(!empty($data["html"])) echo html_entity_decode($data["html"]);
+ echo'</td></tr>';
+ }
+
+ }
+
+
+ if(!empty($data["autoincriment"]) or in_array($data["type"],["hidden"])) {
+ echo get_form_field_type($data,$dataValues,$model);
+
+ }
+
+
+}
+
+function get_dynamic_universal_catalog_items($alias) {
+global $db;
+$query_sql="";
+ switch($alias){
+ case "stores": $query_sql="SELECT id,name FROM products_1c WHERE tip='city_store' AND view=1 order by name ASC"; break;
+ case "products": $query_sql="SELECT id,name FROM products_1c WHERE tip='products' AND view=1 order by name ASC"; break;
+ case "products_group": $query_sql="SELECT id,name FROM products_1c WHERE tip='products_group' order by name ASC"; break;
+ case "cashes1c": $query_sql="SELECT id,name FROM products_1c WHERE tip='cashes' order by name ASC"; break;
+ case "counteragents": $query_sql="SELECT id,name FROM products_1c WHERE tip='counteragents' order by name ASC"; break;
+ case "terminals": $query_sql="SELECT id,name FROM products_1c WHERE tip='terminals' order by name ASC"; break;
+ case "payment_types": $query_sql="SELECT id,name FROM products_1c WHERE tip='payment_types' order by name ASC"; break;
+ case "sites": $select_arr=["1"=>"bazacverov.ru"]; break;
+ case "admins": $query_sql="SELECT id,name FROM admin WHERE group_id>0 order by name ASC"; break;
+
+ default: break;
+ }
+ if(!empty($query_sql)) {
+ try{ $select_arr=$db::mapping($query_sql); } catch (Exception $e) { echo 'Выброшено исключение: get_dynamic_universal_catalog_item ', $e->getMessage(), "\n";}
+ }
+
+ return $select_arr;
+}
+
+
+
+
+// достаем из поля SELEC массив со значениями списка - он может быть сформирован SQL запросом а также JSON
+function get_select_array_from_universal_model($data,$dataValues) {
+global $db,$form_config;
+if(empty($data["select_val"])) $data["select_val"]="";
+if(empty($data["value_arr"])) $data["value_arr"]="";
+$data["val_arr"]=explode(";",$data["select_val"]);
+
+if(!empty($data["select_array_json"])) $data["val_arr"]=$data["select_array_json"]; //json_decode(
+
+if(is_array($data["value_arr"]) and !empty($data["value_arr"])) $data["val_arr"]=$data["value_arr"];
+//если поле с запросом к БД
+if(!empty($data["sql_func"])) {
+$sql_z=explode(";",$data["sql_func"]);
+$count_pole=explode(",",$sql_z[0]);
+
+@$where = $sql_z[2];
+
+if(!empty($data["parent_field"])) $where=str_replace('{{'.$data["parent_field"].'}}',@$dataValues[$data["parent_field"]],$where);
+
+ foreach ($data as $fieldN => $roww) {
+ if(!empty($data[$fieldN])) @$where=str_replace('{{'.@$data[$fieldN].'}}',@$dataValues[$data[$fieldN]],$where);
+
+ }
+
+if(count($count_pole)==2) $select_arr=get_array_from_string($sql_z[0],$sql_z[1],$where);
+
+}
+
+
+if(!empty($data["query_sql"])) {
+$query_sql=$data["query_sql"];
+if(!empty($data["parent_field"])) $query_sql=str_replace('{{'.$data["parent_field"].'}}',@$dataValues[$data["parent_field"]],$query_sql);
+
+foreach ($data as $fieldN => $roww) {
+ if(!empty($data[$fieldN])) @$query_sql=str_replace('{{'.@$data[$fieldN].'}}',@$dataValues[$data[$fieldN]],$query_sql);
+ }
+ $select_arr=[];
+ try{
+ $datas=$db::getRows($query_sql);
+ foreach($datas as $rows) $select_arr[$rows["id"]]=$rows["name"];
+ } catch (Exception $e) { echo 'Выброшено исключение: '.$query_sql.' ', $e->getMessage(), "\n";}
+}
+
+//если выбран источник данных универальный каталог - имеем алиас каталога
+if(!empty($data["universal_catalog_alias"])) {
+ $select_arr=[];
+ $catalog_array=$db::getRow("SELECT catalog_alias,alias FROM universal_catalog WHERE id=?",[(int)$data["universal_catalog_alias"]]);
+ switch($catalog_array["catalog_alias"]) {
+ case "list":
+ try{
+ $select_arr=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias=? order by posit DESC, name ASC",[$catalog_array["alias"]]);
+ } catch (Exception $e) { echo 'Выброшено исключение: universal_catalog '.$catalog_array["alias"].' ', $e->getMessage(), "\n";}
+ break;
+ case "dynamic": $select_arr=get_dynamic_universal_catalog_items($catalog_array["alias"]); break;
+ default: break;
+
+ }
+
+
+}
+
+
+
+if(!empty($select_arr)) {
+if(!isset($select_arr[0])) $select_arr[0] ="-выбрать-";
+$data["val_arr"]=$select_arr;
+}
+return $data["val_arr"];
+}
+
+
+// получаем только значение поля для полей которые открыты только для просмотра
+function get_form_field_value($data,$dataValues,$model="") {
+global $db,$form_config;
+$form_field_value="";
+if(!in_array($data["type"],["hidden"])) $form_field_value=@$dataValues[$data["field"]];
+if(in_array($data["type"],["hidden"])) $form_field_value=@$dataValues[$data["field"]];
+
+
+
+
+if(in_array($data["type"],["select","multiple","search"])) {
+ $select_arr=get_select_array_from_universal_model($data,$dataValues);
+ // if(empty($dataValues[$data["field"]])) $dataValues[$data["field"]]=$dataValues[$data["field"]."__relations"];
+
+ if(in_array($data["type"],["select"])) $form_field_value=@$select_arr[$dataValues[$data["field"]]];
+ else {
+
+ $form_field_value="";
+ if(!empty($dataValues[$data["field"]."__relations"])) {
+ $relations=$dataValues[$data["field"]."__relations"];
+ foreach($relations as $k => $v) {
+ // echo "$k => $v ".$select_arr[$v]."";
+ if(!empty($select_arr[$v]))
+ $form_field_value .="<span class=\"btn btn-warning btn-sm me-1\">".$select_arr[$v]."</span>";
+ }
+ } else {
+ // $multy=explode(",",$dataValues[$data["field"]]);
+
+ if(!empty($dataValues[$data["field"]]) and is_array($dataValues[$data["field"]])){
+ $multy=$dataValues[$data["field"]];
+ foreach($multy as $k => $v) {
+ if(in_array($v,$select_arr))
+ $form_field_value .="<span class=\"btn btn-warning btn-sm me-1\">".$select_arr[$k]."</span>";
+ }
+ }
+ }
+
+ }
+}
+
+if(in_array($data["type"],["checkbox"])) {
+ if($dataValues[$data["field"]]==true or $dataValues[$data["field"]]==1) $form_field_value ="да";
+ else $form_field_value ="нет";
+}
+
+if(in_array($data["type"],["password"])) {
+ $form_field_value ="*******";
+}
+
+
+
+if(in_array($data["type"],["search"])) {
+$query=get_query_field_model_alias($data["field_model_alias"]);
+if(!empty($query["get_name"])) $form_field_value=$db::getValue("".$query["get_name"]." LIMIT 1",[$dataValues[$data["field"]]]);
+}
+
+
+return $form_field_value;
+
+
+}
+
+function get_form_field_type($data,$dataValues,$model="") {
+global $db,$form_config,$access_array_this_status,$status_id_real;
+$attributes=' id=form'.$data["field"].' class="';
+
+if(!empty($model)) {
+ $model_config=get_config_universal_model($model);
+ if(!empty($model_config["status_name"]) and !empty($data["field"]) and empty($data["change_type"]) and $model_config["status_name"]==$data["field"]) $data["type"]="status";
+}
+
+if(!empty($data["change_field_name"])) $data["input_name"]=$data["change_field_name"];
+else $data["input_name"]=$data["field"];
+
+
+
+if(in_array($data["type"],["text","textarea","numeric","date","number","search","status","created_by","created_at"])) $attributes .='form-control';
+if(in_array($data["type"],["select","multiple"])) $attributes .='form-select';
+if(in_array($data["type"],["select2"])) $attributes .=' select2';
+
+
+if(!empty($data["class"])) $attributes .=' '.$data["class"].'';
+$attributes .='"';
+if(!empty($data["style"])) $attributes .=' style="'.$data["style"].'"';
+if(!empty($data["placeholder"])) $attributes .=' placeholder="'.$data["placeholder"].'"';
+if(!empty($data["attr"])) $attributes .=' '.html_entity_decode($data["attr"]).'';
+if(!empty($data["required"])) $attributes .=' required="required"';
+if(!empty($data["json_params"]) and $form_config==true) $data["input_name"]='json_params['.$data["field"].']';
+
+
+
+if(!empty($data["sql_func_unicum"])) $attributes .=' onchange="unicum_value(\''.$data["field"].'\')"';
+
+
+$f="inc/universal_model_types/".$data["type"].".php";
+ if(is_file($f) ){ include $f;
+ return $html;
+ } else {
+ if($data["type"]!="table_field") return $html="формат данных еще не доработан или отсуствует";
+ else return;
+
+ }
+}
+
+
+
+ //обрабатываем POST данные согласно типу данных поля
+ function check_field_tip($value,$tip) {
+ if($tip=="string") $value=htmlentities($value);
+ if($tip=="int") $value=intval($value);
+ if($tip=="array") $value=intval($value);
+ if($tip=="guid") $value=htmlentities($value);
+ return $value;
+ }
+
+
+ //обрабатываем POST данные согласно типу поля
+ function check_field_type($row) {
+ $value="";
+ if(isset($_POST[$row["field"]])) {
+ switch($row["type"]) {
+ case "multiple": $value=implode(",",$_POST[$row["field"]]);
+ $value=htmlentities($value);
+ break;
+ case "checkbox": if($_POST[$row["field"]]=="on") $value=1; else $value=0; break;
+ default: $value=check_field_tip($_POST[$row["field"]],$row["tip"]);
+ }
+ }
+ return $value;
+ }
+
+
+function update_universal_form($model="",$forma=[]){
+global $db,$model,$model_config;
+if(!empty($_POST)){
+ if(empty($model)) $model=htmlentities($_POST["model"]);
+ if(empty($model)) exit("Нет имени модели");
+ $model_config=get_config_universal_model($model);
+
+
+
+ $update=[];
+ if(empty($forma))
+ {
+ try{
+ $forma=$db::getRows("SELECT id,name,field,tip,type,json_params,universal_catalog_alias FROM universal_model_fields WHERE model=? ORDER BY posit DESC",[$model]);
+ }catch (Exception $e) { echo 'Ошибка universal_model_fields: ', $e->getMessage(), "\n"; }
+
+ }
+
+
+ try{
+ $fields_table_data=$db::getRows("select COLUMN_NAME as field from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =?",[$model_config["table"]]);
+ foreach($fields_table_data as $rowf) $fields_table_sql[]=$rowf["field"];
+ } catch (Exception $e) { echo 'Выброшено исключение ошибка при выборке полей таблицы: ', $e->getMessage(), "\n"; }
+
+
+
+
+ if($model=="universal_model"){
+ $json_params=[];
+ foreach($_POST["json_params"] as $field => $value) {
+
+ if($field=="select_array_json") $json_params[$field]=json_decode($value, false, 512, JSON_UNESCAPED_UNICODE);
+ else $json_params[$field]=htmlentities($value);
+
+ }
+ $update["json_params"]=json_encode($json_params, JSON_UNESCAPED_UNICODE);
+ }
+
+
+
+
+ $no_fields=[];
+ $tip_relation="";
+ $sql_fields_relations=[];
+ $sql_fields_relations_from_logs=[];
+ $sql_fields_relations_dell=[];
+ foreach($forma as $row) {
+
+ //просматриваем поля для которых надо сохранять связи -
+ if(!empty($row["json_params"])) $row["json_params"]=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+ if(!empty($row["json_params"]["tip_relation"]) and $row["json_params"]["tip_relation"]=="universal") {
+ // $tip_relation .="<h3> ".$row["id"]." ".$row["name"]." ".$row["json_params"]["tip_relation"] ."</h3>";
+ if(isset($_POST[$row["field"]])) {
+ $relation = array_map('htmlentities', $_POST[$row["field"]]);
+ foreach($relation as $k) {
+
+ $alias=$db::getValue("SELECT alias FROM universal_catalog WHERE id=?",[(int)$row["universal_catalog_alias"]]);
+ // $tip_relation .="<br>".$model_config["id"]." ".$update[$model_config["uid_name"]]." ".$model_config["model"]." => алиас универсального списка ".$alias." (id= ".$row["id"].") => ".$row["field"]." => $k ";
+ // $tip_relation .="<br>".$model_config["model"]." => ".$update[$model_config["uid_name"]]."|".$alias." => $k ";
+ // $tip_relation .="<br>".$model_config["id"]." => ".$update[$model_config["uid_name"]]."|".(int)$row["universal_catalog_alias"]." => $k ";
+
+ if(!empty($k)) {
+ $sql_fields_relations[]="INSERT IGNORE INTO universal_model_fields_relations (model_id, model_entity_id,universal_catalog_id,universal_value)
+ VALUES ('".$model_config["id"]."', '".$update[$model_config["uid_name"]]."','".(int)$row["universal_catalog_alias"]."','".htmlentities($k)."')";
+
+
+ if($row["tip"]=="int") {
+ $k=(int)$k;
+ }
+ else $k=htmlentities($k);
+
+
+ $sql_fields_relations_from_logs[$row["field"]][]=$k;
+ }
+ $sql_fields_relations_dell[]=(int)$row["universal_catalog_alias"];
+ }
+ }
+
+
+ }
+
+
+ //чекбоксы специфическая вешь - невозможно заменить свойство если чекбокс не нажат. А в случае когда поле будет скрыто или было включено а его надо выклюичть не возможно определить что оно есть в POST
+ if($row["type"]=="checkbox")
+ {
+ // echo"У нас в форме активный чекбокс + ".$row["field"]." ";
+ if(!isset($_POST[$row["field"]])) $_POST[$row["field"]]=false;
+ }
+
+
+
+
+ if(isset($_POST[$row["field"]]) )
+ {
+
+
+ if(in_array($row["field"] , $fields_table_sql)) {
+ $value=check_field_type($row);
+ $update[$row["field"]]=$value;
+
+ }
+ else $no_fields[]=$row["field"];
+ }
+ }
+ // exit("!! model=$model ".$model_config["table"]." id=".$model_config["uid_name"]." !! ".print_r($update));
+
+ try{
+ if(!empty($update[$model_config["uid_name"]])) {
+
+ $err="";
+ if(!empty($no_fields)) $err="Полей ".implode(",",$no_fields)." нет в таблице БД";
+ $db::update($model_config["table"]," ".$model_config["uid_name"]."=:".$model_config["uid_name"]." LIMIT 1",$update);
+ mess("Сохранили $tip_relation $err ".print_r($update));
+
+ if(!empty($sql_fields_relations_dell)) {
+ $sql_in=implode("','",$sql_fields_relations_dell);
+ $db::sql("DELETE FROM universal_model_fields_relations WHERE model_id=? AND model_entity_id=? AND universal_catalog_id in ('$sql_in')",[$model_config["id"], $update[$model_config["uid_name"]] ]);
+
+ foreach($sql_fields_relations as $sql_q) {
+ $db::sql($sql_q);
+ }
+ }
+ $update_log=[];
+ $update_log=$update;
+ foreach($forma as $row) {
+ if($row["type"]=="password") $update_log[$row["field"]]="***";
+ }
+ if(!empty($sql_fields_relations_from_logs)) $update_log["universal_relations"]=$sql_fields_relations_from_logs;
+
+
+ // внесение логов
+ universal_model_logs($update[$model_config["uid_name"]],$update_log,"update");
+
+
+ // если был изменен статус
+ if(!empty($model_config["status_name"])) {
+ $status_name=$model_config["status_name"];
+ $status_name_old=$status_name."__old";
+ if(!empty($_POST[$status_name] and !empty($_POST[$status_name_old]) and $_POST[$status_name_old]!=$_POST[$status_name])) {
+ // внесение логов
+ $update_log=[$status_name=>(int)$_POST[$status_name], $status_name_old=>(int)$_POST[$status_name_old]];
+ universal_model_logs($update[$model_config["uid_name"]],$update_log,"status");
+
+ }
+
+ }
+
+
+ }
+ else {
+ foreach($forma as $row) {
+ if($row["type"]=="created_at") {
+ $update[$row["field"]]=date('c');
+ // unset($update[$row["field"]]);
+ }
+ if($row["type"]=="created_by") $update[$row["field"]]=(int)$_SESSION["admin_id"];
+ }
+
+ // exit(print_r($update));
+
+ $db::insert($model_config["table"],$update);
+ $idNew = $db -> lastInsertId();
+
+ mess("Добавлено ID=$idNew");
+
+ }
+
+ } catch (Exception $e) {
+ echo 'Выброшено исключение: ', $e->getMessage(), "\n";
+
+ }
+ }
+}
+
+
+
+
+function save_universal_form($model,$forma=[]) {
+global $db,$form_config,$entity_key_id_name, $entity_key_id;
+ if(!empty($_POST["save"])) {
+ $model=htmlentities($_POST["save"]);
+ if(empty($forma)) $forma=$db::getRows("SELECT name,field,tip,type FROM universal_model_fields WHERE model=? ORDER BY posit DESC",[$model]);
+
+ $table_name=get_table_name_from_model($model);
+ if($form_config) $table_name="universal_model_fields";
+
+
+ $update=[];
+
+
+
+
+
+ if($form_config){
+ $json_params=[];
+ foreach($_POST["json_params"] as $field => $value) {
+
+
+
+ if($field=="select_array_json" and !empty($value)) { $json_params[$field]=json_decode($value, true, 512, JSON_UNESCAPED_UNICODE); }
+ elseif($field=="field_groups") {
+ $value = array_map("intval", $value);
+ if(!empty($value)) {
+ $value=json_encode($value, JSON_UNESCAPED_UNICODE);
+ $json_params[$field]=$value;
+ }
+
+ }
+ else {
+ // echo"<br> $field = $value". $forma[$field]["tip_relation"];
+
+ if($forma[$field]["type"]=="checkbox") { if(isset($_POST[$row["field"]]) and $_POST[$row["field"]]=="on") $value=true; else $value=false; }
+ elseif($forma[$field]["type"]=="multiple") {
+ if(!empty($forma[$field]["tip_relation"])) {
+ if($forma[$field]["tip_relation"]=="json") { //при типе харанения данных в таблице для модели в формате JSON
+ if(!empty($value)) $json_params[$field]=json_encode($value, JSON_UNESCAPED_UNICODE);
+ }
+ } elseif(!empty($value)) $value=implode(",",$value);
+ }
+ if(!empty($value)) $json_params[$field]=htmlentities($value);
+ }
+ }
+ $update["json_params"]=json_encode($json_params, JSON_UNESCAPED_UNICODE);
+
+
+ // if(is_array($value)) echo "<br> field=".$field." =>!!! ".$value."! -< json = {$json_params[$field]}!";
+ // $j=json_decode($json_params[$field], true, 512, JSON_UNESCAPED_UNICODE);
+
+ // print_r($update["json_params"]);
+ }
+
+ foreach($forma as $row) {
+
+ if(isset($_POST[$row["field"]]) )
+ {
+
+ // echo"+" .$row["field"] ;
+ $value=htmlentities($_POST[$row["field"]]);
+ if($row["type"]=="multiple") {
+ $value=implode(",",$_POST[$row["field"]]);
+ if($row["type"]=="checkbox") { if($_POST[$row["field"]]=="on") $value=true; else $value=false; }
+ }
+ $update[$row["field"]]=$value;
+ }
+
+ }
+ // exit("!! model=$model $table_name !! ".print_r($update));
+
+
+ try{
+ if(!empty($update["id"])) { $db::update($table_name,"id=:id LIMIT 1",$update);
+ //$url="/".$_SERVER['QUERY_STRING'];
+
+ // header("Location: /universal_model/fields/?model_alias=".htmlentities($_REQUEST["model_alias"])."&field_id=".$update["id"]."&info_mess=Сохранили");
+
+ mess("Сохранили ".print_r($update)."");
+
+ }
+ else {
+ foreach($forma as $row) {
+ if($row["type"]=="created_at") {
+ $update[$row["field"]]="NOW()";
+ }
+ if($row["type"]=="created_by") {
+ $update[$row["field"]]=(int)$_SESSION["admin_id"];
+ }
+ }
+
+ // exit(print_r($update));
+ $db::insert($table_name,$update);
+ $idNew = $db -> lastInsertId();
+ // $url="/".$_SERVER['QUERY_STRING'];
+ header("Location: /universal_model/fields/?model_alias=".htmlentities($_REQUEST["model_alias"])."&field_id=".$idNew."");
+
+
+ }
+
+ } catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+
+ }
+}
+
+
+
+
+function universal_model_form_delete($model=""){
+global $db,$form_config;
+
+ if(@$_REQUEST["delete"]=="confirmDellete") {
+if(empty($model)) $model=htmlentities($_REQUEST["model"]);
+if(empty($model)) exit("Нет имени модели");
+
+$model_config=get_config_universal_model($model);
+$access_action=get_access_action_from_universal_model($model);
+
+
+
+//получаем ID СТАТУСа объекта сущности
+if(!empty($model_config["status_name"])) {
+$status_id=get_filed_value_from_universal_model($model,$model_config["status_name"],@(int)$_REQUEST[$model_config["uid_name"]]);
+$status_id_real=$db::getValue("SELECT id FROM universal_catalog_item WHERE catalog_alias=? AND guid=?",[$model,$status_id]);
+}
+
+
+if($status_id_real!="" and !empty($access_action["model"][$status_id_real][$_SESSION["group_id"]]))
+$access_array_this_status=$access_action["model"][$status_id_real][$_SESSION["group_id"]];
+
+if(!empty($access_array_this_status["delete"])) {
+
+ if(@$_REQUEST["delete"]=="confirmDellete" and !$form_config and !empty($_REQUEST[$model_config["uid_name"]])) {
+ try{
+
+ // $db::sql("DELETE FROM ".$model_config["table"]." WHERE ".$model_config["uid_name"]."=?",[(int)$_REQUEST[$model_config["uid_name"]]]);
+ mess("Удалили");
+ exit();
+ } catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+ }
+} else {
+
+ error_mess("У вас нет прав дял удаления записи");
+}
+}
+}
+
+
+
+
+
+// выводим форму FORM для заполнения данных для модели
+function universal_model_form($model,$table_name=""){
+global $db,$_CONFIG,$act,$model_config,$form_config,$show_design,$access_array,$access_array_this_status,$status_id_real;
+//$show_design=true;
+if($model=="shipment_waybill_products") $show_design=false;
+
+$model_config=get_config_universal_model($model);
+
+//"parent_model":"40",
+// проверяем есть ли у этой модели родитель - если есть то у нас будет другая логика отношения к статусам модели - будем наследовать статус от родителя
+if(!empty($model_config["parent_model"])) {
+
+$model_config_parent=get_config_universal_model($model_config["parent_model"]);
+$statuses_id=(int)$model_config_parent["statuses"];
+$model_parent=$model_config_parent["model"];
+$name_field_status_parent=$model_config_parent["status_name"];
+$uid_name_parent=$model_config_parent["uid_name"];
+
+//echo"parent_model=$model_parent каталог со статусами $statuses_id ";
+
+
+$alias=$db::getValue("SELECT alias FROM universal_catalog WHERE catalog_alias='status' AND id=?",[$statuses_id]);
+$status_parent=$db::mapping("SELECT id, name FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$alias]);
+
+//print_r($status_parent);
+
+$access_array_parent=get_access_from_universal_model($model_parent);
+
+//echo"<br>";
+//echo print_r($access_array_parent);
+
+//$access_array=get_access_from_universal_model($model);
+//echo"<br>";
+//echo print_r($access_array);
+
+}
+
+
+
+if(empty($model_config)) exit("У модели $model не настроена конфигурация");
+if(!empty($model_config["status_name"])) $name_field_status=$model_config["status_name"]; else $name_field_status="";
+if(!empty($model_config["uid_name"])) $uid_name=$model_config["uid_name"]; else $uid_name="id";
+if(!empty($model_config["table"])) $table_name=$model_config["table"];else $table_name=$model;
+
+$access_action=get_access_action_from_universal_model($model);
+//получаем массив с доступами к полям в зависисмости отстатуса группы пользователя
+
+
+if(!empty($access_array_parent)) $access_array=$access_array_parent; // наследуемся от родителя
+else $access_array=get_access_from_universal_model($model);
+
+
+ universal_model_form_delete($model);
+
+ if($show_design) include_once("templates/top.php");
+if(!empty($_REQUEST["$uid_name"])) $entity_key_id=htmlentities($_REQUEST["$uid_name"]);
+
+
+//получаем имя СТАТУСного поля
+//if(empty($status_id)) $name_field_status=get_name_filed_status_from_universal_model($model);
+
+
+//получаем ID СТАТУСа объекта сущности
+
+if(empty($name_field_status_parent)) { // усли нет родительской сущности то берем статус от этой сущности
+if(!empty($name_field_status)) {
+ $status_id=get_filed_value_from_universal_model($model,$name_field_status,@(int)$_REQUEST["$uid_name"]);
+ $status_id_real=$db::getValue("SELECT id FROM universal_catalog_item WHERE catalog_alias=? AND guid=?",[$model,$status_id]);
+ }
+} else {
+
+ // если родительска] сущность есть то достаем стутс родительской модели
+ if(!empty($model_config["name_key_relation_from_parent"])) {
+ $uid_name_parent_fom_children=$model_config["name_key_relation_from_parent"]; //достаем из настроек текущей модели - имя поля-ключа по которому можно выйтти на ID родительской сущности
+ $get_parent_entity_id=$db::getValue("SELECT $uid_name_parent_fom_children FROM ".$table_name." WHERE $uid_name=? ",[(int)$_REQUEST[$uid_name]]);
+ $status_id_parent=$db::getValue("SELECT $name_field_status_parent FROM ".$model_config_parent["table"]." WHERE $uid_name_parent=? ",[$get_parent_entity_id]);
+ $status_id_parent_real=$db::getValue("SELECT id FROM universal_catalog_item WHERE catalog_alias=? AND guid=?",[$model_parent,$status_id_parent]);
+ // echo" = ID родителя $get_parent_entity_id => ststus_parent_id= $status_id_parent_real";
+ $status_id_real=$status_id_parent_real;
+ $status_id=$status_id_parent;
+ } else $status_id_real=$status_id=1;
+
+
+}
+
+
+if(empty($name_field_status)) $status_id_real=$status_id=1;
+
+
+//print_r($access_array);
+
+
+if($status_id_real!="" and !empty($access_array[$status_id_real][$_SESSION["group_id"]]) and empty($access_array_this_status)) $access_array_this_status=$access_array[$status_id_real][$_SESSION["group_id"]];
+
+//echo "name_field_status=$name_field_status status_id=$status_id status_id_real=$status_id_real ".print_r($access_array_this_status);
+
+
+// массив с доступами к действиям по статусу - группе Действия - add- добавить новую запись, delete удалить, edit сохранить
+$access_action_array=[];
+
+if(!empty($access_action["model"][$status_id_real][$_SESSION["group_id"]])) $access_action_array=$access_action["model"][$status_id_real][$_SESSION["group_id"]];
+
+
+
+if(!empty($model_config["group_fields"])) {
+$universal_catalog_group_id=$model_config["group_fields"];
+
+
+$universal_catalog_group_id_alias=$db::getValue("SELECT alias FROM universal_catalog WHERE id=?",[$universal_catalog_group_id]);
+$groups_fields_array=$db::mapping("SELECT id, name FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$universal_catalog_group_id_alias]);
+
+if(!empty($groups_fields_array)) {
+ echo'<button class="btn btn-success ms-2" onclick="$(\'.blgroup\').show();">показать все</button>';
+ $script_hide='';
+ foreach($groups_fields_array as $gid => $name_group) {
+ if(empty($script_hide)) $script_hide='$(\'.blgroup\').hide();$(\'.blgroup_'.$gid.'\').show();';
+ echo'<button id="'.$gid.'" class="btn btn-info ms-2" onclick="$(\'.blgroup\').hide();$(\'.blgroup_'.$gid.'\').show();">'.$name_group.'</button>';
+
+ }
+@$_CONFIG["jscss"] .='<script>$( document ).ready(function() {'.$script_hide.'});</script>';
+}
+
+
+}
+
+
+
+//echo"status_id = $status_id real=$status_id_real ";
+//print_r($access_array);
+$dataValues=[];
+
+if(!empty($_REQUEST[$uid_name])) {
+ $id=(int)$_REQUEST[$uid_name];
+
+ if(@$_GET["info_mess"]) mess(htmlentities($_GET["info_mess"]));
+
+ try{
+ if(empty($table_name)) $table_name=$model;
+ //получаем спсико полей с типами - если поля специфические даты то пробегаемся по ним
+ $select_date_array=$db::mapping("SELECT id,field as name FROM universal_model_fields WHERE model=? AND type IN ('created_at','datetime') ORDER BY posit DESC",[$model]);
+
+ //форматируем типы данных связанные со временем в нужный формат для запроса sql
+ $select="";
+ if(!empty($select_date_array)) {
+ foreach($select_date_array as $field_id => $field)
+ $select .=",DATE_FORMAT($field,'%Y-%m-%d %H:%i:%s') as $field ";
+ }
+
+ $dataValues=$db::getRow("SELECT * $select FROM $table_name WHERE $uid_name=?",[$id]);
+ if($form_config) {
+
+ echo"!!!!!!!!";
+ $json_params=json_decode($dataValues["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+ foreach($json_params as $field => $value) {
+ if($field=="select_array_json") $dataValues[$field]=json_encode($value, JSON_UNESCAPED_UNICODE);
+ else $dataValues[$field]=$value;
+ }
+ }
+ if(empty($dataValues)) exit("ID не найден");
+
+ } catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+
+
+
+ $field_id_array=$db::mapping("SELECT universal_catalog_alias as id,field as name FROM universal_model_fields WHERE model=? AND universal_catalog_alias!='' AND type='multiple'",[$model]);
+ // достаем все связи этой модели со списками в один массив чтобы все было в 1 запросе
+ $relations=[];
+ $relations_data=$db::getRows("SELECT universal_catalog_id,universal_value as value FROM universal_model_fields_relations WHERE model_id=? AND model_entity_id=?",[$model_config["id"], $id ]);
+ foreach($relations_data as $r) {
+ $relations[$field_id_array[$r["universal_catalog_id"]]][]=$r["value"];
+ $dataValues[$field_id_array[$r["universal_catalog_id"]]."__relations"][]=$r["value"];
+ }
+
+
+}
+
+
+
+$data=$db::getRows("SELECT * FROM universal_model_fields WHERE model='$model' ORDER BY posit DESC");
+if($data) {
+
+$nameModel=$db::getValue("SELECT name FROM universal_model WHERE model=?",[$model]);
+echo'<h3>Сущность <a href="/universal_model/">'.$nameModel.'</a>';
+if(!empty($id) and !empty($access_action_array["add"])) echo'<a href="/'.$model.'/add/?'.$uid_name.'='.@$dataValues["waybill_id"].'" class="btn btn-success btn-sm">+ добавить новую</a>';
+echo'</h3>
+<form method=post role="form" id="mainform'.$model.'" class="needs-validation" enctype="multipart/form-data" class="form-horizontal" action="" autocomplete="off">
+<div class="table-responsive"><table class="table"><tbody>';
+$parent_fields=[];
+$related_fields=[];
+$required_statuses=[]; // обязательные стутатусы с полями
+$fields=[];
+ foreach ($data as $fieldRow) {
+ if(!empty($fieldRow["parent_field"])) $parent_fields[$fieldRow["parent_field"]][$fieldRow["field"]]=$fieldRow["field"];
+ if(!empty($fieldRow["parent_field"])) $related_fields[$fieldRow["parent_field"]][]=$fieldRow["field"];
+ if(!empty($fieldRow["required_statuses_json"])) $required_statuses[$fieldRow["field"]]=json_decode($fieldRow["required_statuses_json"], true, 512, JSON_UNESCAPED_UNICODE);
+ $fields[$fieldRow["field"]]=$fieldRow["name"];
+ }
+
+ $required_fields=[];
+ // пробегаемся по всем полям у кого указаны обязательно на данном статусе
+ foreach($required_statuses as $field => $array) {
+ if(in_array($status_id_real,$array)) $required_fields[]=$field;
+
+ }
+
+ // echo"id status real=$status_id_real<br>";
+ // print_r($model_config["access"]["status_access"]);
+
+
+ $json_parse_array=[];
+ $json_parse_array[$status_id_real]=$required_fields;
+
+ if(!empty($model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]])) {
+ foreach($model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]] as $status_access) {
+
+ $required_fields_validate=[];
+ // пробегаемся по всем полям у кого указаны обязательно на данном статусе
+ foreach($required_statuses as $field => $array) {
+ if(in_array($status_access,$array)) $required_fields_validate[]=$field;
+ }
+ echo" можно перемещать на статус ++ <b>$status_access</b> (
+ обязательные поля ".implode(",",$required_fields_validate)." )<br>";
+
+ $json_parse_array[$status_access]=$required_fields_validate;
+ }
+ }
+
+
+$data_convert=$db::mapping("SELECT id as name, guid as id FROM universal_catalog_item WHERE catalog_alias=?",[$model]);
+
+ echo"<script>
+
+
+
+function change_status(model){
+var data = $('#mainform'+model).serializeArray();
+$.each(data,function(){
+ let nameid = this.name;
+ nameid = nameid.replace(/[^a-zA-Z0-9_\s]/gi, '');
+ let idfield='form'+nameid+'';
+ $('#'+idfield).removeAttr('required');
+
+});
+
+
+
+let jsonStr='".json_encode($json_parse_array, JSON_UNESCAPED_UNICODE)."';
+var obj= JSON.parse(jsonStr);
+
+let data_convert='".json_encode($data_convert, JSON_UNESCAPED_UNICODE)."';
+var data_c= JSON.parse(data_convert);
+var idstatus=$('#form".$model_config["status_name"]."').val();
+
+
+
+var YourObject = obj[data_c[idstatus]];
+YourObject.forEach(function(entry) {
+ console.log(entry);
+ $('#form'+entry).attr('required','45');
+});
+
+
+
+
+}
+
+
+ </script>";
+
+
+
+
+
+
+ // echo"<br>Обязательные поля на статусе $status_id_real";
+ foreach($required_fields as $field) {
+ // echo " + ".$fields[$field];
+ $fieldRow["required"]=true;
+ }
+
+
+ $show_save_button=false;
+ foreach ($data as $fieldRow) {
+ if(isset($related_fields[$fieldRow["field"]])) $fieldRow["dependent_fields"] =$related_fields[$fieldRow["field"]];
+
+ if(in_array($fieldRow["field"],$required_fields)) $fieldRow["required"]=true;
+
+ if(!empty(@$access_array_this_status[$fieldRow[$uid_name]]) and $access_array_this_status[$fieldRow[$uid_name]]=="edit" ) $show_save_button=true;
+ form_field_print($fieldRow,$dataValues,$model);
+ }
+
+echo'<tr><td>';
+
+
+if(!empty($dataValues) and !empty($access_action_array["delete"]))
+echo'<a href="?id='.$id.'&model='.$model.'&delete=confirmDellete" onclick="return confirm(\'Вы действительно хотите удалить запись?\');" class="btn btn-sm btn-danger">удалить</a>';
+
+if(empty($dataValues)) $text_save="Добавить"; else $text_save='Сохранить';
+
+echo'</td><td>';
+
+
+//if(empty($name_field_status)) $show_save_button=true;
+
+if($show_save_button==true) { // если есть поля которые мы можем редактировать то показываем кнопку
+echo'<input type=hidden name=model value="'.$model.'">
+<button type=button class="btn btn-lg btn-success" onclick="event.preventDefault(); ajaxModelEntityUpdate(\''.$model.'\');return false;" value="'.$model.'" id="'.$model.'_save" name=save>'.$text_save.'</button>';
+}
+
+echo'</td></tr></tbody></table></div><div id="mess_info'.$model.'" class="mess_info'.$model.'"></div></form>';
+
+
+echo"<a href=\"/\" onclick=\"ajaxLogi('$model','".@$dataValues[$model_config["uid_name"]]."','status');return false;\" class=\"btn btn-sm btn-default\">ajaxLogi</a>
+<a href=\"/\" onclick=\"ajaxLogi('$model','".@$dataValues[$model_config["uid_name"]]."');return false;\" class=\"btn btn-sm btn-default\">изменения</a>
+<div id=ajaxLogi></div>";
+
+
+}
+
+@$_CONFIG["jscss"] .='<script>';
+foreach($parent_fields as $parent => $children) {
+ @$_CONFIG["jscss"] .='function change_field_'.$parent.'() { ';
+ foreach($children as $children_field) {
+ @$_CONFIG["jscss"] .='
+ $(\'#tdform'.$children_field.'\').html(\'<select id=form'.$children_field.' name='.$children_field.' class="form-select"></select>\');
+
+ get_select(\''.$children_field.'\',\''.$parent.'\'); ';
+ }
+ @$_CONFIG["jscss"] .=' }';
+
+ }
+@$_CONFIG["jscss"] .='</script>';
+
+@$_CONFIG["jscss"] .="<script>
+
+
+function get_select(field,parent) {
+$.ajax({
+ url: '/universal_model/ajax_get_select/',
+ method: 'POST',
+ data: '&field='+field+'&model=$model&table_name=$table_name&id=$id&parent='+parent+'&parent_value='+$('#form'+parent).val()+'',
+ success: function(data){
+ $('#tdform'+field).html(data);
+ }
+});
+}
+
+
+function ajaxSearch(field) {
+$.ajax({
+ url: '/universal_model/ajaxSearch/',
+ method: 'POST',
+ data: '&field='+field+'&model=$model&table_name=$table_name&id=$id&search='+$('#search_form'+field).val()+'',
+ success: function(data){
+ $('#form'+field).after('<div style=\"position:absolute;\">'+data+'</div>');
+ }
+});
+}
+
+function ajaxLogi(model,id,type='') {
+$.ajax({
+ url: '/universal_model/ajaxLogi/',
+ method: 'POST',
+ data: '&type='+type+'&model='+model+'&id='+id+'',
+ success: function(data){
+ $('#ajaxLogi').html(data);
+ }
+});
+}
+
+
+function ajaxModelEntityUpdate(model) {
+
+
+var data = $('#mainform'+model).serializeArray();
+var error = '';
+var error_text ='';
+$.each(data,function(){
+ let nameid = this.name;
+ nameid = nameid.replace(/[^a-zA-Z0-9_\s]/gi, '');
+ let idfield='form'+nameid+'';
+ let val=$('#'+idfield).val();
+ let err = 0;
+ let req = $('#'+idfield).attr('required');
+
+ if( req == 'required') {
+
+ if(val!=='') {
+ $('#'+idfield).removeClass('is-invalid');
+ $('#'+idfield).addClass('is-valid');
+ }
+ if(val=='') {
+ $('#'+idfield).removeClass('is-valid');
+ $('#'+idfield).addClass('is-invalid');
+ error = 1;
+ error_text =idfield;
+ }
+
+ }
+
+
+});
+
+
+ if(error == 1) alert(error_text);
+ if(error == 0) {
+ $.ajax({
+ url: '/universal_model/ajaxModelEntityUpdate/',
+ method: 'post',
+ dataType: 'html',
+ data: $('#mainform'+model).serialize(),
+ success: function(data){
+ $('#mess_info'+model).html(data);
+ }
+ });
+ }
+
+
+
+}
+
+
+
+
+function unicum_value(field) {
+ var search=$('#form'+field+'').val();
+ $.ajax({
+ url: '/universal_model/ajax_get_unicum/',
+ method: 'POST',
+ data: '&field='+field+'&model=$model&table_name=$table_name&id=$id&search='+search+'',
+ success: function(data){
+ $('.unicum_value').remove();
+ $('#form'+field+'').after('<div class=\"unicum_value\">'+data+'</div>');
+ }
+});
+
+}";
+
+
+
+
+
+
+
+foreach($parent_fields as $parent => $children) {
+
+ foreach($children as $children_field) {
+ $_CONFIG["jscss"] .='
+
+ $(\'#f2orm'.$parent.'\').on(\'change\', function (e) {
+ var optionSelected = $("option:selected", this);
+ var valueSelected = this.value;
+ $(\'#tdform'.$children_field.'\').html(\'<select id=form'.$children_field.' name='.$children_field.' class="form-select"></select>\');
+ alert(\'val=\'+valueSelected);
+ get_select(\''.$children_field.'\',\''.$parent.'\');
+
+ });
+
+ $(\'#f3orm'.$parent.'\').change(function() {
+
+ ';
+
+ // if($parent=='partner_company_id') $_CONFIG["jscss"] .='alert(\'dfdf\');';
+
+ $_CONFIG["jscss"] .='
+ if ($(\'#form'.$children_field.'\').length) {
+ $(\'#form'.$children_field.'\').html(\'\');
+
+
+ } else {
+
+
+ $(\'#tdform'.$children_field.'\').html(\'<select id=form'.$children_field.' name='.$children_field.' class="form-select"></select>\');
+
+ }
+
+
+ get_select(\''.$children_field.'\',\''.$parent.'\');
+
+ });';
+
+ }
+}
+
+/*
+function change_all_select() {
+'.$change.'
+}
+*/
+
+
+$_CONFIG["jscss"] .='</script>
+<style>table tbody tr td div.descr_info {display:none;}
+table tbody tr:hover td div.descr_info {display:block;}
+</style>';
+
+ if($show_design) include_once("templates/bottom.php");
+ else echo $_CONFIG["jscss"];
+}
\ No newline at end of file
--- /dev/null
+<?
+
+
+function get_array_from_string($select="id,name", $table_name, $where="") {
+global $db;
+$where=str_replace(["{","}"],["'","'"],$where);
+$select_arr=explode(",",$select);
+try {
+ $data = $db::getRows("SELECT $select FROM $table_name $where");
+ $sel_group=[];
+foreach ($data as $row) $sel_group[$row[$select_arr[0]]] = $row[$select_arr[1]];
+} catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+
+ return $sel_group;
+}
+
+
+function form_field_print($data,$dataValues) {
+global $db;
+
+ if($data["type"]!="hidden") echo '<tr><td class="w-30 text-right">'. $data["name"].'</td><td>';
+ echo form_field_type_print($data,$dataValues);
+ if($data["type"]!="hidden") {
+ if(!empty($data["html"])) echo html_entity_decode($data["html"]);
+ echo'</td></tr>'; }
+
+}
+
+function form_field_type_print($data,$dataValues) {
+global $db;
+$attributes=' id=form'.$data["name_eng"].' class="form-control';
+if(!empty($data["class"])) $attributes .=' '.$data["class"].'';
+$attributes .='"';
+
+if(!empty($data["style"])) $attributes .=' style="'.$data["style"].'"';
+if(!empty($data["placeholder"])) $attributes .=' placeholder="'.$data["placeholder"].'"';
+if(!empty($data["attr"])) $attributes .=' '.$data["attr"].'';
+if(!empty($data["required"])) $attributes .=' required';
+
+ if(is_file("inc/universal_model_types/".$data["type"].".php") ){
+ include "inc/universal_model_types/".$data["type"].".php";
+ return $html;
+ }
+}
+
+
+
+function universal_model_form_save($model,$table_name){
+global $db,$act;
+$data=$db::getRows("SELECT name,name_eng,tip,type FROM modules_uni_fields WHERE modul='$model' ORDER BY posit DESC");
+ if($_POST["save"][$model]){
+ $update=[];
+ foreach($data as $row) {
+
+ if(isset($_POST[$row["name_eng"]]) )
+ {
+ $value=htmlentities($_POST[$row["name_eng"]]);
+ if($row["type"]=="multiple") $value=implode(",",$_POST[$row["name_eng"]]);
+ $update[$row["name_eng"]]=$value;
+
+ }
+ }
+ try{
+ if(isset($update["id"]))
+ $db::update($table_name,"id=:id LIMIT 1",$update);
+
+ } catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+
+ mess("Сохранили");
+
+ }
+
+}
+
+
+// выводим форму FORM для заполнения данных для модели
+function universal_model_form($model,$table_name){
+global $db,$act;
+
+
+
+include_once("templates/top.php");
+
+if(!empty($_REQUEST["id"])) {
+ $id=(int)$_REQUEST["id"];
+
+
+ universal_model_form_save($model,$table_name);
+
+ try{
+ if(empty($table_name)) $table_name=$model;
+ $dataValues=$db::getRow("SELECT * FROM $table_name WHERE id=?",[$id]);
+ } catch (Exception $e) { echo 'Выброшено исключение: ', $e->getMessage(), "\n";}
+
+
+
+
+}
+
+$data=$db::getRows("SELECT * FROM modules_uni_fields WHERE modul='$model' ORDER BY posit DESC");
+if($data) {
+echo'<form method=post role="form" enctype="multipart/form-data" class="form-horizontal" action="" autocomplete="off">
+<div class="table-responsive"><table class="table"><tbody>';
+ foreach ($data as $fieldRow) {
+
+ form_field_print($fieldRow,$dataValues);
+
+ }
+echo'</tbody></table>
+</div><button type=submit class="btn btn-lg btn-success" value=1 name=save['.$model.']>сохранить</button></form>';
+}
+
+
+
+ include_once("templates/bottom.php");
+}
\ No newline at end of file
--- /dev/null
+<?
+
+$html= '<button type=button name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'>'.$data["name"].'</button>';
--- /dev/null
+<?
+$html= '<input type=checkbox name='.$data["input_name"].' '.$attributes.'';
+if(@$dataValues[$data["field"]]) $html .='checked'; $html .='> ';
\ No newline at end of file
--- /dev/null
+<?
+if(empty($dataValues[$data["field"]])) $dataValues[$data["field"]]=date("Y-m-d");
+$html= '<input type=datetime-local name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
+
+
+
--- /dev/null
+<?
+
+include"search.php";
\ No newline at end of file
--- /dev/null
+<?
+//if(($dataValues[$data["default_value"]])) $dataValues[$data["field"]]=date("Y-m-d");
+$html= '<input type=date name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
--- /dev/null
+<?
+
+$html= '<input type=hidden name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
+
+//if(!empty($data["autoincriment"])) $html .= 'ID=<b>'.@$dataValues[$data["field"]].'</b>';
--- /dev/null
+<?
+$html = "";
+$html .="<select multiple=\"multiple\" size=5 name=".$data["input_name"]."[] ";
+$class="";
+if(!empty($data["class"])) $class=$data["class"];
+if($class!="select2") $class="multi-select $class";
+$classes=" $class";
+if(isset($data["removeclass"])) $classes=str_replace($data["removeclass"],'',$classes);
+$html .=" $attributes class=\"form-control $classes\">";
+
+
+
+$data["val_arr"]=get_select_array_from_universal_model($data,$dataValues);
+
+if(!empty($data["val_arr"])) {
+ foreach($data["val_arr"] as $vid =>$namev) {
+ $html .="<option value=\"$vid\"";
+ if(!empty($dataValues[$data["field"]]) and in_array($vid,$dataValues[$data["field"]])) $html .=" selected";
+ $html .=">$namev</option>";
+ }
+}
+$html .="</select>";
--- /dev/null
+<?
+
+
+
+$html= ' ';
+
+$html= '<input type=number name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
+
+/*
+//если поле с запросом к БД
+if(!empty($data["sql_func"]) and !empty($dataValues[$data["field"]])) {
+$sql_z=explode(";",$data["sql_func"]);
+$count_pole=explode(",",$sql_z[0]);
+$select_arr=[];
+$where = $sql_z[2];
+if(!empty($data["parent_field"])) $where=str_replace('{{'.$data["parent_field"].'}}',$dataValues[$data["parent_field"]],$where);
+$where=str_replace('{{this}}',$dataValues[$data["field"]],$where);
+
+//$html .=' '.$where.' ';
+
+if(count($count_pole)==2) $select_arr=get_array_from_string($sql_z[0],$sql_z[1],$where);
+if(!empty($select_arr[$dataValues[$data["field"]]])) $html .= '<span class="btn btn-sm btn-warning" onclick="$(\'#form'.$data["field"].'\').toggle();"> '.$select_arr[$dataValues[$data["field"]]].'</span> ';
+ $html .= '<input type=number name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" style="display:none;'.$data["style"].'" '.$attributes.'> ';
+
+} else $html= $html_input;
+
+*/
--- /dev/null
+<?
+
+$html= '<input type=number name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
--- /dev/null
+<?
+
+$html= '
+<div class="btn-group"><input type=password style="width:200px;" autocomplete=off name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'>
+
+<span class="btn btn-default" onclick="$(\'#form'.$data["field"].'\').attr(\'type\',\'text\');">показать пароль</span></div>';
\ No newline at end of file
--- /dev/null
+<?
+$html ='';
+$show_select=true;
+if(!empty($data["parent_field"])) {
+ if($dataValues[$data["parent_field"]]) $show_select=true;
+ else $show_select=false;
+}
+
+
+
+if($show_select) {
+
+
+ //$html .='!!!!! '.$data["field_model_alias"].' '.$dataValues[$data["field"]].' !!!';
+
+
+if(!empty($dataValues[$data["field"]])) {}
+$nameP="";
+$query=get_query_field_model_alias($data["field_model_alias"]);
+
+
+if(!empty($query["get_name"])) {
+ try {
+ $nameP=$db::getValue($query["get_name"]." LIMIT 1",[$dataValues[$data["field"]]]);
+ } catch (Exception $e) { echo 'Ошибка : '.$query["get_name"].' '.$dataValues[$data["field"]].' ', $e->getMessage(), "\n";}
+
+}
+
+if(empty($nameP)) $nameP="-не указано-";
+
+$html .="
+<div style=\"width:auto;float:left;position:relative;z-index:99999;\">
+<button id=\"name_search_".$data["field"]."\" style=\"float:left;\" class=\"btn btn-default btnl-lg\" onclick=\"$('#search_form".$data["field"]."').toggle(); $('#search_".$data["field"]."').show();return false;\">
+".$nameP."</button><input onchange=\"ajaxSearch('".$data["field"]."');\" id=\"search_form".$data["field"]."\" ";
+//if(!empty($data["required"])) $html .=" required";
+
+if(!empty($data["placeholder"])) $html .=" placeholder=\"".$data["placeholder"]."\"";
+if(!empty($data["attr"])) $html .=" ".$data["attr"];
+$html .=" style=\"display:none;".@$data["style"]."\" class=\"form-control ".@$data["class"]."\" >
+<input type=hidden class=\"form-control\" name=\"".$data["input_name"]."\" id=\"form".$data["field"]."\" value=\"".$dataValues[$data["field"]]."\" onchange=\"$('.sk').hide();\" >
+<div id=\"search_div_".$data["field"]."\" style=\"position:absolute;z-index:9999\"></div></div>";
+
+
+
+} else {
+
+ $html .='<b>сначала нужно выбрать поле '.$data["parent_field"].'</b>';
+}
\ No newline at end of file
--- /dev/null
+<?
+$html ='';
+$show_select=true;
+if(!empty($data["parent_field"])) {
+ // $html = ' '.$data["parent_field"].' = '.$dataValues[$data["parent_field"]];
+ if(@$dataValues[$data["parent_field"]]) $show_select=true;
+ else $show_select=false;
+
+ if(!isset($dataValues[$data["parent_field"]])) $show_select=false;
+
+}
+
+if($show_select) {
+
+$data["val_arr"]=get_select_array_from_universal_model($data,$dataValues);
+
+$html .="<select name=\"".$data["input_name"]."\" onchange=\"change_field_".$data["field"]."();\" $attributes>";
+
+if(!empty($data["val_arr"])) {
+$detect=0;
+ foreach($data["val_arr"] as $vid =>$namev) {
+ $val="";
+ if(isset($dataValues[$data["field"]])) $val=$dataValues[$data["field"]];
+ elseif(!empty($data["default_value"])) $val=$data["default_value"];
+
+ $html .="<option value=\"$vid\"";
+ if($vid==$val) $html .=" selected";
+ $html .=">$namev</option>";
+ }
+}
+$html .="</select>";
+} else {
+
+ $html .='<b>сначала нужно выбрать поле '.$data["parent_field"].'</b>';
+}
\ No newline at end of file
--- /dev/null
+<?
+$html ='';
+$data["val_arr"]=$db::mapping("SELECT guid as id, name FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$model]);
+$data["val_arr_guid"]=$db::mapping("SELECT id as name, guid as id FROM universal_catalog_item WHERE catalog_alias=? order by posit desc",[$model]);
+
+$html .="
+<input type=hidden name=".$data["field"]."__old value=\"".@$dataValues[$data["field"]]."\" id=form".$data["field"]."__old>
+<select $attributes name=\"".$data["field"]."\" onchange=\"change_status('$model')\">";
+
+if(!empty($data["val_arr"])) {
+$detect=0;
+ foreach($data["val_arr"] as $vid =>$namev) {
+ $val="";
+ if(isset($dataValues[$data["field"]])) $val=$dataValues[$data["field"]];
+ elseif(!empty($data["default_value"])) $val=$data["default_value"];
+
+
+ if($status_id_real) {
+ if( @in_array(@$data["val_arr_guid"][$vid],@$model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]]) or $status_id_real==@$data["val_arr_guid"][$vid]) {
+ // $html .="<option value=\"$vid\">$status_id_real ".print_r($model_config["access"]["status_access"][$status_id_real][$_SESSION["group_id"]][$vid])."</option>";
+ $html .="<option value=\"$vid\""; if($vid==$val) $html .=" selected"; $html .=">$vid $namev</option>";
+ }
+ } else { $html .="<option value=\"$vid\""; if($vid==$val) $html .=" selected"; $html .=">$vid $namev</option>"; }
+
+
+
+
+ }
+}
+$html .="</select>";
--- /dev/null
+<?
+
+$html= '<button type=submit name='.$data["field"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'>'.$data["name"].'</button>';
--- /dev/null
+<?
+$html='';
+// для связи табличной части необходимо - ключ в таблтце ко которому связываем родительскую сущность на примере накладной это waybill_id в shipment_waybill_products
+$model_from_table=$data["field_model_alias"];
+$file="inc/universal_model_types/table_models/$model_from_table.php";
+if(is_file($file) ) { include $file;
+
+
+$fields_table0=get_universal_model_fields($model_from_table);
+
+$fields_table=[];
+ foreach($fields_table0 as $field => $row) {
+ if(!empty($row["type"]) and !in_array($row["type"],["hidden"])) {
+
+ if(empty($access_array_this_status[$row["id"]]) or @$access_array_this_status[$row["id"]]=="edit")
+ $fields_table[$field]=$row;
+
+ }
+}
+
+
+//print_r($fields_table);
+
+echo'<table class="table table-sm table-stripped table-bordered"><thead><tr>';
+foreach($fields_table as $field => $row) {
+ echo'<th>'.$row["name"].'</th>';
+
+}
+echo'</tr></thead><tbody>';
+
+$data2=$db::getRows($query,[$dataValues["id"]]);
+foreach($data2 as $row) {
+ echo'<tr ';
+$access_0="";
+if(!empty($access_array_this_status[@$data["id"]])) $access_0=$access_array_this_status[@$data["id"]];
+
+if($access_0=="edit")
+echo'onclick="edit_table_field(\''.$model_from_table.'\',\''.$row["id"].'\')"';
+
+ echo'>';
+ foreach($fields_table as $fieldName => $array) {
+ if(isset($replace_field[$fieldName])) {
+ $value= "";
+ if(empty($row[$fieldName])) {
+ $row[$fieldName]=$row["product_id"];
+ $valuek= $row["product_id"];
+
+ if($fieldName=="parent_id") {
+ $valuek=$replace_field[$fieldName][$valuek];
+ $value=$replace_field["category"][$valuek];
+ }
+
+ if($fieldName=="prices") $value=$replace_field[$fieldName][$valuek];
+
+ }
+ else {
+
+ $value=$replace_field[$fieldName][$row[$fieldName]];
+
+ }
+ } else $value=@$row[$fieldName];
+ echo'<td';
+ if(!empty($fields_table[$fieldName]["class_block"])) echo' class="'.$fields_table[$fieldName]["class_block"].'"';
+ if(!empty($fields_table[$fieldName]["style_block"])) echo' style="'.$fields_table[$fieldName]["style_block"].'"';
+
+ echo'>'.$value.'</td>';
+ }
+ echo'</tr>';
+}
+
+echo'</tbody></table>';
+}
+/*
+echo'<table class="table table-sm table-stripped table-bordered"><thead><tr>';
+foreach($table_fields as $field) {
+ echo'<th>'.$model_table_fields[$field]["name"].'</th>';
+}
+echo'</tr></thead><tbody>';
+$data=$db::getRows($query,[$dataValues["id"]]);
+
+foreach($data as $row) {
+ echo'<tr onclick="edit_table_field(\''.$data["field_model_alias"].'\',\''.$row["id"].'\')">';
+ foreach($table_fields as $fieldName) {
+ $value=$row[$fieldName];
+ if($fieldName=="name") $value=$product_name[$row["product_id"]];
+ if($fieldName=="color") $value=$product_colors[$row["product_id"]][$row["varietie"]];
+ if($fieldName=="varietie") $value=$products_varieties[$row["product_id"]][$row["varietie"]];
+ // if($fieldName=="price") $value=$product_prices[$row["product_id"]];
+ echo'<td class="text-left">'.$value.'</td>';
+ }
+ echo'</tr>';
+}
+echo'</tbody></table>';
+*/
+if($access_0=="edit") {
+echo'<script>
+function edit_table_field(field_model_alias,id) {
+ $("#modal-7").modal(\'show\', {backdrop: \'static\'});
+ $.ajax({
+ url: "/universal_model/ajaxTableEdit/",
+ method: "post",
+ dataType: "html",
+ data: {id: id, field_model_alias: field_model_alias},
+ success: function(data){
+ $("#modal-7 .modal-body").html(data);
+ }});
+}
+</script>';
+
+ echo'<!-- MODAL -->
+ <div class="modal fade " id="modal-7">
+ <div class="modal-dialog modal-dialog-centered modal-lg text-center" role="document">
+ <div class="modal-content modal-content-demo">
+ <div class="modal-header">
+ <h6 class="modal-title">Редактирование</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body m-0 p-0">
+
+ </div>
+
+ </div>
+ </div>
+ </div>';
+}
--- /dev/null
+<?
+$html='';
+$model_children=$data["universal_catalog_alias"];
+$model_config_children=get_config_universal_model($model_children);
+$model_config=get_config_universal_model($model);
+
+$query=str_replace('{{'.$model_config["uid_name"].'}}',$dataValues[$model_config["uid_name"]],$data["query_sql"]);
+$summ=$db::getValue($query);
+//echo"$model_children ";
+
+
+$update=[];
+$update[$data["field"]]=$summ;
+$update[$model_config["uid_name"]]=$dataValues[$model_config["uid_name"]];
+
+if($dataValues[$data["field"]] !=$summ ) $db::update($model_config["table"]," ".$model_config["uid_name"]."=:".$model_config["uid_name"]." LIMIT 1",$update);
+echo $summ;
\ No newline at end of file
--- /dev/null
+<?
+
+$key_id=$dataValues["id"];
+
+$products_in=[];
+$query="SELECT * FROM money_transactions WHERE 1 order by created_at DESC";
+$data=$db::getRows($query,[$key_id]);
+foreach($data as $row) {
+
+
+}
+//$products_in[]=$row["id"];
+
+$replace_field=[];
+if(!empty($products_in)){
+$products_in=' IN (\''.implode("','",$products_in).'\')';
+//$replace_field["product_id"]=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products' AND id $products_in");
+//$replace_field["varietie_id"]=$db::mapping("SELECT id, CONCAT(name, ' (',color,')') as name FROM products_varieties WHERE product_id $products_in");
+//$replace_field["parent_id"]=$db::mapping("SELECT id, parent_id as name FROM products_1c WHERE id $products_in");
+//$replace_field["prices"]=$db::mapping("SELECT product_id as id, price as name FROM prices WHERE product_id $products_in");
+
+$entity_in=' IN (\''.implode("','",$replace_field["parent_id"]).'\')';
+//$replace_field["category"]=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products_group' AND id $entity_in");
+
+
+}
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+<?
+
+//внешний ключ от главной сущности накладной
+$key_id=$dataValues["id"];
+
+
+
+$replace_field=[];
+
+$replace_field["shipment_id"]=$db::mapping("SELECT id, name FROM store_orders WHERE id=?",[$key_id]);
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+<?
+/*
+$model_config=[ "name_key" => ["name"=>"waybill_id", "tip" =>"int"],
+ "table_fields" =>
+ [
+ "id"=>["field"=>"id","name"=>"id","type"=>"hidden","autoincriment"=>true],
+ "product_id"=>["field"=>"product_id","tip"=>"string","required"=>"required","type"=>"hidden", "name"=>"product_id","style"=>"width:190px"],
+ "name"=>["field"=>"name","tip"=>"string","name"=>"Наименование","type"=>"from_sql"],
+
+ "varietie"=>["field"=>"varietie","tip"=>"int","name"=>"Сорт","type"=>"from_sql"],
+ "color"=>["field"=>"color","tip"=>"string","name"=>"Цвет","type"=>"from_sql"],
+ "quantity"=>["field"=>"quantity","tip"=>"int","name"=>"кол-во","type"=>"number"],
+ "price"=>["field"=>"price","tip"=>"string","name"=>"цена","type"=>"number"],
+ "purchase_price"=>["field"=>"purchase_price","tip"=>"string","name"=>"Закупочная цена","type"=>"number"]
+ ]
+];
+
+$model_table_fields=$model_config["table_fields"];
+$table_fields=[];
+foreach($model_table_fields as $field => $arr) {
+ if(!in_array($arr["type"],["hidden"])) $table_fields[]=$field;
+}
+*/
+/*
+$data=$db::getRows("SELECT product_id, id, name, color FROM products_varieties WHERE product_id $products_in");
+$product_colors=[];
+foreach($data as $row) {
+ $products_varieties[$row["product_id"]][$row["id"]]=$row["name"];
+ $product_colors[$row["product_id"]][$row["id"]]=$row["color"];
+}
+$product_name=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products' AND id $products_in");
+$product_prices=$db::mapping("SELECT product_id as id, price as name FROM prices WHERE product_id $products_in");
+$product_name=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products' AND id $products_in");
+*/
+//print_r($table_fields);
+
+//внешний ключ от главной сущности накладной
+$key_id=$dataValues["id"];
+
+$products_in=[];
+$query="SELECT * FROM shipment_waybill_products WHERE waybill_id=? order by quantity DESC";
+$data2=$db::getRows($query,[$key_id]);
+foreach($data2 as $row) $products_in[]=$row["product_id"];
+
+$replace_field=[];
+if(!empty($products_in)){
+$products_in=' IN (\''.implode("','",$products_in).'\')';
+$replace_field["product_id"]=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products' AND id $products_in");
+$replace_field["varietie_id"]=$db::mapping("SELECT id, CONCAT(name, ' (',color,')') as name FROM products_varieties WHERE product_id $products_in");
+$replace_field["parent_id"]=$db::mapping("SELECT id, parent_id as name FROM products_1c WHERE id $products_in");
+$replace_field["prices"]=$db::mapping("SELECT product_id as id, price as name FROM prices WHERE product_id $products_in");
+
+$entity_in=' IN (\''.implode("','",$replace_field["parent_id"]).'\')';
+$replace_field["category"]=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products_group' AND id $entity_in");
+
+
+}
+
+
+
+
+
+
+
+
+
+
--- /dev/null
+<?
+
+//внешний ключ от главной сущности накладной
+$key_id=$dataValues["id"];
+
+$entity_ids_in=[];
+$query="SELECT * FROM store_orders WHERE related_order_id=?";
+$data=$db::getRows($query,[$key_id]);
+foreach($data as $row) $entity_ids_in[]=$row["id"];
+
+$replace_field=[];
+if(!empty($entity_ids_in)){
+ $entity_ids_in=' IN (\''.implode("','",$entity_ids_in).'\')';
+// $replace_field["product_id"]=$db::mapping("SELECT id, name FROM store_orders WHERE id $entity_ids_in");
+}
--- /dev/null
+<?
+
+$html= '<input type=tel name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'> ';
\ No newline at end of file
--- /dev/null
+<?
+
+
+$html= '<input type=text name='.$data["input_name"].' value="'.@$dataValues[$data["field"]].'" '.$attributes.'>
+<div class="invalid-feedback">Ведите поле '.$data["name"].'</div>
+<div class="valid-feedback">ok</div>';
--- /dev/null
+ <?
+
+$html='<textarea name='.$data["input_name"].' row=';
+
+if(!empty($data["row"])) $html .=@$data["row"]; else $html .=2;
+
+$html .=' '.$attributes.'>'.@$dataValues[$data["field"]].'</textarea>';
--- /dev/null
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM admin";
+
+
+$query["search"]="SELECT id, name FROM admin
+WHERE name LIKE ? order by name";
+
+$query["get_name"]="SELECT name FROM admin WHERE id=?";
+
+
+
--- /dev/null
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM admin_group";
+
+
+$query["search"]="SELECT id, name FROM admin_group
+WHERE name LIKE ? order by name";
+
+$query["get_name"]="SELECT name FROM admin_group WHERE id=?";
+
+
+
--- /dev/null
+<?
+
+// товары с ценами
+$query["search"]="SELECT id, name FROM products_1c WHERE 1 AND tip='products' AND view=1 AND name LIKE ? order by name ASC";
+$query["all"]="SELECT id, name FROM products_1c WHERE 1 AND tip='products' AND view=1 order by name ASC";
+$query["get_name"]="SELECT name FROM products_1c WHERE id=?";
--- /dev/null
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT p.id, p.parent_id, p.name, p.code,p.articule,prices.price FROM products_1c p, prices
+WHERE p.id=prices.product_id AND p.tip='products' AND p.view=1 order by prices.price DESC";
+
+
+$query["search"]="SELECT p.id, CONCAT ( p.name, ' <span>', prices.price ,' руб.</span>') as name FROM products_1c p, prices
+WHERE p.id=prices.product_id AND p.tip='products' AND p.view=1 AND p.name LIKE ? order by prices.price DESC";
+
+$query["get_name"]="SELECT name FROM products_1c WHERE id=?";
+
+
+
--- /dev/null
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM store_orders";
+
+
+$query["search"]="SELECT id, name FROM store_orders
+WHERE name LIKE ? order by name";
+
+$query["get_name"]="SELECT name FROM store_orders WHERE id=?";
+
--- /dev/null
+<?
+$query=[];
+// товары с ценами
+$query["all"]="SELECT id,name FROM shipment_waybills WHERE 1";
+
+
+$query["search"]="SELECT id,name FROM shipment_waybills
+WHERE name LIKE ?";
+
+$query["get_name"]="SELECT name FROM shipment_waybills WHERE id=?";
+
+
+
--- /dev/null
+<?
+
+// поставщики
+$query["search"]="SELECT id, name FROM shipment_providers WHERE 1 name LIKE ? order by name ASC";
+$query["all"]="SELECT id, name FROM shipment_providers WHERE 1 order by name ASC";
+$query["get_name"]="SELECT name FROM shipment_providers WHERE id=?";
--- /dev/null
+<?
+/*
+$view_fields_json=[ "field_id":{"posit":12,"name":"Имя","template":"шаблон"}]
+
+*/
+function universal_model_items($model_alias,$view_fields_json="") {
+global $db;
+$model_config=get_config_universal_model($model_alias);
+
+//массив с настройками какие поля показываем
+$json_params=json_decode($view_fields_json, true, 512, JSON_UNESCAPED_UNICODE);
+
+
+$fields_array=[];
+$field_table=[];
+$fields_all=[];
+$template_text_all=""; // будет содержать все шаблоны текстовые с переменными для замены - нужно чтобы выбрать из БД нужные поля
+$data = $db::getRows("SELECT * FROM universal_model_fields WHERE model=?",[$model_alias]);
+foreach($data as $row) {
+$fields_all[$row["id"]]=$row;
+if(!empty($json_params[$row["id"]]) or empty($view_fields_json) ){
+if(!empty($json_params[$row["id"]]["name"])) $row["name"]=$json_params[$row["id"]]["name"];
+$fields[$row["id"]]=$row;
+$fields_array[$row["field"]]=$row;
+ $json_params2=json_decode($row["json_params"], true, 512, JSON_UNESCAPED_UNICODE);
+ if(!empty($json_params2)) {
+ foreach($json_params2 as $field => $value) {
+ if(!empty($value)) $fields[$row["id"]][$field]=$value;
+ }
+ }
+//if(!empty($json_params[$row["id"]]["posit"])) $row["posit"]=$json_params[$row["id"]]["posit"];
+if(!empty($json_params[$row["id"]]["template"])) {
+ //$row["template"]=$json_params[$row["id"]]["template"];
+ $template_text_all .=$json_params[$row["id"]]["template"]; }
+}
+}
+
+if(!empty($view_fields_json))
+foreach($json_params as $field_id => $row) $field_table[$field_id]=$row;
+else $field_table=$fields_all;
+
+
+
+//echo json_encode($field_table,JSON_UNESCAPED_UNICODE);
+
+$date_format="%d.%m.%Y";
+$datetime_format="%d.%m.%Y в %H:%i";
+
+
+// поставщики
+$query=[];
+$field_model_aliases=[];
+$query["search"]="SELECT id, name FROM shipment_providers WHERE 1 name LIKE ? order by name ASC";
+$query["all"]="SELECT id, name FROM shipment_providers WHERE 1 order by name ASC";
+$query["get_name"]="SELECT name FROM shipment_providers WHERE id=?";
+$query["mapping"]="SELECT id, name FROM shipment_providers WHERE id IN ";
+$field_model_aliases["supplier"]=$query;
+
+
+$query=[];
+$query["mapping"]="SELECT id, name FROM store_orders WHERE id IN ";
+$field_model_aliases["shipment"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id, name FROM companies WHERE id IN ";
+$field_model_aliases["companies"]=$query;
+
+
+
+$query=[];
+$query["mapping"]="SELECT id, CONCAT(name,' инн:', inn) as name FROM companies_organizations WHERE id IN ";
+$field_model_aliases["organizations"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM admin WHERE id IN ";
+$field_model_aliases["admin"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM money_types WHERE id IN ";
+$field_model_aliases["money_types"]=$query;
+
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM money_cashboxes WHERE id IN ";
+$field_model_aliases["money_cashboxes"]=$query;
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM products_1c WHERE id IN ";
+$field_model_aliases["stores"]=$query;
+
+
+$query=[];
+$query["mapping"]="SELECT id,name FROM universal_catalog_item WHERE id IN ";
+$field_model_aliases["stores_all"]=$query;
+
+$fields_table_sql=[];
+ try{
+ $fields_table_data=$db::getRows("select COLUMN_NAME as field from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME =?",[$model_config["table"]]);
+ foreach($fields_table_data as $rowf) $fields_table_sql[]=$rowf["field"];
+ } catch (Exception $e) { echo 'Выброшено исключение ошибка при выборке полей таблицы: ', $e->getMessage(), "\n"; }
+
+
+$universal_catalog_alias_arr=[];
+$fields_select=[];
+$search_values=[];
+$and_where=[];
+if(!empty($_GET["filter"])) {
+foreach($_GET["filter"] as $field_eng => $s_arr) {
+ if(is_array($s_arr)) {
+
+
+ // если date datetime
+ if(in_array($fields_array[$field_eng]["type"],["date","datetime"])) {
+ foreach($s_arr as $key => $val) {
+ if(!is_array($val) and !empty($val)) {
+ // echo"<br> [$field_eng][$key] $field_eng =$val ".$fields_array[$field_eng]["type"]." ";
+ if($key=="start") $condition=">="; else $condition="<=";
+ $and_where[]=["field"=>$field_eng, "condition"=>$condition, "value"=>"'$val'"];
+ $search_values[$field_eng][$key]=htmlentities($val);
+ }
+ }
+ }
+ ////// multiple select search
+ if(in_array($fields_array[$field_eng]["type"],["multiple","select","search"]) and !empty($s_arr)) {
+ $and_where[]=["field"=>$field_eng, "condition"=>" IN ", "value"=>" ('".implode("','",$s_arr)."') "];
+ $search_values[$field_eng]=$s_arr;
+ }
+
+ ///////
+
+
+
+ } else {
+ $search_values[$field_eng]=htmlentities($s_arr);
+ if(in_array($fields_array[$field_eng]["type"],["text","textarea","hidden","number"]) and !empty($s_arr)) {
+ $and_where[]=["field"=>$field_eng, "condition"=>" LIKE ", "value"=>"'%".htmlentities($s_arr)."%'"];
+ }
+
+ }
+
+}
+}
+
+$and_where_search="";
+foreach($and_where as $wherearr) $and_where_search .=" AND ".$wherearr["field"]." ".$wherearr["condition"]." ".$wherearr["value"]." ";
+
+echo"$and_where_search<table class=\"table table-sm table-hover table-stripped\"><thead><tr><form method=get action=\"\">";
+foreach($field_table as $field_id => $row) {
+ echo"<th>".$row["name"]."";
+
+ $fields[$field_id]["style"]="";
+
+ $fields[$field_id]["required"]="";
+ $fields[$field_id]["change_type"]= $fields[$field_id]["type"];
+
+ $fields[$field_id]["change_field_name"]="filter[".$fields[$field_id]["field"]."]";
+
+ $fields[$field_id]["attr"]=""; $fields[$field_id]["class"]="";
+ if(in_array($fields[$field_id]["type"],["textarea","hidden","number"])) $fields[$field_id]["type"]="text";
+ elseif(in_array($fields[$field_id]["type"],["select","search","status","created_by"])) {
+ $fields[$field_id]["type"]="multiple"; $fields[$field_id]["class"]="select2";
+ if(!empty($fields[$field_id]["query_sql_filter"])) $fields[$field_id]["query_sql"]=$fields[$field_id]["query_sql_filter"]; // заменяем запрос который идет для формы на запрос который идет для фильтра
+ }
+ if(in_array($fields[$field_id]["type"],["date","created_at"])) {
+ foreach(["start","end"] as $ent){
+ $fields[$field_id]["change_field_name"]="filter[".$fields[$field_id]["field"]."][$ent]";
+
+ $dataValues=[]; $data=[];
+ $fname=$fields[$field_id]["field"];
+ $data["field"]=$fname;
+ $data["default_value"]="";
+
+ if(isset($search_values[$fname][$ent])) $dataValues[$fname]=$search_values[$fname][$ent];
+
+ echo get_form_field_type($fields[$field_id],$dataValues,$model_config["model"]);
+ }
+
+ } else {
+ $dataValues=[]; $data=[];
+ $fname=$fields[$field_id]["field"];
+ $data["field"]=$fname;
+ if(!in_array($fields_all[$field_id]["type"],["table","table_function_row"])){
+ if(isset($search_values[$fname])) $dataValues[$fname]=$search_values[$fname];
+ // echo"++ $fname = ".$search_values[$fname]." +++ ".$dataValues[$fname]." ";
+ echo get_form_field_type($fields[$field_id],$dataValues,$model_config["model"]);
+ }
+
+
+ }
+
+
+ echo"</th>";
+
+}
+
+ echo"</tr>
+ <tr><td colspan=2><button type=submit class=\"btn btn-success btn-sm\" name=model_alias value=$model_alias>поиск</button></td></tr></form>
+</thead><tbody>";
+$fields_templates_select=[];
+ foreach($fields_all as $field_id => $row4) {
+ if(!empty($fields_all[$field_id]["universal_catalog_alias"])) $universal_catalog_alias_arr[]=$fields_all[$field_id]["universal_catalog_alias"];
+ if(in_array($fields_all[$field_id]["field"],$fields_table_sql)) {
+ if($fields_all[$field_id]["type"]=="date") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$date_format."') as ".$fields_all[$field_id]["field"];
+ elseif($fields_all[$field_id]["type"]=="datetime") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$datetime_format."') as ".$fields_all[$field_id]["field"];
+ else $fields_select[]=$fields_all[$field_id]["field"];
+
+ $fields_templates_select[]=$fields_all[$field_id]["field"];
+ }
+ }
+
+
+$uni_values=[];
+ try{
+ $fields_select_sql="";
+ $order_by="";
+
+
+if(!empty($fields_select)) {
+
+
+ // пагинация
+ $limit = 30;
+ $offset = !empty($_GET['p'])?(($_GET['p']-1)*$limit):0;
+ $offset=(int)$offset;
+ //получаем количество записей
+ $resultNum = $db::getRow("SELECT COUNT(*) as postNum FROM ".$model_config["table"]." WHERE 1 $and_where_search");
+ $rowCount = $resultNum['postNum'];
+ $pagConfig = [
+ 'baseURL'=>'/universal_model/model_view_config/?model_alias='.$model_alias,
+ 'totalRows'=>$rowCount,
+ 'perPage'=>$limit ];
+ $pagination = new Pagination($pagConfig);//инициализируем класс pagination
+
+ // если в шаблонах для отображения полей будет указано поле которое мы не выбрали из БД то его надо добавить - чтобы данные были полные при отображении. Ищем в тексте шалонов {{field}} - и убираем скобки - это и будут названия полей
+ $matches=[];
+ if(!empty($template_text_all)) {
+ preg_match_all("/\{{(.+?)\}}/", $template_text_all, $matches);
+ foreach($matches[0] as $pole) {
+ $field=str_replace(['{','}'],'',$pole);// убираем скобки
+ if(in_array($field,$fields_table_sql)) $templ_field[]=$field;
+
+ }
+ $templ_field=array_unique($templ_field);
+ $fields_select = array_merge($fields_select, $templ_field);
+ // print_r($fields_select);
+
+ }
+
+
+
+
+ $fields_templates=[];
+
+
+
+ foreach($fields_select as $field3) {
+ if(!in_array($field,$fields_table_sql)) unset($fields_select[$field3]);
+ }
+ echo"!!!!";
+ print_r($fields_table_sql);
+
+ echo $model_config["table"];
+
+ foreach($fields_all as $field_id => $row4) {
+ if(in_array($fields_all[$field_id]["field"],$fields_select) and in_array($fields_all[$field_id]["field"],$fields_table_sql)) {
+ if($fields_all[$field_id]["type"]=="date") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$date_format."') as ".$fields_all[$field_id]["field"];
+ elseif($fields_all[$field_id]["type"]=="datetime") $fields_select[]="DATE_FORMAT(".$fields_all[$field_id]["field"].",'".$datetime_format."') as ".$fields_all[$field_id]["field"];
+ }
+ }
+
+
+
+
+ $fields_select_sql .=implode(",",$fields_select);
+ echo"$fields_select_sql";
+ $sql_query="SELECT $fields_select_sql FROM ".$model_config["table"]." WHERE 1 $and_where_search $order_by LIMIT $offset, $limit";
+ $data = $db::getRows($sql_query);
+
+ } else error_mess("Не выбраны поля");
+ } catch (Exception $e) { echo 'Ошибка: '.$sql_query.' ', $e->getMessage(), "\n";}
+
+$alias_fields=[];
+$status_fields=[];
+$model_field_model_alias=[];
+foreach($data as $row) {
+ foreach($field_table as $field_id => $row2) {
+ if(!empty($fields[$field_id]["field_model_alias"])) {
+ if(!empty($row[$fields[$field_id]["field"]])){
+ $forarr=explode(",",$row[$fields[$field_id]["field"]]);
+ $alias_fields[$field_id]=$fields[$field_id]["field_model_alias"];
+ foreach($forarr as $provider_id) {
+ // if(!in_array($provider_id,@$model_field_model_alias[$fields[$field_id]["field_model_alias"]]))
+ $model_field_model_alias[$fields[$field_id]["field_model_alias"]][$provider_id]=$provider_id;
+ }
+ }
+ }
+
+ // если в поле хранится значение ID из универсального списка
+ if(!empty($fields[$field_id]["universal_catalog_alias"])) {
+
+ if($fields[$field_id]["type"]=="multiple"){
+ $forarr=explode(",",$row[$fields[$field_id]["field"]]);
+ foreach($forarr as $pid) {
+ $uni_values[$fields[$field_id]["universal_catalog_alias"]][$pid]=$pid;
+ }
+ }
+
+ if(in_array($fields[$field_id]["type"],["select","search"]) and !empty($row[$fields[$field_id]["field"]])){
+ $pid=$row[$fields[$field_id]["field"]];
+ $uni_values[$fields[$field_id]["universal_catalog_alias"]][$pid]=$pid;
+
+ }
+ }
+
+ // если поле статус - его значение складываем в массив и потом отдельно выведем как элемент универсального списка
+ if($model_config["status_name"]==$fields[$field_id]["field"]) {
+ $status_fields[$fields[$field_id]["field"]]=$fields[$field_id]["field"];
+ }
+ }
+
+}
+
+
+$dataValues=[];
+foreach($alias_fields as $alias) {
+$model_field_model_alias[$alias] = array_unique($model_field_model_alias[$alias]);
+$in=implode("','",$model_field_model_alias[$alias]);
+ try{
+ $dataValues[$alias]=$db::mapping($field_model_aliases[$alias]["mapping"]." ('$in')");
+ } catch (Exception $e) { echo 'Ошибка '.$field_model_aliases[$alias]["mapping"].' (\''.$in.'\')": ', $e->getMessage(), "\n";}
+}
+
+$status_fields = array_unique($status_fields);
+foreach($status_fields as $field) {
+ $alias=$db::getValue("SELECT alias FROM universal_catalog WHERE id=?",[$model_config["statuses"]]);
+ try{
+ $dataValues[$model_config["statuses"]]=$db::mapping("SELECT guid as id,name FROM universal_catalog_item WHERE catalog_alias=?",[$alias]);
+ } catch (Exception $e) { echo 'Ошибка: ', $e->getMessage(), "\n";}
+}
+
+
+
+$uni_values = array_unique($uni_values);
+//пробегаемся по массиву универсальных списков и достаем значения
+foreach($uni_values as $catalog_id => $v_arr) {
+ // foreach($v_arr as $v_id) echo"<br>+ $catalog_id -> $v_id ";
+ $in=implode("','",$v_arr);
+ try{
+ $dataValues[$catalog_id]=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE id IN ('$in')");
+ } catch (Exception $e) { echo 'Ошибка universal_catalog_item : ', $e->getMessage(), "\n";}
+
+}
+
+
+
+foreach($data as $row) {
+echo"<tr>";
+// показываем только поля которые выбраны для отображения
+foreach($field_table as $field_id => $row2) {
+ $value="";
+ if(isset($row[$fields[$field_id]["field"]])) $value=$row[$fields[$field_id]["field"]];
+ // если у поля указана модель алиаса в настройках поля то достаем значения по ID
+ if(!empty($fields[$field_id]["field_model_alias"])) {
+ if(isset($field_model_aliases[$fields[$field_id]["field_model_alias"]])) {
+
+ if($fields[$field_id]["tip"]=="array"){
+
+ $forarr=explode(",",$value);
+ $value=[];
+ foreach($forarr as $p_id) {
+ if(!empty($p_id)) {
+ if(isset($dataValues[$fields[$field_id]["field_model_alias"]]))
+ $value[]=$dataValues[$fields[$field_id]["field_model_alias"]][$p_id];
+ }
+ }
+ $value=implode(',',$value);
+ } else {
+
+ if(!empty($value) and !empty($dataValues[$fields[$field_id]["field_model_alias"]][$value])) $value=$dataValues[$fields[$field_id]["field_model_alias"]][$value];
+
+ }
+
+ }
+ }
+
+ // если это значение универсального списка
+ if(!empty($fields[$field_id]["universal_catalog_alias"]) and !empty($dataValues[$fields[$field_id]["universal_catalog_alias"]][$value])) $value=$dataValues[$fields[$field_id]["universal_catalog_alias"]][$value];
+
+
+ // если это значение статусного поля
+ elseif( $fields[$field_id]["field"]==$model_config["status_name"] and !empty($dataValues[$model_config["statuses"]][$value])) $value=$dataValues[$model_config["statuses"]][$value];
+
+
+ // если это seelct c JSON значение универсального списка
+ if(in_array($fields[$field_id]["type"],["select","multiple"]) and !empty($fields[$field_id]["select_array_json"][$value])) {
+ $value=$fields[$field_id]["select_array_json"][$value];
+
+
+ }
+
+
+ if(!empty($row2["template"])) {
+
+ $value=str_replace("{{this}}",$value,$row2["template"]);
+
+ // $value=str_replace("{{comments}}",'1111',$value);
+ foreach($fields_templates_select as $field) {
+ $value=str_replace("{{".$field."}}",$row[$field],$value);
+ // echo "<br>!".$field." =".$row[$field];
+
+ }
+ $value=html_entity_decode($value);
+
+ }
+ if(empty($value)) $value="";
+
+ echo"<td>".$value."</td>";
+
+
+}
+
+echo"</tr>";
+}
+
+echo"</tbody></table>";
+
+
+ // Вывод меню если страниц больше одной
+ //получаем записи
+if(!empty($data)) echo $pagination->createLinks();
+
+}
-<?php
+<?
function upload_file($name,$check_id,$id,$param=array("path"=>"data/{name}","ext"=>array("jpg"),"resizeimg"=>array("image_sm"=>array("path"=>"data/{name}","width"=>1300,"height"=>1300)))) {
global $_CONFIG_SITE, $db,$sql_table_image, $return_mess;
$error="";
global $modul,$act;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
$modul="bonus";
$act="bonus_users";
//print_r($array_male); //
$data=$db::getRows("SELECT name,name_name,pol, count(*) as cnt FROM `users` WHERE name_name!='' AND (pol='none' or pol='')
-GROUP BY name_name ORDER BY cnt DESC LIMIT 50000");
+GROUP BY name_name, name, pol ORDER BY cnt DESC LIMIT 50000");
foreach($data as $row) {
$name=trim(mb_strtolower($row["name_name"], 'UTF-8'));
echo" <br>$name ".$row["cnt"]." ";
include"templates/top.php";
+error_reporting(E_ALL ^ E_NOTICE);
+
$modul="sales_checks";
$act="index";
-echo"<form method=post action=\"/$modul/$act/\">
-наименование чека <input type=text name=search[number] value=\"".$search["number"]."\">
+echo"<form method=post>"
+ . '<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() . '" />' .
+"наименование чека <input type=text name=search[number] value=\"".$search["number"]."\">
Телефон <input type=text name=search[phone] value=\"".$search["phone"]."\">
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+if(!empty($_REQUEST["id"])) {
+$orderId=(int)$_REQUEST["id"];
+
+
+include"modul/shipment/functionsShipment.php";
+$FiledsData=getDataFiledsData($orderId);
+$storeOrderArray=getRelationshipCityStore();
+
+
+global $dataUpdate;
+$dataUpdate=[];
+
+// сохраняет в глобальный массив $dataUpdate результат распределние товаров по цветам - то что будкем сохранять в БД
+function doit($product_id,$color="NULL") {
+global $db,$FiledsData,$prioritetStores,$storeOrderArray,$products, $dataUpdate,$orderStoresArrayRelation_in;
+
+
+if(empty($prioritetStores)) {
+ $data=$db::getRows("SELECT store_id FROM store_orders_product_store_sort
+ WHERE product_id=? AND view='1' AND store_id $orderStoresArrayRelation_in order by posit DESC",[$product_id]);
+ foreach($data as $row) $prioritetStores[$row["store_id"]]=$row["store_id"];
+ }
+
+if(empty($FiledsData["min_lot"][$product_id]["NULL"]["NULL"])) echo"<font color=red>Мин. лот = 0 заполните минимальный лот у товара!!</font>";
+
+if(empty($prioritetStores)) echo"<span class=\"fs-4 color-red m-10\">У товара ".$products[$product_id]." нет
+<a href=\"/shipment/productStoresSort/?product_id=$product_id\" target=new class=\"btn btn-warning btn-sm\">сортировки по магазинам для
+распределения</a> </span>";
+
+
+$quantity_warehouseman_fact=(int)$FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"][$color];
+$division_store_ratio=$FiledsData["division_store_ratio"][$product_id]["NULL"][$color];
+$division_store=(int)$FiledsData["division_store"][$product_id]["NULL"][$color];
+$division_store_hand=(int)$FiledsData["division_store_hand"][$product_id]["NULL"][$color];
+$division_store_summ=(int)$FiledsData["division_store_summ"][$product_id]["NULL"][$color];
+$storehouse_balance=(int)$FiledsData["storehouse_balance_store"][$product_id]["NULL"][$color];
+$min_lot=(int)$FiledsData["min_lot"][$product_id]["NULL"]["NULL"];
+$prioritetStoresN=$prioritetStores;
+
+$info="";
+if(!empty($quantity_warehouseman_fact)) {
+$table ="
+<table class=\" m-0 p-0 w-100\" cellpadding=0 cellspacing=1 style=\"background:#dcdeff;\"><thead><th>Мин. лот</th><th>Получено по факту</th>
+<th>коэффицент деления</th>
+<th>авто-деление итого</th>
+<th>ручные добавки сумма</th>
+<th>остаток на складе</th>
+</thead>
+<tbody><tr><td>$min_lot</td>
+<td>$quantity_warehouseman_fact</td>
+<td>$division_store_ratio";
+if(empty($division_store_ratio)) $table .="<font color=red>Коэфицент деления 0!</font>";
+
+$table .="</td>
+<td>$division_store</td>
+<td>$division_store_hand</td>
+<td>$storehouse_balance</td></tr></tbody></table>";
+
+$j=1;
+if($storehouse_balance>0) {
+ // цикл начисления минимального лота
+
+
+$txt=[];
+$storeCnt=[];
+ do{
+ // echo"<b>1 этап: Насиляем магазинам кто в заявке указал свою потребность. Посность закрываем потребности магазинов</h3>";
+ foreach($prioritetStoresN as $storeId => $store) {
+ //потребность магазина
+ $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId][$color];
+ $division_store_summ=(int)$FiledsData["division_store_summ"][$product_id][$storeId][$color];
+
+
+ if($division_store_summ>$storeCnt[$storeId]) $maxlevel=$division_store_summ;
+ else $maxlevel=$storeCnt[$storeId];
+
+
+ // echo"<br> ".$storeOrderArray[$storeId]." ($q >= $n $q>0 && $division_store_summ<=$n ) + $min_lot q=$q division_store_summ=$division_store_summ";
+
+ // если магазин нуждается в начислении - его потребность не закрыта - то начисляем
+
+ if( $q >= ($maxlevel+$min_lot) && $q>0 && $division_store_summ<=($maxlevel+$min_lot)) {
+ $storeCnt[$storeId] +=$min_lot;
+ $storehouse_balance -=$min_lot;
+ echo"<br>$j) <b>".$storeOrderArray[$storeId]."</b> + $min_lot = <b>".$storeCnt[$storeId]."</b> шт. ";
+ $txt[$storeId] .=" +$min_lot ";
+ if($q==$n) unset($prioritetStoresN[$storeId]);
+ $j++;
+ } else {
+ unset($prioritetStoresN[$storeId]);
+ // echo"<br>$j) ".$storeOrderArray[$storeId]." нет потребности!";
+ }
+
+ if($storehouse_balance<=0 || empty($prioritetStoresN)) break;
+ }
+
+ if(empty($prioritetStoresN)) break;
+ $j=1;
+ } while($storehouse_balance>0 || empty($prioritetStoresN));
+
+
+ foreach($storeCnt as $storeId => $cnt) {
+ if($color=="NULL") $colorInt=0; else $colorInt=$color;
+ $dataUpdate[$product_id][$storeId][$colorInt]=intval($cnt + $FiledsData["division_store_hand"][$product_id][$storeId][$color]);
+
+}
+
+
+
+ $table .='<table class=" m-0 p-0 w-100" cellpadding=0 cellspacing=1>
+ <thead style="background:#fffddc"><th>магазин</th><th>заказ от магазина</th><th>начисления по мин. лоту </th>
+</thead><tbody>';
+$n=0;
+ foreach($prioritetStores as $storeId => $store) {
+ $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId][$color];
+ if($q) {
+ $table .='<tr><td class="text-right">'.$storeOrderArray[$storeId].'</td>
+ <td>'.$q.'</td>
+ <td class="text-left w-60" style="color:green">'.$txt[$storeId].'</td>
+ </tr> ';
+ $n++;
+ }
+
+ }
+$table .='</tbody></table>';
+
+
+
+
+} //end balance
+
+} else $info="<span class=\"btn btn-sm btn-danger\">НЕТ НА СКЛАДЕ</span>";
+
+
+if(empty($n)) $info .="<span class=\"btn btn-sm btn-info\">нет потребности</span>";
+
+
+echo"<h3>".$products[$product_id]." $color $info</h3>";
+
+if($n) echo $table;
+
+}// end function doit
+$productsForeach=$products;
+if($_REQUEST["product_id"]) { // если в запросе только один товар то пробегаемся только понему
+ $product_id=htmlentities($_REQUEST["product_id"]);
+ $productsForeach=[];
+ $productsForeach[$product_id]=$products[$product_id];
+}
+
+// пробегаемся по товарам в закупке
+foreach($productsForeach as $product_id => $nameProduct) {
+ // только те товары по корым пришел товар от кладовщика
+ if($FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"]) {
+ echo"<br> $nameProduct ";
+ $doit_color=[]; // массив с цветами товара
+ $doit_color=$productsColorsArray[$product_id];
+ $doit_color[]="NULL"; // элемент массива - без цветов - общее
+
+ foreach($doit_color as $color) {
+ doit($product_id,$color); //начисляем
+ }
+ }
+}
+
+$data_up=$dataUpdate;
+
+if(!empty($data_up)) insert_store_orders_fields($data_up,"division_store_hand");
+}
+
+/*
+
+
+
+if(0 and $storehouse_balance>0) {
+
+
+ echo"<h3>2 этап: Если остался остаток на распределение после 1 этапа = $storehouse_balance шт. Распределяем весь остаток согласно списка приоритетности по магазинам длоя этого товара </h3>";
+$prioritetStoresN=$prioritetStores;
+
+ // цикл начисления минимального лота
+ do{
+ // echo"<br> Насиляем";
+ foreach($prioritetStoresN as $storeId => $store) {
+ //потребность магазина
+ $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId]["NULL"];
+ $division_store_summ=(int)$FiledsData["division_store_summ"][$product_id][$storeId]["NULL"];
+ // echo"<br>@@@".$storeOrderArray[$storeId]." +q= $q min_lot=$min_lot = ".$storeCnt[$storeId]." шт. ";
+
+ // если магазин нуждается в начислении - его потребность не закрыта - то начисляем
+ $n=$storeCnt[$storeId]+$min_lot;
+ if( $q==0 && $division_store_summ<$n) {
+ $storeCnt[$storeId] +=$min_lot;
+ $storehouse_balance -=$min_lot;
+ echo"<br>$j) ".$storeOrderArray[$storeId]." + $min_lot = ".$storeCnt[$storeId]." шт. ";
+ if($q==$n) unset($prioritetStoresN[$storeId]);
+ } else {
+ unset($prioritetStoresN[$storeId]);
+ // echo"<br>$j) ".$storeOrderArray[$storeId]." нет потребности!";
+ }
+ $j++;
+ if($storehouse_balance<=0 || empty($prioritetStoresN)) break;
+ }
+
+ if(empty($prioritetStoresN)) break;
+ $j=1;
+ } while($storehouse_balance>0 || empty($prioritetStoresN));
+}
+
+ $arrayFiledsUpdate=[
+"quantity_zakup_new",
+"sales_division_4weeks_cnt_avg",
+"division_store_ratio",
+"division_store",
+"division_store_hand",
+"division_store_summ",
+"storehouse_balance_store"];
+
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";
+ if(is_file($f)) {
+ $data_up=[];
+ include_once($f);
+ if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+ }
+ }
+}
+
+
+
+
+//$sales_division_4weeks_cnt_avg=(int)$FiledsData[""][$product_id]["NULL"]["NULL"];
+
+//sales_4weeks_cnt
+/*
+echo"Массив сортировка по закупке";
+$sortStoreZakup=[];
+$positArray=[];
+$data=$db::getRows("SELECT store_id, value FROM store_orders_fields_data
+WHERE product_id=? AND order_id=? AND field_name='quantity_zakup_new' AND store_id!='' AND color='' group by store_id order by value DESC",[$product_id,$orderId]);
+$k=1;
+foreach($data as $row) {
+ echo"<br> $k) ".$storeOrderArray[$row["store_id"]]." = ".(int)$row["value"]." ";
+ $sortStoreZakup[]=$row["store_id"];
+ $positArray[$row["store_id"]]=1;
+ $k++;
+}
+echo"<br>Средние продажи от даты сейчас";
+$day_sales=7*4;
+$data2=$db::getRows("SELECT s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id='$product_id'
+AND s.store_id $orderStoresArrayRelation_in
+AND s.date<=NOW() AND s.date>=NOW() -interval $day_sales day group BY s.store_id order by sale_cnt DESC");
+$k=1;
+ foreach($data2 as $row2) {
+ $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+ echo"<br>$k) ".$storeOrderArray[$row2["store_id"]]." = $cnt ";
+ $k++;
+ }
+
+
+echo"<br> Статситика по магазинам по продажам за 4 недели среднее арифм. от даты деления - 28 дней по убыванию";
+$data=$db::getRows("SELECT store_id, value FROM store_orders_fields_data
+WHERE product_id=? AND order_id=? AND field_name='sales_division_4weeks_cnt_avg' AND store_id!='' AND color='' group by store_id order by value DESC",[$product_id,$orderId]);
+$k=1;
+foreach($data as $row) {
+ echo"<br> $k) ".$storeOrderArray[$row["store_id"]]." = ".(int)$row["value"]." ";
+ $sortStore[]=$row["store_id"];
+ $positArray[$row["store_id"]]++;
+ $k++;
+}
+
+arsort($positArray);
+
+echo"<br>Итоговый список сортировки";
+$k=1;
+foreach($positArray as $storeId => $vl) {
+ echo"<br> $k) ".$storeOrderArray[$storeId]." = $vl ";
+ $k++;
+}
+*/
+
+/*
+echo"<b>Начисление по минимальному лоту деления будет прохордить по порядку:</b><table class=\"zak\">
+<thead><th></th>
+<th>магазани</th>
+<th>заказ магазина</th>
+<th>деление итого</th>
+</thead>
+<tbody>";
+$k=1;
+foreach($prioritetStores as $storeId => $vl) {
+ $q=(int)$FiledsData["quantity_zakup_new"][$product_id][$storeId]["NULL"];
+ $division_store_summ=(int)$FiledsData["division_store_summ"][$product_id][$storeId]["NULL"];
+ if(empty($q)) $q="нет заявки";
+ echo"<tr><td> $k</td><td class=\"text-left\">".$storeOrderArray[$storeId]."</td><td>$q</td><td>$division_store_summ</td></tr> ";
+ $k++;
+}
+echo"</tbody></table>";
+
+*/
+
+
+
+
+
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+if(!empty($_REQUEST["id"])) {
+$orderId=(int)$_REQUEST["id"];
+
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+include"modul/shipment/functionsShipment.php";
+
+
+if($_REQUEST["save"]){
+
+ $quantity_zakup_new=intval($_REQUEST["quantity_zakup_new"]);
+ $quantity_warehouseman_fact=intval($_REQUEST["quantity_warehouseman_fact"]);
+
+ $data_up=[];
+ $data_up[$product_id][0][0]=$quantity_warehouseman_fact;
+ insert_store_orders_fields($data_up,"quantity_warehouseman_fact");
+
+ $data_up=[];
+ $data_up[$product_id][$store_id][0]=$quantity_zakup_new;
+ insert_store_orders_fields($data_up,"quantity_zakup_new");
+
+$arrayFiledsUpdate=["quantity_zakup_new","division_store_ratio", "division_store","division_store_hand","division_store_summ"];
+ foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";
+ if(is_file($f)) {
+ $data_up=[];
+ include_once($f); // получаем данные в массив $data_up
+ if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+ }
+}
+}
+
+ mess("Сохранили");
+
+ exit();
+}
+
+
+$FiledsData=getDataFiledsData($orderId);
+
+echo"<b>".$products[$product_id]." для ".$storesArrayAll[$store_id]."</b>
+
+<div id=saver></div>
+<table class=\"table table-bordered table-stripped info\">
+<tr><td>
+<input type=numeric name=quantity_zakup_new
+id=quantity_zakup_new value=\"".(int)$FiledsData["quantity_zakup_new"][$product_id][$store_id]["NULL"]."\"> шт </td>
+<td>Заказ магазина </td></tr>
+<tr><td><b>".(int)$FiledsData["quantity_zakup_new"][$product_id]["NULL"]["NULL"]."</b> шт </td>
+<td>Общая потребность магазинов </td></tr>
+<tr>
+<td><input type=numeric name=quantity_warehouseman_fact id=quantity_warehouseman_fact
+value=\"".(int)$FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"]["NULL"]."\"> шт </td>
+<td>Получено по факту </td></tr>";
+
+
+
+
+
+
+echo"
+<tr><td>".round($FiledsData["division_store_ratio"][$product_id]["NULL"]["NULL"],2)." =
+".ceil($FiledsData["division_store_ratio"][$product_id]["NULL"]["NULL"] * 100)." % </td>
+<td>Коэфицент деления. Не более 100%. (Получено по факту/Общая потребность магазинов
+= ".(int)$FiledsData["quantity_warehouseman_fact"][$product_id]["NULL"]["NULL"]."/".(int)$FiledsData["quantity_zakup_new"][$product_id]["NULL"]["NULL"]." )</td>
+
+</tr>
+
+
+
+<tr><td><b>".(int)$FiledsData["division_store"][$product_id][$store_id]["NULL"]."</b> шт </td>
+<td>Деление на магазин </td></tr>
+<tr><td><b>".(int)$FiledsData["division_store_hand"][$product_id][$store_id]["NULL"]."</b> шт </td>
+<td>Ручная добавка </td></tr>
+<tr><td><b>".(int)$FiledsData["division_store_summ"][$product_id][$store_id]["NULL"]."</b> шт </td>
+<td>Сумма деления на магазин Итого </td></tr>
+
+
+<tr><td></td>
+<td>Продажи для деления</td></tr>
+
+</table>
+
+<button onclick=\"ajaxSave()\" class=\"btn btn-info\">сохранить</button>
+";
+
+
+echo"
+
+<script>
+function ajaxSave(){
+
+ $.ajax({
+ url: '/shipment/ajaxDivisionInfo/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, product_id: '$product_id', store_id: '$store_id', save: 1,
+ 'quantity_zakup_new': $('#quantity_zakup_new').val(),
+ 'quantity_warehouseman_fact': $('#quantity_warehouseman_fact').val() },
+ success: function(data){
+ $('#saver').html(data);
+
+ }});
+}
+</script>
+";
+
+
+}
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+if(!empty($_REQUEST["id"])) $orderId=(int)$_REQUEST["id"]; else exit("Укажите ID закупки");
+
+include"modul/shipment/functionsShipment.php";
+
+
+if(empty($orderCityId)) {
+ error_mess("Укажите город у закупки - новый метод расчета должен опираться на статистику по Городу!");
+ exit();
+}
+
+
+ $arrayFiledsUpdate=[
+"quantity_zakup_new",
+"sales_division_4weeks_cnt_avg",
+"division_store_ratio",
+"division_store_hand",
+"division_store",
+"division_store_summ",
+//"purchase_fact_difference",
+"storehouse_balance",
+"storehouse_balance_store",
+];
+
+ob_start();
+
+echo"<table><tbody>";
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";
+ if(is_file($f)) {
+ $data_up=[];
+
+ echo"<tr><td colspan=2>";
+ include_once($f); // получаем данные в массив $data_up
+ echo"</td></tr>";
+
+ if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+ }
+ echo"<tr><td class=\"text-right\"> <span class=\"btn btn-sm btn-default\">".$fieldsRows[$Field]["name"]." ".$fieldsRows[$Field]["name_eng"]."</span> </td><td><span class=\"btn btn-sm btn-success\">посчитано</span>";
+
+ if(empty($data_up)) echo"пусто";
+ echo"</td></tr> ";
+
+ } else {
+
+ echo"<tr><td colspan=2> !!нет файла $f</td></tr>";
+ }
+}
+echo"</tbody></table>";
+
+$output = ob_get_contents();
+ob_end_clean();
+
+if(in_array($_SESSION["group_id"],[1,10])) echo $output;
+//echo'<script> setTimeout(() => window.parent.location.reload(), 0);</script>';
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+
+if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+$whereInProductsId=" in('$product_id') ";
+$products=[$product_id=>"товар"];
+
+
+//echo"$name_eng=$value $product_id $store_id";
+if(!empty($store_id)) {
+global $dependent_fields;
+$data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1");
+foreach($data as $row) {
+ $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);
+ $fieldRows[$row["id"]]=$row["name_eng"];
+}
+
+global $arrayp;
+
+function recurs_depended($fieldId) {
+ global $dependent_fields,$arrayp;
+ $arrayp .=",".implode(",",$dependent_fields[$fieldId]);
+ foreach($dependent_fields[$fieldId] as $fieldId2) recurs_depended($fieldId2);
+ return $arrayp;
+}
+
+
+
+
+$row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]);
+if(is_array($row)) {
+ $tip=$row["tip"];
+ $fieldId=$row["id"];
+
+
+
+if(1) {
+$arrayp=recurs_depended($fieldId);
+
+
+$arrayp = array_unique(explode(",",$arrayp));
+$arrayp = array_diff($arrayp, array(''));
+//echo "++++".print_r($arrayp)." ";
+
+
+$updateFieldsArray=[];
+//echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией ";
+foreach($arrayp as $k) {
+
+ if(is_numeric($k)) { echo"<br>---+++$k ".$fieldRows[$k]."";
+
+ $updateFieldsArray[]=$fieldRows[$k];
+
+ }
+
+}
+
+
+
+
+
+
+if(!empty($updateFieldsArray))
+{
+//include_once("inc/functionsFiedlsData.php");
+
+//updateProductArrayDataField($updateFieldsArray);
+}
+
+
+}
+
+
+if($tip=="string") $pole="value_text"; else $pole="value";
+
+if(empty($color) or $color=='undefined' or $color=='NULL') $color='';
+if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
+
+
+
+$up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
+//if($_SESSION["group_id"]==1) echo $up;
+if(isset($value)) {
+
+if($name_eng=="quantity_zakup_new") {
+
+ $min_lot=1;
+ $min_lot=$db::getValue("SELECT min_lot FROM products_1c_options WHERE id=?",[$product_id]);
+ $value=(int)$value;
+ $a = $value/$min_lot;
+ $b = $a - floor($a); // $b = 0.5953
+ if($b>0 || $value < $min_lot) exit("вы ввели данные не краные минимальному лоту деления!");
+}
+
+ //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+ //echo"удаление пустой записи";
+
+
+
+$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=?
+AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+$value_old=str_replace('.000','',$value_old);
+$sql="INSERT IGNORE INTO store_orders_fields_data SET ";
+ $up2 =" $pole='$value'";
+ $up .= ",".$up2;
+$sql .="$up ON DUPLICATE KEY UPDATE $up2";
+$db::sql($sql);
+//echo'сохранили '.$name_eng.' store_id='.$store_id.' '.$name_eng.' color='.$color.' value='.$value.' ';
+
+
+
+$db::sql("INSERT INTO store_orders_fields_data_logi
+(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
+VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
+
+// обновляем данные для зависимых полей
+ if(!empty($arrayp) and !empty($id)) {
+
+//echo"Считаем Заивисимые поля";
+//print_r($arrayp);
+ $orderId=(int)$id;
+include_once("modul/shipment/functionsShipment.php");
+
+foreach($arrayp as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";
+ if(is_file($f)) {
+ $data_up=[];
+ include_once($f); // получаем данные в массив $data_up
+ if(!empty($data_up)) {
+
+ // echo"<br>".$fieldsRows[$Field]["name"];
+
+ //print_r($data_up);
+ insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+ }
+
+}
+
+}
+}//END обновляем данные для зависимых полей
+
+
+
+
+}
+
+
+
+
+
+} else echo'Поля '.$name_eng.' нет в таблице ';
+
+}
+
+}
\ No newline at end of file
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+
+if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+$whereInProductsId=" in('$product_id') ";
+$products=[$product_id=>"товар"];
+
+
+//echo"$name_eng=$value $product_id $store_id";
+if(!empty($store_id)) {
+global $dependent_fields;
+$data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1");
+foreach($data as $row) {
+ $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);
+ $fieldRows[$row["id"]]=$row["name_eng"];
+}
+
+global $arrayp;
+
+function recurs_depended($fieldId) {
+ global $dependent_fields,$arrayp;
+ $arrayp .=",".implode(",",$dependent_fields[$fieldId]);
+ foreach($dependent_fields[$fieldId] as $fieldId2) recurs_depended($fieldId2);
+ return $arrayp;
+}
+
+
+
+
+$row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]);
+if(is_array($row)) {
+ $tip=$row["tip"];
+ $fieldId=$row["id"];
+
+
+
+if(1) {
+$arrayp=recurs_depended($fieldId);
+
+
+$arrayp = array_unique(explode(",",$arrayp));
+$arrayp = array_diff($arrayp, array(''));
+//echo "++++".print_r($arrayp)." ";
+
+
+$updateFieldsArray=[];
+//echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией ";
+foreach($arrayp as $k) {
+
+ if(is_numeric($k)) { echo"<br>---+++$k ".$fieldRows[$k]."";
+
+ $updateFieldsArray[]=$fieldRows[$k];
+
+ }
+
+}
+
+
+
+
+
+
+if(!empty($updateFieldsArray))
+{
+//include_once("inc/functionsFiedlsData.php");
+
+//updateProductArrayDataField($updateFieldsArray);
+}
+
+
+}
+
+
+if($tip=="string") $pole="value_text"; else $pole="value";
+
+if(empty($color) or $color=='undefined' or $color=='NULL') $color='';
+if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
+
+
+$up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
+
+if(isset($value)) {
+
+ //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+ //echo"удаление пустой записи";
+
+//echo'сохранили '.$up.' '.$name_eng.' store_id='.$store_id.' '.$name_eng.' color='.$color.' value='.$value.' ';
+
+
+$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=?
+AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+$value_old=str_replace('.000','',$value_old);
+$sql="INSERT IGNORE INTO store_orders_fields_data SET ";
+ $up2 =" $pole='$value'";
+ $up .= ",".$up2;
+$sql .="$up ON DUPLICATE KEY UPDATE $up2";
+$db::sql($sql);
+
+
+
+$db::sql("INSERT INTO store_orders_fields_data_logi
+(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
+VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
+
+// обновляем данные для зависимых полей
+ if(!empty($arrayp) and !empty($id)) {
+
+//echo"Считаем Заивисимые поля";
+//print_r($arrayp);
+ $orderId=(int)$id;
+include_once("modul/shipment/functionsShipment.php");
+
+foreach($arrayp as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";
+ if(is_file($f)) {
+ $data_up=[];
+ include_once($f); // получаем данные в массив $data_up
+ if(!empty($data_up)) {
+
+ // echo"<br>".$fieldsRows[$Field]["name"];
+
+ //print_r($data_up);
+ insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+ }
+
+}
+
+}
+}//END обновляем данные для зависимых полей
+
+
+
+
+}
+
+
+} else echo'Поля '.$name_eng.' нет в таблице ';
+
+}
+
+}
\ No newline at end of file
--- /dev/null
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+
+if(!empty($_POST["product_id"])) $product_id=htmlentities($_POST["product_id"]);
+if(!empty($_POST["action"])) $action=htmlentities($_POST["action"]);
+
+if(empty($action)) $action="add";
+
+if($action=="edit") {
+
+if(!empty($_POST["id"])) $id=intval($_POST["id"]);
+
+$rowValue=$db::getRow("SELECT * FROM shipment_waybill_products WHERE id=?",[$id]);
+$product_id=$rowValue["product_id"];
+echo "<input type=hidden id=waybill_product_id name=waybill_product_id value=\"$id\">";
+}
+
+
+
+$nameProduct=$db::getValue("SELECT name FROM products_1c WHERE id=?",[$product_id]);
+
+$data=$db::getRows("SELECT id,color,name FROM products_varieties WHERE product_id=? order by color ASC, name ASC",[$product_id]);
+foreach($data as $row) {
+ $products_varieties[$row["id"]] = $row["name"];
+ $products_color[$row["id"]] = $row["color"];
+}
+
+ echo"<b>$nameProduct</b>
+
+
+<table class=\"table table-sm\">
+ <input type=hidden id=product_id name=product_id value=\"$product_id\">";
+
+if($products_varieties) {
+ echo"<tr><td class=\"w-20 text-right\"> Сорт </td><td><select name=varietie_id id=varietie_id class=\"select-control form-control\" style=\"width:200px;\">";
+ echo"<option value=\"0\">-не указано-</option>";
+ foreach($products_varieties as $idn => $name){
+ echo "<option value=\"$idn\" "; if($rowValue["varietie_id"]==$idn) echo" selected"; echo">$name (".$products_color[$idn].")</option>";
+
+ }
+ echo"</select></td></tr>";
+
+ }
+ echo"
+ <tr><td class=\"w-20 text-right\"> Кол-во </td><td> <input type=numeric class=\"form-control\" name=quantity id=quantity value=\"".$rowValue["quantity"]."\"></td></tr>
+ <tr><td class=\"w-20 text-right\"> Цена закупки </td><td> <input type=text class=\"form-control\" name=price id=price value=\"".$rowValue["price"]."\"></td></tr>
+ <tr><td class=\"w-20 text-right\"> Цена логистики </td><td> <input type=text class=\"form-control\" name=price_logistic id=price_logistic value=\"".$rowValue["price_logistic"]."\"></td></tr>
+
+
+
+</table>
+<button class=\"btn btn-lg btn-success\" value=$action name=save>Добавить</button> ";
+
+if($action=="edit") {
+echo" <button class=\"btn btn-sm btn-danger\" value=dell name=save>удалить</button> ";
+
+
+}
+
+
+
+
\ No newline at end of file
include_once("inc/base_new.php");
include_once("inc/design_new.php");
-
+ini_set('error_reporting', E_ALL);
+ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
global $products, // массив с товарами производителя прикрепленного к этой закупке
$orderId, // id- заказа
$store_id, // GUID магазина
//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_ratio' or field_name='division_auto' or field_name='storehouse_balance') AND order_id='$orderId'");
-$db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");
+//$db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");
include_once("inc/shipment.php");
include"inc/functionsFiedlsData.php";
$orders_where group by order_id, product_id,color");
foreach($data as $row) {
if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
- $data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
+ @$data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
- $titleArr[$row["product_id"]]["NULL"][$color] .="
+ @$titleArr[$row["product_id"]]["NULL"][$color] .="
id=".$row["order_id"]." ".$store_orders[$row["order_id"]]."=".(int)$row["value"]." шт.";
-
+exit("===");
insert_store_orders_fields($FiledsData["division_hand_summ"],"division_hand_summ");
insert_store_orders_fields($FiledsData["division_auto_all"],"division_auto_all");
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+if(!empty($_REQUEST["id"])) $orderId=(int)$_REQUEST["id"]; else exit("Укажите ID закупки");
+
+
+
+
+include"modul/shipment/functionsShipment.php";
+
+
+if(empty($orderCityId)) {
+
+
+ error_mess("Укажите город у закупки - новый метод расчета должен опираться на статистику по Городу!");
+
+ exit();
+}
+
+// переключатель между статусами - задаем массивы с полями которые считаем на каждом статусе
+switch($status_order_id){
+
+ case "1": // новый
+ $arrayFiledsUpdate=[
+"min_lot",
+"min_order",
+"purchase_price",
+"purchase_summ",
+"price_zakup_summ",
+"quantity",
+"quantity_fact",
+"quantity_zakup_new",
+"sales_cnt",
+"sales_amount",
+"sales_4weeks_cnt",
+"write_offs_4week_cnt_avg",
+"write_offs_4week_sum",
+"write_downs",
+"write_offs_4week_cnt_avg",
+"write_offs_comments",
+"quantity_rejection",
+"write_offs_sum",
+"order_supplier_sum",
+"delta_sales4week_supplier",
+"delta_sales4week_supplier_percent",
+"delta_sales4week_supplier_summ",
+"delta_sales7_and_supplier",
+"delta_sales7_and_supplier_percent",
+"entrance_cnt_7days",
+"scheduled_delivery_cnt",
+"goods_in_transit",
+"quantity_storage",
+"auto_purchase_formula",
+"auto_purchase_formula_all",
+"quantity_warehouseman_fact",
+"storehouse_balance","purchase_logistic"];
+ break;
+
+ case "2": // в работе
+ $arrayFiledsUpdate=[
+"min_lot",
+"min_order"
+,
+"purchase_price",
+
+"purchase_summ",
+"price_zakup_summ",
+
+"quantity",
+"quantity_fact",
+"quantity_zakup_new",
+"sales_cnt",
+"sales_amount",
+"sales_4weeks_cnt",
+
+"write_offs_4week_cnt_avg",
+"write_offs_4week_sum",
+"write_downs",
+
+"write_offs_sum",
+"write_offs_4week_cnt_avg",
+"order_supplier_sum",
+"delta_sales4week_supplier",
+"delta_sales4week_supplier_percent",
+"delta_sales4week_supplier_summ",
+"delta_sales7_and_supplier",
+"delta_sales7_and_supplier_percent",
+
+"entrance_cnt_7days",
+"scheduled_delivery_cnt",
+
+"goods_in_transit",
+"quantity_storage",
+"auto_purchase_formula",
+"auto_purchase_formula_all",
+"quantity_warehouseman_fact",
+"storehouse_balance","purchase_logistic"
+];
+ break;
+
+ case "3": // данные внесены
+ $arrayFiledsUpdate=[
+ "min_lot",
+ "min_order",
+ "auto_purchase_formula_all",
+ "auto_purchase_formula",
+ "quantity_zakup",
+ "auto_purchase_summ",
+ "write_downs",
+ "purchase_price",
+ "quantity",
+ "quantity_fact",
+ "sales_cnt",
+ "quantity_storage",
+ "order_supplier_sum","purchase_logistic"
+ ];
+ break;
+
+ case "4": // закупка заказа
+ $arrayFiledsUpdate=["sales_cnt",
+ "order_supplier_sum",
+ "quantity",
+ "purchase_price_zakup",
+ "quantity_zakup_fact_sum",
+ "price_zakup_summ",
+ "delta_zakup",
+ "write_offs_4week_cnt_avg",
+ "write_offs_4week_sum",
+ "write_downs",
+ "storage_days","purchase_logistic"];
+ break;
+
+ case "5": // товар в пути
+ $arrayFiledsUpdate=[
+ "goods_in_transit",
+ "sales_cnt",
+ "purchase_price_zakup",
+ "order_supplier_sum",
+ "quantity_zakup_fact_sum",
+ "price_zakup_summ",
+ "delta_zakup",
+ "division_auto_need",
+ "division_auto_need_all",
+ "division_ratio",
+ "division_auto",
+ "division_auto_all",
+ "division_hand",
+ "division_summ",
+ "division_summ_all",
+ "division_price_summ",
+ "storage_days"
+ ];
+
+
+ break;
+
+
+case "6": // деление по магазинам
+ $arrayFiledsUpdate=[
+"min_lot",
+"min_order",
+"write_offs_division",
+"write_offs_comments",
+"sales_division_4weeks_cnt_avg",
+
+"quantity_rejection",
+"write_offs_sum",
+"order_supplier_sum",
+"scheduled_delivery_cnt",
+"goods_in_transit",
+"quantity_storage",
+"sales_7day_division",
+"sales_7day_amount_division",
+"color_percent",
+"division_auto_need",
+"division_auto_need_all",
+"quantity_warehouseman_fact",
+
+"division_ratio",
+"division_auto",
+"division_auto_all",
+"division_hand",
+"division_summ",
+"division_summ_all",
+"division_price_summ",
+"quantity_zakup_new",
+"division_store_ratio",
+"division_store",
+"division_store_hand",
+"division_store_summ",
+"quantity_warehouseman_fact_related",
+"quantity_warehouseman_fact_defective_related",
+"quantity_warehouseman_fact_summ",
+"quantity_zakup_fact_summ",
+"purchase_fact_difference",
+"storehouse_balance",
+"storehouse_balance_store"
+/**/]; break;
+
+ default: $arrayFiledsUpdate=[
+"purchase_price",
+"quantity",
+"quantity_fact",
+"quantity_zakup_new",
+"sales_cnt",
+"sales_amount",
+"sales_4weeks_cnt",
+"write_offs_4week_cnt_avg",
+"write_offs_4week_sum",
+"write_downs",
+//"write_offs_division",
+"write_offs_4week_cnt_avg",
+"write_offs_comments",
+"quantity_rejection",
+"write_offs_sum",
+"order_supplier_sum",
+"delta_sales4week_supplier",
+"delta_sales4week_supplier_percent",
+"delta_sales4week_supplier_summ",
+"delta_sales7_and_supplier",
+"delta_sales7_and_supplier_percent",
+"entrance_cnt_7days",
+"scheduled_delivery_cnt",
+"goods_in_transit",
+"quantity_storage",
+//"sales_7day_division",
+//"sales_7day_amount_division",
+//"division_auto_need",
+//"division_auto_need_all",
+//"division_summ",
+//"division_hand",
+"color_percent",
+"auto_purchase_formula",
+"quantity_warehouseman_fact",
+"quantity_warehouseman_fact_related",
+"quantity_warehouseman_fact_defective_related",
+"storehouse_balance"
+]; //
+
+
+}
+
+
+/* подключайем файлы с расчетом данных по каждому полю по магазину и по другим условиям выборки и записываем эти данные в общую таблицу файлы вынесены по названию в папку modul/shipment/fields/ - по названию поля
+
+Сичитаем данные опираясь на ID закупки - связанный с этой закупкой город CityID - Поставщиков которые будут в э той закупке - > массив с товарами которые будут участвовать в расчетах $products
+
+фильтруем по магазинам, по товарам
+
+*/
+
+
+ob_start();
+
+echo"<table><tbody>";
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";
+ if(is_file($f)) {
+ $data_up=[];
+
+ echo"<tr><td colspan=2>";
+ include_once($f); // получаем данные в массив $data_up
+ echo"</td></tr>";
+
+ if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+ }
+ echo"<tr><td class=\"text-right\"> <span class=\"btn btn-sm btn-default\">".$fieldsRows[$Field]["name"]." ".$fieldsRows[$Field]["name_eng"]."</span> </td><td><span class=\"btn btn-sm btn-success\">посчитано</span>";
+
+ if(empty($data_up)) echo"пусто";
+ echo"</td></tr> ";
+
+ } else {
+
+ echo"<tr><td colspan=2> !!нет файла $f</td></tr>";
+ }
+}
+echo"</tbody></table>";
+
+$output = ob_get_contents();
+ob_end_clean();
+
+if(in_array($_SESSION["group_id"],[1,10])) echo $output;
+else echo'<script> setTimeout(() => window.parent.location.reload(), 0);</script>';
//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
-$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
);
-/*
-$_CONFIG["zakup_status"]=array(0=>"новый",1=>"в работе",2=>"данные внесены", "3"=>"Закупается - закупщиком",4=>"товар в пути", 5=>"Деление по магазинам",
-6 =>"Приход товара на склад"
-,7 =>"Наборка товара" ,8 =>"Выписка товара"
-,11 =>"Передано в бухгалтерию"
-,12 =>"Бухгалтерия приняла"
-,13 =>"Бухгалтерия сделала корректировки"
-
-);
-*/
//$store_orders_statuses=$db::mapping("SELECT * FROM store_orders_statuses");
-$data3=$db::getRows("SELECT * FROM store_orders_statuses order BY posit DESC");
+$data3=$db::getRows("SELECT * FROM store_orders_statuses WHERE posit>0 order BY posit DESC");
foreach($data3 as $row) {
$store_orders_statuses[$row["id"]]=$row["name"];
$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
mess("Сохранили!!");
-$data3=$db::getRows("SELECT * FROM store_orders_statuses WHERE 1 order by posit DESC");
+$data3=$db::getRows("SELECT * FROM store_orders_statuses WHERE posit>0 order by posit DESC");
foreach($data3 as $row) {
$store_orders_statuses[$row["id"]]=$row["name"];
$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
/////////
-$data=$db::getRows("SELECT id,fields_sort,fields_hide FROM store_orders_statuses");
+$data=$db::getRows("SELECT id,fields_sort,fields_hide FROM store_orders_statuses WHERE posit>0 ");
foreach($data as $row) {
$sort=$row["fields_sort"];
//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
-$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
$data=$db::getRows("SELECT * FROM store_orders_fields");
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include"templates/top.php";
+if(!empty($_REQUEST["id"])) {
+$orderId=(int)$_REQUEST["id"];
+
+echo"<h2>Копирование закупки id=$orderId -> частичная пос тавка -> Это будет часть номер 1 от поставки id=$orderId</h2>
+
+<p>В результате копирования будет скопирована поставка с данными необходимыми для деления.
+
+Нужно взять неудовлетворенную потребность по магазинам и записать ее а потом заполнить - разнести согласно списку сортировки остаток склада.
+
+1) Заказа магазина по позиции в этой поставке - сумма деления (после разнесения того что пришло по факту) = остаток заказа магазина. поле quantity_zakup_new
+2) Поставка ставится в статус в Товар в пути - потом по приезду кладовщик проставляет сколько товара приедет - Получено кладовщиком на складе во второй части поставки.
+3) Новая поставка связывается в поле related_order_id
+4) Пересчитывается остаток склада. Суммарная потребность по магазинам.
+</p>
+
+
+<a href=\"/shipment/divisionClone/?id=$orderId&clone=true\" class=\"btn btn-warning btn-lg\">Копировать закупку </a>";
+
+
+if(!empty($_REQUEST["clone"])) {
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT *, if(update_html!='','','') as update_html FROM store_orders WHERE id=?",[$orderId]);
+
+
+
+$OrderDataNew=$OrderData;
+unset($OrderDataNew["id"]);
+$OrderDataNew["related_order_id"]=$orderId;
+$OrderDataNew["parent_id"]=$orderId;
+$OrderDataNew["name"] .=" (часть от поставки id=$orderId)";
+$OrderDataNew["date_add"]=date("Y-m-d",time()); //дата добавления сейчас
+$OrderDataNew["price_logistic"]=0;
+$OrderDataNew["status"]=5; // ставим товар в пути
+$OrderDataNew["admin_id"]=$_SESSION["admin_id"]; // ставим товар в пути
+$OrderDataNew["status_logi"]="";
+$OrderDataNew["comments"]="остаточная часть от поставки id=$orderId ".$OrderData["name"];
+
+$db::insert("store_orders",$OrderDataNew);
+$orderIdNew = $db -> lastInsertId();
+
+if($orderIdNew) {
+include"modul/shipment/functionsShipment.php";
+
+$FiledsData=getDataFiledsData($orderId);
+
+
+$fieldName="quantity_zakup_new";
+$data_up=[];
+foreach($FiledsData[$fieldName] as $productId => $arrayp) {
+
+ echo"<h2>".$products[$productId]."</h2>";
+ foreach($FiledsData[$fieldName][$productId] as $storeId => $arr2) {
+ echo"<br> <h4>".$storesArray[$storeId]."</h4> ";
+ foreach($FiledsData[$fieldName][$productId][$storeId] as $color => $value) {
+ $value=(int)$value;
+ $quantity_zakup_new=intval($value-$FiledsData["division_store_summ"][$productId][$storeId][$color]);
+
+ if($quantity_zakup_new>0) {
+ echo", color=$color value= $value
+
+ - ".(int)$FiledsData["division_store_summ"][$productId][$storeId][$color]."
+
+ = остаток потребности $quantity_zakup_new
+
+ ";
+ $data_up[$productId][$storeId][$color]=$quantity_zakup_new;
+ }
+
+
+ }
+ }
+
+}
+
+$orderId=$orderIdNew;
+echo"ID новой поставки клона = $orderIdNew";
+ if(!empty($data_up)) insert_store_orders_fields($data_up,$fieldName); // вносим данные в таблицу
+
+
+}
+
+}
+
+}
+
+
+
+
+include"templates/bottom.php";
\ No newline at end of file
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+//include_once("inc/shipment.php");
+include"templates/top.php";
+if(!empty($_REQUEST["id"])) {
+$orderId=(int)$_REQUEST["id"];
+
+include"modul/shipment/functionsShipment.php";
+
+
+
+
+if($OrderData["status"]==6) {
+
+
+
+
+ $arrayFiledsUpdate=[
+"quantity_zakup_new",
+"sales_division_4weeks_cnt_avg",
+"division_store_ratio",
+"division_store",
+"division_store_hand",
+"division_store_summ",
+//"purchase_fact_difference",
+//"storehouse_balance",
+"storehouse_balance_store"
+];
+
+
+$dateup=$db::getRow("SELECT UNIX_TIMESTAMP(date_update) as date_update, date_update as date_update2
+ FROM store_orders_fields_data WHERE
+order_id=? AND field_name IN ('quantity_zakup_new','division_store_ratio','division_store','division_store_hand','division_store_summ','storehouse_balance_store')
+AND value!=0 order by date_update DESC LIMIT 1",[$orderId]);
+
+
+
+if($dateup["date_update"] > $_SESSION["date_update_$orderId"]) {
+
+echo"<br> date_update = {$dateup["date_update"]} {$dateup["date_update2"]} последний раз ".$_SESSION["date_update_$orderId"]."";
+echo" пересчет";
+
+ob_start();
+echo"<table><tbody>";
+foreach($arrayFiledsUpdate as $key => $Field) {
+ $f="modul/shipment/fields/$Field.php";
+ if(is_file($f)) {
+ $data_up=[];
+
+ echo"<tr><td colspan=2>";
+ include_once($f); // получаем данные в массив $data_up
+ echo"</td></tr>";
+
+ if(!empty($data_up)) { insert_store_orders_fields($data_up,$Field); // вносим данные в таблицу
+ }
+ echo"<tr><td class=\"text-right\"> <span class=\"btn btn-sm btn-default\">".$fieldsRows[$Field]["name"]." ".$fieldsRows[$Field]["name_eng"]."</span> </td><td><span class=\"btn btn-sm btn-success\">посчитано</span>";
+
+ if(empty($data_up)) echo"пусто";
+ echo"</td></tr> ";
+
+ } else {
+
+ echo"<tr><td colspan=2> !!нет файла $f</td></tr>";
+ }
+}
+echo"</tbody></table>";
+$_SESSION["date_update_$orderId"]=time();
+$output = ob_get_contents();
+ob_end_clean();
+
+}
+
+$FiledsData=getDataFiledsData($orderId);
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+$kustArray[$row2["parent_id"]][]=$row2["id"];
+$kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+$kustBackground[5]="#ff9595";
+
+ $storeOrderArray2=getRelationshipCityStore();
+ $storeOrderArray=[];
+ foreach($kustArray as $kustId =>$massiv) {
+ foreach($massiv as $storeId) {
+ if(isset($storeOrderArray2[$storeId])) $storeOrderArray[$storeId]=$storeOrderArray2[$storeId];
+ }
+ }
+
+echo'
+<a href="/shipment/" class="btn btn-sm btn-info"><- в закупки</a>
+<h2><span class="btn btn-sm btn-warning">'. $store_orders_statuses[$OrderData["status"]] .' </span> '.$OrderData["name"].' id='.$OrderData["id"].'</h2>
+Новая версия деления основанная на division_store_summ = division_store - заказ магазина на основе предзаказа магазина + ручная добавка к делению
+для магазина <b>division_store_hand</b>.
+
+
+На основании полученного товара <b>"quantity_warehouseman_fact"</b> - который вбивает кладовщик по каждой позиции и цвету
+расчитывается автоделение по магазину <b>"division_store"</b> - и записывается в ячейку.
+Товары которые не приехали quantity_warehouseman_fact =0 не показываются в общем списке чтобы не выводить лишнюю информацию
+
+
+Коэффицент деления считается = сумма заказов всех магазинов в этой закупке "quantity_zakup_new" = "quantity_zakup_new_all".
+
+<b>division_store_ratio</b>=quantity_warehouseman_fact/quantity_zakup_new (Считается по каждому товару и каждому цвету свой коэффицент).
+
+<b>division_store</b> = Заказ магазина (потребность) * division_store_ratio (кэффицент). Коэффицент не может быть более 1. Не более 100% удовлетворяем потребности магазина. Если пришло более чем заказывали.
+
+
+<b>division_store</b> - получаем деление на магазин на основе заказов магазинов.
+
+
+
+
+Корректировать деление по магазину можно через ячейку <b>"division_store_hand"</b>
+ ручная добавка для нового деления для магазина. Сумма двух ячеек <b>division_store + division_store_hand = division_store_summ</b> (Конечный результат деления на магазин)
+Делается по цветам.
+';
+
+printRelatedOrders();
+
+
+echo"<div id=\"edit_div\"></div><div class=\"table-responsive\">
+<table class=\"table-hover zak\"><thead><tr class=\"zag\">
+
+<th class=\"td_product\">
+<br>
+ <span onclick='ajaxDivisionUpdate();' class='btn btn-blue btn-sm me-2'>обновить</span>
+
+наименование</th><th><b>мин-ый лот деления шт.</b></th>
+<th><b>Суммарный заказ магазинов шт.</b></th>
+<th><b>Получено на складе шт.</b></th>
+<th><b>Коэффицент деления</b></th>
+
+";
+ foreach($storeOrderArray as $storeId=>$namestore){
+ echo"<th style=\"background:".$kustBackground[$kustArrayReverse[$storeId]]."\"><b>$namestore</b></td> ";
+
+ }
+echo"<th>Товар</th>
+<th><b>итого</b></th><th><b>получено на складе</b></th><th><b>разница</b></th>
+</tr></thead><tbody>";
+
+
+
+ foreach($products as $productId=>$nameProduct){
+
+
+ if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]>0) {
+
+ echo'<tr id="tr__'.$productId.'" class="trproduct">
+ <td class="td_product producted">
+ <span class="fs-6">'.$nameProduct.'</span>
+
+ <a class="btn btn-sm btn-info" href="/shipment/productStoresSort/?product_id='.$productId.'" target=new>s</a>
+ </td>
+ <td class="tdinf0">'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>
+ <td class="tdinf0">'.intval($FiledsData["quantity_zakup_new"][$productId]["NULL"]["NULL"]).'</td>
+ <td class="tdinf0 tdinf_fact">'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]).'</td>
+ <td class="tdinf0">'.round($FiledsData["division_store_ratio"][$productId]["NULL"]["NULL"],2).'</td>
+
+ ';
+$divisionCnt=0;
+ foreach($storeOrderArray as $storeId=>$namestore){
+ echo'<td>';
+ $v=(int) $FiledsData["division_store_summ"][$productId][$storeId]["NULL"];
+ $division_store =(int)$FiledsData["division_store"][$productId][$storeId]["NULL"];
+ $division_store_hand =(int)$FiledsData["division_store_hand"][$productId][$storeId]["NULL"];
+ $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId]["NULL"];
+ $division_store_ratio=round($FiledsData["division_store_ratio"][$productId]["NULL"]["NULL"],2);
+
+ $divisionCnt += $v;
+ echo'<span class="info" onclick="ajaxShowInfo(\''.$storeId.'\',\''.$productId.'\')"
+ title="Потребность '.$quantity_zakup_new.' * коэф '.$division_store_ratio.'
+ -> округляем по минимальному лоту '.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).' = '.$division_store.'">';
+
+
+ if(!empty($quantity_zakup_new)) echo'<span class=qz title="Заказ магазина">'.$quantity_zakup_new.'</span>';
+
+ echo '<font title="авто-деление на магазин + ручная добавка">';
+
+ if(!empty($division_store)) echo $division_store;
+ if(!empty($division_store_hand)) echo '+'.$division_store_hand;
+
+ echo'</font><br></span>
+ <span onclick="ShowInput(\'division_store_hand\',\''.$storeId.'\',\''.$productId.'\',\'\',\'\',\''.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'\',\''.$v.'\',\''.$division_store_hand.'\' )"
+ id="division_store_hand'.$storeId.''.$productId.'" title="Деление сумма для магазина">';
+
+ echo $v;
+ echo'</span>';
+
+
+ echo'</td>';
+
+ }
+
+ echo' <td class="td_product producted">
+ '.$nameProduct.'
+<span class="btn btn-sm btn-info" onclick="ajaxDivisionAutoHandStart(\''.$productId.'\')">@</span></td><td>'.intval($divisionCnt).'</td>';
+ echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]).'</td>';
+ $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$divisionCnt;
+ echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"]["NULL"].'</td>';
+
+ echo" </tr>";
+ $colorsCnt=0;
+
+
+ $colorAllSumm=0; $colorAllFact=0;
+ foreach($productsColorsArray[$productId] as $color) {
+ $divisionCnt=0;
+
+
+ if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]>0) {
+ $colorsCnt++;
+ $colorAllSumm +=(int)$FiledsData["quantity_zakup_new"][$productId]["NULL"][$color];
+ $colorAllFact +=(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+ echo'<tr id="tr__'.$productId.'_color_'.md5($color).'" class="tr_product">
+ <td class="td_color">
+ '.$color.'</td>
+ <td class="tdinf">'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>
+ <td class="tdinf">'.intval($FiledsData["quantity_zakup_new"][$productId]["NULL"][$color]).'</td>
+ <td class="tdinf tdinf_fact">'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]).'</td>
+ <td class="tdinf">'.round($FiledsData["division_store_ratio"][$productId]["NULL"][$color],2).'</td> ';
+ foreach($storeOrderArray as $storeId=>$namestore){
+
+ // $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
+
+ // if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
+ $v=(int)$FiledsData["division_store_summ"][$productId][$storeId][$color];
+ $division_store=(int)$FiledsData["division_store"][$productId][$storeId][$color];
+ $division_store_hand=(int)$FiledsData["division_store_hand"][$productId][$storeId][$color];
+ $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId][$color];
+ $ostatok[$productId][$storeId] +=$v;
+ $divisionCnt +=$v;
+ echo'<td>
+ <span class="info'; if($_SESSION["group_id"]==-1) echo' d-block'; echo'">';
+ if(!empty($quantity_zakup_new)) echo'<span class=qz title="Заказ магазина">'.$quantity_zakup_new.'</span>';
+ ;
+ if(!empty($division_store)) echo $division_store;
+ if(!empty($division_store_hand)) echo '+'.$division_store_hand;
+
+ echo'</span>
+ <span onclick="ShowInput(\'division_store_hand\',\''.$storeId.'\',\''.$productId.'\',\''.$color.'\',\''.md5($color).'\',\''.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'\',\''.$v.'\',\''.$division_store_hand.'\' )"
+ id="division_store_hand'.$storeId.''.$productId.''.md5($color).'">'.$v.'</span>';
+
+
+ echo'</td>';
+
+ }
+
+ echo' <td class="td_product producted">
+ <span class="fs-6">'.$color.'</span> </td><td>'.intval($divisionCnt).'</td>';
+ echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]).'</td>';
+ $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]-$divisionCnt;
+ echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>
+
+ '.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"][$color].' </td>';
+ // ('.(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color].' - '.(int)$FiledsData["division_store_summ"][$productId]["NULL"][$color].' ( '.(int)$FiledsData["division_store"][$productId]["NULL"][$color].' + '.(int)$FiledsData["division_store_hand"][$productId]["NULL"][$color].')
+
+
+ echo"</tr>";
+ }
+ } // end colors
+
+ // сумма по цветам товара
+ if(!empty($colorsCnt)) {
+ echo'<tr>
+ <td class="td_product producted">
+ остаток по цветам</td>
+ <td>'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>';
+
+ $ostcolor=$FiledsData["quantity_zakup_new"][$productId]["NULL"]["NULL"]-$colorAllSumm;
+ $ostf=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$colorAllFact;
+ echo'<td class="';
+ if($ostcolor==0) echo'bg-success';
+ elseif($ostcolor>0) echo'bg-indigo';
+ elseif($ostcolor<0) echo'bg-danger';
+ echo'">'.$ostcolor.'</td>
+ <td class="';
+ if($ostf==0) echo'bg-success';
+ elseif($ostf>0) echo'bg-indigo';
+ elseif($ostf<0) echo'bg-danger';
+ echo'">';
+
+ echo $colorAllFact;
+
+ echo'</td><td></td>';
+ foreach($storeOrderArray as $storeId=>$namestore){
+
+ $ost=$FiledsData["division_store_summ"][$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
+
+ echo'<td class="';
+ if($ost==0) echo'bg-success';
+ elseif($ost>0) echo'bg-indigo';
+ elseif($ost<0) echo'bg-danger';
+ echo'">'.(int)$ost.'</td>';
+
+
+
+ }
+
+ echo' <td class="td_product producted">
+ '.$nameProduct.' </td><td><td></td><td></td>';
+
+ echo"</tr>";
+ } // end summ colors
+
+ } // end if wherehouse_fact
+ }
+
+echo"</tbody></table></div>";
+
+
+$_CONFIG["jscss"] .='
+<script>';
+
+
+$_CONFIG["jscss"] .="
+function ajaxShowInfo(store_id,product_id)
+{
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Информация по магазину');
+ $.ajax({
+ url: '/shipment/ajaxDivisionInfo/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, store_id: store_id, product_id: product_id },
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+
+ }});
+
+
+}";
+
+$_CONFIG["jscss"] .='
+function ajaxEditColor(name_eng,store_id,product_id,color,colormd5)
+{
+
+var v =$(\'#input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\').val();
+var name_id=\'input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+
+$.ajax({
+ url: \'/shipment/ajaxFieldEdit/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.',
+ name_eng: name_eng,
+ store_id: store_id,
+ product_id: product_id,
+ color: color,
+ value: v},
+ success: function(data){
+ $(\'#\'+name_id+\'\').after(\'<span class="okk">\'+data+\'</span>\');
+ $(\'#\'+name_id+\'\').addClass(\'greener\');
+ }
+
+});
+
+setTimeout(function(){$(\'.okk\').remove();$(\'#\'+name_id+\'\').removeClass(\'greener\');}, 3000);
+
+}
+
+
+function ShowInput(name_eng,store_id,product_id,color,colormd5,step,value,value_hand) {
+var name_id=\'\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+if($(\'#\'+name_id+\'\').html()==\'\' || $(\'#\'+name_id+\'\').html()==value || $(\'#\'+name_id+\'\').html()==0) {
+
+$(\'#\'+name_id+\'\').html(\'<input type=number class="editColor" onchange=ajaxEditColor("\'+name_eng+\'","\'+store_id+\'","\'+product_id+\'","\'+color+\'","\'+colormd5+\'") id=input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\' name=colorHand[\'+store_id+\'][\'+product_id+\'][\'+color+\'] value="\'+value_hand+\'" step="\'+step+\'">\');
+}
+
+}
+';
+
+$_CONFIG["jscss"] .="
+function ajaxDivisionUpdate(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxDivisionUpdate/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+
+ }});
+}
+
+
+function ajaxDivisionAutoHandStart(product_id){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные для авто-добавки деления');
+ $.ajax({
+ url: '/shipment/ajaxDivisionAutoHandStart/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, product_id: product_id},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+
+ }});
+}
+
+";
+
+//.zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
+$_CONFIG["jscss"] .='
+
+
+</script>
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
+.zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
+.app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right; font-size:1rem;}
+.zak td.td_product:hover {}
+.zak tr td.pr,.zak tr td.ost{text-align:center;}
+.zak tr td.pr{background:#ddd}
+.zak tr td.ost{background:#e6e6e6}
+.zak td{text-align:center; vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+.zak tr td .info{font-size:0.5rem;color:#cdcdcd;display:none;}
+.zak tr:hover td .info{font-size:0.7rem;color:blue;display:block;}
+.zak td span.qz{text-align:center;font-size:0.7rem; color:white; background:blue; display:block; margin: 0 auto; float:center;}
+table.info td{text-align:left; font-size:1rem;}
+.zak tr td.tdinf0 {background:#f7ef67;color:#736e17}
+
+.zak tr td.tdinf {background:#fffbbf;color:#7b7625}
+.zak tr td.tdinf_fact {background:#dab31e;}
+
+input.greener{border:2px green solid;}
+input.editColor{width:auto;max-width:70px;}
+
+
+
+</style>';
+
+
+ $_CONFIG["jscss"] .='<!-- MODAL -->
+ <div class="modal fade" id="modal-7">
+ <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body p-0">
+
+ </div>
+
+ </div>
+</div>
+</div>';
+
+ } else mess("Статус не деление");
+ } else mess("Укажите ID закупки");
+
+
+
+
+include"templates/bottom.php";
+
+
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+//include_once("inc/shipment.php");
+include"templates/top.php";
+if(!empty($_REQUEST["id"])) {
+$orderId=(int)$_REQUEST["id"];
+
+include"modul/shipment/functionsShipment.php";
+
+
+
+
+if($OrderData["status"]>=6) {
+
+
+
+
+$FiledsData=getDataFiledsData($orderId);
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+$kustArray[$row2["parent_id"]][]=$row2["id"];
+$kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+$kustBackground[5]="#ff9595";
+
+ $storeOrderArray2=getRelationshipCityStore();
+ $storeOrderArray=[];
+ foreach($kustArray as $kustId =>$massiv) {
+ foreach($massiv as $storeId) {
+ if(isset($storeOrderArray2[$storeId])) $storeOrderArray[$storeId]=$storeOrderArray2[$storeId];
+ }
+ }
+
+echo'
+<h2><span class="btn btn-sm btn-warning">'. $store_orders_statuses[$OrderData["status"]] .' </span> '.$OrderData["name"].' id='.$OrderData["id"].'</h2>
+
+';
+
+
+
+
+echo"<div id=\"edit_div\"></div><div class=\"table-responsive\">
+<table class=\"table-hover zak\"><thead><tr class=\"zag\">
+
+<th class=\"td_product\">
+
+
+наименование</th><th><b>мин-ый лот деления шт.</b></th>
+";
+ foreach($storeOrderArray as $storeId=>$namestore){
+ echo"<th style=\"background:".$kustBackground[$kustArrayReverse[$storeId]]."\"><b>$namestore</b></td> ";
+
+ }
+echo"
+<th><b>итого</b></th>
+</tr></thead><tbody>";
+
+
+
+ foreach($products as $productId=>$nameProduct){
+
+
+ if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]>0) {
+
+ echo'<tr id="tr__'.$productId.'" class="trproduct">
+ <td class="td_product producted">
+ <span class="fs-6">'.$nameProduct.'</span><td>'.(int)$FiledsData["min_lot"][$productId]["NULL"]["NULL"].'</td>
+ </td>
+
+
+ ';
+$divisionCnt=0;
+ foreach($storeOrderArray as $storeId=>$namestore){
+ echo'<td>';
+ $v=(int) $FiledsData["division_store_summ"][$productId][$storeId]["NULL"];
+ $division_store =(int)$FiledsData["division_store"][$productId][$storeId]["NULL"];
+ $division_store_hand =(int)$FiledsData["division_store_hand"][$productId][$storeId]["NULL"];
+ $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId]["NULL"];
+ $division_store_ratio=round($FiledsData["division_store_ratio"][$productId]["NULL"]["NULL"],2);
+
+ $divisionCnt += $v;
+
+
+ echo $v;
+
+
+
+ echo'</td>';
+
+ }
+
+ echo' <td>'.intval($divisionCnt).'</td>';
+ /* echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]).'</td>';
+ $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$divisionCnt;
+ echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"]["NULL"].'</td>';
+*/
+ echo" </tr>";
+ $colorsCnt=0;
+
+
+ $colorAllSumm=0; $colorAllFact=0;
+ foreach($productsColorsArray[$productId] as $color) {
+ $divisionCnt=0;
+
+
+ if($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]>0) {
+ $colorsCnt++;
+ $colorAllSumm +=(int)$FiledsData["quantity_zakup_new"][$productId]["NULL"][$color];
+ $colorAllFact +=(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+ echo'<tr id="tr__'.$productId.'_color_'.md5($color).'" class="tr_product">
+ <td class="td_color">
+ '.$color.'</td>
+ <td class="tdinf">'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>
+ ';
+ foreach($storeOrderArray as $storeId=>$namestore){
+
+ // $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
+
+ // if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
+ $v=(int)$FiledsData["division_store_summ"][$productId][$storeId][$color];
+ $division_store=(int)$FiledsData["division_store"][$productId][$storeId][$color];
+ $division_store_hand=(int)$FiledsData["division_store_hand"][$productId][$storeId][$color];
+ $quantity_zakup_new=(int)$FiledsData["quantity_zakup_new"][$productId][$storeId][$color];
+ $ostatok[$productId][$storeId] +=$v;
+ $divisionCnt +=$v;
+ echo'<td>
+ '.$v.'</td>';
+
+ }
+
+ echo'<td>'.intval($divisionCnt).'</td>';
+ /*
+ echo'<td>'.intval($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]).'</td>';
+ $r2=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color]-$divisionCnt;
+ echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>
+
+ '.(int)$FiledsData["storehouse_balance_store"][$productId]["NULL"][$color].' </td>';
+ // ('.(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color].' - '.(int)$FiledsData["division_store_summ"][$productId]["NULL"][$color].' ( '.(int)$FiledsData["division_store"][$productId]["NULL"][$color].' + '.(int)$FiledsData["division_store_hand"][$productId]["NULL"][$color].')
+
+ */
+ echo"</tr>";
+ }
+ } // end colors
+
+ // сумма по цветам товара
+ /*
+ if(!empty($colorsCnt)) {
+ echo'<tr>
+ <td class="td_product producted">
+ остаток по цветам</td>
+ <td>'.intval($FiledsData["min_lot"][$productId]["NULL"]["NULL"]).'</td>';
+
+ $ostcolor=$FiledsData["quantity_zakup_new"][$productId]["NULL"]["NULL"]-$colorAllSumm;
+ $ostf=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"]-$colorAllFact;
+ echo'<td class="';
+ if($ostcolor==0) echo'bg-success';
+ elseif($ostcolor>0) echo'bg-indigo';
+ elseif($ostcolor<0) echo'bg-danger';
+ echo'">'.$ostcolor.'</td>
+ <td class="';
+ if($ostf==0) echo'bg-success';
+ elseif($ostf>0) echo'bg-indigo';
+ elseif($ostf<0) echo'bg-danger';
+ echo'">';
+
+ echo $colorAllFact;
+
+ echo'</td><td></td>';
+ foreach($storeOrderArray as $storeId=>$namestore){
+
+ $ost=$FiledsData["division_store_summ"][$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
+
+ echo'<td class="';
+ if($ost==0) echo'bg-success';
+ elseif($ost>0) echo'bg-indigo';
+ elseif($ost<0) echo'bg-danger';
+ echo'">'.(int)$ost.'</td>';
+
+
+
+ }
+
+ echo' <td class="td_product producted">
+ '.$nameProduct.' </td><td><td></td><td></td>';
+
+ echo"</tr>";
+ } // end summ colors
+ */
+ } // end if wherehouse_fact
+ }
+
+echo"</tbody></table></div>";
+
+
+
+
+
+//.zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
+$_CONFIG["jscss"] .='
+
+
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
+.zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
+.app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right; font-size:1rem;}
+.zak td.td_product:hover {}
+.zak tr td.pr,.zak tr td.ost{text-align:center;}
+.zak tr td.pr{background:#ddd}
+.zak tr td.ost{background:#e6e6e6}
+.zak td{text-align:center; vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+.zak tr td .info{font-size:0.5rem;color:#cdcdcd;display:none;}
+.zak tr:hover td .info{font-size:0.7rem;color:blue;display:block;}
+.zak td span.qz{text-align:center;font-size:0.7rem; color:white; background:blue; display:block; margin: 0 auto; float:center;}
+
+
+input.greener{border:2px green solid;}
+input.editColor{width:auto;max-width:70px;}
+
+
+
+</style>';
+
+
+
+ } else mess("Статус не деление");
+ } else mess("Укажите ID закупки");
+
+
+
+
+include"templates/bottom.php";
+
+
$comments=htmlentities($_REQUEST["comments"]);
$name=htmlentities($_REQUEST["name"]);
$db::sql("UPDATE store_orders SET name=?, comments=?, providers_arr=?, price_logistic=?, division_hours=?,
- division_date=?, delivery_date=?, delivery_date_fact=?, date_start=? WHERE id=? LIMIT 1",
+ division_date=?, delivery_date=?, delivery_date_fact=?, date_start=?, city_id=? WHERE id=? LIMIT 1",
[$name, $comments, $providers_arr, htmlentities($_REQUEST["price_logistic"]),
intval($_REQUEST["division_hours"]), htmlentities($_REQUEST["division_date"]), htmlentities($_REQUEST["delivery_date"]),
- htmlentities($_REQUEST["delivery_date_fact"]), htmlentities($_REQUEST["date_start"]), $id]);
+ htmlentities($_REQUEST["delivery_date_fact"]), htmlentities($_REQUEST["date_start"]), (int)$_REQUEST["city_id"], $id]);
}
<tr><td class="text-right">Время Час до которого надо сделать деление число</td>
<td><input type=number name=division_hours class="form-control" style="width:70px;" value="'.$row["division_hours"].'" >
</td></tr>
-<tr><td class="text-right">Затраты на логистику в рублях</td><td><input type=number style="width:120px;" name=price_logistic class="form-control" value="'.$row["price_logistic"].'" >
-</td></tr>
+<tr><td class="text-right">Затраты на логистику в рублях</td><td><input type=number style="width:120px;" name=price_logistic class="form-control" value="'.$row["price_logistic"].'" ></td></tr>
+
+
+<tr><td class="text-right">Город</td><td>
+<select class="" name=city_id>';
+$cities=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='cities' ");
+$cities[0]="-выбрать город-";
+foreach($cities as $st =>$name) {
+echo'<option value="'.$st.'"';
+if($st==$row["city_id"]) echo' selected'; echo'>'.$name.'</option>';
+}
+echo'</select></td></tr>
<tr><td class="text-right">Поставщики</td><td>
<select class="multi-select" name=providers_arr[] multiple=multiple >';
if(in_array($st,$in)) echo' selected';
echo'>'.$name.'</option>';
}
-echo'</select>
-</td></tr>
-
-<tr><td class="text-right">
-Комментарий:</td><td>
-<textarea rows=1 placeholder="комментарий" name=comments class="form-control">'.$comments.'</textarea>
-</td></tr>
-<tr><td></td><td>
-<button class="btn btn-success btn-lg" name="edit_status" value=1>сохранить</button></td></tr></table></form>';
-
+echo'</select></td></tr>
+<tr><td class="text-right">Комментарий:</td><td>
+<textarea rows=1 placeholder="комментарий" name=comments class="form-control">'.$comments.'</textarea></td></tr>
+<tr><td></td><td><button class="btn btn-success btn-lg" name="edit_status" value=1>сохранить</button></td></tr></table></form>';
echo'<h2>Инвойсы <a href="/shipment/files/?order_id='.$id.'" class="btn btn-success btn-sm">+ добавить файл</a></h2>';
printStoreOrderFiles($id);
--- /dev/null
+<?
+// округляет до определенного числа
+function ceilCoef($number, $rate = 1)
+{
+ // если число дробное, то округляем его до целого
+ $number = round($number);
+ // разделим число на коэффициент, а результат округлим в большую сторону. Потом умножим число на округленный коэффициент
+ $rest = round($number / $rate) * $rate;
+ return $rest;
+}
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE
+order_id=? AND color=''
+AND field_name IN ('entrance_cnt_7days','sales_cnt','quantity','quantity_fact','min_order','min_lot')
+",[$orderId]);
+foreach($dataF as $row) {
+$FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+
+//print_r($FiledsData);
+$storesArray[0]="Всего";
+foreach($products as $product_id => $name) {
+
+ $min_order = $FiledsDataArray["min_order"][$product_id][""];
+ $min_lot=$FiledsDataArray["min_lot"][$product_id][""];
+
+
+ echo"<div>
+ <h6 class=\"fs-3\">$name</h6>
+ <b> минимальный заказ $min_order шт., квант (мин. лот деления) = $min_lot</b> ";
+
+ if(empty($min_lot)) $min_lot=1;
+ echo"<div class=\"table-responsive\"><table class=\"table table2 table-sm table-bordered table-hover table-striped\">
+ <thead class=\"table-light\"><tr><td>магазин</td><td>полнограмма</td><td>факт</td><td>продажи 7 дней</td>
+ <td>запас 2 дня</td><td>товар едет</td>
+ <td>автозаказ по формуле</td></tr></thead><tbody>";
+ foreach($orderStoresArrayRelation as $storeId) {
+
+
+ $sale_7day = $FiledsDataArray["sales_cnt"][$product_id][$storeId];
+ $quantity = $FiledsDataArray["quantity"][$product_id][$storeId];
+ $quantity_fact =$FiledsDataArray["quantity_fact"][$product_id][$storeId];
+ $entrance_cnt_7days =$FiledsDataArray["entrance_cnt_7days"][$product_id][$storeId];
+ // считаем запас на 2 дня
+$sale_2day=ceil(2*($sale_7day/7));
+
+$fact=$quantity_fact + $entrance_cnt_7days;
+$fact_sale=$sale_7day;// если факт продаж будет больше чем факт - перприсваеиваем
+
+if(($fact-$fact_sale)>0) {
+$saleweek1=$fact-$fact_sale ;
+$zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
+}
+else {
+ $zakaz= $sale_7day + $sale_2day + $quantity ;
+}
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+$ceil=ceilCoef($zakaz,$min_lot);
+echo"<tr><td>".$storesOrderArray[$storeId]."</td><td>$quantity</td><td>$quantity_fact</td><td>$sale_7day</td>
+<td>$sale_2day</td>
+<td>$entrance_cnt_7days</td><td>";
+if(!empty($ceil)) echo"<span class=\"btn btn-sm btn-success\">$ceil</span>";
+
+ $data_up[$product_id][$storeId][0]=$ceil;
+
+
+echo'</td></tr>';
+ }
+echo'</tbody></table></div></div>';
+}
--- /dev/null
+<?
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE
+ field_name='auto_purchase_formula' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId' AND color='' AND store_id!='' group by product_id");
+ foreach($data as $row) {
+ $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+ }
--- /dev/null
+<?
+
+$massivSQLColor=[];
+$inProduct=[];
+$store_planogram=[];
+$store_planogram_colors=[];
+$data=$db::getRows("SELECT product_id, store_id,quantity, color FROM store_planogram
+WHERE quantity>0
+AND product_id $whereInProductsId
+AND store_id $orderStoresArrayRelation_in");
+foreach($data as $row) {
+ if(empty($row["color"])) $store_planogram[$row["product_id"]][$row["store_id"]]=$row["quantity"];
+ else $store_planogram_colors[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["quantity"];
+
+}
+
+
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!=''
+AND id $whereInProductsId group by id order by id");
+
+ foreach($data4 as $row2) {
+ $colors=explode(";",$row2["colors"]);
+ $productId=$row2["id"];
+
+ if(!in_array($productId,$inProduct)) {
+
+ $html .="<h3>".$products[$productId]."</h3>";
+ $inProduct[]=$productId;
+
+ }
+
+ $html .="<table class=\"table table-sm table-bordered zak\"><thead><tr class=zag><th>цвет</th><th>магазин</th>
+ <th>пол-ма</th><th>кол-во по цвету</th><th>% от полнограммы</th></tr></thead><tbody>";
+
+
+ foreach($colors as $color) {
+ $color=trim($color);
+ // пробегаемся по каждому магазинам
+ foreach($orderStoresArrayRelation as $storeId) {
+
+
+ if(!empty($store_planogram[$productId][$storeId]) and !empty($store_planogram_colors[$productId][$storeId][$color])) {
+ //получаем процент цвета в полнограмме
+ if(!empty($store_planogram_colors[$productId][$storeId]) and $store_planogram_colors[$productId][$storeId][$color]<=$store_planogram[$productId][$storeId])
+ $percentColor=$store_planogram_colors[$productId][$storeId][$color]/$store_planogram[$productId][$storeId];
+ else $percentColor=0;
+ // округляем до сотых
+ $percentColor=round($percentColor,2);
+ $data_up["color_percent"][$productId][$storeId][$color]=$percentColor;
+ $html .="<tr><td>$color</td><td>".$storesArrayAll[$storeId]."</td><td>".$store_planogram[$productId][$storeId]."</td><td>".$store_planogram_colors[$productId][$storeId][$color]."</td>
+ <td>$percentColor</td></tr>";
+
+ }
+ }
+ }
+ $html .="</tbody></table>";
+}
+
+echo "$html";
--- /dev/null
+ <?
+ $data=$db::getRows("SELECT sum(value) as value,color FROM store_orders_fields_data WHERE
+ field_name='purchase_logistic' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId' AND store_id='' group by color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $data_up[0][0][$row["color"]] +=(int)$row["value"];
+ $data_up[0][0][0] +=(int)$row["value"];
+ }
\ No newline at end of file
--- /dev/null
+<?
+// считаем сумму в долларах куплено по факту
+ $FiledsDataArray=[];
+$dataF=$db::getRows("SELECT product_id, value, if(color='',0,color) as color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id=''
+AND field_name IN ('quantity_zakup_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray["quantity_zakup_fact"][$row["product_id"]][0][$row["color"]] += (int)$row["value"];
+}
+
+$dataF=$db::getRows("SELECT product_id, value, if(color='',0,color) as color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id=''
+AND field_name IN ('cost_price')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray["cost_price"][$row["product_id"]][0][$row["color"]] = round($row["value"],2);
+}
+
+
+
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+
+ $s = $FiledsDataArray["cost_price"][$productId][0][0] * $FiledsDataArray["quantity_zakup_fact"][$productId][0][0];
+ $data_up[$productId][0][0] =$s ;
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $s = $FiledsDataArray["quantity_zakup_fact"][$productId][0][$color] * $FiledsDataArray["cost_price"][$productId][0][$color];
+ $data_up[$productId][0][$color] +=$s ;
+ }
+
+
+
+}
+
+
+
--- /dev/null
+<?
+
+$data_sales4week_summ=[];
+ $data=$db::getRows("SELECT product_id, store_id,
+ sum(if(field_name='quantity_zakup_new',value,0)) as quantity_zakup_new,
+ sum(if(field_name='sales_4weeks_cnt',value,0)) as sales_4weeks_cnt
+ FROM store_orders_fields_data WHERE field_name in('quantity_zakup_new','sales_4weeks_cnt') AND value>0
+ AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,store_id");
+ foreach($data as $row) {
+ if($row["sales_4weeks_cnt"]>0) {
+
+ $delta=$row["quantity_zakup_new"]-$row["sales_4weeks_cnt"];
+ $data_up[$row["product_id"]][$row["store_id"]][0] +=$delta;
+ $data_up[$row["product_id"]][0][0] +=$delta;
+
+
+ $delta_percent=round(($row["quantity_zakup_new"]/$row["sales_4weeks_cnt"])*100);
+ $data_up[$row["product_id"]][$row["store_id"]][0] +=$delta_percent;
+
+
+
+
+ if($row["sales_4weeks_cnt"]){
+ $data_sales4week_summ_val=ceil($row["sales_4weeks_cnt"]*$prices[$row["product_id"]]);
+ $data_sales4week_summ[$row["product_id"]][$row["store_id"]][0] +=$data_sales4week_summ_val;
+ $data_sales4week_summ[$row["product_id"]][NULL][0] +=$data_sales4week_summ_val;
+
+ // echo"<br> ".$row["product_id"]." = ".$row["sales_4weeks_cnt"]." * ".$prices[$row["product_id"]]." = $data_sales4week_summ_val";
+ }
+ }
+
+ }
+insert_store_orders_fields($data_up,"delta_sales4week_supplier_percent");
+insert_store_orders_fields($data_sales4week_summ,"sales_4weeks_sum");
--- /dev/null
+<?
+
+ $data=$db::getRows("SELECT product_id, store_id,
+ sum(if(field_name='quantity_zakup_new',value,0)) as quantity_zakup_new,
+ sum(if(field_name='sales_cnt',value,0)) as sales_cnt
+ FROM store_orders_fields_data WHERE field_name in('quantity_zakup_new','sales_cnt') AND value>0
+ AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,store_id");
+ foreach($data as $row) {
+ $delta_percent=round(($row["quantity_zakup_new"]/$row["sales_cnt"])*100);
+ $data_up[$row["product_id"]][$row["store_id"]]["0"] =$delta_percent;
+ $data_up[$row["product_id"]][0][0] +=$delta_percent; // echo"<br> ".$row["product_id"]." = $z";
+ $delta=round($row["quantity_zakup_new"]-$row["sales_cnt"]);
+ $data_up[$row["product_id"]][$row["store_id"]]["0"] =$delta;
+ $data_up[$row["product_id"]][0][0] +=$delta; // echo"<br> ".$row["product_id"]." = $z";
+
+
+
+ }
+
+insert_store_orders_fields($data_up,"delta_sales7_and_supplier_percent");
--- /dev/null
+<?
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND color=''
+AND store_id='',
+AND field_name IN ('quantity_zakup_fact','quantity_zakup')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ $data_up[$productId][0][0]= round($FiledsDataArray["quantity_zakup_fact"][$productId] / $FiledsDataArray["quantity_zakup"][$productId],2);
+
+}
+
--- /dev/null
+<?
+// округляет до определенного числа
+function ceilCoef($number, $rate = 1)
+{
+ // если число дробное, то округляем его до целого
+ $number = round($number);
+ // разделим число на коэффициент, а результат округлим в большую сторону. Потом умножим число на округленный коэффициент
+ $rest = round($number / $rate) * $rate;
+ return $rest;
+}
+
+
+//echo"<br>division_auto $whereInProductsId";
+
+$min_lot=[];
+$data=$db::getRows("SELECT id,min_lot FROM products_1c_options WHERE id $whereInProductsId");
+foreach($data as $row) $min_lot[$row["id"]]=$row["min_lot"];
+
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND field_name IN ('division_auto_need')
+ AND value!=0
+ AND color=''
+ AND store_id!=''
+",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND field_name IN ( 'division_ratio')
+AND store_id='' AND color=''
+AND value!='0'",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+
+}
+
+
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ // echo"<br> <h2>$name</h2>";
+ foreach($orderStoresArrayRelation as $storeId ) {
+
+ $division_ratio=$FiledsDataArray["division_ratio"][$productId];
+ if(empty($division_ratio)) $division_ratio=1;
+ $d=$FiledsDataArray["division_auto_need"][$productId][$storeId] * $division_ratio;
+ $data_up[$productId][$storeId][0]=ceilCoef($d,$min_lot[$productId]);
+
+
+ // echo"<br>$name division_auto_need=".$FiledsDataArray["division_auto_need"][$productId][$storeId]." * division_ratio=".$division_ratio." d=$d min_lot=".$min_lot[$productId]." ";
+ }
+ // $data_up[$productId][0][0] +=$FiledsData["division_auto"][$productId][0][0];
+
+
+}
+
+
+
--- /dev/null
+<?
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE
+ field_name='division_auto' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId' AND store_id!='' group by product_id");
+ foreach($data as $row) {
+
+ if(empty($row["color"])) {
+ $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+ }
+ else {
+ $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];
+
+ }
+
+
+ }
--- /dev/null
+<?
+
+echo"<h1>division_auto_need</h1>";
+
+// округляет до определенного числа
+function roundCoefficientLot($number, $rate = 1)
+{
+ $rest = $rate * floor($number / $rate);
+
+ return $rest;
+}
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE
+order_id=? AND color=''
+AND field_name IN ('entrance_cnt_7days','sales_cnt','quantity','quantity_fact','min_lot','min_order')
+",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+
+//print_r($FiledsData);
+$storesArray[0]="Всего";
+foreach($products as $product_id => $name) {
+ $min_order = $FiledsDataArray["min_order"][$product_id][""];
+ $min_lot=$FiledsDataArray["min_lot"][$product_id][""];
+ echo"<div>
+ <h6 class=\"fs-3\">$name</h6> формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+ <b> минимальный заказ $min_order шт., квант (мин. лот деления) = $min_lot</b> ";
+
+ if(empty($min_lot)) $min_lot=1;
+ echo"<div class=\"table-responsive\"><table class=\"table table2 table-sm table-bordered table-hover table-striped\">
+ <thead class=\"table-light\"><tr><td>магазин</td><td>продажи 7 дней</td> <td>запас 2 дня</td>
+ <td>полнограмма</td> <td>потребность</td></tr></thead><tbody>";
+ foreach($orderStoresArrayRelation as $storeId) {
+ $sale_7day = $FiledsDataArray["sales_cnt"][$product_id][$storeId];
+ $quantity = $FiledsDataArray["quantity"][$product_id][$storeId];
+ $quantity_fact =$FiledsDataArray["quantity_fact"][$product_id][$storeId];
+ // считаем запас на 2 дня
+ $sale_2day=ceil(2*($sale_7day/7));
+ // если факт продаж будет больше чем факт - перприсваеиваем
+ if(($quantity_fact-$sale_7day)>0) {
+ $saleweek1=$quantity_fact-$sale_7day ;
+ $zakaz= $sale_7day + $sale_2day + $quantity - $saleweek1;
+ }
+ else $zakaz= $sale_7day + $sale_2day + $quantity ;
+
+ $zakaz=roundCoefficientLot($zakaz, $min_lot);
+ if($zakaz<0) $zakaz=0;
+ if(empty($sale_2day)) $sale_2day="";
+ if(empty($sale_7day)) $sale_7day="";
+ if(empty($zakaz)) $zakaz=$quantity;
+
+
+ $data_up[$product_id][$storeId][0] =$zakaz;
+ $data_up[$product_id][0][0] +=$zakaz;
+
+// формула = продажи_7_дней + запас_на_2дня + полнограмма - продажи_7дней
+ echo"<tr><td>".$storesOrderArray[$storeId]."</td><td>$sale_7day</td>
+ <td>$sale_2day</td><td>$quantity</td><td>";
+ if(!empty($zakaz)) echo"<span class=\"btn btn-sm btn-wating\">$zakaz</span>";
+
+ echo'</td></tr>';
+ }
+ echo'</tbody></table></div></div>';
+}
+
--- /dev/null
+<?
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE
+ field_name='division_auto_need' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId' AND store_id!='' group by product_id");
+ foreach($data as $row) {
+
+ if(empty($row["color"])) {
+ $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+ }
+ else {
+ $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];
+
+ }
+
+
+ }
--- /dev/null
+<?
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE
+ field_name='division_hand' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId' AND store_id!='' group by product_id, store_id,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];
+ $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+ }
\ No newline at end of file
--- /dev/null
+<?
+
+$prices=[];
+
+$dataF=$db::getRows("SELECT product_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND color=''
+AND store_id=''
+AND field_name IN ('purchase_price')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $prices[$row["product_id"]]=$row["value"];
+}
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND color=''
+AND store_id!=''
+AND field_name IN ('division_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=$row["value"];
+}
+
+
+
+
+
+
+
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ foreach($orderStoresArrayRelation as $storeId ) {
+ $division_summ=$FiledsDataArray["division_summ"][$productId][$storeId];
+
+ $s=round($prices[$productId] * $division_summ);
+ $data_up[$productId][0][0] +=$s ;
+ $data_up[$productId][$storeId][0] =$s ;
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id=''
+AND field_name IN ('division_auto_need_all','quantity_warehouseman_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]]=(int)$row["value"];
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ $division_auto_need_all=$FiledsDataArray["division_auto_need_all"][$productId][0];
+ $quantity_warehouseman_fact=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0];
+
+
+$html .="<br><b>$name</b> division_auto_need_all=".$FiledsDataArray["division_auto_need_all"][$productId][0]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+$html .="<font color=red>-меньше!</font>";
+$html .=" применяем коэффициент $division_ratio = ".$FiledsDataArray["division_ratio"][$productId][0]." ";
+
+}
+ $data_up[$productId][0][0] =$division_ratio;
+
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $division_ratio=1;
+ if($FiledsDataArray["division_auto_need_all"][$productId][$color] > $FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]) {
+ $division_ratio=round($FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]/$FiledsDataArray["division_auto_need_all"][$productId][$color],2);
+ }
+ $data_up[$productId][0][$color] =$division_ratio ;
+ }
+
+$html .="<font color=red>коэффициент $division_ratio</font>";
+
+}
+
+echo"$html";
+
--- /dev/null
+<?
+$FiledsDataArray=[];
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id=''
+AND field_name IN ('division_store_ratio','min_lot')
+AND value!=0 group by field_name, product_id ",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][0][$row["color"]]=$row["value"];
+}
+
+
+// округляет до определенного числа
+function roundCoefficientLot2($number, $rate = 1)
+{
+ if(empty($number)) $number=0;
+ if(empty($rate)) $rate=1;
+ $rest = $rate * floor($number / $rate);
+
+ return $rest;
+}
+
+
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND store_id!=''
+AND field_name IN ('quantity_zakup_new')
+AND value!=0 ",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]][$row["color"]] +=(int)$row["value"];
+}
+
+
+
+
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ // цикл по магазинам
+ foreach($orderStoresArrayRelation as $storeId ) {
+ // $s = $FiledsDataArray["division_store"][$productId][$storeId][0];
+
+ $ceil=$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][0] * $FiledsDataArray["division_store_ratio"][$productId][0][0];
+ //округляем до мини мального лота деления
+ $ceil=roundCoefficientLot2($ceil,$FiledsDataArray["min_lot"][$productId][0][0]);
+
+ $data_up[$productId][$storeId][0] =$ceil;
+
+ if(!empty($FiledsDataArray["quantity_zakup_new"][$productId][$storeId][0]))
+ //echo"<br> $name $storeId min_lot=".$FiledsDataArray["min_lot"][$productId][0][0]." заказ магазина=".$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][0]." * division_store_ratio=".$FiledsDataArray["division_store_ratio"][$productId][0][0]." = $ceil";
+
+
+ $data_up[$productId][0][0] +=$ceil ;
+ // цикл по цвету товара
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+
+ $ceil=$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][$color] * $FiledsDataArray["division_store_ratio"][$productId][0][$color];
+ //округляем до мини мального лота деления
+ $ceil=roundCoefficientLot2($ceil,$FiledsDataArray["min_lot"][$productId][0][$color]);
+ $data_up[$productId][$storeId][$color] = $ceil;
+ /*
+ echo"<br> $name $color $storeId min_lot =
+ ".$FiledsDataArray["min_lot"][$productId][0][$color]."
+ ".$FiledsDataArray["quantity_zakup_new"][$productId][$storeId][$color]."
+ * ".$FiledsDataArray["division_store_ratio"][$productId][0][$color]." = $ceil";
+ */
+
+ }
+
+ }
+}
+
--- /dev/null
+<?
+ $data=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE
+ field_name='division_store_hand' AND value!=0
+ AND store_id $orderStoresArrayRelation_in
+ AND color=''
+ AND order_id=? AND store_id!='' group by product_id",[$orderId]);
+ foreach($data as $row) {
+ $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+ }
+
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value, color FROM store_orders_fields_data WHERE
+ field_name='division_store_hand' AND value!=0
+ AND store_id $orderStoresArrayRelation_in
+ AND color!=''
+ AND order_id=? AND store_id!='' group by product_id,color",[$orderId]);
+ foreach($data as $row) {
+ $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];
+ $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+
+ echo"<br> +".$products[$row["product_id"]]." ".$row["color"]." = ".(int)$row["value"]." ";
+ }
\ No newline at end of file
--- /dev/null
+<?
+
+
+//echo"<h5>Коэффицент деления division_stpore_ratio</h5>";
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value,color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]]=(int)$row["value"];
+}
+
+
+$potreb=[];
+ $data=$db::getRows("SELECT product_id, value,color FROM store_orders_fields_data WHERE
+ field_name='quantity_zakup_new' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId'
+ AND store_id!=''");
+ foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $potreb[$row["product_id"]][$row["color"]] +=(int)$row["value"];
+ }
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ $potreb_all=$potreb[$productId][0];
+ $quantity_warehouseman_fact=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0];
+
+
+$html .="<br><b>$name</b> потребность =".$potreb_all."шт., получено по факту=".$quantity_warehouseman_fact."шт.";
+
+$division_store_ratio=1;
+if($potreb_all > $quantity_warehouseman_fact) {
+$division_store_ratio=round($quantity_warehouseman_fact/$potreb_all,2);
+
+}
+$html .="коэффициент <font color=red>$division_store_ratio</font>";
+ $data_up[$productId][0][0] =$division_store_ratio;
+
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $division_store_ratio=1;
+ if($potreb[$productId][$color] > $FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]) {
+ $division_store_ratio=round($FiledsDataArray["quantity_warehouseman_fact"][$productId][$color]/$potreb[$productId][$color],2);
+ }
+ $data_up[$productId][0][$color] =$division_store_ratio ;
+ }
+
+}
+
+//echo"$html";
+
--- /dev/null
+<?
+$data_up=[];
+ $FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND store_id!=''
+AND color!=''
+AND field_name IN ('division_store','division_store_hand')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ // if(empty($row["color"])) $row["color"]=0;
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]][$row["color"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ // echo"<br> <h2>$name</h2>";
+ foreach($orderStoresArrayRelation as $storeId ) {
+ // $s = $FiledsDataArray["division_store"][$productId][$storeId][0] + $FiledsDataArray["division_store_hand"][$productId][$storeId][0];
+ // $data_up[$productId][$storeId][0] +=$s ;
+ // $data_up[$productId][0][0] +=$s ;
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $s = $FiledsDataArray["division_store"][$productId][$storeId][$color] + $FiledsDataArray["division_store_hand"][$productId][$storeId][$color];
+ $data_up[$productId][$storeId][$color] +=$s ;
+ $data_up[$productId][0][$color] +=$s ;
+
+
+
+
+ // if($color=="белый" and !empty($s)) echo"<br> $color =$s ";
+
+
+
+ }
+
+ }
+
+}
+
+//print_r($data_up["0f42fcb0-f647-11e9-a2be-b42e991aff6c"][0]);
+
+//insert_store_orders_fields($data_up,"division_store_summ",[], true);
+
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value,color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND store_id!=''
+AND color=''
+AND field_name IN ('division_store','division_store_hand')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]][0] = +(int)$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+// echo"<br> <h2>$name</h2>";
+ foreach($orderStoresArrayRelation as $storeId ) {
+ $s = $FiledsDataArray["division_store"][$productId][$storeId][0] + $FiledsDataArray["division_store_hand"][$productId][$storeId][0];
+ $data_up[$productId][$storeId][0] +=(int)$s ;
+ $data_up[$productId][0][0] +=(int)$s ;
+ }
+}
+
+
+
--- /dev/null
+<?
+
+ $FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND color=''
+AND store_id!=''
+AND field_name IN ('division_auto','division_hand')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+// echo"<br> <h2>$name</h2>";
+ foreach($orderStoresArrayRelation as $storeId ) {
+
+
+
+ $s = $FiledsDataArray["division_auto"][$productId][$storeId] + $FiledsDataArray["division_hand"][$productId][$storeId];
+ $data_up[$productId][$storeId][0] +=$s ;
+ $data_up[$productId][0][0] +=$s ;
+
+
+
+ }
+
+// echo" <br> =".$data_up[$productId][0][0]." ";
+
+}
+
--- /dev/null
+<?
+ $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE
+ field_name='division_summ' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId'
+ AND store_id!='' group by product_id");
+ foreach($data as $row) {
+
+ if(empty($row["color"])) $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+ else $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];
+ }
--- /dev/null
+<?
+
+/*date_start - 7 day получили период поставок
+Выбираем закупки входящие в этот период по дате старта продаж
+По этому товару со статусами деление по магазинам или более
+Поле division_summ по каждому магазину -> Получено за 7 дней entrance_cnt_7day*/
+
+$data=$db::getRows("SELECT id FROM store_orders WHERE status>=6 AND date_start <='$date_start_sale' AND date_start>='$date_start_sale' -interval 7 day");
+$whereInOrderId=""; $i=0;
+foreach($data as $row) {
+ $whereInOrderId .=" '".$row["id"]."' ";
+ if($i<(count($data)-1)) $whereInOrderId .=" , ";
+ $i++;
+}
+
+
+if(!empty($whereInOrderId)) {
+$data=$db::getRows("SELECT product_id, store_id, value FROM store_orders_fields_data WHERE order_id IN ($whereInOrderId) AND product_id $whereInProductsId AND field_name='division_summ' AND color='' AND value>0 group by product_id, store_id");
+ foreach($data as $row) {
+ $data_up[$row["product_id"]][$row["store_id"]]["0"]=$row["value"];
+ $data_up[$row["product_id"]][0]["0"] +=$row["value"];
+
+ }
+}
--- /dev/null
+<?
+
+if($order_date_add!='000-00-00') {
+$dataOrders2=$db::getRows("SELECT id FROM store_orders
+WHERE date_add<='$order_date_add' AND date_add>='$order_date_add' - interval 7 day");
+
+//echo"<b>Товар в пути участвуют заказы:</b>";
+$k=0; $w_orders="";
+foreach($dataOrders2 as $row) {
+ if($k>0) $w_orders.=" ,"; $w_orders.= "'".$row["id"]."'"; $k++;
+ // echo"<br> id=".$row["id"]." дата старта:".$row["date_add"]." ".$row["name"]."";
+ }
+
+if(!empty($w_orders)) {
+$w_orders=" AND order_id IN($w_orders) AND order_id!='$orderId'";
+
+ $data2=$db::getRows("SELECT sum(value) as value, product_id, if(color='',0,color) as color
+ FROM store_orders_fields_data
+ WHERE field_name='quantity_zakup_fact' AND value>0
+ $w_orders group by product_id,color");
+
+ foreach($data2 as $row2) {
+ $data_up[$row2["product_id"]][0][$row2["color"]]=$row2["value"];
+ // echo"<br> ".$products[$row2["product_id"]]." = ".$row2["value"]." ";
+ }
+}
+}
\ No newline at end of file
--- /dev/null
+<?
+$data=$db::getRows("SELECT id,min_lot FROM products_1c_options WHERE id $whereInProductsId");
+foreach($data as $row) {
+ $data_up[$row["id"]][0][0]=$row["min_lot"];
+}
\ No newline at end of file
--- /dev/null
+<?
+$data=$db::getRows("SELECT id,min_order FROM products_1c_options WHERE id $whereInProductsId");
+foreach($data as $row) {
+ $data_up[$row["id"]][0][0]=$row["min_order"];
+}
\ No newline at end of file
--- /dev/null
+<?
+
+ $prices=[];
+ $data=$db::getRows("SELECT product_id, value FROM store_orders_fields_data WHERE field_name='purchase_price' AND value>0 AND order_id='$orderId' AND store_id='' AND color='' group by product_id");
+ foreach($data as $row) $prices[$row["product_id"]]=$row["value"];
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value, store_id FROM store_orders_fields_data WHERE field_name='quantity_zakup_new' AND value>0
+ AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,store_id");
+ foreach($data as $row) {
+ $s=intval($row["value"] * $prices[$row["product_id"]]);
+ // echo"<br> ".$row["product_id"]." ".$row["value"]." * ".$prices[$row["product_id"]]." = $s ";
+ $data_up[$row["product_id"]][$row["store_id"]][0] =$s;
+ $data_up[$row["product_id"]][0][0] +=$s;
+ }
--- /dev/null
+<?
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data
+WHERE order_id=? AND color='' AND store_id=''
+AND field_name IN ('purchase_price_zakup','quantity_zakup_fact')",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+}
+
+
+foreach($products as $product_id => $name){
+ $data_up[$product_id][0][0] = round($FiledsDataArray["purchase_price_zakup"][$product_id] * $FiledsDataArray["quantity_zakup_fact"][$product_id],2);
+
+}
+
+
--- /dev/null
+<?php
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND color=''
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','quantity_zakup_fact')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ // echo"<br> <h2>$name</h2>";
+ foreach($orderStoresArrayRelation as $storeId ) {
+
+ $data_up[$productId][0][0] = ( $FiledsDataArray["quantity_warehouseman_fact"][$productId] - $FiledsDataArray["quantity_zakup_fact"][$productId] );
+ }
+
+}
+
--- /dev/null
+<?
+/*
+ $data=$db::getRows("SELECT sum(value) as value,color FROM store_orders_fields_data WHERE
+ field_name='purchase_logistic' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId' AND store_id='' group by color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]=0;
+ $data_up[0][0][$row["color"]] +=(int)$row["value"];
+ $data_up[0][0][0] +=(int)$row["value"];
+ }
+ */
\ No newline at end of file
--- /dev/null
+<?
+
+$data=$db::getRows("SELECT product_id, price FROM prices WHERE product_id $whereInProductsId");
+ foreach($data as $row) {
+ // $prices[$row["product_id"]]=$row["price"];
+ $data_up[$row["product_id"]][0][0]=$row["price"];
+ }
\ No newline at end of file
--- /dev/null
+<?
+/*
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, store_id, value
+FROM store_orders_fields_data WHERE
+order_id=? AND color=''
+AND field_name IN ('cost_price')
+",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][0]=(int)$row["value"];
+}
+
+*/
\ No newline at end of file
--- /dev/null
+<?
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data
+WHERE order_id=? AND color='' AND store_id=''
+AND field_name IN ('purchase_price','quantity_zakup_fact')",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+}
+
+
+foreach($products as $product_id => $name){
+ // розничная цена в рублях на сумму закупки по факту закупщиком
+ $data_up[$product_id][0][0] = round($FiledsDataArray["purchase_price"][$product_id] * $FiledsDataArray["quantity_zakup_fact"][$product_id]);
+
+}
+
+
--- /dev/null
+<?
+$store_planogram=$db::getRows("SELECT product_id,quantity, store_id,color
+FROM store_planogram WHERE quantity>0
+AND product_id $whereInProductsId
+AND store_id $orderStoresArrayRelation_in group by product_id, color, store_id");
+ foreach($store_planogram as $row) {
+ $data_up[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ $data_up[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+ }
\ No newline at end of file
--- /dev/null
+<?
+$date_id=$db::getValue("SELECT date_id FROM store_products_fact order by date_id DESC LIMIT 1");
+
+$store_products_fact=$db::getRows("SELECT product_id,quantity, store_id,color FROM store_products_fact WHERE quantity>0
+AND date_id=?
+AND store_id $orderStoresArrayRelation_in
+AND product_id $whereInProductsId",[$date_id]);
+foreach($store_products_fact as $row) {
+ $data_up[$row["product_id"]][$row["store_id"]][$row["color"]] +=$row["quantity"];
+ $data_up[$row["product_id"]][0][$row["color"]] +=$row["quantity"];
+}
\ No newline at end of file
--- /dev/null
+<?
+
+$data2=$db::getRows("SELECT product_id,store_id,quantity FROM balances WHERE quantity>0
+AND product_id $whereInProductsId
+AND store_id $orderStoresArrayRelation_in");
+foreach($data2 as $row2) {
+$data_up[$row2["product_id"]][$row2["store_id"]][0]+=$row2["quantity"];
+$data_up[$row2["product_id"]][0][0]+=$row2["quantity"];
+}
\ No newline at end of file
--- /dev/null
+<?
+
+ $data2=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE
+ field_name='quantity_warehouseman_fact' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND order_id='$orderId' AND color='' AND store_id!='' group by product_id");
+ foreach($data2 as $row2) {
+ $data_up[$row2["product_id"]][0][0] +=(int)$row2["value"];
+ }
--- /dev/null
+<?
+
+// считаем получено по факту кладовщиком от закупок частей.
+$data=$db::getRows("SELECT id FROM store_orders WHERE related_order_id='$orderId'");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+ $whereInOrderId .=" '".$row["id"]."' ";
+ if($i<(count($data)-1)) $whereInOrderId .=" , ";
+ $i++;
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT order_id,product_id, sum(value) value, color FROM store_orders_fields_data WHERE
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId
+AND field_name='quantity_warehouseman_defective' AND store_id='' AND value>0 group by order_id,product_id,color");
+ foreach($data as $row) {
+ if(!empty($row["color"])) $data_up[$row["product_id"]][0][$row["color"]] +=$row["value"];
+ if(empty($row["color"])) $data_up[$row["product_id"]][0][0] +=$row["value"];
+ //echo"<br> order=".$row["order_id"]." ".$products[$row["product_id"]]." = ".$row["color"]." = ".$row["value"]."";
+
+ }
+}
\ No newline at end of file
--- /dev/null
+<?
+
+// считаем получено по факту кладовщиком от закупок частей.
+$data=$db::getRows("SELECT id FROM store_orders WHERE related_order_id='$orderId'");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+ $whereInOrderId .=" '".$row["id"]."' ";
+ if($i<(count($data)-1)) $whereInOrderId .=" , ";
+ $i++;
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT product_id, sum(value) value, if(color='',0,color) as color FROM store_orders_fields_data WHERE
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId
+AND field_name='quantity_warehouseman_fact' AND store_id='' AND value>0 group by product_id,color");
+ foreach($data as $row) {
+
+ $data_up[$row["product_id"]][0][$row["color"]]=$row["value"];
+ if(empty($row["color"])) $data_up[$row["product_id"]][0][0] +=$row["value"];
+
+ // echo"<br> ".$row["product_id"]." = store_id=".$row["store_id"]." ".$row["value"]."";
+
+ }
+}
\ No newline at end of file
--- /dev/null
+<?
+
+// считаем получено по факту кладовщиком от закупок частей.
+$data=$db::getRows("SELECT id FROM store_orders WHERE related_order_id='$orderId'");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+ $whereInOrderId .=" '".$row["id"]."' ";
+ if($i<(count($data)-1)) $whereInOrderId .=" , ";
+ $i++;
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT order_id,product_id, sum(value) value, color FROM store_orders_fields_data WHERE
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId
+AND field_name in('quantity_warehouseman_defective','quantity_warehouseman_fact') AND store_id='' AND value>0 group by order_id,product_id,color");
+ foreach($data as $row) {
+ if(!empty($row["color"])) $data_up[$row["product_id"]][0][$row["color"]] +=$row["value"];
+ if(empty($row["color"])) $data_up[$row["product_id"]][0][0] +=$row["value"];
+ //echo"<br> order=".$row["order_id"]." ".$products[$row["product_id"]]." = ".$row["color"]." = ".$row["value"]."";
+ }
+}
+
+
+$data=$db::getRows("SELECT order_id,product_id, sum(value) value, color FROM store_orders_fields_data WHERE
+order_id=? AND product_id $whereInProductsId
+AND field_name in('quantity_warehouseman_defective','quantity_warehouseman_fact') AND store_id='' AND value>0 group by order_id,product_id,color",[$orderId]);
+ foreach($data as $row) {
+ if(!empty($row["color"])) $data_up[$row["product_id"]][0][$row["color"]] +=$row["value"];
+ if(empty($row["color"])) $data_up[$row["product_id"]][0][0] +=$row["value"];
+ //echo"<br> order=".$row["order_id"]." ".$products[$row["product_id"]]." = ".$row["color"]." = ".$row["value"]."";
+ }
--- /dev/null
+<?php
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND color=''
+AND store_id=''
+AND field_name IN ('quantity_zakup_fact','purchase_price')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]]=$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+ // echo"<br> <h2>$name</h2>";
+ foreach($orderStoresArrayRelation as $storeId ) {
+ $data_up[$productId][0][0] = round( $FiledsDataArray["purchase_price"][$productId] * $FiledsDataArray["quantity_zakup_fact"][$productId] );
+ }
+
+}
+
--- /dev/null
+<?
+
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value,color FROM store_orders_fields_data WHERE
+ field_name='quantity_zakup_new' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND store_id!=''
+ AND order_id=? AND color!='' AND store_id!='' group by product_id,store_id,color",[$orderId]);
+ foreach($data as $row) {
+ $data_up[$row["product_id"]][0][$row["color"]] +=(int)$row["value"];
+ // $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+ // echo"<br>Всего quantity_zakup_new ".$products[$row["product_id"]]." = ".$row["value"]." ";
+ }
+
+
+ $data=$db::getRows("SELECT product_id,sum(value) as value FROM store_orders_fields_data WHERE
+ field_name='quantity_zakup_new' AND value>0
+ AND store_id $orderStoresArrayRelation_in
+ AND store_id!=''
+ AND order_id=? AND color='' AND store_id!='' group by product_id",[$orderId]);
+ foreach($data as $row) {
+ $data_up[$row["product_id"]][0][0] +=(int)$row["value"];
+
+ }
--- /dev/null
+<?
+$day_sales=7*4;
+$data_up=[];
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id $whereInProductsId
+
+AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c ");
+ foreach($data2 as $row2) {
+ $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+ if(!empty($cnt)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+ $data_up[$row2["product_id"]][0][0] +=$cnt;
+
+ // echo"<br> ".$products[$row2["product_id"]]." ".$row2["store_id"]." =$cnt ";
+ }
+ }
+
+
--- /dev/null
+<?
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+//echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$data2=$db::getRows("SELECT i.product_id, sum(if(s.operation='Продажа',i.summ,0)) as sale, s.store_id_1c as store_id, sum(if(s.operation='Возврат', i.summ ,0)) as vozvr
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id
+AND i.product_id in($whereInProductsId_in)
+AND s.store_id_1c $orderStoresArrayRelation_in
+ AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id, s.operation");
+foreach($data2 as $row2) {
+$sale=$row2["sale"]-$row2["vozvr"];
+$sale=(int)$sale;
+if(!empty($sale)) {
+$data_up[$row2["product_id"]][$row2["store_id"]][0]=$sale;
+$data_up[$row2["product_id"]][0][0] +=$sale;
+}
+}
+}
+}
\ No newline at end of file
--- /dev/null
+<?
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$day_sales=$configGroupProducts[$group]["day_sales"];
+//echo"<br>+++ <h1>$group дней $day_sales</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt,
+sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id in($whereInProductsId_in)
+AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_division 00:00:00'
+AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id_1c, s.operation ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0]=$cnt;
+ $data_up[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
+}
+
+
+}
\ No newline at end of file
--- /dev/null
+<?
+
+//массив с товарами из данной закупки разнесенных по категориям
+foreach($productGroupArray as $group =>$pArray) {
+
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {
+
+ if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+$day_sales=$configGroupProducts[$group]["day_sales"]; // массив группы товаров с данными за какоц период считать статистику в днях
+}
+}
+
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.summ,0)) as sale_cnt, sum(if(s.operation='Возврат',i.summ,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND
+i.product_id $whereInProductsId
+AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval 7 day group BY i.product_id, s.store_id_1c ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+ $data_up[$row2["product_id"]][0][0] +=$cnt;
+
+ // echo"<br> sales_amount ".$products[$row2["product_id"]]." ".$row2["store_id"]." $cnt ";
+ }
+ }
+
+
+
\ No newline at end of file
--- /dev/null
+<?
+$data_up=[];
+$day_sales=7;
+
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id, sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id $whereInProductsId
+ AND s.store_id_1c $orderStoresArrayRelation_in
+AND s.date<='$date_start_sale 00:00:00' AND s.date>='$date_start_sale' -interval $day_sales day group BY i.product_id, s.store_id_1c ");
+ foreach($data2 as $row2) {
+ $cnt=$row2["sale_cnt"]-$row2["vozvr_cnt"];
+ $cnt=(int)$cnt;
+ if(!empty($cnt)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+ $data_up[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
--- /dev/null
+<?
+$day_sales=7*4;
+$data2=$db::getRows("SELECT i.product_id, s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id $whereInProductsId
+
+AND store_id $orderStoresArrayRelation_in
+AND s.date<='$date_start_division 00:00:00' AND s.date>='$date_start_division' -interval $day_sales day group BY i.product_id, s.store_id ");
+ foreach($data2 as $row2) {
+ $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+ if(!empty($cnt)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$cnt;
+ $data_up[$row2["product_id"]][0][0] +=$cnt;
+ }
+ }
--- /dev/null
+<?
+/* scheduled_delivery_cnt
+«Плановая поставка» новая ячейка
+Берем закупки со статусом «Товар в пути» - с этим товаром - на каждый магазин сколько заказа магазин из ячееки «Заказ закупщика NEW» AND date_start <='$date_start_sale' AND date_start>='$date_start_sale' -interval 27 day
+*/
+$data=$db::getRows("SELECT id FROM store_orders WHERE status=5");
+$whereInOrderId="";
+$i=0;
+foreach($data as $row) {
+ $whereInOrderId .=" '".$row["id"]."' ";
+ if($i<(count($data)-1)) $whereInOrderId .=" , ";
+ $i++;
+}
+
+if(!empty($whereInOrderId)) {
+
+$data=$db::getRows("SELECT product_id, store_id, value FROM store_orders_fields_data WHERE
+order_id IN ($whereInOrderId) AND product_id $whereInProductsId
+AND field_name='quantity_zakup_new' AND color='' AND value>0 group by product_id, store_id");
+ foreach($data as $row) {
+ $data_up[$row["product_id"]][$row["store_id"]]["0"]=$row["value"];
+ $data_up[$row["product_id"]][0]["0"] +=$row["value"]; // echo"<br> ".$row["product_id"]." = store_id=".$row["store_id"]." ".$row["value"]."";
+
+ }
+}
\ No newline at end of file
--- /dev/null
+<?
+
+ $scoreArr=[];
+$dataF=$db::getRows("SELECT product_id, store_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND color=''
+AND store_id!=''
+AND field_name IN ('score')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $scoreArr[$row["product_id"]][$row["store_id"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+// echo"<br> <h2>$name</h2>";
+$scoreall=0; $cnt=0;
+ foreach($orderStoresArrayRelation as $storeId ) {
+ if($scoreArr[$productId][$storeId]>0) {
+ $scoreall += $scoreArr[$productId][$storeId];
+ $cnt++;
+ }
+ }
+if($scoreall>0) $data_up[$productId][0][0] =round($scoreall/$cnt,2) ;
+
+
+}
+
+
+
+
+ $scoreArr=[];
+$dataF=$db::getRows("SELECT product_id, store_id, value,color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND store_id $orderStoresArrayRelation_in
+AND color!=''
+AND store_id!=''
+AND field_name IN ('score')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $scoreArr[$row["product_id"]][$row["store_id"]][$row["color"]]=(int)$row["value"];
+}
+ //пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+// echo"<br> <h2>$name</h2>";
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $scoreall=0; $cnt=0;
+ foreach($orderStoresArrayRelation as $storeId ) {
+
+ if($scoreArr[$productId][$storeId][$color]>0) {
+ $scoreall += $scoreArr[$productId][$storeId][$color];
+ $cnt++;
+ }
+ }
+ if($scoreall>0) $data_up[$productId][0][$color]=round($scoreall/$cnt,2) ;
+
+ }
+
+
+}
+
+
+
+
+
+
+
+
+
--- /dev/null
+<?
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value, color
+FROM store_orders_fields_data WHERE
+order_id=?
+
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','division_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ if(!$row["color"]) $row["color"]=0;
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]] +=(int)$row["value"];
+}
+
+
+//echo"<h1>Storehouse_balance</h1>";
+foreach($products as $productId => $nameProduct) {
+ // echo"<br>$nameProduct ".$FiledsDataArray["quantity_warehouseman_fact"][$productId][0] ." - ".$FiledsDataArray["division_store_summ"][$productId][0]."";
+ $data_up[$productId][0][0]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0] - $FiledsDataArray["division_summ"][$productId][0];
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $data_up[$productId][0][$color]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][$color] - $FiledsDataArray["division_summ"][$productId][$color];
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value
+FROM store_orders_fields_data WHERE
+order_id=?
+AND color=''
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','division_store_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][0] =(int)$row["value"];
+}
+
+
+//echo"<h1>Storehouse_balance</h1>";
+foreach($products as $productId => $nameProduct) {
+
+ $data_up[$productId][0][0]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][0] - $FiledsDataArray["division_store_summ"][$productId][0];
+}
+
+
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, value, color
+FROM store_orders_fields_data WHERE
+order_id=?
+AND color!=''
+AND store_id=''
+AND field_name IN ('quantity_warehouseman_fact','division_store_summ')
+AND value!=0",[$orderId]);
+foreach($dataF as $row) {
+ $FiledsDataArray[$row["field_name"]][$row["product_id"]][$row["color"]] =(int)$row["value"];
+}
+
+
+//echo"<h1>Storehouse_balance</h1>";
+foreach($products as $productId => $nameProduct) {
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $data_up[$productId][0][$color]=$FiledsDataArray["quantity_warehouseman_fact"][$productId][$color] - $FiledsDataArray["division_store_summ"][$productId][$color];
+ }
+
+}
+
--- /dev/null
+<?
+
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+$periodDaysStats=7;
+if(!empty($orderStoresArrayRelation_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак'
+AND p.product_id $whereInProductsId
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2) {
+ $a=round($row2["cnt"]);
+ if(!empty($a)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0] +=$a;
+ $data_up[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+ }
\ No newline at end of file
--- /dev/null
+<?
+
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю
+$periodDaysStats=28;
+if(!empty($orderStoresArrayRelation_in)) {
+$data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id
+AND w.type='Брак'
+AND p.product_id $whereInProductsId
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00'
+AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2) {
+ $a=round($row2["cnt"]/4);
+ if(!empty($a)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ $data_up[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?
+//списания за 4 недели среднее - 4-х недельное списание от даты старта / 4 = среднее за неделю в рублях
+$periodDaysStats=28;
+if(!empty($orderStoresArrayRelation_in)) {
+$data2=$db::getRows("SELECT p.product_id,p.summ, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак'
+AND p.product_id $whereInProductsId
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00'
+AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2) {
+ $a=round ($row2["summ"]/4) ;
+ if(!empty($a)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ $data_up[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+
+}
\ No newline at end of file
--- /dev/null
+<?
+
+foreach($productGroupArray as $group =>$pArray) {
+ $periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+ //echo"<br>+++ <h1>Списание $group дней $periodDaysStats</h1> ";
+ //собираем условие по выборке товаров
+ $whereInProductsId_in="";
+ $j=0;
+ foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+ if(!empty($whereInProductsId_in)) {
+ if($periodDaysStats==7) $periodDaysStats_where=14;
+ else $periodDaysStats_where=$periodDaysStats;
+
+ $date_start_sale2=date("Y-m-d");
+ $data2=$db::getRows("SELECT p.product_id,sum(c.quantity) as cnt, w.store_id, c.comment_id
+ FROM write_offs as w, write_offs_products as p, write_offs_comments as c
+ WHERE p.write_offs_id=w.id
+ AND w.type='Брак'
+ AND c.write_offs_id=p.write_offs_id
+ AND p.product_id=c.product_id AND c.quantity>0
+ AND p.product_id in($whereInProductsId_in)
+ AND w.store_id $orderStoresArrayRelation_in
+ AND w.date<='$date_start_sale2 00:00:00'
+ AND w.date>='$date_start_sale2' -interval $periodDaysStats_where day
+ group BY p.product_id,w.store_id, c.comment_id");
+ foreach($data2 as $row2) {
+ $a=$row2["comment_id"]."=".$row2["cnt"]."шт. ";
+ if(!empty($a)) $data_up[$row2["product_id"]][$row2["store_id"]][0] .=$a;
+ }
+ }
+}
\ No newline at end of file
--- /dev/null
+<?
+
+// пробегаем по каждому типу товара и группируем запросы к БД
+foreach($productGroupArray as $group =>$pArray) {
+$periodDaysStats=$configGroupProducts[$group]["day_write_offs"];
+//echo"<br>+++ <h1>$group дней $periodDaysStats</h1> ";
+
+//собираем условие по выборке товаров
+$whereInProductsId_in="";
+$j=0;
+foreach($pArray as $prodId) {if($j>0) $whereInProductsId_in .=","; $whereInProductsId_in .="'$prodId'"; $j++;}
+
+if(!empty($whereInProductsId_in)) {
+ $data2=$db::getRows("SELECT p.product_id,sum(p.quantity) as cnt, w.store_id
+ FROM write_offs as w, write_offs_products as p
+ WHERE p.write_offs_id=w.id AND w.type='Брак'
+ AND p.product_id in($whereInProductsId_in)
+ AND w.store_id $orderStoresArrayRelation_in
+ AND w.date<='$date_start_division 00:00:00' AND w.date>='$date_start_division' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+$valAll=0;
+ foreach($data2 as $row2) {
+ $a=ceil($row2["cnt"]);
+ if(!empty($a)) {
+ $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ $data_up[$row2["product_id"]][0][0] +=$a;
+ }
+ }
+}
+}
\ No newline at end of file
--- /dev/null
+<?
+//списания за 7 дней- недельное списание от даты старта / 4 = среднее за неделю
+
+
+if(!empty($orderStoresArrayRelation_in) and !empty($date_start_sale) and !empty($products)) {
+ $periodDaysStats=7;
+
+$data2=$db::getRows("SELECT p.product_id, p.summ, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id AND w.type='Брак'
+AND p.product_id $whereInProductsId
+AND w.store_id $orderStoresArrayRelation_in
+AND w.date<='$date_start_sale 00:00:00' AND w.date>='$date_start_sale' -interval $periodDaysStats day group BY p.product_id,w.store_id");
+ foreach($data2 as $row2) {
+ $a=$row2["summ"];
+ $data_up[$row2["product_id"]][$row2["store_id"]][0]=$a;
+ $data_up[$row2["product_id"]][0][0] +=$a;
+ }
+ }
\ No newline at end of file
--- /dev/null
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/uni.php");
+
+
+
+global $modul, $act,$fields_edit,$h1;
+$modul="shipments";
+$act="fieldsConfig";
+$fields_edit=1;
+$h1="Поля для закупок";
+
+construct_form_fields();
+
+
+
+
+
+?>
\ No newline at end of file
-<?
+<?php
include_once("startup.php");
include_once("inc/db.php");
include_once("inc/base_new.php");
include_once("inc/design_new.php");
//include_once("inc/shipment.php");
include"templates/top.php";
-
+//ini_set('error_reporting', E_ALL);
+//ini_set('display_errors', 1);
+//ini_set('display_startup_errors', 1);
//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
global $products, // массив с товарами производителя прикрепленного к этой закупке
$orderId, // id- заказа
include"inc/functionsFiedlsData.php";
-$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
+$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+<span onclick="ajaxUpdateStoreZakup();" class="btn btn-blue me-2">2) обновить сумму запок по всем магазинам</span>
<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span> ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
-
// панель с магазинами
showOrderStoresPanel();
$data=$db::getRows("SELECT * FROM store_orders_fields $sort");
}
foreach($data as $row) {
-$dostup=$dostup_fields[$row["id"]];
-$bg=$bg_fields[$row["id"]];
+@$dostup=$dostup_fields[$row["id"]];
+@$bg=$bg_fields[$row["id"]];
if($dostup=="edit" or $dostup=="show") {
-//$FiledsData=getDataFiledsData();
+$FiledsData=[];
+
+$FiledsData=getDataFiledsData();
+
+
+//print_r($FiledsData);
// полнограммы по всем магазинам
if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
-if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid][0][0]) and $status_order_id >= 6) { echo' class="bg-danger"';
echo' style="opacity:0.5"';
}
//узнаем категорибю товара
-$categoryId=$ProductsOptions[$pid]["parent_id"];
+@$categoryId=$ProductsOptions[$pid]["parent_id"];
// по категории узнаем тип товара горшечка или упаковка
-$tip=$products_class[$categoryId];
+@$tip=$products_class[$categoryId];
-if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+if(isset($productsColorsArray[$pid]) and count($productsColorsArray[$pid])>0)
+echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
echo'</td>';
//begin colors
+if(isset($productsColorsArray[$pid])) {
foreach($productsColorsArray[$pid] as $color) {
$color=trim($color);
if(!empty($color)) {
echo"</tr>";
}
+}
}
//end colors
echo'<tr class="bg-success zg"><td class="text-right"></td>';
foreach($data as $row) {
-$dostup=$dostup_fields[$row["id"]];
-$bg=$bg_fields[$row["id"]];
+@$dostup=$dostup_fields[$row["id"]];
+@$bg=$bg_fields[$row["id"]];
if($dostup=="edit" or $dostup=="show") {
echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
}
echo'</tr>
<tr class="bg-success"><td class="text-right">итого</td>';
foreach($data as $row) {
-$dostup=$dostup_fields[$row["id"]];
+@$dostup=$dostup_fields[$row["id"]];
if($dostup=="edit" or $dostup=="show") {
$s="";
if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
echo'</tr></tbody>';
echo'</table>
-<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+<style>table tr td.bg-lime{background:lime;color:#fff;}
+
+table tr.border td{ border-bottom:1px #cdcdcd solid; color:#fff;}
+</style>';
+
+
+
+
+echo'<h3 class="text-center mt-2">Итого сумма по столбцам</h3>
+<table class="table-stripped width-auto">
+<tbody><tr>';
+foreach($data as $row) {
+@$dostup=$dostup_fields[$row["id"]];
+@$bg=$bg_fields[$row["id"]];
+$s="";
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount" and isset($rowArraySum[$row["id"]])) $s=$rowArraySum[$row["id"]];
+
+if($fieldsRows[$row["name_eng"]]["summ"]==1 and !empty($s) and ($dostup=="edit" or $dostup=="show")) {
+
+
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+ // ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')
+echo'<tr><td class="text-right" title="'.$row["name_full"].' '.$row["name_eng"].'">'.$row["name"].'</td>
+<td class="text-left"><b>'.$s.'</b></td></tr>';
+
+
+}
+}
+
+echo'</tbody></table>';
+
+
+$shipments_group_products=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='shipments_group_products' order by name ASC");
+
+
+//массив с полями по которым будем собирать данные
+$fieldsStatsArray[]=["sales_4weeks_cnt","sales_4weeks_sum","sales_cnt","sales_amount","quantity_zakup_new","order_supplier_sum"];
+
+
+foreach($products as $product_id => $name) {
+
+if(!empty($ProductsOptions[$product_id]["shipments_group_id"])) {
+
+ // получаем массив со значением по полю
+ $valueArray=getValueFieldTrue("quantity_zakup_new",$product_id,0,0);
+
+ echo" <br> $name = ".$shipments_group_products[$ProductsOptions[$product_id]["shipments_group_id"]]."
+ = ".$valueArray["value"]." ";
+
+ @$shipment_group_products[$ProductsOptions[$product_id]["shipments_group_id"]] +=1;
+
+}
+
+
+
+}
+
+
+
/*
$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
}});
}
+function ajaxUpdateStoreZakup(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStoreZakup/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
function ajaxUploadAutoPurchase(){
$('#modal-7 .modal-body').html('Считаем данные');
</div>
</div>';
+$jss="";
-
-include"templates/bottom.php";
+include("templates/bottom.php");
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/shipment.php");
+include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+$orderId, // id- заказа
+$store_id, // GUID магазина
+$storesArray, // массив с магазинами
+$group_id, // ID группы авторизованного сотрудника
+$fieldsRows, // массив с данными по полями - ключ name_eng
+$date_start_sale, // дата старта продаж от которой считаемстатистику
+$whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+$FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+$FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+$FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
+$status_order_id, // ID текущего статуса закупаки
+$store_orders_statuses, // массим со статсами закупок
+$statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
+$status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
+$store_orders_status_description, // - массив с описанием стутса
+$dostup_fields,
+$bg_fields,
+$ProductsOptions;
+
+$act='fieldsData'; // часть url action
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+
+
+
+
+if(!empty($_REQUEST["group_id"])) {
+ $group_id=(int)$_REQUEST["group_id"];
+ $_SESSION["group_id_init"]=$group_id;
+}
+
+
+
+$time = strtotime('this week monday, 00:00'); // текущий понедельник в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time); // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+$db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+$db::sql("INSERT IGNORE INTO store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+mess("Статус изменен");
+}
+
+
+
+include"inc/functionsFiedlsData.php";
+
+$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
+
+
+
+echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+Описание статуса: '.$store_orders_status_description[$status_order_id].'
+
+';
+
+echo"Под кем будем просматривать ";
+foreach($data as $gid => $nameGroup) {
+
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
+
+if($gid==$group_id) echo"success"; else echo"outline-info";
+
+echo"\">$nameGroup</a>";
+
+}
+echo'
+<br>
+
+Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
+Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
+
+
+
+
+
+
+<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+<span onclick="ajaxUpdateStoreZakup();" class="btn btn-blue me-2"> обновить по полям !</span>
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>';
+
+//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
+<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span> ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
+
+
+// панель с магазинами
+showOrderStoresPanel();
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if($status_order_id==1) {
+
+
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";
+
+
+if(!empty($_REQUEST["load"])) {
+$data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
+$data_uper=[];
+foreach($products as $productId => $nameProduct) {
+echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]." закуп ".$ProductsOptions[$productId]["price_zakup"]." ";
+$price=$productsPrices[$productId];
+$data_uper[$productId]["NULL"]["NULL"]=$price;
+
+
+$db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
+
+}
+
+//розничная цена
+insert_store_orders_fields($data_uper,"purchase_price");
+
+
+$data_uper=[];
+foreach($products as $productId => $nameProduct) {
+$price=$ProductsOptions[$productId]["price_zakup"];
+ $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];
+ $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+}
+insert_store_orders_fields($data_uper,"purchase_price_zakup");
+
+//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
+}
+
+
+}
+
+
+$products_varieties=[];
+$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+
+
+
+//если выбран магазин то
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right w-10">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+$sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+if(!empty($sort)) $sort="ORDER BY FIELD(`id`, $sort) ";
+
+ $data=$db::getRows("SELECT * FROM store_orders_fields $sort");
+}
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+
+
+
+$html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'" onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:110px;">
+<b>'.$row["name"].'</b></th>';
+$thead .=$html;
+$head_td .=$html;
+}
+
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
+AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+}
+
+$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"];
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+if($trCount==20) {
+ $trCount=0;
+ echo $head_td;
+ }
+$trCount++;
+
+echo'<tr';
+
+
+if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+
+ echo' style="opacity:0.5"';
+}
+
+
+
+echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+if(empty($statuses_stores_show[$status_order_id])) { echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>'; }
+echo''.$name.'';
+
+if($ProductsOptions[$pid]["shipments_group_id"]) echo"**";
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+
+
+if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+echo'</td>';
+
+foreach($data as $row) printFieldTd($row["name_eng"],$pid,$store_id);
+
+echo'</tr>';
+
+
+//begin colors
+foreach($productsColorsArray[$pid] as $color) {
+ $color=trim($color);
+ if(!empty($color)) {
+ echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;">
+
+ <td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>';
+
+if(!empty($products_varieties[$pid][$color])) {
+ echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';
+foreach($products_varieties[$pid][$color] as $k => $var) {
+echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
+}
+echo'</div>';
+}
+
+ foreach($data as $row) {
+ printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+ }
+ echo"</tr>";
+ }
+
+}
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+}
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+ $s="";
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+}
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}
+
+table tr.border td{ border-bottom:1px #cdcdcd solid; color:#fff;}
+</style>';
+
+
+
+
+echo'<h3 class="text-center mt-2">Итого сумма по столбцам</h3>
+<table class="table-stripped width-auto">
+<tbody><tr>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+$s="";
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
+
+if($fieldsRows[$row["name_eng"]]["summ"]==1 and !empty($s) and ($dostup=="edit" or $dostup=="show")) {
+
+
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+ // ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')
+echo'<tr><td class="text-right" title="'.$row["name_full"].' '.$row["name_eng"].'">'.$row["name"].'</td>
+<td class="text-left"><b>'.$s.'</b></td></tr>';
+
+
+}
+}
+
+echo'</tbody></table>';
+
+
+$shipments_group_products=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='shipments_group_products' order by name ASC");
+
+
+//массив с полями по которым будем собирать данные
+//$fieldsStatsArray[]=["sales_4weeks_cnt","sales_4weeks_sum","sales_cnt","sales_amount","quantity_zakup_new","order_supplier_sum"];
+
+
+$field_stats_array=["sales_cnt","sales_4weeks_sum","sales_4weeks_cnt","write_offs_sum","write_downs","write_offs_4week_sum","write_offs_4week_cnt_avg"];
+
+$field_stats_array_in=implode("','",$field_stats_array);
+
+$data_field=[];
+ $data=$db::getRows("SELECT field_name, sum(value) as value,product_id FROM store_orders_fields_data WHERE
+ field_name in('$field_stats_array_in') AND value>0
+ AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,field_name");
+ foreach($data as $row) {
+ $shipments_group_id=$ProductsOptions[$row["product_id"]]["shipments_group_id"];
+ $data_field[$row["field_name"]][$shipments_group_id] +=$row["value"];
+ }
+
+
+
+ echo"<div class=\"table-responsive mt-3\"><table class=\"zak\">
+ <thead class=\"table-darck\"><tr class=\"zg\"><th>категория</th>";
+ foreach($field_stats_array as $fieldN) {
+ echo"<th style=\"max-width:120px;\"><b>".$fieldsRows[$fieldN]["name"]."</b></th>";
+ }
+
+
+ echo"</tr></thead><tbody>";
+ foreach($shipments_group_products as $shipments_group_id => $name) {
+ if($data_field["sales_4weeks_cnt"][$shipments_group_id]) {
+ echo"<tr><td>$name</td>";
+ foreach($field_stats_array as $fieldN) echo"<td>".$data_field[$fieldN][$shipments_group_id]."</td>";
+ echo"</tr>";
+ }
+
+ }
+ echo"</tbody></table>";
+
+
+
+
+/*
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+ $all=0;
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $all =$all+$summ;
+ $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+ // if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
+
+
+ }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+
+
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+
+
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+
+
+$_CONFIG["jscss"] .="<script>
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');
+ $.ajax({
+ url: '/shipment/ajaxFieldInfo/',
+ method: 'post',
+ dataType: 'html',
+ data: {id: id},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateFieldsData/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function ajaxUpdateStoreZakup(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStoreZakup/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUploadAutoPurchase/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+
+ if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, deleteAll:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+}
+
+
+</script>";
+
+ $_CONFIG["jscss"] .='<!-- MODAL -->
+ <div class="modal fade" id="modal-7">
+ <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body p-0">
+
+ </div>
+
+ </div>
+</div>
+</div>';
+
+
+
+
+
+include"templates/bottom.php";
+
+
+
+
+
+
+
+
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/shipment.php");
+include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+$orderId, // id- заказа
+$store_id, // GUID магазина
+$storesArray, // массив с магазинами
+$group_id, // ID группы авторизованного сотрудника
+$fieldsRows, // массив с данными по полями - ключ name_eng
+$date_start_sale, // дата старта продаж от которой считаемстатистику
+$whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+$FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+$FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+$FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
+$status_order_id, // ID текущего статуса закупаки
+$store_orders_statuses, // массим со статсами закупок
+$statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
+$status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
+$store_orders_status_description, // - массив с описанием стутса
+$dostup_fields,
+$bg_fields,
+$ProductsOptions;
+
+$act='fieldsData'; // часть url action
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+
+
+ini_set('error_reporting', E_ALL);
+ini_set('display_errors', 1);
+ini_set('display_startup_errors', 1);
+
+if(!empty($_REQUEST["group_id"])) {
+ $group_id=(int)$_REQUEST["group_id"];
+ $_SESSION["group_id_init"]=$group_id;
+}
+
+
+
+$time = strtotime('this week monday, 00:00'); // текущий понедельник в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time); // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+$db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+$db::sql("INSERT IGNORE INTO store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+mess("Статус изменен");
+}
+
+
+
+include"inc/functionsFiedlsData.php";
+
+$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
+
+
+
+echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+Описание статуса: '.$store_orders_status_description[$status_order_id].'
+
+';
+
+echo"Под кем будем просматривать ";
+foreach($data as $gid => $nameGroup) {
+
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
+
+if($gid==$group_id) echo"success"; else echo"outline-info";
+
+echo"\">$nameGroup</a>";
+
+}
+echo'
+<br>
+
+Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
+Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
+
+
+
+
+
+
+<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>';
+
+//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
+<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span> ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
+
+
+
+// панель с магазинами
+showOrderStoresPanel();
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if($status_order_id==1) {
+
+
+echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";
+
+
+if(!empty($_REQUEST["load"])) {
+$data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
+$data_uper=[];
+foreach($products as $productId => $nameProduct) {
+echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]." закуп ".$ProductsOptions[$productId]["price_zakup"]." ";
+$price=$productsPrices[$productId];
+$data_uper[$productId]["NULL"]["NULL"]=$price;
+
+
+$db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
+
+}
+
+//розничная цена
+insert_store_orders_fields($data_uper,"purchase_price");
+
+
+$data_uper=[];
+foreach($products as $productId => $nameProduct) {
+$price=$ProductsOptions[$productId]["price_zakup"];
+ $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];
+ $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+}
+insert_store_orders_fields($data_uper,"purchase_price_zakup");
+
+//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
+}
+
+
+}
+
+
+$products_varieties=[];
+$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+
+
+
+//если выбран магазин то
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+$sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+if(!empty($sort)) $sort="ORDER BY FIELD(`id`, $sort) ";
+
+ $data=$db::getRows("SELECT * FROM store_orders_fields $sort");
+}
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+
+
+
+$html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'" onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:90px;">
+<b>'.$row["name"].'</b></th>';
+$thead .=$html;
+$head_td .=$html;
+}
+
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
+AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+}
+
+$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"];
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+if($trCount==20) {
+ $trCount=0;
+ echo $head_td;
+ }
+$trCount++;
+
+echo'<tr';
+
+
+if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+
+ echo' style="opacity:0.5"';
+}
+
+
+
+echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+if(empty($statuses_stores_show[$status_order_id])) { echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>'; }
+echo''.$name.'';
+
+
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+
+
+if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+echo'</td>';
+
+foreach($data as $row) printFieldTd($row["name_eng"],$pid,$store_id);
+
+echo'</tr>';
+
+
+//begin colors
+foreach($productsColorsArray[$pid] as $color) {
+ $color=trim($color);
+ if(!empty($color)) {
+ echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;"><td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>';
+
+if(!empty($products_varieties[$pid][$color])) {
+ echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';
+foreach($products_varieties[$pid][$color] as $k => $var) {
+echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
+}
+echo'</div>';
+}
+
+ foreach($data as $row) {
+ printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+ }
+ echo"</tr>";
+ }
+
+}
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+}
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+ $s="";
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+}
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+/*
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+ $all=0;
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $all =$all+$summ;
+ $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+ // if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
+
+
+ }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+
+
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+
+
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+
+
+$_CONFIG["jscss"] .="<script>
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');
+ $.ajax({
+ url: '/shipment/ajaxFieldInfo/',
+ method: 'post',
+ dataType: 'html',
+ data: {id: id},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateFieldsData/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUploadAutoPurchase/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+
+ if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, deleteAll:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+}
+
+
+</script>";
+
+ $_CONFIG["jscss"] .='<!-- MODAL -->
+ <div class="modal fade" id="modal-7">
+ <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body p-0">
+
+ </div>
+
+ </div>
+</div>
+</div>';
+
+
+
+
+
+include"templates/bottom.php";
+
+
+
+
+
+
+
+
--- /dev/null
+<?php
+
+
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+$orderId, // id- заказа
+$store_id, // GUID магазина
+$storesArray, // массив с магазинами
+$group_id, // ID группы авторизованного сотрудника
+$fieldsRows, // массив с данными по полями - ключ name_eng
+$whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+$FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+$status_order_id, // ID текущего статуса закупаки
+$store_orders_statuses, // массим со статсами закупок
+$statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
+$status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
+$dostup_fields,
+$bg_fields,
+$ProductsOptions,
+ $storesArrayAll, $orderCityId,
+$orderStoresArrayRelation, // массив с гуидами магазинов закупки по которым считаем статистику,
+$orderStoresArrayRelation_in // SQL условие для выборки по магазинам IN('store_id')
+, $productGroupArray // массив с ID подгруппы группы товаров для автозакупки Короткие розы
+,$related_order_id;
+
+
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+
+ $FiledsData=[];
+
+$k=0;
+$whereGuid="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+if(!empty($guid)) { if($k!=0) $whereGuid .=","; $whereGuid .=" '$guid' "; $k++; }
+}
+if(!empty($whereGuid)) $whereGuid =" AND id in($whereGuid) ";
+
+//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+
+$fields=array("show"=>array("name"=>"Просмотр"),
+"edit"=>array("name"=>"Правка"),
+"dostup"=>array("name"=>"Доступ", "array"=>array(""=>"x","show"=>"Просмотр","edit"=>"Редактирование")),
+"bg"=>array("name"=>"цвет", "array"=>array(""=>"без цвета","bg-white"=>"Белый",
+"bg-info"=>"Синий","bg-indigo"=>"Индиго","bg-success"=>"Зеленый","bg-danger"=>"Красный", "bg-warning"=>"Оранжевый","bg-lime"=>"Лайм"))
+);
+
+//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' $whereGuid AND view='1' order by name ASC");
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+//$products_varieties=[];
+//$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+//foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+//$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
+//foreach($data as $row) $fieldsPropertyArray[$row["field_id"]][]=$row;
+ /*
+if(empty($OrderData["parent_id"])) { //если это материнская - главная закупка
+ $date_start=$OrderData["date_start"]; // узнаем точку времени от которой считать продажи и списания
+} else {
+ // иначе идем к родителю и узнаем дату матери к которой будем привязываться
+ $date_start=$db::getValue("SELECT DATE_FORMAT(date_start, '%Y-%m-%d') as date_start FROM store_orders WHERE id=?",[$row["parent_id"]]);
+}
+
+*/
+// настройки для срезки
+$configGroupProducts["flowers"]["day_sales"]=7;
+$configGroupProducts["flowers"]["day_write_offs"]=7;
+//для горшечки
+$configGroupProducts["potted"]["day_sales"]=14;
+$configGroupProducts["potted"]["day_write_offs"]=14;
+//для упаковки
+$configGroupProducts["wrap"]["day_sales"]=30;
+$configGroupProducts["wrap"]["day_write_offs"]=30;
+
+
+
+
+
+// статусы закупок - массивы с доступами к полям
+$data=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];
+$store_orders_status_description[$row["id"]]=$row["description"];
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
+$statuses_stores_show[$row["id"]]=$row["stores_show"];
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+}
+
+
+
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
+foreach($data as $row) {
+ $fieldsRows[$row["name_eng"]]=$row;
+ // $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
+ $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]); //считаем поля и зависимые поля рекурсивно
+ if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT *, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, DATE_FORMAT(date_add, '%Y-%m-%d') as date_add,
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"];
+$date_update=$OrderData["date_update"];
+$date_start_division=$OrderData["division_date"];
+$order_date_add=$OrderData["date_add"];
+$orderCityId=$OrderData["city_id"];
+$related_order_id=$OrderData["related_order_id"];
+
+
+
+foreach($statuses_dostup[$status_order_id][$group_id] as $fieldid => $arrs) {
+ $dostup_fields[$fieldid]=$arrs["dostup"];
+ $bg_fields[$fieldid]=$arrs["bg"];
+}
+
+
+
+//$storesOrderArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store'" );
+
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$orderStoresArrayRelation_in="";
+$orderStoresArrayRelation=[];
+
+$k=0; $wr="";
+foreach($data as $row) {
+ $orderStoresArrayRelation[]=$row["store_id"];
+ if($k!=0) $wr .=","; $wr .="'".$row["store_id"]."'";
+ $k++;
+}
+
+if(!empty($wr)) $orderStoresArrayRelation_in=" IN ($wr)";
+
+// формируем условие выборки вхождение IN для запросов к таблицам - на выходе строка с условием product_id
+function getWhereInProductsSqlText() {
+global $db,$providersIdInThisOrder,$ProductsOptions,$products;
+
+ // формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+
+ //пробегаемся по провайдерам
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id, o.shipments_group_id FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) {
+ if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ // $prov[$row["id"]]=$row["provider_id"];
+ $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+ $ProductsOptions[$row["id"]]["parent_id"]=$row["parent_id"];
+ $ProductsOptions[$row["id"]]["shipments_group_id"]=$row["shipments_group_id"];
+
+ $k++;
+ }
+$whereInProductsId .=")";
+return $whereInProductsId;
+}
+
+$whereInProductsId=getWhereInProductsSqlText();
+
+// массив с группами и продуктами в группе Группы нужны для подсчета статистики продаж списаний будет использоваться при подсчете канкретных полей
+function getProductGroupArray($products) {
+ global $db,$ProductsOptions;
+
+$products_class=[]; // получаем массив категория товаров - к какой группе относится
+$data=$db::getRows("SELECT category_id,tip FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data as $row) $products_class[$row["category_id"]]=$row["tip"];
+
+//разбиваем продукты по группам - у каждой группы будет свой запрос
+$productGroupArray=[];
+foreach($products as $pid => $pName) {
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+// если это срезка у нее нет группы
+if(empty($tip)) {
+ $daysCounterSales=7; $daysCounterWriteOffs=7; // дней продаж и дней на списание для этой категории
+ $productGroupArray["flowers"][]=$pid;
+
+}elseif($tip=="potted") { $daysCounterSales=14; $daysCounterWriteOffs=14; $productGroupArray["potted"][]=$pid; }
+elseif($tip=="wrap") { $daysCounterSales=30; $daysCounterWriteOffs=30; $productGroupArray["wrap"][]=$pid; }
+//echo"<br> $pid => $pName $tip $categoryId";
+}
+
+return $productGroupArray;
+
+}
+
+//$productGroupArray=getProductGroupArray($products);
+
+
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
+WHERE p.id $whereInProductsId AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+$providers_products[$row["provider_id"]][]=$row["id"];
+if(!empty($row["colors"])) $productsColorsArray[$row["id"]]=explode(";",$row["colors"]);
+}
+
+
+
+
+// возвращаем css класс по значению ячейки
+function returnRowCssClassByFieldValue($fieldName,$value){
+ global $fieldsRows;
+ $valueCss="";
+ if(!empty($fieldsRows[$fieldName]["property"] )) {
+ foreach($fieldsRows[$fieldName]["property"] as $idf => $row) {
+ if($row["type"]==">") if($value>$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]==">=") if($value>=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="=") if($value==$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<=") if($value<=$row["value"]) $valueCss=$row["style_class"];
+ if($row["type"]=="<") if($value<$row["value"]) $valueCss=$row["style_class"];
+
+}
+}
+ return $valueCss;
+}
+
+
+function getDataFiledsData($orderId) {
+global $db;
+// готовим массим со всеми данными по столбцам по каждому товару магазину и цвету Если NULL - то это сумма по магазинам и по цветам
+$dataF=$db::getRows("SELECT field_name,product_id,store_id,if(value_text!='',value_text,value) as value,color FROM store_orders_fields_data
+WHERE order_id=?",[$orderId]);
+foreach($dataF as $row) {
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ if(empty($row["color"])) $row["color"]="NULL";
+ $FiledsData[$row["field_name"]][$row["product_id"]][$row["store_id"]][$row["color"]] = $row["value"];
+ // if(!empty($row["title"])) $FiledsData["title__".$row["field_name"]][$row["product_id"]][$storeId][$color]=$row["title"];
+ }
+return $FiledsData;
+}
+
+
+
+//показываем части закупок привязанные к закупке
+function printRelatedOrders(){
+global $db, $related_order_id,$orderId;
+$store_orders=$db::mapping("SELECT id,name FROM store_orders WHERE id!=? AND
+((related_order_id=? and related_order_id>0) or id=? or (related_order_id=? and related_order_id>0) )
+",[$orderId,$related_order_id,$related_order_id,$orderId]);
+ if(!empty($store_orders)) {
+ echo"связанные закупки: ";
+ foreach($store_orders as $id => $name) {
+ echo'<a href="/shipment/'.$act.'/?id='.$id.'" class="btn btn-sm btn-warning m-1">'.$name.'</a>';
+ }
+ }
+}
+
+
+//показываем панель со статусом и магазинами в зависимости от доступа
+function showOrderStoresPanel(){
+global $db, $related_order_id, $status_order_id, $status_edit_dostup, $orderCityId, $store_orders_status_description, $storesArray, $store_id, $whereInProductsId, $store_orders_statuses, $statuses_stores_show,$whereGuid,$act,$orderId,$group_id;
+
+
+echo'<form method=post action="/shipment/'.$act.'/?id='.$orderId.'">
+<table><td>Статус:</td><td><span class="tag">'. $store_orders_statuses[$status_order_id] .' </span> </td>';
+
+
+if(!empty($status_edit_dostup[$status_order_id][$group_id])) {
+echo'<td>можно изменять на</td><td> <select class="form-control" name=status_new>';
+foreach($status_edit_dostup[$status_order_id][$group_id] as $v) {
+ echo '<option value="'.$v.'">'.$store_orders_statuses[$v].'</option> ';
+
+}
+echo'</select></td><td>
+<button class="btn btn-indigo" type=submit name=edit_status value=1>изменить статус</button></td>';
+}
+
+echo'</table></form>';
+
+
+$nameCity=$db::getValue("SELECT name FROM universal_catalog_item WHERE id=?",[$orderCityId]);
+//echo '<div style="border-bottom:1px #cdcdcd solid; background:#e6e6e6; margin-bottom:2rem;"> ';
+
+$data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+$storesArrayRelation=[];
+$orderStoresArrayRelation_in=" IN (";
+$k=1;
+foreach($data as $row) {
+ $storesArrayRelation[]=$row["store_id"];
+
+
+ $orderStoresArrayRelation_in .="'".$row["store_id"]."'";
+
+ if($k!=count($data)) $orderStoresArrayRelation_in .=",";
+ $k++;
+}
+
+$orderStoresArrayRelation_in .=")";
+//echo'</div>';
+
+
+//показываем магазины если статус закупки подразумевает разбивку данных по магазинам
+if($statuses_stores_show[$status_order_id]) {
+
+$stores_arr=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' AND id $orderStoresArrayRelation_in order by name ASC");
+$stores_cnt=count($stores_arr);
+
+$vnesli=$db::getValue("SELECT count(*) as cnt FROM store_order_status
+WHERE order_id=? AND status_id=? AND status=1 group BY order_id",[$orderId,$status_order_id]);
+
+
+$store_order_status=array();
+$data2=$db::getRows("SELECT store_id,status FROM store_order_status WHERE order_id=? AND status_id=? ",[$orderId,$status_order_id]);
+foreach($data2 as $row2) $store_order_status_value[$row2["store_id"]]=$row2["status"];
+
+
+
+if($vnesli>0)
+echo"<span title=\"Статус у заказа можно поменять если все магазины внесут данные\">данные внесли <b>$vnesli</b> из $stores_cnt магазинов</span>";
+
+if($vnesli==$stores_cnt) echo"<a href=\"\" class=\"btn btn-success btn-lg m-3\">меняем статус на следующий!!!</a>";
+
+echo'<div class="row"><div class="col-12">';
+
+$group_show_percent_array=[50,11];
+
+// считаем только если нам необходимо. выполнено условия что это нужная группа пользхвоателя
+if(in_array($_SESSION["group_id"],$group_show_percent_array) ) {
+
+$data=$db::getRows("SELECT product_id FROM store_orders_fields_data WHERE
+order_id=? AND product_id $whereInProductsId AND field_name='sales_cnt' AND color='' AND store_id='' AND value>0 group by product_id",[$orderId]);
+$whereInProductSaleId="";
+$productsIds=[];
+$i=0;
+foreach($data as $row) {
+ $whereInProductSaleId .=" '".$row["product_id"]."' ";
+ $productsIds[]=$row["product_id"];
+ if($i<(count($data)-1)) $whereInProductSaleId .=" , ";
+ $i++;
+}
+
+
+
+//echo"<br>Всего товаров ".count($productsIds)." = $orderId";
+
+if($whereInProductSaleId) {
+$storeCount=[];
+$data=$db::getRows("SELECT product_id, store_id FROM store_orders_fields_data WHERE
+order_id=? AND product_id IN ($whereInProductSaleId) AND field_name='quantity_zakup_new' AND color='' AND store_id!='' AND value>0 group by product_id, store_id",[$orderId]);
+ foreach($data as $row) {
+ $storeCount[$row["store_id"]] +=1;
+
+ }
+
+$storeCount2=[];
+ foreach($storeCount as $sid => $cnt) {
+ $storeCount2[$sid]=round(($cnt/count($productsIds))*100);
+ }
+}
+
+}
+
+echo'
+<a href="/shipment/'.$act.'/?id='.$orderId.'" class="btn btn-'; if(empty($store_id)) echo'success'; else echo'danger'; echo' m-1">Весь заказ '.$nameCity.'</a>';
+
+foreach($storesArray as $strid=>$namestore){
+
+
+if(in_array($strid,$storesArrayRelation) or empty($orderCityId)) {
+echo"<a href=\"/shipment/$act/?store_id=$strid&id=$orderId\" class=\"btn btn-sm btn-";
+
+if($store_order_status_value[$strid]) echo'outline-';
+if($store_id==$strid) { echo"success"; } else echo"info"; echo" m-1\"> ";
+if($store_order_status_value[$strid]==1) echo"<i class=\"fe fe-check me-2\"></i>";
+echo"$namestore ";
+// массив с группами-ролями тех кто может просматривать заполеннность по магазинам
+if($status_order_id==2 and in_array($_SESSION["group_id"],$group_show_percent_array) and !empty($storeCount2[$strid])) {
+
+ echo" <span class=\"btn btn-info btn-sm ml-1\" title=\"".$storeCount[$strid]." из ".count($productsIds)."\">".$storeCount2[$strid]."%</span>";
+}
+echo"</a>";
+} else {
+
+// echo'<span class="btn btn-danger">к городу нет доступа '.$namestore.'</span>';
+
+}
+
+
+
+}
+echo'</div></div>';
+
+
+//////
+$status_store="";
+if(!empty($store_id)) {
+
+if(!empty($_GET["status"]) and !empty($store_id) and !empty($orderId)) {
+$db::sql("INSERT IGNORE INTO store_order_status SET order_id=?, store_id=?, status_id=?, status=?, date=NOW(), admin_id=? ",
+[$orderId,$store_id,$status_order_id,1,$_SESSION["admin_id"]]);
+}
+
+$store_order_status_value=$db::getValue("SELECT status FROM store_order_status WHERE order_id=? AND store_id=? AND status_id=?",[$orderId,$store_id,$status_order_id]);
+
+
+$status_store=" <span class=\"btn btn-lime m-1\">".$storesArray[$store_id]."</span>:";
+
+if(!empty($store_order_status_value)) $status_store .="<a href=\"/shipment/$act/?id=$orderId&status=0&store_id=$store_id\" class=\"btn btn-success\">внесено</a>";
+else $status_store .="<a class=\"btn btn-danger\" href=\"/shipment/$act/?id=$orderId&status=1&store_id=$store_id\" >не внесено</a>";
+
+
+echo $status_store;
+
+
+
+
+
+
+}
+
+///////
+
+
+
+}
+
+
+printRelatedOrders();
+
+
+}
+
+
+
+
+
+// получаем занчение перменнй по ее названию товару и магазину и цвету
+function getValueFieldTrue($field_name,$productId,$storeId="NULL",$color="NULL"){
+global $FiledsData, $fieldsRows, $orderId;
+
+ if(empty($storeId)) $storeId="NULL";
+ if(empty($color)) $color="NULL";
+
+ $colorFirst=$color;
+ $type_field=$fieldsRows[$field_name]["field_type"];
+
+// глобальные данные без привязки к магазину
+ if(in_array($field_name,
+ ["division_ratio","division_store_ratio",
+ "purchase_price",
+ "division_auto_need_all"
+ ,"quantity_zakup_fact"
+ ,"quantity_warehouseman_fact"
+ ,"storehouse_balance"
+ ,"min_lot"
+ ,"min_order"
+ ,"purchase_fact_difference"
+ ,"division_hand_summ"
+ ,"division_auto_all"
+ ,"division_summ_all"
+ ,"delta_zakup"
+ ,"quantity_zakup"
+ ,"quantity_zakup_fact_summa"
+ ,"comment_zakup"
+ ,"quantity_zakup_info"
+ ,"purchase_kust_summ"
+ ,"quantity_zakup_fact_week"
+ ,"quantity_purchase_summ"
+ ,"delta_rejection"
+ ,"quantity_warehouseman_defective"
+ ,"write_offs_comments_all"
+ ,"goods_in_transit"
+ ,"auto_purchase_formula_all"
+ ,"quantity_storage"])
+ ) {$storeId="NULL"; $color="NULL"; }
+
+
+ if(in_array($field_name,["quantity_zakup_fact","quantity_warehouseman_fact","delta_zakup","quantity_zakup",
+ "purchase_logistic",
+ "cost_price_auto",
+ "cost_price_summ",
+ "quantity_zakup_fact","quantity_zakup_info","additional_quantity","quantity_warehouseman_defective","quantity_warehouseman_fact_related",
+ "quantity_warehouseman_fact_defective_related","quantity_warehouseman_fact_summ"])
+ ) {$storeId="NULL"; $color=$colorFirst; }
+
+
+ $value=$FiledsData[$field_name][$productId][$storeId][$color];
+
+//$value=$field_name;
+ $tip=$fieldsRows[$field_name]["tip"];
+
+ if($field_name=="color_percent") {
+ //$tip="string";
+ //$value="p=$productId store= $storeId v=".$FiledsData[$field_name][$productId][$storeId][$color];
+ $value=round($FiledsData[$field_name][$productId][$storeId][$color],2);
+ }
+
+
+$value_title=$FiledsData["title__".$field_name][$productId][$storeId][$color];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId][$storeId]["NULL"];
+if(empty($value_title)) $value_title=$FiledsData["title__".$field_name][$productId]["NULL"]["NULL"];
+//$value_title=" $field_name $productId $storeId $color ";
+
+if($tip!="string" and $tip!="double" ) $value=round($value);
+$value=str_replace('.000','',$value);
+if($tip=="double") $value=round($value,2);
+
+
+if(empty($array)) $array=["value"=>$value,"title"=>$value_title];
+
+return $array;
+}
+
+
+// вывод значения в ячейке будто-то текст или полее ввода
+function printFieldType($valueArray,$fieldName,$productId,$storeId,$color=""){
+global $fieldsRows,$FiledsData ;
+
+
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
+
+ $colorName=trim(str_replace(['\\','/'],['',''],$color));
+ $md5Color=md5($color);
+ $show=1;
+
+ // if($storeId=="" and in_array($fieldName,["quantity_zakup_new"])) { $show=0; }
+
+ if(!empty($color) and $color!='NULL') {
+ $nameInput='colors['.$fieldName.']['.$productId.']['.$colorName.']';
+ $idInput=''.$fieldName.''.$productId.''.$md5Color.'';
+ $onchange='ajaxEditFieldColorValue(\''.$fieldName.'\',\''.$productId.'\',\''.$colorName.'\',\''.$md5Color.'\')';
+ if(!empty($storeId)) {
+ if($fieldsRows[$fieldName]["store_save"]==1 and $fieldsRows[$fieldName]["colors_save"]==1) $show=1; else $show=0;
+
+ if(in_array($fieldName,["quantity_warehouseman_fact","quantity_zakup","quantity_zakup_info","quantity_zakup_fact"])) $show=1;
+
+
+ }
+ }
+ else {
+ $nameInput=''.$fieldName.'['.$productId.']';
+ $idInput=''.$fieldName.''.$productId.'';
+ $onchange='ajaxEditFieldValue(\''.$fieldName.'\',\''.$productId.'\',\'NULL\')';
+
+ }
+
+ if(in_array($fieldsRows[$fieldName]["type"],["numeric","number","input","number"]) and $show==1) {
+ echo'<input type=numeric onchange="'.$onchange.'" min="0" id="'.$idInput.'" name='.$nameInput.' class="form-control" value="'.$value.'"';
+ if(!empty($fieldsRows[$fieldName]["pattern"])) echo ' pattern="'.$fieldsRows[$fieldName]["pattern"].'"';
+ if(isset($fieldsRows[$fieldName]["step"])) echo ' step="'.$fieldsRows[$fieldName]["step"].'"';
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+ echo'>';
+ }
+ elseif($fieldsRows[$fieldName]["type"]=="textarea") {
+ echo'<textarea rows=1 style="min-width:200px;width:200px;" id="'.$idInput.'" onclick="$(this).attr(\'rows\',\'3\');" onchange="'.$onchange.'" name='.$nameInput.' class="form-control"';
+ if(isset($fieldsRows[$fieldName]["placeholder"])) echo ' placeholder="'.$fieldsRows[$fieldName]["placeholder"].'"';
+ echo'>'.$value.'</textarea>';
+ }
+ else {
+ if(!empty($value_title)) echo"<span title=\"$value_title\">$value</span>";
+ else echo $value;
+ }
+
+}
+
+
+// вывод ячейки таблицы с примочками и настройками
+function printFieldTd($fieldName,$productId,$storeId,$color=""){
+global $dostup_fields,$bg_fields,$fieldsRows, $rowArraySum, $FiledsData;
+
+//print_r($dostup_fields); exit();
+
+ $fieldId=$fieldsRows[$fieldName]["id"];
+ $dostup=$dostup_fields[$fieldId];
+ $bg=$bg_fields[$fieldId];
+ // $dostup="edit";
+
+
+
+if($dostup=="edit" or $dostup=="show") {
+
+ //можно ли это поле в принципе редактировать
+ $edit=$fieldsRows[$fieldName]["field_edit"];
+ //можно ли это поле редактировать если выбран магазин
+ if($storeId!="NULL" and !empty($storeId)) {
+ $edit=$fieldsRows[$fieldName]["field_store_edit"];
+ $store_show=$fieldsRows[$fieldName]["store_show"]; //выводим ли значение поля в магазина
+ } else {
+ $store_show=$fieldsRows[$fieldName]["stores_show"]; //выводим ли значение поля без магазина
+
+
+ if($fieldsRows[$fieldName]["field_type"]=="stats_store_hand") $edit=0;
+
+ }
+ // data-bs-toggle="tooltip" data-bs-original-title="'.$fieldsRows[$fieldName]["name_full"].'"
+ echo'<td data-bs-placement="top" class="p-1 text-center ';
+
+
+ $valueArray=getValueFieldTrue($fieldName,$productId,$storeId,$color);
+
+
+ // $value=$FiledsData[$fieldName][$productId][$storeId][$color];
+
+//echo $FiledsData[$fieldName][$productId][$storeId][$color];
+//$tip=$fieldsRows[$fieldName]["tip"];
+//if($tip!="string" and $tip!="double" ) $value=round($value);
+//$value=str_replace('.00','',$value);
+//$value_title="";
+
+
+///$valueArray["value"]=$value;
+//$valueArray["title"]=$value_title;
+
+ $value=$valueArray["value"];
+ $value_title=$valueArray["title"];
+
+if(empty($color)) {
+if($fieldsRows[$fieldName]["row_type_sum"]=="sum") $rowArraySum[$fieldId] +=$value;
+if($fieldsRows[$fieldName]["row_type_sum"]=="avg") { $rowArraySum[$fieldId] +=$value; $rowArraySum["cnt__".$fieldId]++; }
+if($fieldsRows[$fieldName]["row_type_sum"]=="amount") { $rowArraySum[$fieldId] +=$value; }
+}
+
+
+
+$bgNew=returnRowCssClassByFieldValue($fieldName,$value);
+if(!empty($bgNew)) $bg=$bgNew;
+
+
+ if(isset($bg)) echo' '.$bg; echo' td__'.$fieldName.'">';
+
+ // показываем поле настройки поля позволяют.
+ if($store_show==1) {
+
+ if($dostup=="edit" and $edit==1) {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit field_edit=".$fieldsRows[$fieldName]["field_edit"]." ";
+ printFieldType($valueArray,$fieldName,$productId,$storeId,$color);
+
+ }
+ else {
+ if(!empty($value_title)) echo"<span data-bs-placement=\"bottom\" data-bs-toggle=\"tooltip\" data-bs-original-title=\"$value_title\" >$value</span>";
+ else {
+
+ // if($color!="NULL" and $fieldName=="quantity_warehouseman_fact") echo"11$dostup $edit";
+ echo $value;
+ }
+ }
+ }
+ else { //если значение поля не нужно выводить то показвываем заглушку
+
+ echo'XXX';
+
+ }
+ echo'</td>';
+}
+
+
+
+}
+
+
+ function getRelationshipCityStore(){
+ global $db, $orderCityId,$storesArrayAll;
+ $data=$db::getRows("SELECT store_id FROM relationship_city_store WHERE city_id=?",[$orderCityId]);
+ $storesArrayRelation=[];
+ foreach($data as $row) $storesArrayRelation[$row["store_id"]]=$storesArrayAll[$row["store_id"]];
+ return $storesArrayRelation;
+ }
+
+
+
+
+//вставляем данные в таблицу дашборда
+
+function insert_store_orders_fields($massivSQL,$field_name,$massivTitle=[], $print=false) {
+global $db,$orderId,$storeIdToGuidArray,$fieldsRows,$FiledsData;
+
+$field_id=$fieldsRows[$field_name]["id"];
+$type=$fieldsRows[$field_name]["type"];
+
+$divisionFieldsArray=["division_store","division_store_hand","division_store_summ"];
+
+if(in_array($field_name,$divisionFieldsArray)) {
+$db::sql("DELETE FROM store_orders_fields_data WHERE order_id=? AND field_name=? AND (store_id='' or value='0.000' ) ",[$orderId,$field_name]);
+}
+
+
+foreach($massivSQL as $productId =>$array) {
+ foreach($array as $storeId =>$valueArr) {
+ foreach($valueArr as $color =>$value) {
+ // if(empty($color) or $storeId=="NULL") $color="";
+ if($color=="NULL") $color="";
+
+ if(is_numeric($storeId) and !empty($storeIdToGuidArray[$storeId]) and $storeId!='NULL') $storeId=$storeIdToGuidArray[$storeId];
+ if(empty($storeId) or $storeId=="NULL") $storeId="";
+
+ if($type=="string") {$value_text=$value; $value="";}
+ else { $value_text=""; }
+
+ try {
+ if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ if(empty($color)) $colorData="NULL"; else $colorData=$color;
+ $oldvalue=$FiledsData[$field_name][$productId][$storeIdData][$colorData];
+ // $oldtitle=$FiledsData["title__".$field_name][$productId][$storeIdData][$colorData];
+
+ // if($print==true) echo"<br>!!!--------$field_name =$value oldtitle=$oldtitle $title";
+
+ if(($type!="string") or ($type=="string" and $value_text!="")) {
+
+
+ $title=$massivTitle[$productId][$storeIdData][$colorData];
+
+
+ // echo"<br> ++ productId = $productId order_id=$orderId field_name=$field_name storeId=$storeId value=$value";
+ $Insert=true;
+ // if(in_array($field_name,$divisionFieldsArray) and ($value==0 and empty($oldvalue))) $Insert=false;
+
+
+
+ if($Insert) $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title)
+ VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
+ [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+
+
+ }
+
+ if(($type!="string" and !empty($value) and $value!='0.000') or ($type=="string" and $value_text!="") ) {
+ if(($oldvalue==$value or $oldvalue=="$value.000") and $value_text=="") {
+
+ // echo"<br>По этому товару не обновляем так ка значение старое уже есть";
+
+ }
+
+ if(((empty($value) or $value=="0.000" or $oldvalue==$value or $oldvalue=="$value.000" or $oldtitle==$title ) and $type!="string") or ($type=="string" and $value_text=="")) {
+
+ }
+ else {
+ // if($print==true) echo"<br>!!! $field_name =$value";
+ // $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update, title) VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?", [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $title, $value, $value_text , $title]);
+ }
+
+ // if(empty($storeId)) $storeIdData="NULL"; else $storeIdData=$storeId;
+ //if(empty($color)) $colorData="NULL"; else $colorData=$color;
+
+ // echo"<br>$field_name pid=$productId color=$color =$value valuetext=$value_text ";
+
+
+ }
+
+
+ } catch (Exception $e)
+ {
+ echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+ }
+
+
+ }
+ }
+ }
+}
+
+
+
+
+
+
+
+
+
+
+
include_once("templates/top.php");
$modul="shipment";
+error_reporting(E_ALL ^ E_NOTICE);
-
-$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-
+//$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$citiesAll=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='cities'");
+$citiesAll[""]="Без города";
+$citiesAll[0]="Без города";
$data3=$db::getRows("SELECT * FROM store_orders_statuses");
-echo'<h1 class="mt-2">Список закупок <a href="/shipment/add/" class="btn btn-success">+ добавить закупку</a></h3>';
+echo'<h1 class="mt-2">Список закупок ';
+if(in_array($_SESSION["group_id"],[1,21,70,10])) echo'<a href="/shipment/add/" class="btn btn-success">+ добавить закупку</a>';
+echo'</h3>';
$data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start
-FROM store_orders WHERE parent_id!=0 AND date_start>=NOW() - INTERVAL 70 DAY order by delivery_date DESC LIMIT 30");
+FROM store_orders WHERE parent_id!=0 AND date_start>=NOW() - INTERVAL 70 DAY order by delivery_date DESC LIMIT 430");
foreach($data as $row) $dozakupka[$row["parent_id"]][]=$row;
-
$data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start
FROM store_orders WHERE parent_id=0 AND date_start>=NOW() - INTERVAL 70 DAY order by delivery_date DESC LIMIT 30");
foreach($data as $row) {
$in=explode(",",$row["providers_arr"]);
// bg-'.$store_orders_statusesbg[$row["status"]].' $(\'#tr___'.$row["id"].'\').show();
-echo'<div class="expanel expanel-default">
-<div class="expanel-heading">
+echo'<div class="bg-white p-0 m-1">
+<div class="m-0 p-0">';
-<span class="btn btn-light me-1" onclick="$(\'#external__'.$row["id"].'\').toggle();">показать дозакупки</span>
-<a href=/'.$modul.'/fieldsData/?id='.$row["id"].' class="btn btn-default fs-5">
-<span class="btn btn-outline-info">'.$row["id"].'</span> '.$row["name"].'</a>
+$time = strtotime($row["date_start"]);
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+$date2=date('Y-m-d 00:00:00', $time-86400);
+$in=explode(",",$row["providers_arr"]);
+$w="";
+$k=0;
+foreach($in as $pid) { if($k!=0) $w .=", "; $w .="'$pid'"; $k++; }
+$k=0;
+$wnere="";
+foreach($dozakupka[$row["id"]] ?? [] as $rows) {
+if($k!=0) $wnere .=","; $wnere .="'".$rows["id"]."'"; $k++;
+}
+$waybills=$db::getRows("SELECT id,name,status_id,comment FROM shipment_waybills,shipment_waybills_related WHERE
+shipment_waybills_related.order_id=? AND shipment_waybills_related.shipment_waybill_id=shipment_waybills.id ",[$row["id"]]);
+foreach($waybills as $waybill) {
+ echo'<a href="shipment/shipment_waybill/?id='.$waybill["id"].'" class="btn btn-sm btn-info">'.$waybill["name"].'</a>';
+}
+
+
+
+if($dozakupka[$row["id"]])
+echo'<span class="btn btn-light me-1" onclick="$(\'#external__'.$row["id"].'\').toggle();">показать дозакупки ('.count($dozakupka[$row["id"]]).')</span>';
+
+echo'<a href=/'.$modul.'/shipment/?id='.$row["id"].' class="btn btn-default fs-6">
+<span class="btn btn-outline-info">'.$row["id"].'</span> '.$row["name"].'</a>
+<span class="me-2 btn btn-sm bg-'; if(empty($row["city_id"])) echo'danger'; else echo'blue'; echo'">'.$citiesAll[$row["city_id"]].'</span>
+
<div class="d-inline-block dropdown me-2"> <button type="button" class="btn bg-dark-transparent dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">действия</button>
-<div class="dropdown-menu" style="">
-<a class="dropdown-item" href="/shipment/add/?id='.$row["id"].'">правка</a>
+<div class="dropdown-menu" style="">';
+
+
+if($_SESSION["group_id"]!=50) echo'<a class="dropdown-item" href="/shipment/add/?id='.$row["id"].'">правка</a>';
+
+/*<!--
<a class="dropdown-item" href=/'.$modul.'/view/?id='.$row["id"].'>старый интерфейс</a>
<a class="dropdown-item" href=/'.$modul.'/view2/?id='.$row["id"].'>новый интерфейс</a>
-<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$row["id"].' >новый интерфейс2</a>
<a class="dropdown-item" href=/'.$modul.'/division/?id='.$row["id"].'>деление</a>
-<a class="dropdown-item" href=/'.$modul.'/purchase/?id='.$row["id"].'>цвета для кустовых при заказе</a>
+<a class="dropdown-item" href=/'.$modul.'/purchase/?id='.$row["id"].'>цвета для кустовых при заказе</a>-->*/
+echo'
+<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$row["id"].' >старый интерфейс (не актуально)</a>
+<a class="dropdown-item" href=/'.$modul.'/shipment/?id='.$row["id"].' >новый интерфейс</a>
+<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$row["id"].'>деление - по цветам (старое с 3 февраля не актульно)</a>';
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$row["id"].'>деление - печать на складе</a>
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$row["id"].'>деление - по цветам</a>
-<!--division-print-editdivisionPrintEdit-->
+if($row["status"]>=6) echo'<a class="dropdown-item" href=/shipment/divisionStore/?id='.$row["id"].'>деление - на основе заказа магазина <sup class="btn btn-sm btn-success">new</sup></a>
+<a class="dropdown-item" href=/shipment/divisionStorePrint/?id='.$row["id"].'>Печать деления для кладовщика <sup class="btn btn-sm btn-success">new</sup></a>';
-
-</div> </div>
-<a href="/shipment/edit/?id='.$row["id"].'" class="btn btn-warning btn-sm me-2">'.$store_orders_statuses[$row["status"]].'</a>
-<small>дата продаж: '.$row["date_start"].', создано '.$row["date_add"].' <i>'.$row["comment"].'</i></small>
+if(in_array($_SESSION["group_id"],[1,70,10])) {
+ echo'<a class="dropdown-item" href=/shipment/divisionClone/?id='.$row["id"].'>копировать закупку для частичной поставки <sup class="btn btn-sm btn-success">new</sup></a>';
+}
+if($row["status"]>=6) echo'
+<a class="dropdown-item" href=/shipment/storeOrderScore/?id='.$row["id"].'>Оценка качества цветка в поставке <sup class="btn btn-sm btn-success">new</sup></a>';
+echo'</div> </div>
+<span class="btn btn-warning btn-sm me-2">'.$store_orders_statuses[$row["status"]].'</span>
+<small>дата продаж: '.$row["date_start"].', создано:'.$row["date_add"].' <i>'.$row["comment"].'</i></small>
</div>
<div class="expanel-body" id="external__'.$row["id"].'" style="display:none;"> ';
-printStoreOrderFiles($row["id"]);
+//printStoreOrderFiles($row["id"]);
//foreach($in as $pid) echo'<span class="tag m-1">'.$providers[$pid].'</span>';
-$time = strtotime($row["date_start"]);
-$date1=date('Y-m-d 00:00:00', $time-86400*8);
-$date2=date('Y-m-d 00:00:00', $time-86400);
-$in=explode(",",$row["providers_arr"]);
-$w="";
-$k=0;
-foreach($in as $pid) { if($k!=0) $w .=", "; $w .="'$pid'"; $k++; }
-
-
-
-
-$k=0;
-$wnere="";
-foreach($dozakupka[$row["id"]] as $rows) {
-if($k!=0) $wnere .=","; $wnere .="'".$rows["id"]."'"; $k++;
-}
if(!empty($wnere)) $wnere ="'".$row["id"]."', $wnere"; else $wnere="'".$row["id"]."'";
-
-//$data6=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase FROM store_orders_item WHERE order_id in ($wnere) group by order_id ");
+/*
+$data6=$db::getRows("SELECT sum(quantity_purchase) as quantity_purchase FROM store_orders_item WHERE order_id in ($wnere) group by order_id ");
foreach($data6 as $row6) {
$data_values["quantity_purchase"] = $sum_p+$row6["quantity_purchase"];
}
//echo' quantity_zakup_all= '.$row55["quantity_zakup_all"].' summa_all= '.$row55["summa_all"].' ';
}
//echo "заказано штук всего закупщиком $q_all шт. <br>куплено по факту $quantity_zakup_fact_all сумма всего по рознице $s_all кустовые заказ всего в ".$data_values["quantity_purchase"]." шт. ";
-
+*/
/*
$data2=$db::getRows("SELECT p.id, p.name, o.provider_id FROM products_1c_options as o, products_1c as p WHERE o.provider_id in ($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
$k=0; $w2="";
//echo 'sales_cnt='.$data_values["sales_cnt"].' sales_amount='.$data_values["sales_amount"].' '; bg-'.$store_orders_statusesbg[$rows["status"]].'
echo'<div class="row">';
+if (isset($dozakupka[$row["id"]]))
foreach($dozakupka[$row["id"]] as $rows) {
echo'<div class="col-12">
-<div class="ml-4">
- <a href=/'.$modul.'/fieldsData/?id='.$rows["id"].' class="btn btn-white fs-6 me-3">
- <span class="btn btn-outline-info fs-6 me-2">'.$rows["id"].'</span>'.$rows["name"].'
-<span class="me-2 btn btn-sm bg-warning">'.$store_orders_statuses[$rows["status"]].'</span>
+<div class="ml-4">';
+
+if($wnere) {
+$waybills=$db::getRows("SELECT id,name,status_id,comment FROM shipment_waybills,shipment_waybills_related WHERE
+shipment_waybills_related.order_id=? AND shipment_waybills_related.shipment_waybill_id=shipment_waybills.id ",[$rows["id"]]);
+foreach($waybills as $waybill) {
+ echo'<a href="shipment/shipment_waybill/?id='.$waybill["id"].'" class="btn btn-sm btn-info">'.$waybill["name"].'</a>';
+}
+}
+
+
+echo'
+ <a href=/'.$modul.'/shipment/?id='.$rows["id"].' class="btn btn-white fs-6 me-1">
+ <span class="btn btn-outline-info fs-6 me-1">'.$rows["id"].'</span>'.$rows["name"].'
+
+ <span class="me-1 btn btn-sm bg-'; if(empty($row["city_id"])) echo'danger'; else echo'blue'; echo'">'.$citiesAll[$rows["city_id"]].'</span>
+
+<span class="me-1 btn btn-sm bg-warning">'.$store_orders_statuses[$rows["status"]].'</span>
</a>
<div class="dropdown d-inline-block"> <button type="button" class="btn bg-dark-transparent dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">действия </button>
-<div class="dropdown-menu" style="">
-<a class="dropdown-item" href="/shipment/add/?id='.$rows["id"].'">правка</a>
+<div class="dropdown-menu" style="">';
+
+
+if($_SESSION["group_id"]!=50)
+echo'<a class="dropdown-item" href="/shipment/add/?id='.$rows["id"].'">правка</a>';
+/*<!--
<a class="dropdown-item" href=/'.$modul.'/view/?id='.$rows["id"].'>старый интерфейс</a>
<a class="dropdown-item" href=/'.$modul.'/view2/?id='.$rows["id"].'>новый интерфейс</a>
-<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$rows["id"].' >новый интерфейс2</a>
<a class="dropdown-item" href=/'.$modul.'/division/?id='.$rows["id"].'>деление</a>
<a class="dropdown-item" href=/'.$modul.'/purchase/?id='.$rows["id"].'>цвета для кустовых при заказе</a>
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$rows["id"].'>деление - печать на складе</a>
-<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$rows["id"].'>деление - по цветам</a>
-</div> </div>
+-->*/
+echo'
+
+<a class="dropdown-item" href=/'.$modul.'/fieldsData/?id='.$rows["id"].' >старый интерфейс (не актуально)</a>
+<a class="dropdown-item" href=/'.$modul.'/shipment/?id='.$row["id"].' >новый интерфейс</a>
+<a class="dropdown-item" href=/shipment/divisionPrintEdit/?id='.$rows["id"].'>деление - по цветам (старое - с 3 февраля не актуально)</a>';
+
+if($rows["status"]>=6)
+echo'<a class="dropdown-item" href=/shipment/divisionStore/?id='.$rows["id"].'>деление - на основе заказа магазина <sup class="btn btn-sm btn-success">new</sup></a>
+<a class="dropdown-item" href=/shipment/divisionStorePrint/?id='.$row["id"].'>Печать деления для кладовщика <sup class="btn btn-sm btn-success">new</sup></a>';
+
+if(in_array($_SESSION["group_id"],[1,70,10])) {
+ echo'<a class="dropdown-item" href=/shipment/divisionClone/?id='.$row["id"].'>копировать закупку для частичной поставки <sup class="btn btn-sm btn-success">new</sup></a>';
+}
+if($row["status"]>=6) echo'
+<a class="dropdown-item" href=/shipment/storeOrderScore/?id='.$row["id"].'>Оценка качества цветка в поставке <sup class="btn btn-sm btn-success">new</sup></a>';
+
+
+echo'</div> </div>
<i>'.$rows["comment"].'</i>';
-printStoreOrderFiles($rows["id"]);
+//printStoreOrderFiles($rows["id"]);
echo'</div></div>';
}
table.zakupka{ margin:0 0 0.2rem 0; border:1px #cdcdcd solid;}
table.zakupka tbody td{ padding:0.2rem;}
table.zakupka tbody td big{ font-weight:bolder; font-size:1.3rem;}
-table.zakupka td a:hover{text-decoration:underline;}
-
-
-
-</style>';
+table.zakupka td a:hover{text-decoration:underline;}</style>';
include"templates/bottom.php";
--- /dev/null
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+
+$tip="product";
+if(!empty($_POST["search"])) $s=htmlentities($_POST["search"]);
+if(!empty($_POST["id"])) $id=intval($_POST["id"]);
+
+if(strlen($s)>2){
+
+echo'<table class="table table-hover skr" id=iddd'.$id.' onclick="$(this).hide();" style="background:#fff;max-height:300px; z-index:3333; overflow:scroll; width:auto; min-width:200px;">
+<tbody>';
+echo "<tr><td onclick=\"$('.skr').hide();\">закрыть </td></tr>";
+
+
+if($tip=="product") {
+//$wher=" AND p.parent_id!='df5ff636-541f-11ec-a5bf-b42e991aff6c' AND p.parent_id!='df5ff634-541f-11ec-a5bf-b42e991aff6c' AND p.parent_id!='bcdf8025-4e44-11ea-a8ff-b42e991aff6c' " ;
+$data=$db::getRows("SELECT * FROM products_1c WHERE tip='products_group' ");
+foreach($data as $row) $group[$row["id"]]=$row["name"];
+
+
+$data=$db::getRows("SELECT p.id, p.parent_id, p.name, p.code,p.articule,prices.price FROM products_1c p, prices
+WHERE p.id=prices.product_id AND p.tip='products' AND p.view=1 AND p.name LIKE '%$s%' order by prices.price DESC LIMIT 20");
+
+} //
+
+//echo "SELECT id, name FROM products_1c WHERE tip=? AND name LIKE $s order by name ";
+foreach($data as $row) {
+echo "<tr onclick=\"show_new_inputs('div_new_inputs','".$row["id"]."');\"><td>".$row["name"]."";
+
+if(!empty($group[$row["parent_id"]])) {
+echo"<small class=\"btn btn-info btn-sm\">(".$group[$row["parent_id"]].")</small>";
+}
+
+if(!empty($row["price"])) echo" <small>".round($row["price"],2)."руб</small>";
+
+echo"</td></tr>";
+
+}
+
+
+
+echo'</tbody></table>';
+}
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
+
+$product_id=htmlentities($_REQUEST["product_id"]);
+
+if(empty($product_id)) exit("Укажите к какому товары вы хотите применить сортировку");
+$productName=$db::getValue("SELECT name FROM products_1c WHERE id=?",[$product_id]);
+
+
+
+echo'<h4 class="page-title mb-0 text-primary">Сортировка '.$productName.'</h4>
+<p>Приоритет по магазину для деления расставляет назначенный человек или коллектив. СОгласно этого списка сверху вниз будут начисляться товары по инимальному лоту деления.
+Пока потребность каждого магазина не будет заполнена. Галочка рядом с магазином включает магазин в распределение товара.
+
+Вспомогательный столбец по числу средних продаж за неделю за последние 28 дней помогает понять какой магазин стабильнее всего продает товар.
+И на основе этих данных перемещать в очереди магазин. Цвет указывает на принадлежность к кусту.
+</p>
+';
+
+
+
+
+
+if(!empty($_POST["posit"]) and !empty($product_id)) {
+$i=count($_POST["posit"]);
+foreach($_POST["posit"] as $storeId =>$p) {
+$storeId=htmlentities($storeId);
+$view=htmlentities($_POST["view"][$storeId]);
+if($view=="on") $view=1; else $view=0;
+
+
+$db::sql("INSERT IGNORE INTO store_orders_product_store_sort SET product_id=?, store_id=?, posit=?, view=? ON DUPLICATE KEY UPDATE posit=?, view=?",[$product_id, $storeId,$i,$view,$i,$view]);
+$i--;
+}
+mess("Сохранили!");
+}
+
+
+$kustArrayReverse=[];
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+$kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+
+$storesArray=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view=1 order by name ASC");
+$view=[];
+$storesArray2=$storesArray;
+foreach($storesArray2 as $storeId => $cnt3) {
+ $storesArray2[$storeId]=0;
+
+}
+
+
+
+
+$ctnS=0;
+$data=$db::getRows("SELECT store_id,posit,view FROM store_orders_product_store_sort WHERE product_id=? ",[$product_id]);
+foreach($data as $row) {
+$ctnS++;
+$posit[$row["store_id"]]=$row["posit"];
+$view[$row["store_id"]]=$row["view"];
+$storesArray2[$row["store_id"]]=$row["posit"];
+}
+
+
+if(empty($ctnS)) {
+
+echo"<font color=red>По этому товару еще небыла определена сортировка приориетов по магазинам.
+Нажмите сохранить чтобы отсортироват согласно средним продажам за последние 4 недели.
+Потом можете поменять сортировку вручную
+</font>";
+
+$day_sales=7*4;
+$data2=$db::getRows("SELECT s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id=?
+AND s.store_id
+AND s.date<=NOW() AND s.date>=NOW() -interval $day_sales day group BY s.store_id order by sale_cnt DESC",[$product_id]);
+$k=1;
+ foreach($data2 as $row2) {
+ $cnt=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+ $storesArray2[$row2["store_id"]]=$cnt;
+ $storesSales[$row2["store_id"]]=$cnt;
+ $view[$row2["store_id"]]=1;
+ echo"<br>$k) ".$storesArray[$row2["store_id"]]." = $cnt ";
+ $k++;
+ }
+
+}
+
+else {
+
+ $day_sales=7*4;
+$data2=$db::getRows("SELECT s.store_id_1c as store_id,sum(if(s.operation='Продажа',i.quantity,0)) as sale_cnt, sum(if(s.operation='Возврат',i.quantity,0)) as vozvr_cnt
+FROM sales as s, sales_products as i
+WHERE s.id=i.check_id AND i.product_id=?
+AND s.date<=NOW() AND s.date>=NOW() -interval $day_sales day group BY s.store_id order by sale_cnt DESC",[$product_id]);
+ foreach($data2 as $row2) {
+ $storesSales[$row2["store_id"]]=round(($row2["sale_cnt"]-$row2["vozvr_cnt"])/4);
+ }
+}
+
+
+$storesWriteOffs=[];
+$data2=$db::getRows("SELECT sum(p.quantity) as cnt, w.store_id
+FROM write_offs as w, write_offs_products as p
+WHERE p.write_offs_id=w.id
+AND w.type='Брак'
+AND p.product_id=?
+AND w.date<=NOW()
+AND w.date>=NOW() -interval $day_sales day group BY w.store_id",[$product_id]);
+ foreach($data2 as $row2) {
+ $storesWriteOffs[$row2["store_id"]]=round($row2["cnt"]/4);
+ }
+
+
+ arsort($storesArray2);
+
+echo'<form method=post action="/shipment/productStoresSort/?product_id='.$product_id.'">
+
+<div class="table-responsive">
+<table class="table" id="recipeTable">
+<thead><tr><th>перетащить</th><th>ср. продажи шт.</th>
+<th>списание шт.</th>
+<th>вкл.</th><th style="width:90%">Магазин</th></tr></thead>
+<tbody id=draganddropTable>';
+foreach($storesArray2 as $storeId => $name) {
+
+echo'<tr><td class="drag-handler"></td><td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'" class="fs-6 text-center">
+'.$storesSales[$storeId].'</td>
+<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'" class="fs-6 text-center">
+'.$storesWriteOffs[$storeId].'</td>
+
+<td>
+<input type=checkbox name=view['.$storeId.'] '; if($view[$storeId]==1) echo ' checked=checked'; echo'">
+</td><td>
+
+'.$storesArray[$storeId].'
+<input type=hidden name=posit['.$storeId.'] value="'.$posit[$storeId].'">
+
+
+</td></tr>';
+
+}
+
+
+
+
+
+echo'</tbody></table><button class="btn btn-success" name="save_config" value=1>сохранить</button></div></form>';
+
+
+
+
+$_CONFIG["jscss"]=' <script src="https://sortablejs.github.io/Sortable/Sortable.js"></script>
+<script>
+
+$(document).ready(function () {
+
+
+ var $tableBody = $("#draganddropTable");
+
+ Sortable.create(
+ $tableBody[0],
+ {
+ animation: 250,
+ scroll: true,
+ handle: ".drag-handler",
+ onEnd: function () {
+
+ }
+ }
+ );
+
+
+});
+</script>
+<style>
+
+.recipe__ingredients {
+ float: left;
+}
+.recipe-table {
+ position: relative;
+ padding: 1em;
+ border: 1px solid #DDD;
+ box-shadow: 0 15px 10px -10px rgba(31, 31, 31, 0.5);
+ z-index: 10;
+}
+
+.recipe-table__cell {
+ vertical-align: top;
+ padding: 3px 5px;
+ border-bottom:1px #e6e6e6 solid;
+}
+.recipe__text-field {
+ margin:0;
+ padding: .45em 0.92em;
+ font-size: 1em;
+ line-height: 1.4;
+ color: #555555;
+ background-color: #FFF;
+ background-image: none;
+ border: 1px solid #CCC;
+ border-left:1px solid #CCC;
+}
+.recipe-table__add-row {
+ margin-top: 0;
+ position: relative;
+ border-top: 1px solid #EEE;
+ z-index: 8;
+}
+
+.recipe-table__add-row-btn {
+ display: block;
+ cursor: pointer;
+ position: absolute;
+ right: 0;
+ left: 0;
+ width: 4em;
+ margin: 0 auto;
+ -webkit-transition: all .2s easy-in;
+ transition: all .2s easy-in;
+ text-align: center;
+ opacity: 0.5;
+ color: #fff;
+ border: 1px solid #16A085;
+ border-bottom-right-radius: 1em;
+ border-bottom-left-radius: 1em;
+ background: #16A085;
+ height: 1.5em;
+ line-height: 1.5em;
+}
+.recipe-table__add-row-btn:hover {
+ opacity: 1;
+}
+
+.recipe-table__del-row-btn {
+ cursor: pointer;
+ display: inline-block;
+ padding: .45em 0.92em;
+ font-size: 1em;
+ line-height: 1.4;
+ border: 1px solid #F39C12;
+ color: #F39C12;
+ text-decoration: none;
+ transition: all .3s;
+ text-align: center;
+ background-color: #fff;
+}
+.recipe-table__del-row-btn:hover {
+ background: #F39C12;
+ color: #fff;
+}
+
+
+.drag-handler {
+ width: 1.4em;
+ position: relative;
+ background-color: #E4E6EB;
+ background-image: linear-gradient(45deg, #E4E6EB, #E4E6EB 2px, #fff 2px, #fff 4px, #E4E6EB 4px, #E4E6EB 9px, #fff 9px, #fff 11px, #E4E6EB 11px, #E4E6EB 16px, #fff 16px, #fff 18px, #E4E6EB 18px, #E4E6EB 22px);
+ background-size: 10px 20px;
+ cursor: move;
+ border-top: 2px solid #FFF;
+ border-bottom: 2px solid #FFF;
+}
+
+.drag-handler:active {
+ background-image: linear-gradient(45deg, #bab86c, #bab86c 2px, #fff 2px, #fff 4px, #bab86c 4px, #bab86c 9px, #fff 9px, #fff 11px, #bab86c 11px, #bab86c 16px, #fff 16px, #fff 18px, #bab86c 18px, #bab86c 22px);
+ background-size: 10px 20px;
+}
+#recipeTable tr th{font-size:0.7rem;}
+
+</style>
+
+
+
+';
+
+
+include"templates/bottom.php";
+
+
+
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+
+$time = strtotime('this week monday, 00:00'); // текущий понедельник в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time); // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+$db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+$db::sql("INSERT IGNORE INTO store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+mess("Статус изменен");
+}
+
+
+
+include"modul/shipment/functionsShipment.php";
+
+include"templates/top.php";
+
+
+
+
+//<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span>
+//$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70','50')");
+echo'<h3 class="page-title mb-0 text-primary">
+<a href="/shipment/" class="btn me-2 btn-light">❮ назад в закупки</a>
+Заказ товара '.$OrderData["name"].' id='.$orderId.'</h3>
+<p> ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b>
+<span onclick="deleteAll();" class="btn btn-danger btn-sm me-2">очистить данные у этой закупки</span>
+</p>';
+
+
+// панель с магазинами
+showOrderStoresPanel();
+
+
+/*<span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span><span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>*/
+
+//если выбран магазин то
+echo'<div id=edit_div></div>';
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right w-10">наименование
+
+<span onclick="ajaxUpdateStoreZakup();" class="btn btn-blue btn-sm me-2">пересчитать данные</span>';
+
+if(in_array($_SESSION["group_id"],[1,11,7])) {
+echo'<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>';
+}
+
+echo'</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+$sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+if(!empty($sort)) $sort="ORDER BY FIELD(`id`, $sort) ";
+$data=$db::getRows("SELECT id,name_eng,name,name_full FROM store_orders_fields $sort");
+ // получаем массив с данными по полям из таблицы store_orders_fields_data
+$FiledsData=getDataFiledsData($orderId);
+
+
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+$html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'" onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:110px;">
+<b>'.$row["name"].'</b></th>';
+$thead .=$html;
+$head_td .=$html;
+}
+
+}
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
+AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+}
+
+$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"];
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+if($trCount==20) {
+ $trCount=0;
+ echo $head_td;
+ }
+
+// есловие при котором сччитает счетчик товаров-строк для того чтобы вывести шапку после 20 товаров. Так как если товаров много шапка уходит на верх и непонятно какой столбей отображается
+//if(!empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id == 6)
+//$trCount++;
+
+echo'<tr';
+
+
+if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 7) { echo' class="bg-danger"';
+
+ echo' style="opacity:0.5; display:none;"';
+}
+
+
+
+echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+//if(empty($statuses_stores_show[$status_order_id])) { echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>'; }
+echo''.$name.'';
+if(!$ProductsOptions[$pid]["shipments_group_id"]) echo"*";
+
+//узнаем категорибю товара
+$categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+$tip=$products_class[$categoryId];
+
+
+
+if(count($productsColorsArray[$pid])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+echo'</td>';
+
+foreach($data as $row) printFieldTd($row["name_eng"],$pid,$store_id);
+
+echo'</tr>';
+
+
+//begin colors
+
+foreach($productsColorsArray[$pid] as $color) {
+ $color=trim($color);
+ if(!empty($color)) {
+ echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;">
+
+ <td class="text-right"><span class="btn btn-sm btn-warning me-1">'.$color.'</span>';
+
+if(!empty($products_varieties[$pid][$color])) {
+ echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';
+foreach($products_varieties[$pid][$color] as $k => $var) {
+echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
+}
+echo'</div>';
+}
+
+ foreach($data as $row) {
+ printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+ }
+ echo"</tr>";
+ }
+
+}
+
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+}
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+if($dostup=="edit" or $dostup=="show") {
+ $s="";
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+}
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}
+
+table tr.border td{ border-bottom:1px #cdcdcd solid; color:#fff;}
+</style>';
+
+
+
+
+echo'<h3 class="text-center mt-2">Итого сумма по столбцам</h3>
+<table class="table-stripped width-auto">
+<tbody><tr>';
+foreach($data as $row) {
+$dostup=$dostup_fields[$row["id"]];
+$bg=$bg_fields[$row["id"]];
+$s="";
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
+
+if($fieldsRows[$row["name_eng"]]["summ"]==1 and !empty($s) and ($dostup=="edit" or $dostup=="show")) {
+
+
+if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+ // ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')
+echo'<tr><td class="text-right" title="'.$row["name_full"].' '.$row["name_eng"].'">'.$row["name"].'</td>
+<td class="text-left"><b>'.$s.'</b></td></tr>';
+
+
+}
+}
+
+echo'</tbody></table>';
+
+
+$shipments_group_products=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='shipments_group_products' order by name ASC");
+
+
+//массив с полями по которым будем собирать данные
+//$fieldsStatsArray[]=["sales_4weeks_cnt","sales_4weeks_sum","sales_cnt","sales_amount","quantity_zakup_new","order_supplier_sum"];
+
+
+$field_stats_array=["sales_cnt","sales_4weeks_sum","sales_4weeks_cnt","write_offs_sum","write_downs","write_offs_4week_sum","write_offs_4week_cnt_avg","order_supplier_sum"];
+$field_stats_array_in=implode("','",$field_stats_array);
+$data_field=[];
+ $data=$db::getRows("SELECT field_name, sum(value) as value,product_id FROM store_orders_fields_data WHERE
+ field_name in('$field_stats_array_in') AND value>0
+ AND order_id='$orderId' AND color='' AND store_id!='' group by product_id,field_name");
+ foreach($data as $row) {
+ $shipments_group_id=$ProductsOptions[$row["product_id"]]["shipments_group_id"];
+ $data_field[$row["field_name"]][$shipments_group_id] +=$row["value"];
+ }
+
+
+
+ echo"<div class=\"table-responsive mt-3\"><table class=\"table\">
+ <thead class=\"table-darck\"><tr class=\"zg\"><th>категория</th>";
+ foreach($field_stats_array as $fieldN) {
+ echo"<th style=\"max-width:120px;\"><b>".$fieldsRows[$fieldN]["name"]."</b></th>";
+ }
+
+
+ echo"</tr></thead><tbody>";
+ foreach($shipments_group_products as $shipments_group_id => $name) {
+ if($data_field["sales_4weeks_cnt"][$shipments_group_id]) {
+ echo"<tr><td>$name</td>";
+ foreach($field_stats_array as $fieldN) echo"<td>".$data_field[$fieldN][$shipments_group_id]."</td>";
+ echo"</tr>";
+ }
+
+ }
+ echo"</tbody></table>";
+
+
+
+
+
+$_CONFIG["jscss"] .="<script>
+
+function ajaxUpdateStoreZakup(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStoreZakup/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+
+ }});
+}
+
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+
+ if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, deleteAll:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ window.parent.location.reload();
+ }});
+}
+}
+
+
+</script>";
+
+ $_CONFIG["jscss"] .='<!-- MODAL -->
+ <div class="modal fade" id="modal-7">
+ <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body p-0">
+
+ </div>
+
+ </div>
+</div>
+</div>';
+
+
+
+
+$_CONFIG["jscss"] .='
+<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal; max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+ padding: 0.05rem;
+ background-color: 1px;
+ box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+}
+.zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+}
+
+
+.zak td:hover:before {
+ background-color: #e3e3e3;
+ content: \'\';
+ height: 100%;
+ left: -5000px;
+ position: absolute;
+ top: 0;
+ width: 10000px;
+ z-index: -2;
+}
+
+.zak td:hover:after {
+ background-color: #cdcdcd;
+ content: \'\';
+ height: 10000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+}
+
+
+
+ .zak tbody td input.form-control{font-size:0.8rem;min-width:70px;max-width:100px;font-weight:bold;border:0;border-radius:0;color:#333;padding:0.2rem;margin:0;}
+ .zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+ vertical-align: bottom;
+ line-height: normal;
+}
+table.zak thead b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:left;}
+
+
+</style>
+<script>
+
+function changef(id,typeint)
+{
+var uname=$(\'#\'+id+\'\').val();
+if(typeint==\'double\') uname = uname.replace(/[^0-9.\s]/gi, \'\');
+if(typeint==\'int\') uname = uname.replace(/[^0-9\s]/gi, \'\');
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+function ajaxEditFieldValue(name_eng,product_id,color)
+{
+$.ajax({
+ url: \'/shipment/ajaxField/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+
+ setTimeout(function(){ $(\'.okk\').remove();}, 10000);
+
+ }});
+
+}
+
+
+
+
+function ajaxEditFieldColorValue(name_eng,product_id,color,colormd5)
+{
+
+$.ajax({
+ url: \'/shipment/ajaxField/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$orderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+$(\'#store_id_id\').val()+\'\', product_id:\'\'+product_id+\'\', color: \'\'+color+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+colormd5+\'\').val()+\'\' },
+ success: function(data){
+ $(\'#edit_div\').html(data);
+ }});
+
+}
+
+</script>';
+
+
+
+
+
+include"templates/bottom.php";
+
+
+
+
+
+
+
+
--- /dev/null
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/universal_model.php");
+
+universal_model_form("shipment","store_orders");
+
+
+
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+
+
+$time = strtotime('this week monday, 00:00'); // текущий понедельник в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time); // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_REQUEST["id"])) { $id=(int)$_REQUEST["id"]; } else exit("Укажите ID инвойса");
+
+include"templates/top.php";
+
+$waybill=$db::getRow("SELECT * FROM shipment_waybills WHERE id=?",[$id]);
+
+
+if(!empty($_POST["save"])) {
+ @$waybill_product_id=htmlentities($_POST["waybill_product_id"]);
+ $action=htmlentities($_POST["save"]);
+ $product_id=htmlentities($_POST["product_id"]);
+ $varietie_id=intval($_POST["varietie_id"]);
+ $quantity=intval($_POST["quantity"]);
+ $waybill_id=$id;
+ $price=htmlentities($_POST["price"]);
+ $price_logistic=htmlentities($_POST["price_logistic"]);
+ if($action=="add"){
+ if(!empty($product_id) and !empty($waybill_id) and !empty($quantity)) {
+
+ $cnt=$db::getValue("SELECT count(*) FROM shipment_waybill_products WHERE waybill_id='$waybill_id' AND product_id='$product_id' AND varietie_id='$varietie_id'");
+ if($cnt==0) {
+ $sql="INSERT INTO shipment_waybill_products (quantity,waybill_id,product_id,varietie_id,price,price_logistic)
+ VALUES ('$quantity','$waybill_id','$product_id','$varietie_id','$price','$price_logistic')";
+ $db::sql($sql);
+ mess("Добавили");
+ } else error_mess("Такой продукт с таким сортом уже есть в накладной");
+
+
+
+ }
+ }
+
+ if($action=="edit"){
+ if(!empty($waybill_product_id) and !empty($product_id) and !empty($waybill_id) and !empty($quantity)) {
+ $sql="UPDATE shipment_waybill_products SET quantity='$quantity',
+ product_id='$product_id', varietie_id='$varietie_id', price='$price', price_logistic='$price_logistic')
+ WHERE id='$waybill_product_id' ";
+ $db::sql($sql);
+ mess("Отредактировано");
+ }
+ }
+
+ if($action=="dell"){
+ if(!empty($waybill_product_id)) {
+ $sql="DELETE FROM shipment_waybill_products WHERE id='$waybill_product_id' AND waybill_id='$waybill_id'";
+ $db::sql($sql);
+ mess("Удалили");
+ }
+ }
+
+
+}
+
+
+
+echo '<h5>'.$waybill["name"].'</h5>
+<div class="p-2 m-1">
+ комментарий '.$waybill["comment"].'
+ Наша организация от кого платим '.$waybill["org_id"].'
+ Поставщик '.$waybill["company_id"].'
+ Организация поставщика '.$waybill["partner_org_id"].'
+ Тип накладной '.$waybill["type"].' сумма '.$waybill["summ"].' статус='.$waybill["status"].'</div>';
+
+
+
+$products=$db::mapping("SELECT id,name FROM products_1c WHERE tip='products' ");
+$products_varieties=[]; $products_color=[];
+$data=$db::getRows("SELECT id,product_id,color, name FROM products_varieties WHERE 1 order by posit desc");
+foreach($data as $row) {
+ $products_varieties[$row["product_id"]][$row["id"]] = $row["name"];
+ $products_color[$row["product_id"]][$row["id"]] = $row["color"];
+}
+
+
+
+echo'<table><td>Добавить новый товар</td><td> <input type=text class="form-control form-control-lg poisk-item" placeholder="Поиск по товарам... начините вводить"
+id=std_10 data-id=10 name=exp[10] value=""></td></table>
+<form method=post action="/shipment/shipment_waybill/?id='.$id.'">
+<div id=div_new_inputs></div>
+</form>';
+
+
+$data=$db::getRows("SELECT * FROM shipment_waybill_products WHERE waybill_id=?",[$id]);
+echo'<table class="table table-sm">
+<thead><tr><th>Наименование</th><th>Цвет</th><th>Сорт</th><th>Кол-во</th><th>Цена закупки</th><th>цена логистики</th><th>цена</th></tr>
+</thead><tbody>';
+ foreach($data as $row) {
+ echo'<tr onclick="waybill_products_edit(\''.$row["id"].'\');">
+ <td>'.$products[$row["product_id"]].'</td>
+ <td>'.$products_color[$row["product_id"]][$row["varietie_id"]].'</td>
+ <td>'.$products_varieties[$row["product_id"]][$row["varietie_id"]].'</td>
+ <td>'.$row["quantity"].'</td>
+ <td>'.$row["purchase_price"].'</td>
+ <td>'.$row["price_logistic"].'</td>
+ <td>'.$row["price"].'</td>
+ </tr>';
+
+}
+echo'</tbody></table>';
+
+
+$_CONFIG["jscss"]='
+ <link href="/azea/assets/plugins/select2/select2.min.css" rel="stylesheet" />
+ <script src="/azea/assets/plugins/select2/select2.full.min.js"></script>
+ <script src="/azea/assets/js/select2.js"></script>';
+$_CONFIG["jscss"] .="
+<script>
+
+
+
+function waybill_products_edit(id) {
+$.ajax({
+ url: '/shipment/ajaxProductOption/',
+ method: 'POST',
+ data: '&id='+id+'&action=edit',
+ success: function(data){
+ $('#div_new_inputs').html(data);
+ }
+});
+}
+
+
+function show_new_inputs(id,product_id) {
+$.ajax({
+ url: '/shipment/ajaxProductOption/',
+ method: 'POST',
+ data: '&product_id='+product_id+'',
+ success: function(data){
+ $('#'+id+'').html(data);
+ }
+});
+}
+
+
+$(function(){
+
+ $('td.tdd').each(function (index, element) {
+ input_search($(element).attr('id'),$(element).attr('data-id'));
+ });
+
+
+$('.poisk-item').change(function() {
+var id=$(this).attr('data-id');
+get_select_search(id);
+});
+
+
+$('.guid_input').change(function() {
+var id=$(this).attr('id-data');
+var val=$(this).val();
+ajaxLogSave(id,val);
+});
+
+
+$('.poisk-item').click(function() {
+var id=$(this).attr('data-id');
+if($(this).val()!=='' && $(this).val()!==' ') get_select_search(id);
+});
+
+
+function get_select_search(id) {
+$.ajax({
+ url: '/shipment/poisk-item/',
+ method: 'POST',
+ data: '&id='+id+'&search='+$('#std_'+id).val()+'',
+ success: function(data){
+ $('#std_'+id).after('<div style=\"position:absolute;\">'+data+'</div>');
+ }
+});
+
+}
+
+});
+</script>
+
+
+<style>.bg-danger2{background:#ffd8d8}</style>";
+
+
+
+
+
+include"templates/bottom.php";
\ No newline at end of file
--- /dev/null
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/uni.php");
+include_once("inc/uni2.php");
+
+global $h1,$group_menu,$uni_fields, $forma_sql_table;
+$h1="Добавить "; $group_menu=0; $uni_fields=0;
+$modul="shipment_waybills";
+$forma_sql_table="shipment_waybills";
+$act="add";
+$h1="Добавить инвойс";
+
+
+include"templates/top.php";
+
+construct_modul_form_azea($modul);
+
+
+
--- /dev/null
+<?
+include_once ("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/design_new.php");
+include_once("inc/universal_model.php");
+
+universal_model_form("shipment_waybills","shipment_waybills");
+
+
+
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("templates/top.php");
+$modul="shipment";
+
+$citiesAll=$db::mapping("SELECT id,name FROM universal_catalog_item WHERE catalog_alias='cities'");
+
+$productsAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='products'");
+echo'<h1 class="mt-2">Мониторинг закупок (30 дней от даты добавления)</h3>';
+
+$date1=date("Y-m-d",time()-86400*30);
+$date2=date("Y-m-d",time());
+if(!empty($_REQUEST["date1"])) $date1=htmlentities($_REQUEST["date1"]);
+if(!empty($_REQUEST["date2"])) $date2=htmlentities($_REQUEST["date2"]);
+$where=" date_add>='$date1' AND date_add<='$date2 23:59:59'";
+
+echo"<form method=post role=\"form\" class=\"form-horizontal\" action=\"\">
+<table><tbody>
+<td><input type=date style=\"width:150px;\" class=\"form-control datetime\" value=\"$date1\" name=date1></td>
+<td><input type=date style=\"width:150px;\" class=\"form-control datetime\" value=\"$date2\" name=date2></td>
+<td><button type=submit class=\"btn btn-success\" name=show>собрать статистику</button></td></tbody></table></form>";
+
+$orders=[];
+$data=$db::getRows("SELECT id,name,parent_id, related_order_id, providers_arr, city_id, status
+FROM store_orders WHERE status in('7','6','8') AND $where order by date_start DESC LIMIT 430");
+foreach($data as $row) $orders[$row["id"]]=$row;
+
+$in_orders="";
+$k=1;
+foreach($orders as $id => $order) {
+ $in_orders .="'$id'";
+ if($k<count($orders)) $in_orders .=", ";
+ $k++;
+}
+
+
+$FiledsDataArray=[];
+$dataF=$db::getRows("SELECT field_name, product_id, sum(value) as value
+FROM store_orders_fields_data WHERE
+order_id in ($in_orders) AND color='' AND store_id=''
+AND field_name IN ('quantity_zakup_new','quantity','quantity_fact','quantity_warehouseman_fact','quantity_warehouseman_fact_related',
+'quantity_warehouseman_fact_defective_related','quantity_warehouseman_fact_defective') group by field_name,product_id");
+foreach($dataF as $row) {
+$FiledsDataArray[$row["field_name"]][$row["product_id"]]=(int)$row["value"];
+$products[$row["product_id"]]=$productsAll[$row["product_id"]];
+}
+
+
+echo'<table class="zak">
+<thead><tr><th class="td_product">товар</th><th><b>потребность магазинов</b></th>
+<th><b>закуплено</b></th>
+<th><b>quantity_fact</b></th>
+<th><b>получено по факту</b></th><th><b>процент получено %</b></th>
+<th><b>процент брака %</b></th></tr></thead>
+<tbody>';
+
+foreach($products as $productId => $nameProduct) {
+ if($FiledsDataArray["quantity_zakup_new"][$productId]) {
+
+ $q=$FiledsDataArray["quantity_zakup_new"][$productId];
+ $wall=$FiledsDataArray["quantity_warehouseman_fact"][$productId] + $FiledsDataArray["quantity_warehouseman_fact_related"][$productId];
+ $brak=$FiledsDataArray["quantity_warehouseman_fact_defective"][$productId] + $FiledsDataArray["quantity_warehouseman_fact_defective_related"][$productId];
+ if($q) $wall_per=round(100*($wall/$q),2); else $q="";
+
+ if($wall_per>100) $wall_per=100;
+ if( ($brak+$wall) >0 ) $brak_per=round(100*($brak/($brak+$wall)),2); else $brak_per="";
+
+ echo'<tr><td class="td_product">'.$nameProduct.'</td>
+ <td>'.$q.'</td>
+ <td>'.$FiledsDataArray["quantity"][$productId].'</td><td>'.$FiledsDataArray["quantity_fact"][$productId].'</td>
+ <td>'.$wall.'</td>
+ <td class="bg-';
+ if($wall_per>=90) echo'default';
+ else echo'danger';
+ echo'">'.$wall_per.'</td>
+ <td class="bg-';
+ if($brak_pe<=5) echo'default';
+ else echo'danger';
+ echo'">'.$brak_per.'</td>
+ </tr>';
+ $arrayCnt["percent_purchase"] +=$wall_per;
+ $arrayCnt["percent_brak"] +=$wall_per;
+
+ $cnt++;
+
+}
+
+
+}
+echo'<tr><td></td><td></td>
+<td></td><td></td><td></td>
+<td>'.round($arrayCnt["percent_purchase"]/$cnt,2).'</td><td>'.round($arrayCnt["percent_brak"]/$cnt,2).'</td>';
+
+echo'</tbody></table>';
+
+
+$_CONFIG["jscss"] .='<style>
+
+table.table tbody tr:hover td{background:#cdcdcd}
+.zak tbody tr:hover td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th, .zak tr.zg td{font-size:0.7rem;min-width:30px;text-align:center; font-weight:normal; max-height:60px;overflow:hidden}
+.zak> thead> tr>th b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+ padding: 0.05rem;
+ background-color: 1px;
+ box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+}
+.zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+}
+
+
+.zak td:hover:before {
+ background-color: #e3e3e3;
+ content: \'\';
+ height: 100%;
+ left: -5000px;
+ position: absolute;
+ top: 0;
+ width: 10000px;
+ z-index: -2;
+}
+
+.zak td:hover:after {
+ background-color: #cdcdcd;
+ content: \'\';
+ height: 10000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+}
+table.zak thead th:not(:first-child),
+table.zak tr.zg th th:not(:first-child) {
+ vertical-align: bottom;
+ line-height: normal;
+}
+table.zak thead b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+
+}
+
+
+table.zak tr.zg th b,table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight:normal; font-size:0.6rem;
+}
+
+ .zak tr th .th_p_summ{text-align:center;font-weight:bold;}
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {tex-align:right;}
+.zak td.td_product, .zak th.td_product {background:#fff;}
+</style>';
+include"templates/bottom.php";
\ No newline at end of file
include"templates/top.php";
-//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
+//if($_SESSION["group_id"]>2) exit("У вас нет доступа"); id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10
-$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id in (7,30,17,70,71,9,51,1,10,50)");
-$data3=$db::getRows("SELECT * FROM store_orders_statuses order by posit desc");
+$data3=$db::getRows("SELECT * FROM store_orders_statuses WHERE posit>0 order by posit desc");
foreach($data3 as $row) {
-$store_orders_statuses[$row["id"]]=$row["name"];
+$store_orders_statuses[$row["id"]]=$row["name"];
+$statuses[$row["id"]]=$row;
$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
$statuses_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
}
echo'<form method=post action="/shipment/statuses_edit/">';
foreach($store_orders_statuses as $status_id => $status)
{
- echo"<br> <h2>$status - <a href=\"/shipment/statusFieldsSort/?status_id=$status_id\" class=\"btn btn-warning\">сортировка полей на статусе</a></h2>";
+ echo"<h2> <span class=\"btn btn-white\">".$statuses["$status_id"]["number"]."</span> $status
+ <a href=\"/shipment/statusFieldsSort/?status_id=$status_id\" class=\"btn btn-warning btn-sm\">сортировка полей на статусе</a></h2>
+ <div style=\"display:block;background:#c8fff3;border:1px #e6e6e6 solid\" class=\"p-2\">".$statuses["$status_id"]["description"]."</div>";
echo'<table>';
foreach($statuses_groups[$status_id] as $gid) {
}
echo'</table>';
}
-echo'<button class="btn btn-success" name="save" value=1>сохранить</button></div></form>';
+echo'<button class="btn btn-success btn-lg m-4" name="save" value=1>сохранить</button></div></form>';
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("templates/top.php");
+$modul="shipment";
+global $act;
+$act="storeOrderScore";
+$group_id=(int)$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+include_once"modul/shipment/functionsShipment.php";
+
+
+
+
+if(!empty($_POST["save"]) and !empty($store_id)) {
+ $data_up=[];
+ foreach($_POST["score"] as $product_id => $score) {
+ $product_id=htmlentities($product_id);
+ $score=(int)$score;
+
+ if(!empty($products[$product_id]) and $score>0)
+ $data_up[$product_id][$store_id][0]=$score;
+
+ }
+
+
+ foreach($_POST["score_color"] as $product_id => $scoreAr) {
+ $product_id=htmlentities($product_id);
+ foreach($scoreAr as $color => $score) {
+ $score=(int)$score;
+ if(!empty($products[$product_id]) and $score>0)
+ $data_up[$product_id][$store_id][$color]=$score;
+ }
+
+ }
+
+
+
+ if(!empty($data_up)) insert_store_orders_fields($data_up,"score");
+
+ mess("Сохранено");
+
+ // print_r($data_up);
+
+
+ $f="modul/shipment/fields/score.php";
+ if(is_file($f)) {
+ $data_up=[];
+ include_once($f);
+ if(!empty($data_up)) insert_store_orders_fields($data_up,"score"); // вносим данные в таблицу
+ }
+
+}
+
+
+echo'<h3 class="page-title mb-0 text-primary">
+<a href="/shipment/" class="btn me-2 btn-light">❮ назад в закупки</a>
+Оцените '.$OrderData["name"].' id='.$orderId.'</h3>';
+
+showOrderStoresPanel();
+
+$FiledsData=getDataFiledsData($orderId);
+
+// проголусуйте от лица магазина
+if(!empty($store_id)) {
+echo'<div class="table-responsive mt-3">
+<form method=post action=""><table class="zak">';
+echo'<thead><tr class="zg"><th>ваша оценка</th><th class="text-right w-10">наименование</th><th>получено при делении шт.</th><th>общая средняя оценка</th></tr></thead>
+<tbody>';
+foreach($products as $productId => $productName){
+$q=(int)$FiledsData["division_summ"][$productId]["NULL"]["NULL"];
+$s=(int)$FiledsData["score"][$productId][$store_id]["NULL"];
+$avg=round($FiledsData["score"][$productId]["NULL"]["NULL"],1);
+
+if($q>0) {
+echo'<tr><td class="text-right"><b>'.$productName.'</b></td>
+<td><select name=score['.$productId.'] class="form-select">';
+echo'<option value=0'; if($s=="") echo' selected'; echo'>-</option>';
+for($i=1;$i<=5;$i++){
+ echo'<option value='.$i.'';
+if($s==$i) echo' selected';
+echo'>'.$i.'</option>';
+}
+
+
+echo'</select></td>
+<td>'.$q.'</td><td>'.$avg.'</td></tr>';
+
+
+ foreach($productsColorsArray[$productId] as $color) {
+ $color=trim($color);
+ $q=(int)$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"][$color];
+ $s=(int)$FiledsData["score"][$productId][$store_id][$color];
+ $avg=round($FiledsData["score"][$productId]["NULL"][$color],1);
+
+if($q>0) {
+ echo'<tr><td class="text-right">+<span class="btn btn-sm btn-warning">'.$color.'</span></td>
+ <td><select name=score_color['.$productId.']['.$color.'] class="form-select">';
+ echo'<option value=0'; if($s=="") echo' selected'; echo'>-</option>';
+ for($i=1;$i<=5;$i++){
+ echo'<option value='.$i.'';
+ if($s==$i) echo' selected';
+ echo'>'.$i.'</option>';
+ }
+
+
+echo'</select></td>
+ <td>'.$q.'</td><td>'.$avg.'</td></tr>';
+}
+
+
+
+
+ }
+
+
+
+}
+
+}
+
+
+
+echo'</tbody></table>
+<button class="btn btn-success btn-lg" type=submit name=save value=true>сохранить</botton>
+</form>';
+
+
+} else {
+
+ mess("проголусуйте от магазина - выберите свой магазин");
+
+}
+
+
+
+
+echo'</tbody></table></div>';
+
+
+
+
+
+
+include"templates/bottom.php";
+
+
+
--- /dev/null
+<?
+include_once("startup.php");
+include_once("inc/db.php");
+include_once("inc/base_new.php");
+include_once("inc/shipment.php");
+include_once("templates/top.php");
+$modul="shipment";
+
+
+
+$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+
+
+
+$data3=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data3 as $row) {
+$store_orders_statuses[$row["id"]]=$row["name"];
+$store_orders_statusesbg[$row["id"]]=$row["background"];
+$statuses_groups[$row["id"]]=explode(",",$row["groups"]);
+$statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
+$status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+}
+
+
+
+echo'<h3 class="mt-2">Список закупок для магазинов</h3>';
+
+
+
+$data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start
+FROM store_orders WHERE parent_id!=0 AND date_start>=NOW() - INTERVAL 70 DAY
+
+AND status in ('1','2')
+order by delivery_date DESC LIMIT 330");
+foreach($data as $row) $dozakupka[$row["parent_id"]][]=$row;
+
+
+
+$data=$db::getRows("SELECT *, DATE_FORMAT(date_add,'%d.%m.%Y') as date_add, DATE_FORMAT(date_start,'%d.%m.%Y') as date_start
+FROM store_orders WHERE parent_id=0 AND date_start>=NOW() - INTERVAL 70 DAY
+AND status in ('1','2')
+order by delivery_date DESC LIMIT 30");
+foreach($data as $row) {
+$in=explode(",",$row["providers_arr"]);
+
+echo'<div class="expanel expanel-default m-1 p-1">
+<div class="expanel-heading m-0 p-0">';
+
+if(!empty($dozakupka[$row["id"]])) echo'<span class="btn btn-light me-1" onclick="$(\'#external__'.$row["id"].'\').toggle();">+</span>';
+
+echo'
+<a href=/'.$modul.'/shipment/?id='.$row["id"].' class="btn btn-default fs-6">
+<span class="btn btn-outline-info">'.$row["id"].'</span>
+<span class="btn btn-warning btn-sm me-2">'.$store_orders_statuses[$row["status"]].'</span>
+'.$row["name"].'</a>
+
+<span class="dt">дата продаж: '.$row["date_start"].', создано '.$row["date_add"].' <i>'.$row["comment"].'</i></span>
+</div>
+
+<div class="expanel-body m-0 p-0';
+if(empty($dozakupka[$row["id"]])) echo' d-none';
+echo'" id="external__'.$row["id"].'"> ';
+
+//printStoreOrderFiles($row["id"]);
+//foreach($in as $pid) echo'<span class="tag m-1">'.$providers[$pid].'</span>';
+
+
+$time = strtotime($row["date_start"]);
+$date1=date('Y-m-d 00:00:00', $time-86400*8);
+$date2=date('Y-m-d 00:00:00', $time-86400);
+$in=explode(",",$row["providers_arr"]);
+$w="";
+$k=0;
+foreach($in as $pid) { if($k!=0) $w .=", "; $w .="'$pid'"; $k++; }
+
+$k=0;
+$wnere="";
+foreach($dozakupka[$row["id"]] as $rows) {
+if($k!=0) $wnere .=","; $wnere .="'".$rows["id"]."'"; $k++;
+}
+
+
+if(!empty($wnere)) $wnere ="'".$row["id"]."', $wnere"; else $wnere="'".$row["id"]."'";
+
+foreach($data6 as $row6) {
+ $data_values["quantity_purchase"] = $sum_p+$row6["quantity_purchase"];
+}
+
+
+$q_all=0;
+$s_all=0;
+
+foreach($data5 as $row55) {
+ $data_values["quantity_zakup"] +=$row55["quantity_zakup"];
+ $data_values["quantity_purchase_summ"] +=$row55["quantity_purchase_summ"];
+ $data_values["quantity_zakup_fact"] +=$row55["quantity_zakup_fact"];
+ $data_values["quantity_zakup_summ"] +=$row55["quantity_zakup"]*$row55["purchase_price"];
+ $data_values["quantity_zakup_fact_summ"] +=$row55["quantity_zakup_fact"]*$row55["quantity_zakup_fact"];
+
+
+ //echo' quantity_zakup_all= '.$row55["quantity_zakup_all"].' summa_all= '.$row55["summa_all"].' ';
+}
+
+
+echo'<div class="row">';
+foreach($dozakupka[$row["id"]] as $rows) {
+echo'<div class="col-12">
+<div class="ml-4">
+ <a href=/'.$modul.'/shipment/?id='.$rows["id"].' class="btn btn-white fs-6 me-3">
+ <span class="btn btn-outline-info fs-6 me-2">'.$rows["id"].'</span>
+ <span class="me-2 btn btn-sm bg-warning">'.$store_orders_statuses[$rows["status"]].'</span>
+ '.$rows["name"].'
+
+</a>
+
+
+<i>'.$rows["comment"].'</i>';
+//printStoreOrderFiles($rows["id"]);
+echo'</div></div>';
+ }
+
+echo'</div>
+
+</div>
+</div>';
+
+
+}
+
+
+$_CONFIG["jscss"] .='<style>
+
+.dt{color:#7175b1}
+
+
+</style>';
+
+
+include"templates/bottom.php";
+
+
+
-
+<?php
+ if (Yii::$app) return;
+?>
</div>
<?php
+if (Yii::$app)return;
if(empty($_SESSION["admin_id"])) { header("Location: /login/login2/"); exit(); }
global $tstart,$light,$modul,$act, $db, $CONFIG_SETKA,$_CONFIG;
--- /dev/null
+<?php
+
+chdir(__DIR__ . '/../../');
+
+include 'modul/bonus/sex.php';
\ No newline at end of file
--- /dev/null
+<?php
+
+chdir(__DIR__ . '/../../');
+
+include 'modul/sales_checks/index.php';
+++ /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/uni.php");
-include_once(dirname(__DIR__, 2) . "/inc/uni2.php");
-
-global $h1,$group_menu,$uni_fields, $forma_sql_table, $modul, $act;
-$h1="Добавить "; $group_menu=0; $uni_fields=0;
-$modul="shipment";
-$forma_sql_table="store_orders";
-$act="add";
-$h1="Добавить закупку";
-if(empty($_REQUEST["id"])) {
- if(!empty($_SESSION["cat_id"])) $catid=(int)$_SESSION["cat_id"];
-
-
-}
-if(!empty($_REQUEST["cat_id"])) { $catid=(int)$_REQUEST["cat_id"]; $_SESSION["default_".$modul."_cat_id"]=$catid; $_SESSION["cat_id"]=$catid;
- $_SESSION["default"][$modul]["cat_id"]=$catid;
-}
-
-
-
-//include"templates/top.php";
-echo "<div class='m-5'>";
-construct_modul_form_azea($modul);
-echo "</div>";
-
-
-$_CONFIG["jscss"]='
-<link href="/azea/assets/plugins/fileupload/css/fileupload.css" rel="stylesheet" type="text/css" />
-<script src="/azea/assets/js/file-upload.js"></script>
-';
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file
+++ /dev/null
-<?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
+++ /dev/null
-<?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);
-
-
+++ /dev/null
-<?php
-
-use \yii_app\records\StoreOrdersFields;
-use \yii_app\records\StoreOrdersFieldsData;
-use \yii_app\records\StoreOrdersFieldsDataLogi;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$id=(int)$_REQUEST["id"];
-$product_id=htmlentities($_REQUEST["product_id"]);
-$store_id=htmlentities($_REQUEST["store_id"]);
-$name_eng=htmlentities($_REQUEST["name_eng"]);
-$value=htmlentities($_REQUEST["value"]);
-$provider_id=intval($_REQUEST["provider_id"]);
-$color=htmlentities($_REQUEST["color"]);
-
-
-
-if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
-
- $id=(int)$_REQUEST["id"];
- $product_id=htmlentities($_REQUEST["product_id"]);
- $store_id=htmlentities($_REQUEST["store_id"]);
- $name_eng=htmlentities($_REQUEST["name_eng"]);
- $value=htmlentities($_REQUEST["value"]);
- $provider_id=intval($_REQUEST["provider_id"]);
- $color=htmlentities($_REQUEST["color"]);
-
-
-
- $whereInProductsId=" in('$product_id') ";
- $products=[$product_id=>"товар"];
-
-
-//echo"$name_eng=$value $product_id $store_id";
- if(!empty($store_id)) {
- global $dependent_fields;
- $data = StoreOrdersFields::find()->select(['id', 'dependent_fields', 'name_eng'])->asArray()->all();
-// $data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1");
- foreach($data as $row) {
- $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);
- $fieldRows[$row["id"]]=$row["name_eng"];
- }
-
- global $arrayp;
-
- function recurs_depended($fieldId) {
- global $dependent_fields,$arrayp;
- $arrayp .=",".implode(",",$dependent_fields[$fieldId]);
- foreach($dependent_fields[$fieldId] as $fieldId2) recurs_depended($fieldId2);
- return $arrayp;
- }
-
-
-
- $row = StoreOrdersFields::find()->select(['id', 'tip'])->where(['name_eng' => $name_eng])->asArray()->one();
-// $row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]);
- if(is_array($row)) {
- $tip=$row["tip"];
- $fieldId=$row["id"];
-
-
-
- if(0) {
- $arrayp=recurs_depended($fieldId);
-
-
- $arrayp = array_unique(explode(",",$arrayp));
- $arrayp = array_diff($arrayp, array(''));
-//echo "++++".print_r($arrayp)." ";
-
-
- $updateFieldsArray=[];
- echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией ";
- foreach($arrayp as $k) {
-
- if(is_numeric($k)) { echo"<br>---+++$k ".$fieldRows[$k]."";
-
- $updateFieldsArray[]=$fieldRows[$k];
-
- }
-
- }
-
-
-
-
-
-
- if(!empty($updateFieldsArray))
- {
-//include_once("inc/functionsFiedlsData.php");
-
-//updateProductArrayDataField($updateFieldsArray);
- }
-
-
- }
-//print_r($updateFieldsArray);
-
-
-
-
- if($tip=="string") $pole="value_text"; else $pole="value";
-
- if(empty($color) or $color=='undefined' or $color=='NULL') $color='';
- if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
-
-
- $up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
-
- if(isset($value)) {
-
-
- //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
- //echo"удаление пустой записи";
-
-
-
- $value_old_pole = StoreOrdersFieldsData::find()->select([$pole])->where(['product_id' => $product_id, 'order_id' => $id, 'store_id' => $store_id, 'field_name' => $name_eng, 'field_id' => $fieldId, 'color' => $color])->asArray()->one();
- $value_old = $value_old_pole[$pole];
- //$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
- $value_old=str_replace('.000','',$value_old);
-
- $storeOrdersFieldsData = StoreOrdersFieldsData::find()->where(['order_id' => $id, 'product_id' => $product_id,
- 'store_id' => $store_id, 'field_id' => $fieldId, 'field_name' => $name_eng, 'color' => $color])->one();
- if (!$storeOrdersFieldsData) {
- $storeOrdersFieldsData = new StoreOrdersFieldsData;
- $storeOrdersFieldsData->order_id = $id;
- $storeOrdersFieldsData->product_id = $product_id;
- $storeOrdersFieldsData->store_id = $store_id;
- $storeOrdersFieldsData->field_id = $fieldId;
- $storeOrdersFieldsData->field_name = $name_eng;
- $storeOrdersFieldsData->color = $color;
- }
- $storeOrdersFieldsData->$pole = $value;
- $storeOrdersFieldsData->save();
-// $sql="INSERT IGNORE INTO store_orders_fields_data SET ";
-// $up2 =" $pole='$value'";
-// $up .= ",".$up2;
-// $sql .="$up ON DUPLICATE KEY UPDATE $up2";
-// $db::sql($sql);
-//echo'сохранили '.$name_eng.' store_id='.$store_id.' '.$name_eng.' color='.$color.' value='.$value.' ';
-
- $storeOrdersFieldsDataLogi = new StoreOrdersFieldsDataLogi;
- $storeOrdersFieldsDataLogi->product_id = $product_id;
- $storeOrdersFieldsDataLogi->field_id = $fieldId;
- $storeOrdersFieldsDataLogi->order_id = $id;
- $storeOrdersFieldsDataLogi->store_id = $store_id;
- $storeOrdersFieldsDataLogi->color = $color;
- $storeOrdersFieldsDataLogi->value = $value;
- $storeOrdersFieldsDataLogi->value_old = $value_old;
- $storeOrdersFieldsDataLogi->date_add = date('Y-m-d H:i:s');
- $storeOrdersFieldsDataLogi->admin_id = $_SESSION["admin_id"];
- $storeOrdersFieldsDataLogi->save();
-
-// $db::sql("INSERT INTO store_orders_fields_data_logi
-//(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
-//VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
-
- }
-
-
- } else echo'Поля '.$name_eng.' нет в таблице ';
-
- }
-
-}
\ No newline at end of file
+++ /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");
-
-
-global $products, // массив с товарами производителя прикрепленного к этой закупке
- $orderId, // id- заказа
- $store_id, // GUID магазина
- $storesArray, // массив с магазинами
- $group_id, // ID группы авторизованного сотрудника
- $fieldsRows, // массив с данными по полями - ключ name_eng
- $date_start_sale, // дата старта продаж от которой считаемстатистику
- $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
- $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
- $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
- $FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
- $status_order_id, // ID текущего статуса закупаки
- $store_orders_statuses, // массим со статсами закупок
- $statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
- $status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
- $store_orders_status_description, // - массив с описанием стутса
- $dostup_fields,
- $bg_fields,
- $ProductsOptions;
-
-
-if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
-
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-
-
-
-
+++ /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");
-
-global $products, // массив с товарами производителя прикрепленного к этой закупке
- $orderId, // id- заказа
- $store_id, // GUID магазина
- $storesArray, // массив с магазинами
- $group_id, // ID группы авторизованного сотрудника
- $fieldsRows, // массив с данными по полями - ключ name_eng
- $date_start_sale, // дата старта продаж от которой считаемстатистику
- $order_date_add,
- $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
- $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
- $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
- $FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
- $status_order_id, // ID текущего статуса закупаки
- $store_orders_statuses, // массим со статсами закупок
- $statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
- $status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
- $store_orders_status_description, // - массив с описанием стутса
- $dostup_fields,
- $bg_fields,
- $ProductsOptions;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
-
-$whereDeleteData="";
-// параметр указывает на то что осток после деления распределяем автоматически в ячейки для ручной добавки к делению
-$foreachSalesHand=false;
-if($_REQUEST["foreachSalesHand"]==1) { $foreachSalesHand=true; $whereDeleteData .=",'division_hand'"; }
-
-
-if($_REQUEST["deleteAll"]==1) {
- $db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId'");
-
- mess("Данные удалены");
-
- exit();
-}
-
-
-
-
-//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_ratio' or field_name='division_auto' or field_name='storehouse_balance') AND order_id='$orderId'");
-$db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");
-
-include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-/*
-
-if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
-
-
-// создаем массив со свойствами подсветки ячеек store_orders_fields_property
-$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
-foreach($data as $row) {
- $fieldsPropertyArray[$row["field_id"]][]=$row;
- }
-
- // достаем поля в массив
-$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
-foreach($data as $row) {
- $fieldsRows[$row["name_eng"]]=$row;
- $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
- $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]); //считаем поля и зависимые поля рекурсивно
- if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
- }
-
-
-// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
-$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,
-DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
-$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
-$status_order_id=$OrderData["status"];
-$date_start_sale=$OrderData["date_start"];
-$date_update=$OrderData["date_update"];
-$date_start_division=$OrderData["division_date"];
-
-
-$whereProvidersId="";
-$k=0;
-foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
-
-
-$whereInProductsId=" in (";
-$z="SELECT p.id, p.name, o.provider_id, o.price_zakup FROM products_1c_options as o, products_1c as p WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
-$data2=$db::getRows($z);
-$k=0;
- foreach($data2 as $row) {
- if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
- $products[$row["id"]]=$row["name"];
- $prov[$row["id"]]=$row["provider_id"];
- $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
-
- $k++;
- }
-$whereInProductsId .=")";
-
-
-*/
-
-// вычисляем массив по цветам привязанным к товару
-$colorsProduct=[];
-$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
-foreach($data4 as $row) {
- $colors=explode(";",$row["colors"]);
- foreach($colors as $color) {
- $color=trim($color);
- $colorsProduct[$row["id"]][$color]=$color;
- }
-}
-
-
-
-
-
-$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id
-FROM sales as s, sales_products as p
-WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id $whereInProductsId AND s.date>=? - INTERVAL 14 day group BY p.product_id, s.store_id_1c order by
-squantity DESC",[$date_start_division]);
-foreach($data as $row){
- $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
-
-}
-
-
-
-// товар в пути date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day
-
-$data=$db::getRows("SELECT id,name,providers_arr FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add' ");
-
-
-$j=0;
-$orders_where="";
-foreach($data as $row) {
-
- $store_orders[$row["id"]]=$row["name"];
- $providersIdInThisOrder2=explode(",",$row["providers_arr"]);
- $whereProvidersId2="";
- $k=0;
- foreach($providersIdInThisOrder2 as $pid) { if($k!=0) $whereProvidersId2 .=","; $whereProvidersId2 .="'$pid'"; $k++; }
-
- if($j>0) $orders_where .=",";
-
- $orders_where .="'".$row["id"]."' ";
- $j++;
-
-
-
-
-// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
- $whereInProductsId_is=" in (";
- $z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p
-WHERE o.provider_id in($whereProvidersId2) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
- $data2=$db::getRows($z);
- $k=0;
- foreach($data2 as $row3) { if($k!=0) $whereInProductsId_is .=","; $whereInProductsId_is .="'".$row3["id"]."'";$k++;}
- $whereInProductsId_is .=")";
-
-
- echo" ".$row["id"].") ".$row["name"]." убираем информацию по остальным товарам<br>";
- if(!empty($whereInProductsId_is) and $k>0) $db::sql("DELETE FROM store_orders_fields_data WHERE product_id NOT $whereInProductsId_is AND order_id='".$row["id"]."'");
-}
-$data_up=[];
-$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='goods_in_transit' AND order_id='$orderId'");
-
-
-if(!empty($orders_where))
-{
-
-
- $orders_where=" AND order_id in($orders_where) AND order_id!='$orderId'";
- $data=$db::getRows("SELECT order_id,product_id,value,color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0
- $orders_where group by order_id, product_id,value,color");
- foreach($data as $row) {
- if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
- $data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
-
- $titleArr[$row["product_id"]]["NULL"][$color] .="
- id=".$row["order_id"]." ".$store_orders[$row["order_id"]]."=".(int)$row["value"]." шт.";
-
-
- }
- insert_store_orders_fields($data_up,"goods_in_transit",$titleArr);
-}
-
-
-
-
-$data_up2=[];
-foreach($products as $productId =>$nameProduct) {
-
- echo"<br><b>$nameProduct</b>";
-
- $data_up=[];
- $massivTitle=[];
- foreach($storesArrayAll as $storeId => $nameStore) {
-
-//echo"<br>$nameStore ";
-
- $colorsProductsArray[$productId]["NULL"]="NULL";
-
- foreach($colorsProductsArray[$productId] as $color) {
-
- $arrs2=returnFormula("division_auto_need", $productId, $storeId, $color);
-// echo "$color=".$arrs2["value"]." "; // title=".$arrs2["title"]."
-
- $FiledsData["division_auto_need"][$productId][$storeId][$color]=$arrs2["value"];
- if($color=="NULL") {
- $data_up[$productId][$storeId][$color]=$arrs2["value"];
- $division_auto_need_all[$productId] +=$arrs2["value"];
- $massivTitle[$productId][$storeId][$color] =$arrs2["title"];
-
- }
-
- }
- }
-
-
- insert_store_orders_fields($data_up,"division_auto_need",$massivTitle);
-
-
-
- echo"<br>Итого division_auto_need_all=".$division_auto_need_all[$productId]."
-
-старый коэфф=".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]."
-
-куплено по факту=".$FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"]."";
-
- $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
- $data_up2[$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
-}
-
-
-
-
-insert_store_orders_fields($data_up2,"division_auto_need_all");
-
-
-
-
-$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact quantity_zakup_fact
-$data_up=[];
-foreach($products as $productId => $nameProduct) {
- $massivSQL=array();
- $FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-//+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]
-
- if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]) {
- $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
- }
- else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"],3);
- echo"<br>$nameProduct = division_ratio ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
-
- $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-}
-
-insert_store_orders_fields($data_up,"division_ratio");
-
-
-
-
-$data_up=[]; $datau=[]; $data_hand=[];
-foreach($products as $productId =>$nameProduct) {
- $division_auto_all2=[];
- echo"<br><b>$nameProduct - division_auto $rowFactName=".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."</b>";
- foreach($storesArrayAll as $storeId => $nameStore) {
- echo"<br>$nameStore ";
-
- $colorsProductsArray[$productId]["NULL"]="NULL";
- foreach($colorsProductsArray[$productId] as $color) {
- $division_auto=$FiledsData["division_auto_need"][$productId][$storeId][$color] * $FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
-
- if(empty($FiledsData["min_lot"][$productId])) $min_lot=1; else $min_lot=$FiledsData["min_lot"][$productId];
- $division_auto_ceil=ceilCoefficient($division_auto,$min_lot);
-
-
- $title=" ".$FiledsData["division_auto_need"][$productId][$storeId][$color]." * ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." = $division_auto ->$division_auto_ceil ";
-
-
- echo $title;
-
-
- if($color=="NULL" and $storeId!="NULL") $storehouse_balance1=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all2[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
-
-
-
- $storehouse_balance0=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
- if($division_auto_ceil<=$storehouse_balance0 and $storehouse_balance1<0) { $storehouse_balance1=1;
- if($color=="NULL" and $storeId!="NULL") $division_auto_all2[$productId] +=$division_auto_ceil;
- echo"!!!!вносим все равно $storehouse_balance0";
-
- }
-
-
- if($storehouse_balance1<0) {
-
- $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
- echo" !баланс! $storehouse_balance ";
-
- echo"<span class=\"btn btn-danger\">не вносим</span>";
-
- }
- else {
- if($color=="NULL" and $storeId!="NULL") {
- $division_auto_all[$productId] +=$division_auto_ceil;
- $division_auto_all2[$productId] +=$division_auto_ceil;
-
- }
-
- $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
- echo" баланс $storehouse_balance ";
- $value=$division_auto_ceil;
- $field_name="division_auto";
- $field_id=$fieldsRows[$field_name]["id"];
-
- if($storehouse_balance>=0) {
- if($color=="NULL") {
- $color="";
- try {
- $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update,title)
- VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
- [$productId, $orderId, $storeId, $field_name, $field_id, $value, "", $color, $title, $value, "",$title]);
- }
- catch (Exception $e)
- {
- echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
- }
-
-
- $hand=$FiledsData["division_hand"][$productId][$storeId][$color];
- if(empty($hand)) $hand=0;
-
- $data_up[$productId][$storeId][$color]=$value+$hand;
- $datau[$productId][$storeId][$color]="$value+".$hand;
- }
- } else {
-
- echo"--не вносим--";
- }
-
-
-
- }
-
-
- echo "all=".$division_auto_all2[$productId]." ";
-
-
- }
-
-
-
-
-
- }
-
-
- $product_counter++;
- insert_store_orders_fields($data_up,"division_summ",$datau);
-
-
-
- $min_lot=$FiledsData["min_lot"][$productId];
- $division_hand_summ=$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
- $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
-
- // $data_up3=[];
- // $data_up3[$productId]["NULL"]["NULL"]=$storehouse_balance;
- // insert_store_orders_fields($data_up3,"storehouse_balance");
-
- $field_name="storehouse_balance";
- $field_id=$fieldsRows[$field_name]["id"];
- $storeId="";
- $color="";
- $value=$storehouse_balance;
-
-
- try {
- $s="INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update)
- VALUES (?,?,?,?,?,?,?,?,'-1',NOW()) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW()";
- $db::sql($s, [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $value, $value_text]);
-
- }
- catch (Exception $e)
- {
- echo 'Ошибка вставки данных error='. $e->getMessage();
- }
-
-
- echo"<br>Итого division_auto_all=".$division_auto_all[$productId]." division_hand_summ=$division_hand_summ storehouse_balance=<b>$storehouse_balance</b> min_lot=$min_lot ";
- $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
-
-
-// добавляем деление ручное по магазину по циклу - по рейтингу магазина
-
- if($foreachSalesHand==true and $min_lot <=$storehouse_balance and $storehouse_balance>0){
-
- echo"<br><b>Запускаем цикл начисления согласно продажам</b>";
-
- $j=1;
- $new_balance=0;
- $nb=0;
- do {
- foreach($productsArrayStores[$productId] as $storeId =>$quantity) {
- $new_balance=$storehouse_balance-$min_lot;
-
- if( $new_balance>=0) {
- $nb = $FiledsData["division_hand"][$productId][$storeId]["NULL"] + $min_lot;
- $storehouse_balance=$storehouse_balance-$min_lot;
-
- echo"<br><font color=blue> ".$storesArrayAll[$storeId]." =>$quantity</font> $storehouse_balance-$min_lot new_balance=$new_balance
-
- + hand=$min_lot
- hand_old=".$FiledsData["division_hand"][$productId][$storeId]["NULL"]."
- hand_new=".$nb." ";
-
- $FiledsData["division_hand"][$productId][$storeId]["NULL"] += $min_lot;
- $data_hand[$productId][$storeId]["NULL"] +=$min_lot;
- }
-
- if( $new_balance<=0) break;
-
-
- }
- $j++;
- } while($new_balance>0);
-
-
-
- foreach($data_hand[$productId] as $storeId => $arr) {
- echo"<br>data_up=".$storesArrayAll[$storeId]."= ".$arr["NULL"]." ";
- }
-
- }
-
-
-
- if($product_counter>1) { echo"<font color=red>Выход из цикла!!!!</font>"; break;}
-
-
-}
-
-
-
-
-if($foreachSalesHand==true) {
- insert_store_orders_fields($data_hand,"division_hand");
- insert_store_orders_fields($data_hand,"division_auto_hand");
-
-
-}
-
-
-
-
-
-
-
-// деление по магазину
-$datau=[];
-$FiledsData["division_auto_all"]=[];
-$FiledsData["auto_purchase_formula_all"]=[];
-foreach($products as $productId =>$nameProduct) {
- foreach($storesArrayAll as $storeId => $nameStore) {
- // деление ручное сумма по магазину
- $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] += $FiledsData["auto_purchase_formula"][$productId][$storeId]["NULL"];
- $FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"] += $FiledsData["division_hand"][$productId][$storeId]["NULL"];
- $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"] += $FiledsData["division_auto"][$productId][$storeId]["NULL"];
- $datau["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"]."+". $FiledsData["division_hand"][$productId][$storeId]["NULL"];
- $FiledsData["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
- $FiledsData["division_delta"][$productId][$storeId]["NULL"]=round(100*($FiledsData["division_hand"][$productId][$storeId]["NULL"]/($FiledsData["division_auto"][$productId][$storeId]["NULL"] + 0.0001)));
- $FiledsData["division_summ"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
- $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
- $FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] - $FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"];
- $FiledsData["delta_zakup"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + 0.0001),0);
- $FiledsData["delta_rejection"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + $FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"] + 0.0001 ),0);
-
-
-
- }
-}
-
-
-foreach($products as $productId =>$nameProduct) {
- $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"]-$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"] ;
-
-
- $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"];
-
-}
-
-
-
-
-
-insert_store_orders_fields($FiledsData["division_hand_summ"],"division_hand_summ");
-insert_store_orders_fields($FiledsData["division_auto_all"],"division_auto_all");
-insert_store_orders_fields($FiledsData["division_summ"],"division_summ",$datau["division_summ"], false);
-insert_store_orders_fields($FiledsData["division_summ_all"],"division_summ_all");
-insert_store_orders_fields($FiledsData["division_delta"],"division_delta");
-insert_store_orders_fields($FiledsData["purchase_fact_difference"],"purchase_fact_difference","", false);
-insert_store_orders_fields($FiledsData["delta_zakup"],"delta_zakup","", false);
-insert_store_orders_fields($FiledsData["delta_rejection"],"delta_rejection","", false);
-insert_store_orders_fields($FiledsData["auto_purchase_formula_all"],"auto_purchase_formula_all","", false);
-insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
-
-
-
-foreach($products as $productId =>$nameProduct) {
- foreach($storesArrayAll as $storeId => $nameStore) {
- foreach($colorsProduct[$productId] as $color) {
- // echo"<br> $color ";
- $summ=$FiledsData["division_auto"][$productId][$storeId][$color] + $FiledsData["division_hand"][$productId][$storeId][$color];
- if(!empty($summ)) $FiledsData["division_summ"][$productId][$storeId][$color]=$summ;
- }
-
- }
-}
-insert_store_orders_fields($FiledsData["division_summ"],"division_summ","", false);
-
-
-//////////// остаток склада вновь считаем
-/*
-$datau=[];
-$data_storehouse_balance=[];
-foreach($products as $productId =>$nameProduct) {
- $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
- $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ( ".$division_auto_all[$productId]."+".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]." ) ";
- echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]." ";
- $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
- $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
-}
-insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
-*/
-////////////
-
-$FiledsData["storehouse_balance"]=[];
-$datau=[];
-$data_storehouse_balance=[];
-$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=0;
-foreach($products as $productId =>$nameProduct) {
- echo"<br><h4>$nameProduct</h4>";
- $alld=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
- // деление ручное сумма по магазину
- $alld+=($FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"]);
-
- echo"<br> $nameStore divauto=".$FiledsData["division_auto"][$productId][$storeId]["NULL"]." ".$FiledsData["division_hand"][$productId][$storeId]["NULL"]." =$alld ";
-
-
- }
-
- $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-$alld;
- echo" <br> $nameProduct fact ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ".$alld." = ".$storehouse_balance." ";
- $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - $alld ";
- echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]." ";
- $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
- $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
-
-}
-insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
-
-
-// автоформула
-foreach($products as $productId =>$nameProduct) {
- $param["sale_7day"]=0; $param["quantity"]=0; $param["quantity_fact"]=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
- $param["sale_7day"] +=$FiledsData["sales_cnt"][$productId][$storeId]["NULL"];
- $param["quantity"] +=$FiledsData["quantity"][$productId][$storeId]["NULL"];
- $param["quantity_fact"] +=$FiledsData["quantity_fact"][$productId][$storeId]["NULL"];
- }
-
- echo"<br>Считаем автозаказ Продажи 7 дней ".$param["sale_7day"]." или ( ".$FiledsData["sales_cnt"][$productId]["NULL"]["NULL"].")
-
-quantity=".$param["quantity"]." или (".$FiledsData["quantity"][$productId]["NULL"]["NULL"].")
-
-quantity_fact=".$param["quantity_fact"]." или (".$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"].") ";
-
-
-
-// считаем запас на 3 дня
- $FiledsData["auto_purchase_formula"]=[];
- $sale_2day=ceil(3*($param["sale_7day"]/7));
- $goods_in_transit=(int)$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
- $quantity_fact=$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"];
- $quantity=$FiledsData["quantity"][$productId]["NULL"]["NULL"];
- $fact=$quantity_fact + $goods_in_transit;
- $fact_sale=$param["sale_7day"];// если факт продаж будет больше чем факт - перприсваеиваем
-
- if(($fact-$fact_sale)>0) {
- $saleweek1=$fact-$fact_sale ;
- $zakaz= $param["sale_7day"] + $sale_2day + $quantity - $saleweek1;
-
- echo 'sale_7day + sale_2day + quantity - $saleweek1 ';
- }
- else {
- $zakaz= $param["sale_7day"] + $sale_2day + $quantity ;
-
- echo" если";
- }
-// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
-
- if($zakaz<0) $zakaz=0;
-//округлить до минимального лота деления
- $ceil=ceilCoefficient($zakaz,$FiledsData["min_lot"][$productId]);
- echo"<br><b>++Авто-заказ = $ceil (товар в пути $goods_in_transit)</b>";
- $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"]=$ceil;
-}
-
-insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
-
-
-
-
-$data2=$db::getRows("SELECT product_id, sum(quantity) as quantity FROM balances WHERE quantity>0 AND store_id!='' AND product_id $whereInProductsId GROUP BY product_id");
-foreach($data2 as $row2) {
- $FiledsData["quantity_storage"][$row2["product_id"]]["NULL"]["NULL"]=$row2["quantity"];
-}
-
-insert_store_orders_fields($FiledsData["quantity_storage"],"quantity_storage","", false);
-
-
+++ /dev/null
-<?php
-
-use yii\base\DynamicModel;
-use yii\widgets\ActiveForm;
-use kartik\select2\Select2;
-
-use yii_app\helpers\PrintBlockHelper;
-
-/* @var $storeAll array */
-/* @var $products array */
-/* @var $colorsCnt array */
-/* @var $quantity_warehouseman_fact array */
-/* @var $orderId string */
-/* @var $productsMinLot array */
-/* @var $dataFieldsValues array */
-/* @var $storeGroups array */
-/* @var $filterModel DynamicModel */
-/* @var $division_name string */
-/* @var $division_date string */
-/* @var $products_colors array */
-/* @var $dataColor array */
-/* @var $dataHand array */
-
-$this->registerJsFile('/js/shipment/division-print-edit.js', ['position' => \yii\web\View::POS_END]);
-
-$storeGroupOptions = [-1 => 'Не выбран'];
-foreach ($storeGroups as $gIndex) {
- $storeGroupOptions[$gIndex] = $gIndex;
-}
-
-$printOrientationOptions = [
- 'portrait' => 'Портретная',
- 'landscape' => 'Альбомная',
-];
-
-?>
-
-<div class="m-5">
- <h5 class="page-title mb-0 text-primary">Деление по магазинам <?= $division_name ?> Дата деления <?= $division_date ?> id=<?= $orderId ?></h5>
- <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
- <div class="row">
- <div class="col-1 text-right">Печатать цвет:</div>
- <div class="col-1"><?= $filterForm->field($filterModel, 'printColor')->checkbox(['value' => 1, 'uncheckValue' => 0,
- 'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
- <div class="col-2 text-right">Печатать ручных добавок:</div>
- <div class="col-1"><?= $filterForm->field($filterModel, 'printHand')->checkbox(['value' => '1', 'uncheckValue' => '0',
- 'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
- <div class="col-2 text-right">Показать столбцы итого:</div>
- <div class="col-1"><?= $filterForm->field($filterModel, 'printSumm')->checkbox(['value' => '1', 'uncheckValue' => '0',
- 'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
- </div>
- <?php PrintBlockHelper::printBlock('Выберите куст', $filterForm->field($filterModel, 'groupIndex')->widget(Select2::class, [
- 'data' => $storeGroupOptions,
- 'language' => 'ru',
- 'options' => ['placeholder' => 'Куст...'],
- 'pluginOptions' => [
- 'allowClear' => true,
- ],
- 'pluginEvents' => [
- 'change' => 'function(e) {
- $("#filter-form").get(0).submit();
- }'
- ],
- ])->label(false)); ?>
- <?php PrintBlockHelper::printBlock('Ориентация', $filterForm->field($filterModel, 'printOrientation')->widget(Select2::class, [
- 'data' => $printOrientationOptions,
- 'language' => 'ru',
- 'options' => ['placeholder' => 'Ориентация...'],
- 'pluginOptions' => [
- 'allowClear' => true,
- ],
- 'pluginEvents' => [
- 'change' => 'function(e) {
- $("#filter-form").get(0).submit();
- }'
- ],
- ])->label(false)); ?>
- <?php ActiveForm::end() ?>
- <div class="col-1">
- <button id="shipmentPrintButton" class="btn btn-primary btn-lg" onclick="printTable();">Print</button>
- </div>
- <div class="table-responsive">
- <table class="table-hover zak">
- <thead>
- <tr class="zg">
- <th class="td_product">наименование</th>
- <th><b>мин-ый лот деления шт.</b></th>
- <?php foreach($storeAll as $store): ?>
- <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
- <th><b><?= $store->name ?></b></th>
- <?php if ($filterModel->groupIndex != -1): ?>
- <th style="min-width: 40px"></th>
- <?php endif; ?>
- <?php endif; ?>
- <?php endforeach; ?>
- <th><b>итого</b></th>
- <th><b>куплено</b></th>
- <th><b>разница</b></th>
- </tr>
- </thead>
- <tbody>
- <?php
- $colorsCounter = [];
- $ostatok = [];
- ?>
- <?php foreach($products as $productId => $productName): ?>
- <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
- <tr id="tr__<?= $productId ?>" class="trproduct">
- <td class="td_product producted">
- <span class="fs-6">
- <a href="/shipment/divisionPrintEditProduct/?productId=<?= $productId ?>&id=<?= $orderId ?>"
- target=new><?= $productName ?></a>
- </span>
- </td>
- <td><?= $productsMinLot[$productId] ?></td>
- <?php $divisionCnt = 0; ?>
- <?php foreach($storeAll as $store): ?>
- <?php
- $value = ceil($dataFieldsValues[$productId][$store->id]["NULL"] ?? 0);
- $ostatok[$productId][$store->id] = $value;
- $divisionCnt += $value;
- if (empty($value)) {
- $value = "";
- }
- ?>
- <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
- <td>
- <?= $value ?>
- <?php if (!empty($dataHand[$productId][$store->id]['NULL']) && $filterModel->printHand == 1): ?>
- <sup style="color:green; font-size:0.5rem"><?= intval($dataHand[$productId][$store->id]["NULL"]) ?></sup>
- <?php endif; ?>
- </td>
- <?php if ($filterModel->groupIndex != -1): ?>
- <td style="min-width: 40px"></td>
- <?php endif; ?>
- <?php endif; ?>
- <?php endforeach; ?>
- <td><?= intval($divisionCnt) ?></td>
- <td><?= intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]) ?></td>
- <?php $r2 = $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] - $divisionCnt; ?>
- <td <?= ($r2 != 0 ? 'class="bg-danger"' : '') ?> ><?= $r2 ?></td>
- </tr>
- <?php endif; ?>
- <?php if ($filterModel->printColor == 1): ?>
- <?php if (!empty($products_colors[$productId])): ?>
- <?php foreach($products_colors[$productId] as $colorName): ?>
- <?php
- $colorName = trim($colorName);
- $colorAllCnt = 0;
- ?>
- <?php if (!empty($dataColor[$productId][$colorName])): ?>
- <tr>
- <td class="tr"><?= $colorName ?>(<?= $dataColor[$productId][$colorName] ?> шт.)</td>
- <td></td>
- <?php
- $colorsCounter[$productId]++;
- $newHand = [];
- ?>
- <?php foreach($storeAll as $store): ?>
- <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
- <?php
- $value = ceil($dataFieldsValues[$productId][$store->id][$colorName] ?? 0);
- $ostatok[$productId][$store->id] -= $value;
- $colorAllCnt += $value;
- ?>
- <td <?= $value % ($productsMinLot[$productId] ?? 1) != 0 ? 'class="bg-danger"' : '' ?>
- onclick="ShowInput('division_hand',
- '<?= $store->id ?>',
- '<?= $productId ?>',
- '<?= $colorName ?>',
- '<?= md5($colorName) ?>',
- '<?= $productsMinLot[$productId] ?>',
- '<?= $value ?>')"
- id="division_hand<?= $store->id ?><?= $productId ?><?= md5($colorName) ?>" >
- <?= $value ?>
- </td>
- <?php if ($filterModel->groupIndex != -1): ?>
- <td style="min-width: 40px"></td>
- <?php endif; ?>
- <?php endif; ?>
- <?php endforeach; ?>
- <?php if ($filterModel->printSumm == 1): ?>
- <?php $difColor = $dataColor[$productId][$colorName] - $colorAllCnt; ?>
- <td><?= $colorAllCnt ?></td>
- <td><?= $dataColor[$productId][$colorName] ?></td>
- <td <?= $difColor != 0 ? 'class="bg-danger"' : '' ?>><?= $difColor ?></td>
- <?php endif; ?>
- </tr>
- <?php endif; ?>
- <?php endforeach; ?>
- <?php endif; ?>
- <?php if (!empty($colorsCounter[$productId])): ?>
- <tr class="bg-success">
- <td class="tr">остаток</td>
- <td></td>
- <?php foreach($storeAll as $store): ?>
- <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
- <?php $value = $ostatok[$productId][$store->id]; ?>
- <td <?= $value < 0 ? 'class="bg-danger"' : '' ?> ><?= $value ?></td>
- <?php if ($filterModel->groupIndex != -1): ?>
- <td style="min-width: 40px"></td>
- <?php endif; ?>
- <?php endif; ?>
- <?php endforeach; ?>
- <?php if ($filterModel->printSumm == 1): ?>
- <td></td>
- <td></td>
- <td class="bg-danger"></td>
- <?php endif; ?>
- </tr>
- <?php endif; ?>
- <?php endif; ?>
- <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
- <?php if ($filterModel->groupIndex == -1): ?>
- <tr class="trproduct">
- <td class="td_product"><span class="fs-6"> </span></td>
- <td class="td_product"><span class="fs-6"> </span></td>
- <?php foreach($storeAll as $store): ?>
- <td class="td_product"><span class="fs-6"> </span></td>
- <?php endforeach; ?>
- <td class="td_product"><span class="fs-6"> </span></td>
- <td class="td_product"><span class="fs-6"> </span></td>
- <td class="td_product"><span class="fs-6"> </span></td>
- </tr>
- <?php endif; ?>
- <?php endif; ?>
- <?php endforeach; ?>
- </tbody>
- </table>
- </div>
-</div>
-
-<script>
- function printTable() {
- const landscape = '<?= $filterModel->printOrientation ?>' === 'landscape';
- const css = '@page { ' + (landscape ? 'size: landscape;' : '') + ' margin: 0; } #shipmentPrintButton, #filter-form {display: none;}' +
- 'a[href]:after { content: "" !important;}',
- head = document.head || document.getElementsByTagName('head')[0],
- style = document.createElement('style');
-
- style.media = 'print';
- style.appendChild(document.createTextNode(css));
-
- head.appendChild(style);
-
- window.print();
-
- head.removeChild(style)
- }
-</script>
-
-<style>
- table tbody tr td {
- border: 3px solid black !important;
- }
-
- table.table tbody tr:hover td {
- background: #cdcdcd
- }
-
- .zak tbody tr:hover td {
- background: #cdcdcd
- }
-
- .zak > thead > tr > th, .zak tr.zg th, .zak tr.zg td {
- font-size: 0.7rem;
- min-width: 30px;
- text-align: center;
- font-weight: normal;
- max-height: 60px;
- overflow: hidden
- }
-
- .zak > thead > tr > th b {
- font-weight: normal;
- }
-
- .zak > :not(caption) > * > * {
- padding: 0.05rem;
- box-shadow: none;
- }
-
- .zak td.fs-5 {
- text-align: left;
- padding: 0.3rem 1rem;
- }
-
- .zak {
- border-collapse: collapse;
- border-spacing: 0;
- overflow: hidden;
- }
-
- .zak th, .zak td {
- border: 1px solid #e6e6e6;
- padding: 0.1rem;
- vertical-align: middle;
- position: relative;
- }
-
- .zak td:hover:before {
- background-color: #e3e3e3;
- content: '';
- height: 100%;
- left: -5000px;
- position: absolute;
- top: 0;
- width: 10000px;
- z-index: -2;
- }
-
- .zak td:hover:after {
- background-color: #cdcdcd;
- content: '';
- height: 10000px;
- left: 0;
- position: absolute;
- top: -5000px;
- width: 100%;
- z-index: -1;
- }
-
- .zak tbody td input.form-control {
- font-size: 0.8rem;
- min-width: 70px;
- max-width: 100px;
- font-weight: bold;
- border: 0;
- border-radius: 0;
- color: #333;
- padding: 0.2rem;
- margin: 0;
- }
-
- .zak tbody td input.form-control:focus {
- border: 2px #cd0202 solid;
- background: #ffccdb
- }
-
- .zak td.bg-danger, .zak td.bg-indigo, .zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo {
- color: #fff;
- }
-
- table.zak thead th:not(:first-child), table.zak tr.zg th th:not(:first-child) {
- vertical-align: bottom;
- line-height: normal;
- }
-
- table.zak thead b {
- writing-mode: vertical-rl;
- transform: scale(-1);
- }
-
- table.zak tr.zg th b, table.zak tr.zg td b {
- writing-mode: vertical-rl;
- transform: scale(-1);
- font-weight: normal;
- font-size: 0.6rem;
- }
-
- .zak tr th .th_p_summ {
- text-align: center;
- font-weight: bold;
- }
-
- .app-content .side-app {
- padding: 25px 0.5rem 0 0.5rem;
- }
-
- .zak tbody tr td.td_product, .zak td.td_product {
- tex-align: left;
- }
-
- .zak td.td_product:hover {
- background: #fff;
- }
-</style>
-<style>
- .zak tbody tr:hover:not(.no-hover) td {
- background: #cdcdcd
- }
-
- .zak > thead > tr > th, .zak tr.zg th {
- font-size: 0.7rem;
- min-width: 30px;
- max-width: 40px;
- text-align: center;
- font-weight: normal;
- overflow: hidden
- }
-
- .zak > thead > tr > th b, .zak > thead > tr > td b {
- font-weight: normal;
- }
-
- .zak > :not(caption) > * > * {
- padding: 0.05rem;
- box-shadow: none;
- }
-
- .zak td.fs-5 {
- text-align: left;
- padding: 0.3rem 1rem;
- }
-
- .zak {
- border-collapse: collapse;
- border-spacing: 0;
- overflow: hidden;
- }
-
- .zak th, .zak td {
- border: 1px solid #e6e6e6;
- padding: 0.1rem;
- vertical-align: middle;
- position: relative;
- }
-
- table.zak thead th, table.zak tr.zg th th, table.zak tr.zg td td {
- vertical-align: bottom;
- line-height: normal;
- }
-
- table.zak thead b, table.zak tbody b {
- writing-mode: vertical-rl;
- transform: scale(-1);
- }
-
- table.zak tr.zg th b, table.zak tr.zg td b {
- writing-mode: vertical-rl;
- transform: scale(-1);
- font-weight: normal;
- font-size: 0.6rem;
- }
-
- .app-content .side-app {
- padding: 25px 0.5rem 0 0.5rem;
- }
-
- .zak tbody tr td.td_product, .zak td.td_product {
- text-align: right;
- }
-
- .zak td.td_product:hover {
- background: #fff;
- }
-
- .zak tr td.pr, .zak tr td.ost {
- text-align: center;
- }
-
- .zak tr td.pr {
- background: #ddd
- }
-
- .zak tr td.ost {
- background: #e6e6e6
- }
-
- .zak td {
- text-align: center;
- vertical-align: bottom;
- }
-
- .zak td.lf {
- text-align: left;
- background: #fff
- }
-
- .zak td.tr {
- text-align: right;
- }
-
- .zak td, .zak thead th {
- color: #000;
- }
-
- .zak tr.trproduct td {
- font-size: 1rem;
- font-weight: bold;
- }
-
- input.greener {
- border: 2px green solid;
- }
-
- input.editColor {
- width: auto;
- max-width: 70px;
- }
-</style>
+++ /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_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-global $products;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$act='division-print-edit2';
-$modul='shipment';
-$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
-if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
-
-$OrderId=$id;
-
-
-$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
-$in=explode(",",$row["providers_arr"]);
-$status_order_id=$row["status"];
-$division_date=$row["division_date"];
-
-$k=0;
-$printColor=1;
-if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
-
-
-$printHand=0;
-if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
-
-
-$printSumm=0;
-if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
-
-
-$printPercentMatrix=0;
-if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
-
-
-
-
-$kustArray=array();
-$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
-foreach($data2 as $row2) {
- $kustArray[$row2["parent_id"]][]=$row2["id"];
- $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
-}
-
-$kustBackground[1]="#AFEEEE";
-$kustBackground[2]="#87CEFA";
-$kustBackground[3]="#EEE8AA";
-
-
-
-
-
-//sort($kustArray);
-
-$sortStoreId="";
-$i=0;
-foreach($kustArray as $kustId =>$massiv) {
- foreach($massiv as $storeGuid) {
- if($i>0) $sortStoreId .=",";
- $sortStoreId .=$storeGuid;
- $sortStore[]=$storeGuid;
- $i++;
- }
- echo'</p>';
-}
-
-
-
-
-
-echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
-echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info btn-sm me-1">без цветов</a>
-
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info btn-sm me-1 ">показать ручные добавки</a>
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info btn-sm me-1 ">показать столбцы итого</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info btn-sm me-1 ">показать % от матрицы в цвете</a>
-
-
-
-
-<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
-
-
-
-$data=$db::getRows("SELECT * FROM store_planogram WHERE 1");
-foreach($data as $row) {
- if(empty($row["color"])) $row["color"]="NULL";
- $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["min"]=$row["quantity"];
- $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["max"]=$row["quantity_max"];
-}
-
-
-
-
-$colorSort=[];
-$data=$db::getRows("SELECT product_id, store_id, color,posit FROM store_planogram_colors_sort WHERE 1 order by product_id ASC, posit ASC");
-foreach($data as $row) $colorSort[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["posit"];
-
-
-
-$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
-foreach($da as $r) {
- $providers[$r["id"]]=$r["name"];
- $providers_valuta[$r["id"]]=$r["valuta"];
-}
-
-
-
-$k=0;$w="";
-$privedrs_htm="";
-foreach($in as $pid) {
-//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
- if($k!=0) $w .=","; $w .="'$pid'"; $k++; }
-
-$w2="";
-
-$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
-WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) {
-//if($k!=0) $w2 .=" OR ";
-//$w2 .="i.id_1c='".$row["id"]."'";
- $products[$row["id"]]=$row["name"];
- $productsMinLot[$row["id"]]=$row["min_lot"];
- $prov[$row["id"]]=$row["provider_id"];
- $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
- if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
- $k++;
-}
-
-$division=array(); //division_summ =50
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
-$ColorsCnt = [];
-$dataFiedlsValuesColorsCnt = [];
-foreach($data as $row) {
- if(empty($row["color"])) $row["color"]="NULL";
- if(empty($row["store_id"])) $row["store_id"]="NULL";
- $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
- if($row["store_id"]!="NULL") {
- $ColorsCnt[$row["product_id"]] +=$row["value"];
- $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-$division=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
-foreach($data as $row) {
- if(empty($row["color"])) $row["color"]="NULL";
- if(empty($row["store_id"])) $row["store_id"]="NULL";
- $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
- if($row["store_id"]!="NULL") {
- $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-
-
-
-$quantity_warehouseman_fact=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
-foreach($data as $row) {
- if(empty($row["color"])) $row["color"]="NULL";
- if(empty($row["store_id"])) $row["store_id"]="NULL";
- $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-
- if($row["store_id"]=="NULL") {
- $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
- }
-}
-
-
-$colorPercent=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value,field_name FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and color!='' and field_name in('color_percent','division_hand')",[$OrderId]);
-foreach($data as $row) {
- if($row["store_id"]!="NULL") {
- if($row["field_name"]=="color_percent") $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
- if($row["field_name"]=="division_hand") $divisionHand[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
-
-
- }
-}
-
-
-
-echo'<div id="edit_div"></div><div class="table-responsive">
-<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
-
-$head="";
-foreach($sortStore as $storeId) {
- echo'<th style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
- $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
-}
-if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
-
-echo'</tr></thead><tbody>';
-
-
-$i=0;
-foreach($products as $productId =>$nameProduct) {
-//echo $nameProduct;
- if(!empty($ColorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
-
- if($i==20) { echo'<tr class="zg"><td class="td_product">наименование</td>
-<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
-
-
- if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
- echo'</tr>'; $i=0; }
-
-
- echo'<tr id="tr__'.$productId.'" class="trproduct"';
- echo'><td class="td_product producted"><span class="fs-6"><a href="/shipment/divisionPrintEditProduct/?productId='.$productId.'&id='.$OrderId.'" target=new>'.$nameProduct.'</a></span> ';
- if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
- onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
- echo' </td><td>'.$productsMinLot[$productId].'</td>';
-
- $divisionCnt=0;
- foreach($sortStore as $storeId) {
- $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
- $divisionCnt=$divisionCnt + $value;
- if(empty($value)) $value="";
- echo'<td class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
-
- if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1) echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
- echo'</td>';
- }
-
- if($printSumm==1) {
- echo'<td>'.intval($divisionCnt).'</td>';
-
- echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
- $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
-
- echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
- }
- $colspan=count($sortStore)+1;
- echo'</tr>';
-
-//$ostatok[$productId]=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"];
-
- if($printColor==1) {
-//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
- $kk=0;
-// цвета
- foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
- $colorName=trim($colorName);
- $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
- if(1)//if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
- {
-
-
-
- /*
- echo'<tr '; if($printColor!=1) echo'style="display:none;"';
- echo' class="tr__'.md5($productId).' ';
-
- // если не завезли такой цвет
- if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
-
-
- if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
- echo'>
- <td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.) в %';
-
-
- echo'</td><td></td>';
- $colorCounter=0;
- foreach($sortStore as $storeId) {
- $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
-
- $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
-
- // if(!empty($value)) $value .="%";
-
- if(empty($value)) $value="";
-
-
- $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
- $newcolorcnt=$value_real*($value/100);
-
- // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
-
- $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
- $colorData[$productId][$storeId][$colorName2]=$colorcnt;
-
- $colorCounter +=$colorcnt;
-
- echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="'.$value_real.' -> '.$value.'%">'.$colorcnt.'';
-
- if(!empty($value) and $printPercentMatrix==1) echo'<br>
- <small style="color:green">'.$value.'%</small>';
-
- echo'
- </td>';
- }
-
-
- if($printSumm) {
-
- $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
- $znak="";
- if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
-
- $difference[$productId][$colorName]=$colorDifference;
-
-
- echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
- <td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
-
- }
-
-
- echo'</tr>';
-
- */
-
-
-////////////// class="bg-secondary"
-
-
- $colorAllcnt=0;
- if(!empty($dataColor[$productId][$colorName])) {
- echo'<tr><td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)</td><td></td>';
- $ColorsCounter[$productId]++;
- $foreachBegin=$difference[$productId][$colorName];
- $minLot=$productsMinLot[$productId];
- $newHand=[];
- foreach($sortStore as $storeId) {
- //$colorData[$productId][$storeId][$colorName2]
- if($colorData[$productId][$storeId][$colorName]>0 and $colorData[$productId][$storeId][$colorName]>=$minLot) {
- if($foreachBegin>0) {
- $foreachBegin -=$minLot;
- $newHand[$storeId] +=-$minLot;
-
-
-
- } else break;
- }
-
-
- }
-
-
-
- foreach($sortStore as $storeId) {
- $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
-
- if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
-
- $ostatok[$productId][$storeId] +=$newColorInt; //'.$newHand[$storeId].'= $(\'#input_division_hand'.$storeId.''.$productId.''.md5($colorName).'\').toggle();
- echo'<td><span onclick="ShowInput(\'division_hand\',\''.$storeId.'\',\''.$productId.'\',\''.$colorName.'\',\''.md5($colorName).'\',\''.$productsMinLot[$productId].'\',\''.$newColorInt.'\')"
- id="division_hand'.$storeId.''.$productId.''.md5($colorName).'">'.$newColorInt.'</span>
-
- </td>';
-
- $colorAllcnt +=$newColorInt;
-
- // <input style="display:none;" type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'division_hand\',\''.$productId.'\',\''.$storeId.'\',\''.$colorName.'\',\''.md5($colorName).'\');" class="" id="input_division_hand'.$storeId.''.$productId.''.md5($colorName).'">
-// <sup>'.$store_planogram[$productId][$storeId][$colorName]["min"].'-'.$store_planogram[$productId][$storeId][$colorName]["max"].'</sup>
- }
-
-
- if($printSumm) {
-
-//$colorDifference=$colorCounter-$dataColor[$productId][$colorName];
- $znak="";
-
-
- $difcolor=$dataColor[$productId][$colorName]-$colorAllcnt;
-
-//if($colorCounter>$dataColor[$productId][$colorName]) $znak="+"; '.$colorCounter.' '.$dataColor[$productId][$colorName].'
- echo'<td>'.$colorAllcnt.'</td><td>'.$dataColor[$productId][$colorName].'</td>
-<td '; if($difcolor!=0) echo' class="bg-danger"'; echo'>'.$difcolor.'</td>';
-
- }
-
- echo'</tr>';
- }
-/////////////////
-
- }
-
-
- }// end color
-
-
-//////////////
-
-
- if(!empty($ColorsCounter[$productId])) {
- echo'<tr class="bg-success"><td class="tr">остаток</td><td></td>';
- foreach($sortStore as $storeId) {
-
-
- $ost=$dataFiedlsValues[$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
- //'.$ostatok[$productId][$storeId].'
- echo'<td class="';
- if($ost==0) echo'bg-success';
- elseif($ost>0) echo'bg-indigo';
- elseif($ost<0) echo'bg-danger';
- echo'">'.$ost.'</td>';
- }
-
-
- if($printSumm) {
-
- echo'<td></td><td></td>
-<td '; if($colorDifferenc1) echo' class="bg-danger"'; echo'></td>';
-
- }
-
- echo'</tr>';
- }
-/////////////////
-
-
-
-
-
- } // end if color
-
-
-
- }
-
-
-
-}
-
-
-echo'</tbody></table></div>';
-//var onch=\'onchange="ajaxEditColor( \'\'+name_eng+\'\' , \'\'+store_id+\'\', \'\'+product_id+\'\', \'\'+color+\'\', \'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');"\';
-
-
-// $(\'#\'+name_id).after(\'<input type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'\'+name_eng+\'\',\'\'+product_id+\'\',\'\'+store_id+\'\',\'\'+color+\'\',\'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');
-// class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'"
-$_CONFIG["jscss"] .='
-
-
-
-<script>
-
-function editz(name_eng)
-{
-
-alert(\' \'+name_eng+\'\');
-}
-
-
-function ajaxEditColor(name_eng,store_id,product_id,color,colormd5)
-{
-
-var v =$(\'#input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\').val();
-var name_id=\'input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
-
-
-
-
-$.ajax({
- url: \'/shipment/ajaxEditFieldValue/\',
- method: \'post\',
- dataType: \'html\',
- data: { id: '.$OrderId.',
- name_eng: name_eng,
- store_id: store_id,
- product_id: product_id,
- color: color,
- value: v},
- success: function(data){
- $(\'#\'+name_id+\'\').after(\'<span class="okk">\'+data+\'</span>\');
- $(\'#\'+name_id+\'\').addClass(\'greener\');
- }
-
-});
-
-setTimeout(function(){$(\'.okk\').remove();$(\'#\'+name_id+\'\').removeClass(\'greener\');}, 3000);
-
-}
-
-
-function ShowInput(name_eng,store_id,product_id,color,colormd5,step,value) {
-var name_id=\'\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
-
-
-if($(\'#\'+name_id+\'\').html()==value) {
-$(\'#\'+name_id+\'\').html(\'<input type=number class="editColor" onchange=ajaxEditColor("\'+name_eng+\'","\'+store_id+\'","\'+product_id+\'","\'+color+\'","\'+colormd5+\'") id=input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\' name=colorHand[\'+store_id+\'][\'+product_id+\'][\'+color+\'] value="\'+value+\'" step="\'+step+\'">\');
-}
-
-}
-
-</script>
-
-<style>
-.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
-.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
-.zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
-.zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
-table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
-table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
-table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
-.app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
-.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
-.zak td.td_product:hover {background:#fff;}
-.zak tr td.pr,.zak tr td.ost{text-align:center;}
-.zak tr td.pr{background:#ddd}
-.zak tr td.ost{background:#e6e6e6}
-.zak td{text-align:center; vertical-align: bottom;}
-.zak td.lf{text-align:left; background:#fff}
-.zak td.tr{text-align:right;}
-.zak td, .zak thead th{color:#000;}
-.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
-
-
-input.greener{border:2px green solid;}
-input.editColor{width:auto;max-width:70px;}
-</style>';
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
-
+++ /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_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-global $products;
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$act='division-print';
-$modul='shipment';
-$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
-if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
-
-$OrderId=$id;
-
-
-$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
-$in=explode(",",$row["providers_arr"]);
-$status_order_id=$row["status"];
-$division_date=$row["division_date"];
-
-$k=0;
-$printColor=1;
-if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
-
-
-$printHand=0;
-if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
-
-
-$printSumm=0;
-if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
-
-
-$printPercentMatrix=0;
-if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
-
-
-$kustArray=array();
-$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
-foreach($data2 as $row2) {
- $kustArray[$row2["parent_id"]][]=$row2["id"];
- $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
-}
-
-$kustBackground[1]="#AFEEEE";
-$kustBackground[2]="#87CEFA";
-$kustBackground[3]="#EEE8AA";
-
-//sort($kustArray);
-
-$sortStoreId="";
-$i=0;
-foreach($kustArray as $kustId =>$massiv) {
- foreach($massiv as $storeGuid) {
- if($i>0) $sortStoreId .=",";
- $sortStoreId .=$storeGuid;
- $sortStore[]=$storeGuid;
- $i++;
- }
- echo'</p>';
-}
-
-
-
-
-
-echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
-echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info btn-sm me-1">без цветов</a>
-
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info btn-sm me-1 ">показать ручные добавки</a>
-
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info btn-sm me-1 ">показать столбцы итого</a>
-<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info btn-sm me-1 ">показать % от матрицы в цвете</a>
-
-
-
-
-<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
-
-
-
-$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
-foreach($da as $r) {
- $providers[$r["id"]]=$r["name"];
- $providers_valuta[$r["id"]]=$r["valuta"];
-}
-
-
-
-$k=0;$w="";
-$privedrs_htm="";
-foreach($in as $pid) {
-//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
- if($k!=0) $w .=","; $w .="'$pid'"; $k++; }
-
-$w2="";
-
-$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
-WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) {
-//if($k!=0) $w2 .=" OR ";
-//$w2 .="i.id_1c='".$row["id"]."'";
- $products[$row["id"]]=$row["name"];
- $productsMinLot[$row["id"]]=$row["min_lot"];
- $prov[$row["id"]]=$row["provider_id"];
- $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
- if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
- $k++;
-}
-
-$division=array(); //division_summ =50
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
-foreach($data as $row) {
- if(empty($row["color"])) $row["color"]="NULL";
- if(empty($row["store_id"])) $row["store_id"]="NULL";
- $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
- if($row["store_id"]!="NULL") {
- $ColorsCnt[$row["product_id"]] +=$row["value"];
- $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-$division=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
-foreach($data as $row) {
- if(empty($row["color"])) $row["color"]="NULL";
- if(empty($row["store_id"])) $row["store_id"]="NULL";
- $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
- if($row["store_id"]!="NULL") {
- $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
-}
-
-
-
-
-
-$quantity_warehouseman_fact=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
-foreach($data as $row) {
- if(empty($row["color"])) $row["color"]="NULL";
- if(empty($row["store_id"])) $row["store_id"]="NULL";
- $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
-
- if($row["store_id"]=="NULL") {
- $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
- }
-}
-
-
-$colorPercent=array();
-$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
-WHERE order_id=? AND store_id!='' and color!='' and field_name='color_percent'",[$OrderId]);
-foreach($data as $row) {
- if($row["store_id"]!="NULL") {
- $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
- }
-}
-
-
-
-echo'<div class="table-responsive">
-<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
-
-$head="";
-foreach($sortStore as $storeId) {
- echo'<th style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
- $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
-}
-if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
-
-echo'</tr></thead><tbody>';
-
-
-$i=0;
-foreach($products as $productId =>$nameProduct) {
-//echo $nameProduct; !empty($ColorsCnt[$productId]) and
- if($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
-
- if($i==20) { echo'<tr class="zg"><td class="td_product">наименование</td>
-<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
-
-
- if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
-
- echo'</tr>'; $i=0; }
-
-
- echo'<tr id="tr__'.$productId.'" class="trproduct"';
- echo'><td class="td_product producted"><span class="fs-6">'.$nameProduct.'</span> ';
- if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
- onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
- echo' </td><td>'.$productsMinLot[$productId].'</td>';
-
- $divisionCnt=0;
- foreach($sortStore as $storeId) {
- $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
- $divisionCnt=$divisionCnt + $value;
- if(empty($value)) $value="";
- echo'<td class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
-
- if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1) echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
- echo'</td>';
- }
-
- if($printSumm==1) {
- echo'<td>'.intval($divisionCnt).'</td>';
-
- echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
- $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
-
- echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
- }
- $colspan=count($sortStore)+1;
- echo'</tr>';
-
-
-
- if($printColor==1) {
-//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
- $kk=0;
-// цвета
- foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
- $colorName=trim($colorName);
- $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
- if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
- {
-
-
-
-
- echo'<tr '; if($printColor!=1) echo'style="display:none;"';
- echo' class="tr__'.md5($productId).' ';
-
-// если не завезли такой цвет
- if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
-
-
- if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
- echo'>
-<td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.) в %';
-
-
- echo'</td><td></td>';
- $colorCounter=0;
- foreach($sortStore as $storeId) {
- $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
-
- $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
-
- // if(!empty($value)) $value .="%";
-
- if(empty($value)) $value="";
-
-
- $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
- $newcolorcnt=$value_real*($value/100);
-
- // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
-
- $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
-
- $colorCounter +=$colorcnt;
-
- echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="нужно поедлить '.$value_real.' '.$value.'%">'.$colorcnt.'';
-
- if(!empty($value) and $printPercentMatrix==1) echo'<br>
- <small style="color:green">'.$value.'%</small>';
-
- echo'
- </td>';
- }
-
-
- if($printSumm) {
-
- $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
- $znak="";
- if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
-
-
- echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
-<td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
-
- }
-
-
- echo'</tr>';
-
- }
-
-
- }// end color
- } // end if color
-
-
-
- }
-
-
-
-}
-
-
-echo'</tbody></table></div>';
-
-
-
-$_CONFIG["jscss"] .='
-<style>
-.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
-.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
-.zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
-.zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
-table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
-table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
-table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
-.app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
-.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
-.zak td.td_product:hover {background:#fff;}
-.zak tr td.pr,.zak tr td.ost{text-align:center;}
-.zak tr td.pr{background:#ddd}
-.zak tr td.ost{background:#e6e6e6}
-.zak td{text-align:center; vertical-align: bottom;}
-.zak td.lf{text-align:left; background:#fff}
-.zak td.tr{text-align:right;}
-.zak td, .zak thead th{color:#000;}
-.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
-</style>';
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
+++ /dev/null
-<?php
-
-use yii\helpers\ArrayHelper;
-use yii\db\Expression;
-use yii_app\records\AdminGroup;
-use yii_app\records\Products1c;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrders;
-use yii_app\records\ShipmentProviders;
-use yii_app\records\Products1cOptions;
-use yii_app\records\StoreOrdersItem;
-use yii_app\records\StoreOrdersPrices;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StoreOrdersColors;
-use yii_app\records\Sales;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-
-//include"templates/top.php";
-
-global $products;
-$act='division';
-$modul='shipment';
-$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
-//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
-$storesAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
-
-$data3 = StoreOrdersStatuses::find()->asArray()->all();
-//$data3=$db::getRows("SELECT * FROM store_orders_statuses");
-foreach($data3 as $row) {
- $store_orders_statuses[$row["id"]]=$row["name"];
- $statuses_groups[$row["id"]]=explode(",",$row["groups"]);
- $statuses_stores_show[$row["id"]]=$row["stores_show"];
- $statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
- $status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
-
-}
-
-$group_id=$_SESSION["group_id"];
-
-global $order_id;
-
-if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
-
-$OrderId=$id;
-
-global $status_order_id;
-
-$row = StoreOrders::find()->select(['name', 'id', 'providers_arr', 'status', 'DATE_FORMAT(date_start, \'%Y-%m-%d\') as date_start', 'parent_id'])
- ->where(['id' => $id])->asArray()->one();
-//$row=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
-$in=explode(",",$row["providers_arr"]);
-$status_order_id=$row["status"];
-$k=0;
-$where="";
-foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
- if(!empty($guid)) {
- if($k!=0) $where .=" OR ";
- $where .=" id='$guid' ";
- $k++;
- }
-}
-
-if(!empty($where)) $where =" AND ( $where )";
-
-
-//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
-$stores = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
- ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' $where AND view='1' order by name ASC");
-
-$kustArray=array();
-$data2 = Products1c::find()->select(['parent_id', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
- ->andWhere(['!=', 'parent_id', ''])->orderBy(['parent_id' => SORT_ASC, 'name' => SORT_ASC])->asArray()->all();
-//$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
-foreach($data2 as $row2) {
- $kustArray[$row2["parent_id"]][]=$row2["id"];
- $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
-}
-
-$kustBackground[1]="#AFEEEE";
-$kustBackground[2]="#87CEFA";
-$kustBackground[3]="#EEE8AA";
-
-
-
-//sort($kustArray);
-
-$sortStoreId="";
-$i=0;
-foreach($kustArray as $kustId =>$massiv) {
-// echo"<p> Куст $kustId = ";
- foreach($massiv as $storeGuid) {
- // echo '<span class="btn btn-sm btn-info m-2"> '.$storesAll[$storeGuid]. '</span>';
- if($i>0) $sortStoreId .=",";
- $sortStoreId .=$storeGuid;
- $sortStore[]=$storeGuid;
- $i++;
- }
- echo'</p>';
-}
-
-
-
-
-
-echo'<h1 class="page-title mb-0 text-primary">Остаток склада '.$row["name"].' id='.$row["id"].'
-</h1>
-<span class="btn">'. $store_orders_statuses[$status_order_id] .' </span> ваша роль <b>'.$roles[$_SESSION["group_id"]].'</b>
-
-<div id="admin__online"></div>
-';
-
-$w="";
-
-$da = ShipmentProviders::find()->select(['id', 'name', 'valuta'])->asArray()->all();
-//$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
-foreach($da as $r) {
- $providers[$r["id"]]=$r["name"];
- $providers_valuta[$r["id"]]=$r["valuta"];
-}
-
-
-
-$k=0;
-$privedrs_htm="";
-foreach($in as $pid) {
- $privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
- if($k!=0) $w .=" OR"; $w .=" o.provider_id='$pid'"; $k++; }
-//echo'<div class="row"><div class="col-12">'.$privedrs_htm.'</div></div>';
-
-$w2="";
-
-$data2 = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'o.min_lot'])
- ->innerJoin('products_1c p', 'p.id = o.id')->where(['in', 'o.provider_id', $in])
- ->orderBy(['o.provider_id' => SORT_ASC, 'p.name' => SORT_ASC])->asArray()->all();
-//$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
-//WHERE ($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
-$k=0;
-foreach($data2 as $row) {
- if($k!=0) $w2 .=" OR ";
- $w2 .="i.id_1c='".$row["id"]."'";
- $products[$row["id"]]=$row["name"];
- $productsMinLot[$row["id"]]=$row["min_lot"];
- $prov[$row["id"]]=$row["provider_id"];
- $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
- if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
- $k++;
-}
-
-$division=array();
-$division_prod = [];
-$data = StoreOrdersItem::find()->select(['division_fact as division_fact', 'store_id', 'product_id'])->where(['order_id' => $OrderId])
- ->andWhere(['!=', 'store_id', ''])->asArray()->all();
-//$data=$db::getRows("SELECT division_fact as division_fact,store_id,product_id FROM store_orders_item WHERE order_id=? AND store_id!=''",[$OrderId]);
-foreach($data as $row) {
- $division[$row["product_id"]][$row["store_id"]]=(int)$row["division_fact"];
-
- $division_prod[$row["product_id"]] +=(int)$row["division_fact"];
-
-}
-
-
-// quantity_purchase_summ AND division_fact>0 or (quantity_purchase_summ>0 and division_fact='0')
-
-$data = StoreOrdersPrices::find()->select(['sum(quantity_warehouseman_fact) as quantity_warehouseman_fact', 'product_id', 'sum(quantity_purchase_summ) as quantity_purchase_summ'])
- ->where(['order_id' => $OrderId])->groupBy(['product_id'])->asArray()->all();
-//$data=$db::getRows("SELECT sum(quantity_warehouseman_fact) as quantity_warehouseman_fact, product_id,
-//sum(quantity_purchase_summ) as quantity_purchase_summ FROM store_orders_prices WHERE order_id=? group by product_id",[$OrderId]);
-$quantity_warehouseman_fact = [];
-$products_no = [];
-foreach($data as $row) {
- $quantity_warehouseman_fact[$row["product_id"]]=$row["quantity_warehouseman_fact"];
- if($row["quantity_purchase_summ"]>0 and empty($division_prod[$row["product_id"]])) {
- $products_no[$row["product_id"]]=$products[$row["product_id"]];
- $products_quantity_purchase_summ[$row["product_id"]]=$row["quantity_purchase_summ"];
- }
-
-
-}
-
-$data = StoreOrdersItem::find()->select(['sum(division_fact) as division_fact', 'product_id'])->where(['order_id' => $OrderId])
- ->groupBy(['product_id'])->asArray()->all();
-//$data=$db::getRows("SELECT sum(division_fact) as division_fact,product_id FROM store_orders_item WHERE order_id=? group by product_id",[$OrderId]);
-foreach($data as $row) {
- $QuantitySumm[$row["product_id"]]=$row["division_fact"];
-
-}
-
-global $quantityPurchase;
-$data = StoreOrdersItem::find()->select(['product_id', 'store_id', 'quantity_purchase'])->where(['order_id' => $OrderId])->asArray()->all();
-//$data=$db::getRows("SELECT product_id, store_id, quantity_purchase FROM store_orders_item WHERE order_id=?",[$OrderId]);
-$quantityPurchaseAll = [];
-foreach($data as $row) {
- $quantityPurchase[$row["product_id"]][$row["store_id"]]=$quantityPurchase[$row["product_id"]][$row["store_id"]]+$row["quantity_purchase"];
- $quantityPurchaseAll[$row["product_id"]]=$quantityPurchaseAll[$row["product_id"]]+$row["quantity_purchase"];
-
-
-}
-
-//print_r($products_no);
-
-//$products=array_merge($products,$products_no);
-foreach($products as $productId =>$nameProduct) {
-
- if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
-
- $ostatok=$quantity_warehouseman_fact[$productId]-$QuantitySumm[$productId];
- if($ostatok>0) { // echo'<br> '.$nameProduct.'= '. $QuantitySumm[$productId] .' ostatok='.$ostatok.' ';
- $ostatokReal[$productId]=$ostatok; }
- // else echo'<br> Деление в минус '.$nameProduct.'= '. $QuantitySumm[$productId].' ostatok='.$ostatok.' ';
-
- }
-}
-
-$fieldIdThisDivision=22;
-
-
-if(!empty($_REQUEST["fieldIdThisDivision"])) $fieldIdThisDivision=(int)$_REQUEST["fieldIdThisDivision"];
-
-$_SESSION["fieldIdThisDivision"]=$fieldIdThisDivision;
-
-$data = StoreOrdersFields::find()->select(['name_full', 'description', 'name_eng', 'sql_table_values'])
- ->where(['id' => $fieldIdThisDivision])->asArray()->one();
-//$data=$db::getRow("SELECT name_full, description, name_eng,sql_table_values FROM `store_orders_fields` WHERE id=?",[$fieldIdThisDivision]);
-
-$arrField=["20"=>"Деление закупшик", "22"=>"Деление кустовых Пришло по фактку кладовщик ", 4=>"Заказ кустовых" ];
-foreach($arrField as $fid =>$name){
- echo'<a href="/'.$modul.'/'.$act.'/?id='.$id.'&fieldIdThisDivision='.$fid.'" class="btn btn';
- if($fid==$fieldIdThisDivision) echo'-success'; else echo'-info';
- echo' m-2">'.$name.'</a>';
-
-}
-
-
-echo' <br> <b>'.$data["name_full"].'</b> '.$data["description"].' <b>'.$data["sql_table_values"].' '.$data["name_eng"].' </b> ';
-
-global $dataColorsValuesAll,$dataColorsValuesStores;
-//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
-$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'quantity', 'store_id'])
- ->where(['order_id' => $OrderId])->andWhere(['not in', 'store_id', ['undefined', '']])
- ->andWhere(['in', 'field_id', ['4', "" . $fieldIdThisDivision, '17', '20', '22']])
- ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
- ->asArray()->all();
-//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
-//and (field_id='4' or field_id='$fieldIdThisDivision' or field_id='17' or field_id='20' or field_id='22') group by product_id,provider_id, store_id, color, field_id",[$OrderId]);
-foreach($data5 as $row5) {
-
-
- if($row5["store_id"]!=0) $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]+$row5["quantity"];
-
-
- $dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
-}
-
-
-
-
-//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
-$data5 = StoreOrdersColors::find()->select(['product_id', 'color', 'field_id', 'quantity', 'store_id'])->where(['order_id' => $OrderId])
- ->andWhere(['not in', 'store_id', ['undefined', '']])->andWhere(['field_id' => "" . $fieldIdThisDivision])
- ->groupBy(['product_id', 'provider_id', 'store_id', 'color'])
- ->asArray()->all();
-//$data5=$db::getRows("SELECT product_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
-//and (field_id='$fieldIdThisDivision') group by product_id,provider_id, store_id, color",[$OrderId]);
-foreach($data5 as $row5) {
- $ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
-}
-
-
-//print_r($dataColorsValuesAll);
-
-
-
-
-$dataColorsValuesAll=array();
-$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'sum(quantity) as quantity', 'store_id'])
- ->where(['order_id' => $OrderId])
- ->andWhere(['store_id' => '0'])
- ->andWhere(['field_id' => "" . $fieldIdThisDivision])
- ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
- ->asArray()->all();
-//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, sum(quantity) as quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined'
-//and store_id='0'
-//and (field_id='$fieldIdThisDivision') group by product_id,provider_id, store_id, color,field_id",[$OrderId]);
-foreach($data5 as $row5) {
- $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$row5["quantity"];
-}
-
-global $storesArr,$whereStores,$productsArrayStores;
-$storesArr = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->andWhere(['not in', 'name', ['09 Доставка букетов', '19 Пр. Октября 9а']])->all(), 'id', 'name');
-//$storesArr=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1' AND name!='09 Доставка букетов' AND name!='19 Пр. Октября 9а'");
-$whereStores=" AND ( store_id_1c='-99' ";
-foreach($storesArr as $storeIdGuid => $nameStore) $whereStores .=" or s.store_id_1c='$storeIdGuid' ";
-$whereStores .=" ) ";
-
-$whereProducts=" AND ( p.product_id='-999' ";
-foreach($products as $productId =>$nameProduct) {
- $whereProducts .=" or p.product_id='$productId' ";
-}
-$whereProducts .=" )";
-
-$data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c', 'p.product_id'])
- ->innerJoin('sales_products p', 's.id = p.check_id')
- ->where(['s.operation' => 'Продажа'])
- ->andWhere(['in', 'p.product_id', array_keys($products)])
- ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
- ->groupBy(['p.product_id', 's.store_id_1c'])
- ->orderBy(['squantity' => SORT_DESC])
- ->asArray()->all();
-//$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id
-//FROM sales as s, sales_products as p
-//WHERE s.id=p.check_id AND s.operation='Продажа' $whereProducts AND s.date>=NOW() - INTERVAL 14 day $whereStores group BY p.product_id, s.store_id_1c order by
-//squantity DESC");
-foreach($data as $row){
- $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
-
-}
-
-
-
-
-//функция автораспределения количество штук заказнных магазином , фактический приход по товару, сколкьо заказано кустовым, минимальный лот
-function autoDivision($productId,$quantityArr,$formulaFact,$formulaPurchase,$formulaMinLot) {
- global $db,$storesArr,$whereStores,$productsArrayStores,$quantityPurchase;
- /*
- Распределение по делению.
-
- Если заказ меньше Минимальный лот деления
- Первый цикл подсчета полный цикл считаем в процентном соотношении доли заказа кустовым к общему приходу
-
- Например Заказ =100 А пришло 65 штук
- Последний цикл по рейтингу продаж по этой позиции за прошедшую неделю
- По этой позиции
- Если заказ больше то заказ распределяется 100%
- Подсказка по пронципе продаж начисления %
- */
-
-
-
-
- /*
- $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
- FROM sales as s, sales_products as p
- WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores group BY p.product_id, s.store_id_1c order by
- squantity DESC",[$productId]);
- */
-
- $allQuantity=0;
- foreach($quantityArr as $quantity) $allQuantity +=$quantity;
-
-
- $txt="<h3>Сортировка по магазинам по этому товару</h3>
-<p>Продажи за последнюю неделю в шт.</p>";
- $massivStoreSort=array();
- $i=1;
-
-
- if($formulaPurchase>=$formulaFact) $allQuantity=$formulaFact;
- if($formulaPurchase<=$formulaFact) $allQuantity=$formulaPurchase;
-
- $txt .="Считаем по $allQuantity ";
-
- $txt .=" $allQuantity заказ кустовых $formulaPurchase ";
- /*
- foreach($data as $row){
- $txt .="<tr><td>$i)</td><td>".$storesArr[$row["store_id_1c"]]."</td><td>".(int)$row["squantity"]." шт.</td></tr>";
- $massivStoreSort[]=$row["store_id_1c"];
- $massivStoreSortQuantity[$row["store_id_1c"]]=(int)$row["squantity"];
-
- $i++;
- }
- */
- if($formulaFact>=$formulaPurchase) $percentFact=1; else $percentFact=$formulaFact/$formulaPurchase;
-
- $percentFact=round($percentFact,4);
-
- $txt .=" <br>коэфициент умножения $percentFact -умноаем каждый заказ на этот коэф
-
-<table><tbody> ";
-
- $onclick="";
-
- $q_all=0;
- foreach($quantityPurchase[$productId] as $store_id_1c => $quantity){
-
-//$percent=round($quantityArr[$store_id_1c]*$percentFact/$allQuantity,3);
-
-
- $quantity_zakaz=round($quantityArr[$store_id_1c]*$percentFact);
- $quantity_zakaz_round=ceilCoefficient($quantity_zakaz,$formulaMinLot);
-
-//$roundPBase=ceilCoefficient($formulaFact*$percent*$percentFact,$formulaMinLot);
-//if($percent>0 and $roundP==0 and $roundPAll<$formulaFact) $roundP=$formulaMinLot;
- $q_all +=$quantityArr[$store_id_1c];
-
- if($roundPBaseAll<$allQuantity) {
- $roundPBaseAll +=$quantity_zakaz_round;
-
- }
-
- $txt .="<tr><td>$i)</td><td>".$storesArr[$store_id_1c]."</td><td>".(int)$quantity." шт.</td>
-<td>заказ ".$quantityArr[$store_id_1c]."</td>
-<td>".$percent."</td><td>$formulaFact</td>
-<td> $quantity_zakaz -> $quantity_zakaz_round </td></tr>";
-//$massivStoreSort[]=$store_id_1c;
-//$massivStoreSortQuantity[$store_id_1c]=(int)$quantity;
-
-
- $autoReccomend[$store_id_1c]=$quantity_zakaz_round;
-
- $onclick .='$(\'#autodivision_'.$productId.''.$store_id_1c.'\').text(\''.$quantity_zakaz_round.'\');';
-
-
- $i++;
- }
- $txt .="<tr><td></td><td>Итого</td><td></td><td>$q_all</td><td></td><td></td><td>$roundPBaseAll</td></tr>";
- $do=1;
- if($roundPBaseAll==$q_all) $do=0;
-
- $txt .="</tbody></table>всего заказано $allQuantity По факту $formulaFact = процент $percentFact% Всего базово на заказ $roundPAll
-
-
-<span class=\"btn btn-warning\" onclick=\"$onclick\">установить</span>
-
-";
-
-
-
-
- $thiasQuantity=0;
- $massivAddQuantity=array();
- $data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c'])
- ->innerJoin('sales_products p', 's.id = p.check_id')
- ->where(['s.operation' => 'Продажа'])
- ->andWhere(['p.product_id' => $productId])
- ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
- ->andWhere(['in', 's.store_id_1c', array_keys($storesArr)])
- ->groupBy(['p.product_id', 's.store_id_1c'])
- ->orderBy(['squantity' => SORT_DESC])
- ->asArray()->all();
-// $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
-//FROM sales as s, sales_products as p
-//WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores group BY p.product_id, s.store_id_1c order by
-//squantity DESC",[$productId]);
- foreach($data as $row){
- $txt .="<br> $i) ".$storesArr[$row["store_id_1c"]]." ".(int)$row["squantity"]." шт. ";
- $storeArr[$row["store_id_1c"]]=$row["squantity"];
- $i++;
- }
-
-
-
-
-// если первый цикл совсем ничего не начислил
- if($roundPBaseAll<$allQuantity) {
- $txt .="<br>
-Начинаем начисление по кругу отталкиваясь от продаж ++ $allQuantity ++";
-
- $formulaFactForeach=$allQuantity;
-
- for($kk=0;$kk<=$formulaFactForeach;$kk++) {
- if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла"; break; }
-
- foreach($storeArr as $storeId =>$q) {
- if($allQuantity>=($thiasQuantity+$formulaMinLot)) {
-
- $massivAddQuantity[$storeId] +=$formulaMinLot;
- $thiasQuantity +=$formulaMinLot;
-
-//$txt .="<br> 77777+++ ".$storesArr[$storeId]." = ".$massivAddQuantity[$storeId]." шт.";
- $formulaFactForeach -=$formulaMinLot;
- }
-
- }
- }
-
- echo"<br>Цикл начисления";
- $onclick="";
- foreach($massivAddQuantity as $storeId => $q) {
- $txt .="<br> +++ ".$storesArr[$storeId]." = ".(int)$q." шт.";
- $onclick .='$(\'#autodivision_'.$productId.''.$storeId.'\').text(\''.$q.'\')';
-
- }
-
- $txt .="<br>Итого по второму кругу= ".(int)$thiasQuantity." шт.
-
-
-
-
-";
-
-
- }
-// конец цикла
-
- $thiasQuantity=0;
- $massivAddQuantity=array();
-// распределяем излишки согласно процентам
- if($formulaFact>$formulaPurchase) {
-
- $izlishek=$formulaFact-$formulaPurchase;
-
- $txt .="<br>Начинаем начисление излишков по кругу отталкиваясь от продаж";
-
-
- $formulaFactForeach=$izlishek;
-
- for($kk=0;$kk<=$formulaFactForeach;$kk++) {
- if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла"; break; }
-
- foreach($storeArr as $storeId =>$q) {
- if($izlishek>=($thiasQuantity+$formulaMinLot)) {
- $massivAddQuantity[$storeId] +=$formulaMinLot;
- $thiasQuantity +=$formulaMinLot;
- $formulaFactForeach -=$formulaMinLot;
- }
-
- }
- }
-
-
-
-
- // echo"<br>Цикл начисления";
- foreach($massivAddQuantity as $store_id_1c => $squantity) {
-
- if(($allRecommendeted+$squantity)<=$formulaFact) {
- $allRecommendeted +=$squantity;
- $txt .="<br> +++ ".$storesArr[$store_id_1c]." = ".(int)$squantity." шт.";
- $autoReccomend[$store_id_1c] +=$squantity;
- }
-
-
- }
- $txt .="<br>Итого по третьему кругу= ".(int)$thiasQuantity." шт.";
- }
-// конец цикла
- $onclick="";
- $AutoAll=0;
- $txt .="<br>Рекомендованое распределение с излишками";
- foreach($autoReccomend as $storeId => $count) {
- if($AutoAll<$formulaFact and $formulaFact>=($AutoAll+$count)) {
- $AutoAll +=$count;
- $txt .="<br>+++ ".$storesArr[$storeId]." = ".(int)$count." шт.";
- $onclick .='$(\'#autonew_'.$productId.''.$storeId.'\').text(\''.$count.'\');';
-
- }
-
- }
- $txt .="<br>Итого распределено= ".(int)$AutoAll." шт.
-
-
- <span class=\"btn btn-warning\" onclick=\"$onclick\">установить с делением излишков</span>
-";
-
-
- $Purchase=0;
- /*
- foreach($storesArr as $storeId =>$storeName)
- {
- if(!in_array($storeId,$storesArr)) $massivStoreSort[]=$storeId;
- if(!empty($autoQuantity[$storeId])) $Purchase=1;
- }
-
- $autoQuantity=array();
- $print=1;
- $formulaFactForeach=$formulaFact;
-
- if($print==1) $txt .="<br>formulaFactForeach =$formulaFactForeach";
- $j=1;
-
-
-
-
- for($kk=0;$kk<=$formulaFactForeach;$kk++) {
-
-
-
- if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла"; break; }
- if($print==1) $txt .="<br>++Цикл =$formulaFactForeach";
-
-
-
- foreach($massivStoreSortQuantity as $storeId =>$q) {
-
-
- //$txt .="<br>!!!!!! $formulaFactForeach -- minlot=$formulaMinLot---q=".$autoQuantity[$storeId]."------ ";
-
-
-
-
- $ost=$formulaFact-$autoQuantityAll;
-
- if($print==1) $txt .="<br>$j ) ".$storesArr[$storeId]." (fact=$formulaFact => $ost) ";
- $j++;
-
-
- //если товар не заказ кустовым то пропускаем магазин
- if(empty($quantityArr[$storeId])) { $txt .=" -- пропускаем "; continue; }
-
-
-
-
-
- //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
- if($autoQuantityAll>$formulaFact) { if($print==1) $txt .="<br>=-----выход из цикла"; break; }
-
- //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
- if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot and ($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase))) {
- // если общее количество товара все еще меньше факта то выполняем
- if(($autoQuantityAll+$formulaMinLot)<=$formulaFact) {
- if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
- $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
- $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
- $formulaFactForeach -=$formulaMinLot;
- if($print==1) $txt .=" all=$autoQuantityAll+ $formulaMinLot =>continue0";
- continue;
- } else {
-
-
- if($formulaFact>=$formulaMinLot) {
- $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
- $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
- $formulaFactForeach -=$formulaMinLot;
- if($print==1) $txt .=" continue33 all=".$autoQuantity[$storeId]." qu=".$autoQuantity[$storeId]." formulaFactForeach=$formulaFactForeach ";
-
- continue;
- }
-
-
-
-
- }
- }
-
-
- }
-
- //если остаток меньше минимального лота
- if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
- if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
- $autoQuantity[$storeId] +=$formulaFactForeach;
- $autoQuantityAll +=$formulaFactForeach;
- $formulaFactForeach -=$formulaFactForeach;
- if($print==1) $txt .=" all2=$autoQuantityAll+ $formulaFactForeach BREAK ";
- break;
-
- }
- }
-
-
- //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
- if($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase)) {
-
-
- // $formulaFactForeach -=$formulaMinLot;
-
- if($print==1) $txt .=" minlot=111";
-
-
- }// вычитаем из счетчика цикла - минимальный лот
- if($print==1) $txt .=" -> ".$autoQuantity[$storeId] ." шт остаток =$formulaFactForeach all=$autoQuantityAll+ formulaFactForeach=$formulaFactForeach ";
-
- if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";
- break; } // выходим из цикла - задача выполнена
- }
-
- }
-
- $ostatky=$formulaFact-$autoQuantityAll;
- if(($formulaFact-$autoQuantityAll)>0) if($print==1) $txt .="<br><font color=red>Остатки распределены между теми кто заказал но есть остатки $ostatky</font>";
-
-
-
- //////////////
-
- $formulaFactForeach=$ostatky;
- $autoQuantityAllNew=0;
- if($print==1) $txt .="<br><h3>Распределяем остатки</h3>formulaFactForeach =$formulaFactForeach";
- $j=1;
- for($kk=0;$kk<=$formulaFactForeach;$kk++) {
- if($formulaFactForeach<=0) break;
- if($print==1) $txt .="<br>++Цикл =$formulaFactForeach";
- foreach($massivStoreSortQuantity as $storeId =>$q) {
-
- if($print==1) $txt .="<br>$j ) ".$storesArr[$storeId]." ";
- $j++;
-
-
- //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
- if($autoQuantityAllNew>=$ostatky) break;
-
- //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
- if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot) {
- // если общее количество товара все еще меньше факта то выполняем
- if(($autoQuantityAllNew+$formulaMinLot)<$formulaFact) {
-
- $autoQuantityAllNew +=$formulaMinLot; // обновляем счетчик общего количества
- $autoQuantityNew[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
- if($print==1) $txt .=" all=$autoQuantityAllNew+ $formulaMinLot ";
-
- }
-
-
- }
-
- //если остаток меньше минимального лота
- if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
-
- $autoQuantityNew[$storeId] +=$formulaFactForeach;
- $autoQuantityAllNew +=$formulaFactForeach;
-
- }
-
-
- //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
- $formulaFactForeach -=$formulaMinLot; // вычитаем из счетчика цикла - минимальный лот
- if($print==1) $txt .=" -> ".$autoQuantityNew[$storeId] ." шт остаток =$formulaFactForeach";
- if($formulaFactForeach<=0) continue; // выходим из цикла - задача выполнена
- }
-
- }
- /////////////
-
-
-
-
- if($print==1) $txt .="<br><br>==================
- <h6>Результат</h6>";
-
- foreach($autoQuantity as $q =>$s) {
- if($print==1) $txt .="<br>".$storesArr[$q]." =>$s";
- }
- */
-
- if($print==1) $txt .="<br>Итого $autoQuantityAll шт.";
- $array["auto"]=$autoQuantity;
- $array["text"]=$txt;
- $array["new"]=$autoQuantityNew;
-
-
- return $array;
-
-
-
-}
-echo"<br><b>Товары которые были заказны кустовыми но не пришли:</b> было заказано ";
-foreach($products_no as $productId => $cnt) echo"".$products[$productId]."=$cnt шт., ";
-
-echo'<br><span class="btn btn-info m-3" onclick="$(\'.no_products\').show()">показать товары которые не пришли</span>';
-
-echo'<span class="btn btn-blue m-3" onclick="load_devision_ajax();">обновить данные</span>';
-
-
-
-echo'<div class="table-responsive">
-<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>';
-
-$head="";
-foreach($sortStore as $storeId) {
- echo'<th style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></th>';
- $head .='<td style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></td>';
-}
-echo'</tr></thead><tbody>';
-
-$i=0;
-foreach($products as $productId =>$nameProduct) {
-// or !empty($products_no[$productId])
- if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
-
- if($i==20) { echo'<tr class="zg"><td class="td_product">наименование</td><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>'.$head.'</tr>'; $i=0; }
- echo'<tr id="tr__'.$productId.'"';
- // style="display:none;"
- if(!empty($products_no[$productId])) echo' class="bg-warning no_products"';
- else $i++;
- echo'><td class="td_product producted" id-data="'.$productId.'">'.$nameProduct.'
- <span class="btn btn-white btn-sm" onclick="showKust(\''.$productId.'\');$(this).remove();">+ куст</span>';
- if(!empty($products_colors[$productId])) echo' <span class="btn btn-warning btn-sm" onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>
-
-
-
- ';
- echo' <span onclick="$(\'#tr_'.md5($productId).'\').toggle()" class="btn btn-warning btn-sm">+ распределение</span></td>
- <td class="pr" id="quantity_warehouseman_fact'.$productId.'" title="'.$quantity_warehouseman_fact[$productId].'">'.$quantity_warehouseman_fact[$productId].'</td>
- <td class="summa_kust summa_kust_'.$productId.'" id="summa_kust_'.$productId.'">'.$quantityPurchaseAll[$productId].'</td>
- <td class="ost ost_product_'.$productId.'" id="ost_product_'.$productId.'">0</td>
-<td>'.$productsMinLot[$productId].'</td>';
-
-
- foreach($sortStore as $storeId) {
- $quatityArr[$storeId]=$quantityPurchase[$productId][$storeId];
- // $formulaPurchaseArr[$storeId]=$quantityPurchaseAll[$productId][$storeId];
-
- }
-
- $formulaFact=$quantity_warehouseman_fact[$productId];
- $formulaPurchase=$quantityPurchaseAll[$productId];
- $formulaMinLot=$productsMinLot[$productId];
-//$auto="$formulaFact $formulaPurchase $formulaMinLot";
-
- $autoArr=autoDivision($productId,$quatityArr,$formulaFact,$formulaPurchase,$formulaMinLot);
-
-
- $autoQantityArr=$autoArr["auto"];
- $autoTextArr=$autoArr["text"];
-
- foreach($sortStore as $storeId) {
- echo'<td class="kust'.$kustArrayReverse[$storeId].'">';
-
- $q=$quantityPurchase[$productId][$storeId];
-
-
-
-
- if(!empty($q)) echo'<small>к</small>'.$q.'';
-
- echo'<br><small>а<span id="autodivision_'.$productId.''.$storeId.'"'.$autoQantityArr[$storeId].'</span>
-
-n=<span id="autonew_'.$productId.''.$storeId.'">'.$autoArr["new"][$storeId].'</span></small> ';
-
- $provider_id=$prov[$productId];
-
- if(isset($stores[$storeId])) {
- echo'<input type=number class="form-control product_'.$productId.'" id="division_fact'.$productId.''.$storeId.'"
-onchange="EditField(\'division_fact\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.');" value="'.$division[$productId][$storeId].'">';
-
- } else echo'<span class="product_'.$productId.'" title="'.$division[$productId][$storeId].'" id="division_fact'.$productId.''.$storeId.'">'.$division[$productId][$storeId].'</span>';
-
-
-
-
- echo'</td>';
-
-
-
- }
-
-
-
- $colspan=25;
-
- echo'</tr>
-
-<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>';
-
-
- $kk=0;
-// цвета
-
-
-
-
- $reload='';
- foreach($products_colors[$productId] as $colorId => $colorName) $reload .=';calc_color_product(\''.$productId.'\',\''.md5($colorName).'\')';
- foreach($sortStore as $storeId) $reload .=';calc_color_product_store(\''.$productId.'\',\''.$storeId.'\')';
-
-
-
- foreach($products_colors[$productId] as $colorId => $colorName) {
- $colorName=trim($colorName);
-//$zakupFactColor=$dataColorsValuesAll[$productId][$colorName][17];
- $zakupFactColor=$dataColorsValuesAll[$productId][$colorName][22];
- echo'<tr style="display:none;" class="tr__'.md5($productId).' td_color_'.$productId.' color_tr_calc" title="color'.$productId.''.$storeId.''.md5("$colorName").'">
-<td>
-';
-
-
-
- if($kk==0) echo'<span class="btn btn-info" onclick="calc_colors(\''.$productId.'\');'.$reload.'">обновить данные</span>';
-
- $kk++;
- echo'<table width=100%><td><span class="btn btn-sm btn-info" onclick="calc_color_product(\''.$productId.'\',\''.md5($colorName).'\');">обновить</span></td><td width=70%>'.$colorName.'</td></table></td>
-<td class="pr" id="quantity_color'.$productId.''.md5($colorName).'" title="'.$zakupFactColor.'">';
-
- if(1) {
- /*
- echo'<input title="Приход по цвету от закупщика" type=number class="form-control" id="quantity_zakup_fact_color'.$productId.''.md5("$colorName").'"
- onchange="EditZakupColor(\'17\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_zakup_fact_color'.$productId.''.md5("$colorName").'\');"
- value="'.$zakupFactColor.'">';
- */
-
- echo'<input title="Приход по цвету от кладовщика quantity_warehouseman_fact" type=number class="form-control ostatok__'.$productId.''.md5($colorName).'" id="quantity_warehouseman_fact'.$productId.''.md5("$colorName").'"
-onchange="EditZakupColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_warehouseman_fact'.$productId.''.md5("$colorName").'\');"
-value="'.$zakupFactColor.'">';
-
-
- } else echo'<span id-dd="color_'.$productId.''.md5("$colorName").'" class="" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$zakupFactColor.'</span>';
-
-
- echo'</td>
- <td class="ost summa_kust_'.$productId.''.md5($colorName).'" id="summa_color1_'.$productId.''.md5($colorName).'"></td>
- <td class="ost ost_product_'.$productId.''.md5($colorName).'" id="ost_color1_'.$productId.''.md5($colorName).'">0</td>
-<td>'.$productsMinLot[$productId].'</td>';
-
- foreach($sortStore as $storeId) {
-
- $divisionFact=$dataColorsValuesStores[$productId][$colorName][$fieldIdThisDivision][$storeId];
- /*
- $colorName=str_replace('/','',$colorName);
- $colorName=str_replace('\'','',$colorName);
- $colorName = preg_replace ("~/~", "", $colorName);
- $colorName = preg_replace ("~\~", "", $colorName);
- */
- $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
-// если это деление факта
-//if(empty($divisionFact) and $fieldIdThisDivision==20) $divisionFact=$dataColorsValuesStores[$productId][$colorName][4][$storeId];
-//if(empty($divisionFact) and $fieldIdThisDivision==20) $divisionFact=$dataColorsValuesStores[$productId][$colorName][20][$storeId];
-//if(empty($divisionFact))
-//$divisionFact=$dataColorsValuesStores["$productId"]["$colorName2"][22][$storeId];
- $divisionFact=$ColorsArr["$productId"]["$colorName2"][22][$storeId];
-
-//$divisionFact=$db::getValue("SELECT quantity FROM store_orders_colors WHERE order_id=? AND store_id=? AND product_id=? AND color='$colorName2' and field_id='22' LIMIT 1",[$OrderId, $storeId, $productId]);
-
-
- echo'<td class="kust'.$kustArrayReverse[$storeId].'">';
-
-//$colorName=$colorName2;
-
- if(isset($stores[$storeId])) {
- echo'<input type=number id-dd="color_'.$productId.$storeId.md5("$colorName").'" class="form-control color_'.$productId.''.md5("$colorName").'
-
-color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.''.$storeId.''.md5("$colorName").'" id="color'.$productId.''.$storeId.''.md5("$colorName").'"
-onchange="EditFieldColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.',\''.$colorName.'\',\'color'.$productId.''.$storeId.''.md5("$colorName").'\');"
-value="'.$divisionFact.'">'.$divisionFact.'';
-
- } else echo'<span id-dd="color_'.$productId.''.md5("$colorName").'" class="color_'.$productId.''.md5("$colorName").' color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.$storeId.md5("$colorName").'" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$divisionFact.'</span>';
-
-
- echo'</td>';
-
-
- }
-
- echo'</tr>';
- }
-
- if(!empty($products_colors[$productId])) {
-
- echo'<tr style="display:none;" class="bg-warning tr__'.md5($productId).'"><td>Итого по цветам</td>
-
-<td class="sm_kust" id="color_summ_kust_'.$productId.'" title=""></td><td class="pr" id="color_summ_'.$productId.'" title=""></td>
- <td class="ost ost_color_summ_'.$productId.'" id="ost_color_summ_'.$productId.'">0</td>
-<td>'.$productsMinLot[$productId].'</td>';
-
- foreach($sortStore as $storeId) {
-
- echo'<td class="kust'.$kustArrayReverse[$storeId].'" id="summ_store_color_'.$productId.''.$storeId.'">
-<span class="btn btn-sm btn-info" onclick="calc_color_product_store(\''.$productId.'\',\''.$storeId.'\');">обновить</span>
-
-</td>';
-
-
- }
-
- echo'</tr>';
-
- }
-
-
-//end colors
-
-
-
- }
-
-
-
-}
-
-
-echo'</tbody></table></div>';
-
-
-echo'<h2>Излишки на складе после деления </h2>
-<p>Уходят на центральный склад. Минусовые деления не учитываются!</p>
-
-
-<table class="zak">
-<thead><th>наименование</th><th>сотаток шт.</th></thead>
-
-<tbody>';
-if (isset($ostatokReal)) {
- arsort($ostatokReal);
- foreach ($ostatokReal as $productId => $count) {
- echo '<tr><td>' . $products[$productId] . '</td><td>' . $count . '</td></tr> ';
-
- }
-}
-echo'</tbody></table>';
-
-
-//if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
-
-$_SESSION["order_id"]=$OrderId;
-$_CONFIG["jscss"]='
-
-<script>
- function AjaxGetJson(url, callback) {
- var xmlhttp = new XMLHttpRequest();
- xmlhttp.onreadystatechange = function () {
- if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
- /* console.log(\'responseText:\' + xmlhttp.responseText); */
- try {
- let data = JSON.parse(xmlhttp.responseText);
- callback(data);
- } catch (err) {
- /* console.log(err.message + " in " + xmlhttp.responseText); */
- }
- }
- };
- xmlhttp.open("GET", url, true);
- xmlhttp.send();
- }
-
-
-function calcu(product_id) {
-
-
-var myNodeList = document.querySelectorAll(\'.td_color_\'+product_id+\'\');
-if( myNodeList.length) {
-let summa_color = 0;
-for (let el of myNodeList) {
- let id_element = el.getAttribute(\'title\');
- let val=$(\'#\'+id_element).val();
- if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
- if(typeof val !== \'undefined\' && val!=\'\') {
- val = Number(val);
- summa_color = summa_color + val;
- summa_color = Number(summa_color);
- }
-
- }
-
-
-
-}
-
-
-
-
-
-
-var myNodeList = document.querySelectorAll(\'.product_\'+product_id+\'\');
-
-if( myNodeList.length) {
-
-let summa = 0;
-
-let prihod = $(\'#quantity_warehouseman_fact\'+product_id+\'\').text();
- prihod = Number(prihod);
-for (let el of myNodeList) {
- let val = el.value;
- if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
- if(typeof val !== \'undefined\' && val!=\'\') {
- val = Number(val);
- summa = summa + val;
- summa = Number(summa);
-
- }
-
- }
-
-$(\'#summa_kust_\'+product_id+\'\').text(summa);
-let pr =0;
-pr = prihod - summa;
- pr = Number(pr);
-$(\'#ost_product_\'+product_id+\'\').text(pr);
-
-if(pr < 0) {
-$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#CD5C5C\');
-$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#fff\');
-
-} else {
-
-$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#90EE90\');
-$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#222222\');
-
-}
-
-
-}
-/*calc_colors(product_id);*/
-}
-
-
-function unique(arr) {
- let result = [];
-
- for (let str of arr) {
- if (!result.includes(str)) {
- result.push(str);
- }
- }
-
- return result;
-}
-
-function calc_colors(product_id) {
-
-var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\');
-if( myNodeList.length) {
-let summa = 0;
-let summa_kust = $(\'#summa_kust_\'+product_id+\'\').text();
-summa_kust = Number(summa_kust);
-let class_arr=[];
-let class_vl=[];
-var id_last;
-for (let el of myNodeList) {
- let val = el.value;
- if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-
- let id_dd = el.getAttribute(\'id-dd\');
- id_last = id_dd;
- class_arr.push(id_dd);
-
-
-
- if(typeof val !== \'undefined\' && val!=\'\') {
- val = Number(val);
- summa = summa + val;
- summa = Number(summa);
- class_vl[id_dd]=class_vl[id_dd]+val;
-
-
-
- }
-
- }
-
-
-for (let el of class_vl) {
- $(\'#ost_\'+el+\'\').text(class_vl[el]);
-
-}
-
-
- /* console.log(\'class_vl= \'+class_vl+\' \'); */
-
-
-
-
- class_arr = unique(class_arr);
-
- for (let el2 of class_arr) {
- let summa_color_store=0;
- var myNodeList = document.querySelectorAll(\'.\'+class_arr+\'\');
-if( myNodeList.length) {
-
- for (let el of myNodeList) {
- let val = el.value;
- if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
- if(typeof val !== \'undefined\' && val!=\'\') {
- val = Number(val);
- summa_color_store = summa_color_store + val;
- summa_color_store = Number(summa_color_store);
-
- }
- }
-
-summa_color_store = Number(summa_color_store);
-$(\'#summ_store_\'+class_arr+\'\').text(summa_color_store);
-
-
- }
-
-
-/* console.log(\' class_arr= \'+class_arr+\' summa_color_store= \'+summa_color_store+\' \'); */
-
- }
-
-
-
-summa = Number(summa);
-$(\'#color_summ_\'+product_id+\'\').text(summa);
-
-
-let pr =0;
-pr = summa_kust - summa;
-$(\'#ost_color_summ_\'+product_id+\'\').text(pr);
-
-if(pr < 0) {
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#CD5C5C\');
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#fff\');
-
-} else {
-
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#90EE90\');
-$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#222222\');
-
-}
-
-}
-
-}
-
-
-function calc_color_product(product_id, md5) {
-
-var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+md5+\'\');
-if( myNodeList.length) {
-let summa = 0;
-let summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').text();
-summa_kust = Number(summa_kust);
-if(summa_kust==\'\') summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').val();
-summa_kust = Number(summa_kust);
-
-
-let class_arr=[];
-let class_vl=[];
-var id_last;
-for (let el of myNodeList) {
- let val = el.value;
- if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-
- let id_dd = el.getAttribute(\'id-dd\');
- id_last = id_dd;
- class_arr.push(id_dd);
-
-
-
- if(typeof val !== \'undefined\' && val!=\'\') {
- val = Number(val);
- summa = summa + val;
- summa = Number(summa);
- class_vl[id_dd]=class_vl[id_dd]+val;
-
-
-
- }
-
- }
-
-
-
-summa = Number(summa);
-$(\'#summa_color1_\'+product_id+\'\'+md5+\'\').text(summa);
-
-
-let pr =0;
-pr = summa_kust - summa;
-$(\'#ost_color1_\'+product_id+\'\'+md5+\'\').text(pr);
-
-if(pr < 0) {
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#CD5C5C\');
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');
-
-}
-if(pr>0) {
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'blue\');
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');
-
-}
-if(pr==\'0\') {
-
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#90EE90\');
-$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#222222\');
-
-}
-
-}
-
-}
-
-
-function calc_color_product_store(product_id, store_id) {
-
-var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+store_id+\'\');
-if( myNodeList.length) {
-let summa = 0;
-
-let class_arr=[];
-let class_vl=[];
-var id_last;
-for (let el of myNodeList) {
- let val = el.value;
- if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
-
- let id_dd = el.getAttribute(\'id-dd\');
- id_last = id_dd;
- class_arr.push(id_dd);
- if(typeof val !== \'undefined\' && val!=\'\') {
- val = Number(val);
- summa = summa + val;
- summa = Number(summa);
-
-
- }
-
- }
-summa = Number(summa);
-$(\'#summ_store_color_\'+product_id+\'\'+store_id+\'\').text(summa);
-
-
-}
-
-}
-
-
-
-jQuery(document).ready(function($) {
- $(".form-control").focus(function(){
- $(".form-control").removeClass("active");
- $(this).addClass("active");
- }).blur(function(){
-
- })
-});
-
-
-
-function load_devision_ajax() {
-
-
-
-var myNodeList = document.querySelectorAll(\'.producted\');
-if( myNodeList.length) {
-for (let el of myNodeList) {
- let product_id = el.getAttribute(\'id-data\');
- calcu(product_id);
-}
-}
-AjaxGetJson(\'/shipment/ajax-division/\', function (data) {
-
-
-for (product_id in data) {
- for (store_id in data[product_id]) {
- /* console.log(\' product_id= \'+product_id+\' store_id= \'+store_id+\' = \'+data[product_id][store_id]); */
- let new_val = data[product_id][store_id][\'division_fact\'];
- let colors_array = data[product_id][store_id][\'color\'];
-
- for (color in data[product_id][store_id][\'color\']) {
- let color_quantity = data[product_id][store_id][\'color\'][color];
- let color_md5 = color;
- let dividcolor=\'color\'+product_id+\'\'+store_id+\'\'+color_md5+\'\';
-
- if($(\'#\'+dividcolor).hasClass("active")){} else {
- $(\'#\'+dividcolor).val(\'\'+color_quantity+\'\');
- $(\'#\'+dividcolor).text(\'\'+color_quantity+\'\');
- $(\'#\'+dividcolor).attr(\'title\',\'\'+color_quantity+\'\');
- }
- }
-
- let divid=\'division_fact\'+product_id+\'\'+store_id;
- let val=$(\'#\'+divid).val();
-
-
- if(val!=new_val && $(\'#\'+divid).type == "input") {
- $(\'#\'+divid).css(\'border\',\'1px #cd0202 solid\');
- calcu(product_id);
- }
-
- if($(\'#\'+divid).hasClass("active")){
- } else {
- $(\'#\'+divid).val(\'\'+new_val+\'\');
- $(\'#\'+divid).text(\'\'+new_val+\'\');
- $(\'#\'+divid).attr(\'title\',\'\'+new_val+\'\');
- }
-
- }
-
-
-}
-
- });
-
-}
-
-
-window.onload = function() {
-load_devision_ajax();
-};
-
-setInterval(function () {
-
-/*load_devision_ajax();*/
-
- },5000);
-
-/*
-setInterval(function () {
-var myNodeList = document.querySelectorAll(\'.producted\');
-if( myNodeList.length) {
-for (let el of myNodeList) {
- let product_id = el.getAttribute(\'id-data\');
- calc_colors(product_id);
-}
-}
-
-},5000);
-
-*/
-
-var param = $("meta[name=csrf-param]").attr("content");
-var token = $("meta[name=csrf-token]").attr("content");
-
-setInterval(function () {
-$.ajax({
- url: \'/shipment/ajax-admin-online/\',
- method: \'post\',
- dataType: \'html\',
- data: { modul: \''.$modul.'\', action: \''.$act.'\', entity_id: '.$OrderId.', [param]: token},
- success: function(data){
- let data2 = JSON.parse(data);
- let html =\'сейчас с этой страницей работают: \';
- for (product_id in data2) {
- html +=\'<span class="tag me-2">\'+data2[product_id]+\'</span>\';
- }
-
- $(\'#admin__online\').html(html);
-
- }});
-},12000);
-
-
-
-function showKust(product_id){
-
-$.ajax({
- url: \'/shipment/ajaxDivisionKust/\',
- method: \'post\',
- dataType: \'html\',
- data: { order_id: '.$OrderId.', product_id: \'\'+product_id+\'\' },
- success: function(data){
- $(\'#tr__\'+product_id).after(data);
-
- }});
-}
-
-
-function changef(id,typeint)
-{
-var uname=$(\'#\'+id+\'\').val();
-
-if(typeint==\'double\') uname = uname.replace(/[^0-9.\s]/gi, \'\');
-if(typeint==\'int\') uname = uname.replace(/[^0-9\s]/gi, \'\');
-$(\'#\'+id+\'\').val(\'\'+uname+\'\');
-}
-
-
-
-function EditField22(name_eng,product_id,store_id,provider_id)
-{
-/*
-changef(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\',\'int\');
-$.ajax({
- url: \'/shipment/ajaxEditField/\',
- method: \'post\',
- dataType: \'html\',
- data: { id: '.$OrderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val()+\'\' },
- success: function(data){
-
- $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
- setTimeout(function(){$(\'.okk\').remove();}, 5000);
-
-
- }});
-*/
-
-
-
-}
-
-
-
-
-
-function EditField(name_eng,product_id,store_id,provider_id)
-{
-/* alert(\' name \'+name_eng+\' product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');*/
-
-var v=$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val();
-$.ajax({
- url: \'/shipment/ajaxEditField/\',
- method: \'post\',
- dataType: \'html\',
- data: { id: '.$OrderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+v+\'\' },
- success: function(data){
- $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok</span>\');
- setTimeout(function(){$(\'.okk\').remove();}, 6000);
- }});
-}
-
-function EditFieldColor(field_id,product_id,store_id,provider_id,color,color_md5)
-{
-var v=$(\'#\'+color_md5+\'\').val();
-/*alert(\' field_id \'+field_id+\' v=\'+v+\' color=\'+color+\' color_md5=\'+color_md5+\' product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
-*/
-
-$.ajax({
- url: \'/shipment/ajaxEditFieldColor/\',
- method: \'post\',
- dataType: \'html\',
- data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',store_id:\'\'+store_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },
- success: function(data){
- $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
- setTimeout(function(){$(\'.okk\').remove();}, 6000);
- }});
-}
-
-
-function EditZakupColor(field_id,product_id,provider_id,color,color_md5)
-{
-var v=$(\'#\'+color_md5+\'\').val();
-/*alert(\' field_id \'+field_id+\' v=\'+v+\' color=\'+color+\' color_md5=\'+color_md5+\' product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
-*/
-
-$.ajax({
- url: \'/shipment/ajaxEditZakupColor/\',
- method: \'post\',
- dataType: \'html\',
- data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },
- success: function(data){
- $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
- setTimeout(function(){$(\'.okk\').remove();}, 3000);
- }});
-}
-
-
-</script>
-
-<style>
-.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
-.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
-.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
-.zak> :not(caption)>*>* {
- padding: 0.05rem;
- background-color: 1px;
- box-shadow: none;
-}
-.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
-.zak {
- border-collapse: collapse;
- border-spacing: 0;
- overflow: hidden;
-}
-.zak th, .zak td {
- border: 1px solid #e6e6e6;
- padding: 0.1rem;
- vertical-align: middle;
- position: relative;
-}
-
-
-.zak td:hover:before,.zak td.kust1:hover:before {
- background-color: #e3e3e3;
- content: \'\';
- height: 100%;
- left: -5000px;
- position: absolute;
- top: 0;
- width: 10000px;
- z-index: -2;
-}
-
-.zak td:hover:after,.zak td.kust1:after {
- background-color: #cdcdcd;
- content: \'\';
- height: 10000px;
- left: 0;
- position: absolute;
- top: -5000px;
- width: 100%;
- z-index: -1;
-}
-
-.zak tbody td input.form-control{font-size:0.7rem;max-width:50px;border:0;border-radius:0;color:#333;padding:0.1rem;margin:0;text-align:center;}
-.zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
-.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
-
-table.zak thead th,
-table.zak tr.zg th th,table.zak tr.zg td td {
- vertical-align: bottom;
- line-height: normal;
-}
-table.zak thead b, table.zak tbody b {
- writing-mode: vertical-rl;
- transform: scale(-1);
-
-}
-
-
-table.zak tr.zg th b, table.zak tr.zg td b {
- writing-mode: vertical-rl;
- transform: scale(-1);
- font-weight:normal; font-size:0.6rem;
-}
-
- .app-content .side-app {
- padding: 25px 0.5rem 0 0.5rem;
-}
-
-.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
-.zak td.td_product:hover {background:#fff;}
-
-.zak tr td.pr,.zak tr td.ost{text-align:center;}
-.zak tr td.pr{background:#ddd}
-.zak tr td.ost{background:#e6e6e6}
-
-.zak td{text-align:center; vertical-align: bottom;}
-.zak td.lf{text-align:left; background:#fff}
-
-';
-/*
-foreach($kustBackground as $kustId =>$bg) {
-
-$_CONFIG["jscss"] .='
-table.zak tr td.kust'.$kustId.' {background:'.$bg.'}
-table.zak tr:hover td.kust'.$kustId.' {background:#cdcdcd}
-
-';
-
-}
-*/
-
-$_CONFIG["jscss"] .='
-input::-webkit-outer-spin-button,
-input::-webkit-inner-spin-button {
- -webkit-appearance: none;
- margin: 0;
-}</style>';
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
+++ /dev/null
-<?php
-
-
-use yii\grid\ActionColumn;
-use yii\helpers\Url;
-use yii\helpers\Html;
-use yii\grid\GridView;
-use yii\widgets\Pjax;
-use yii_app\records\Dashboard;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrderStatus;
-use yii_app\services\ShipmentService;
-
-/* @var $this yii\web\View */
-/* @var $bonusConversionCost int */
-
-/* @var $userSalarySalut float */
-/* @var $userSalarySalutPremium float */
-/* @var $storeOrders array */
-/* @var $dozakupka array */
-/* @var $store_orders_statuses array */
-/* @var $dataStoreOrdersFields array */
-/* @var $dostupFields array */
-/* @var $bgFields array */
-/* @var $orders_status_description array */
-/* @var $adminGroups array */
-/* @var $urlActionPart string */
-/* @var $orderId string */
-/* @var $groupId int */
-/* @var $userGroup string */
-/* @var $orderData array */
-/* @var $storeOrderStatusDescription string */
-/* @var $storeOrderStatus string */
-/* @var $storeId ?int */
-/* @var $status_order_id int */
-/* @var $status_edit_dostup array */
-/* @var $store_orders_status_description array */
-/* @var $storesArray array */
-/* @var $storeArr array */
-/* @var $store_orders_statuses array */
-/* @var $statuses_stores_show array */
-/* @var $products_varieties array */
-/* @var $products_class array */
-/* @var $products array */
-/* @var $productsOptions array */
-/* @var $productsColorsArray array */
-/* @var $prov array */
-/* @var $statuses_dostup array */
-/* @var $dostup_fields array */
-/* @var $bg_fields array */
-/* @var $fieldsRows array */
-/* @var $dataTableHeader array */
-/* @var $shipmentService object */
-
-$this->title = 'Заказ товара';
-$this->params['breadcrumbs'][] = $this->title;
-$modul = 'shipment';
-
-
-
-$this->registerCssFile('/css/table/table.css', ['position' => \yii\web\View::POS_END]);
-
-?>
-
-
- <div class="index">
-
- <h1><?= Html::encode($this->title) ?></h1>
-
-
-
-
- </div>
- <div class="alert alert-warning" role="alert"><a href="/shipments/index" class="btn me-2 btn-info">❮ назад в закупки</a>
-
-
-
- <a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
- <a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
-
-
- Описание статуса: <?php echo $storeOrderStatusDescription ?> Под кем будем просматривать
-<?php
-foreach ($adminGroups as $gid => $nameGroup) {
-
- $buttonStyle = '';
- $urlRow = '/shipment/' . $urlActionPart .'/?id=' . $orderId . '&group_id=' . $gid;
-
- if ($gid == $groupId) {
- $buttonStyle = 'btn-success';
- } else {
- $buttonStyle = 'btn-outline-info';
- }
-
- ?><a href='<?= $urlRow?>' class='m-1 btn btn-sm <?php echo $buttonStyle;?>'><?php echo $nameGroup; ?></a><?php
-
-}
-?>
-
-
-<br>
-<?php
-?>
-
-
- Дата старта продаж (от этой даты считаем продажи при авто-заказе) <?php echo $orderData['date_start']; ?>
- Дата деления (от этой даты считаем продажи при делении)<?php echo $orderData['division_date']; ?>
-
-
-
-
-<!--<a href="/shipment/' . $urlActionPart . '/?id=' . $orderId . '&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
-<span onclick="ajaxUpdateFieldsDataTest();" class="btn btn-info me-2">1) TEST!!! поссчитать статистические данные данные</span>
-<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
-<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
-<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
-<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
-
-
-
-
-<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
-
-
-
-</div>
-
-<a href="/shipment/<?php echo $urlActionPart;?>/?id=<?php echo $orderId ?>'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
-
-
-<h1 class="page-title mb-0 text-primary">Заказ товара <?php echo $orderData["name"] ?> id=<?php echo $orderId ?>
-<span class="btn btn-lime"><?php echo $storeOrderStatus ?></span> ваша роль <b> <?php echo $userGroup ?></b></h1>';
-
-<?php
-// панель с магазинами
-ShipmentService::showOrderStoresPanel(
- $status_order_id,
- $status_edit_dostup,
- $store_orders_status_description,
- $storesArray,
- $storeArr,
- $storeId,
- $store_orders_statuses,
- $statuses_stores_show,
- $urlActionPart,
- $orderId,
- $groupId
-);
-
-//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
-if (!empty($status_order_id) && $status_order_id == 1) {
-
-
- ?><a href=\"/shipment/$urlActionPart/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a><?php
-
-
- if (!empty($_REQUEST["load"])) {
- $data = $db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
- foreach ($data as $row) {
- $productsPrices[$row["product_id"]] = $row["price"];
- }
- $data_uper = [];
- foreach ($products as $productId => $nameProduct) {
- echo "<br>$nameProduct Роз. цена=" . $productsPrices[$productId] . " закуп " . $productsOptions[$productId]["price_zakup"] . " ";
- $price = $productsPrices[$productId];
- $data_uper[$productId]["NULL"]["NULL"] = $price;
-
- $db::sql("
- UPDATE
- `store_orders_prices`
- SET purchase_price='$price'
- WHERE
- product_id='$productId'
- AND
- order_id='$orderId'
- AND
- provider_id=1
- AND
- purchase_price!='0.00'"
- );
-
- }
-
-//розничная цена
- insert_store_orders_fields($data_uper, "purchase_price");
-
-
- $data_uper = [];
- foreach ($products as $productId => $nameProduct) {
- $price = $productsOptions[$productId]["price_zakup"];
- $data_uper[$productId]["NULL"]["NULL"] = $productsOptions[$productId]["price_zakup"];
- $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
-WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
- }
- insert_store_orders_fields($data_uper, "purchase_price_zakup");
-
-//header("Location: /shipment/$urlActionPart/?id=$orderId&group_id=$gid");
- }
-
-
-}
-
-
-//если выбран магазин то
-if (!empty($store_id)) echo '<input type=hidden name=store_id_id value=' . $store_id . ' id=store_id_id>';
-
-echo '
-<div id=edit_div></div>
-<div class="table-responsive mt-3">
- <table class="zak">';
-$html = '<thead>
- <tr class="zg">
- <th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
-
- <span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
-
-
-<a href="/shipment/statusFieldsSort/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
-
-<a href="/shipment/config/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
-
-
-</th>';
-$thead = $html; // формируем thead
-$head_td = $html;
-
-
-
-$rowArraySum = [];
-$shipmentService->rowArraySum = [];
-
-
-if (!empty($groupId)) {
- foreach ($dataStoreOrdersFields as $row) {
- $dostup = $dostup_fields[$row["id"]];
- $bg = $bg_fields[$row["id"]];
- if ($dostup == "edit" or $dostup == "show") {
-
-
- $html = '<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="' . $row["name_full"] . ' ' . $row["name_eng"] . '" onclick="ajaxFieldInfo(' . $row["id"] . ')" style="max-width:90px;">
- <b>' . $row["name"] . '</b></th>';
- $thead .= $html;
- $head_td .= $html;
- }
-
- }
-}
-
-$thead .= '</tr></thead>';
-$head_td .= '</tr>';
-echo '' . $thead . '<tbody>';
-
-
-//$FiledsData=getDataFiledsData();
-
-
-// полнограммы по всем магазинам
-if (!empty($store_id)) {
- $data3 = $db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
-AND store_id!='' AND quantity>0 AND store_id=?", [$store_id]);
- foreach ($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]] = $row2["quantity"];
-}
-
-//$data3 = $db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
-//$data3 = ProductsClass::find()->andWhere(['tip' => array('potted','wrap')])->asArray()->all();
-
-
-
-
-$trCount = 0;
-foreach ($products as $pid => $name) {
- if ($trCount == 20) {
- $trCount = 0;
- echo $head_td;
- }
- $trCount++;
-
- echo '<tr';
-
-
- if (!empty($store_id) and empty($store_planogramAllStores[$store_id][$pid])) {
- echo ' class="bg-danger"';
- }
-
-
- if (empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) {
-// echo ' class="bg-danger"';
-//
-// echo ' style="opacity:0.5"';
- }
-
-
- echo '><td class="text-right">';
-//если статус общий то группируем по магазинам
- if (empty($statuses_stores_show[$status_order_id])) {
- echo '<span onclick="$(\'.trstores_' . $pid . '\').toggle();" class="btn btn-default btn-sm">+</span>';
- }
- echo '' . $name . '';
-
-
-//узнаем категорибю товара
- $categoryId = $productsOptions[$pid]["parent_id"];
- $tip = '';
-// по категории узнаем тип товара горшечка или упаковка
- if (!empty($products_class[$categoryId])) {
- $tip = $products_class[$categoryId];
- }
-
-
- if (array_key_exists($pid, $productsColorsArray)) {
- if (count($productsColorsArray[$pid]) > 0) {
- echo '<span onclick="$(\'.trcolors_' . $pid . '\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
- }
- }
- echo '<input type=hidden name=provider_id[' . $pid . '] value="' . $prov[$pid] . '">';
- echo '</td>';
-
-
-// if (!empty($store_id)) {
- foreach ($dataStoreOrdersFields as $row) {
- $shipmentService->printFieldTd($row["name_eng"], $pid, null);
- }
-// }
-
- echo '</tr>';
-
-
-//begin colors
- if (array_key_exists($pid, $productsColorsArray)) {
- foreach ($productsColorsArray[$pid] as $color) {
- $color = trim($color);
- if (!empty($color)) {
- echo '<tr class="trcolors trcolors_' . $pid . ' bg-gray-300" style="display:none;"><td class="text-right">' . $name . ' + <span class="btn btn-sm btn-warning me-1">' . $color . '</span>';
-
- if (!empty($products_varieties[$pid][$color])) {
- echo '<div class="sorts_flowers" style="display:none;"><br>сорта ';
- foreach ($products_varieties[$pid][$color] as $k => $var) {
- echo "<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
- }
- echo '</div>';
- }
-
-
-
- if (!empty($store_id) && !empty($color)) {
- foreach ($dataStoreOrdersFields as $row) {
-// printFieldTd($row["name_eng"], $pid, null, null);
- $shipmentService->printFieldTd($row["name_eng"], $pid, $store_id, $color);
- }
- }
-
- echo "</tr>";
- }
-
- }
- }
-//end colors
-
-
-}
-
-
-echo '<tr class="bg-success zg"><td class="text-right"></td>';
-foreach ($dataStoreOrdersFields as $row) {
- $dostup = $dostup_fields[$row["id"]];
- $bg = $bg_fields[$row["id"]];
- if ($dostup == "edit" or $dostup == "show") {
- echo '<td class="text-center" title="' . $row["name_full"] . ' ' . $row["name_eng"] . '"><b>' . $row["name"] . ' (' . $fieldsRows[$row["name_eng"]]["row_type_sum"] . ')</b></td>';
- }
-}
-echo '</tr>
-<tr class="bg-success"><td class="text-right">итого -ГО</td>';
-foreach ($dataStoreOrdersFields as $row) {
- $dostup = $dostup_fields[$row["id"]];
- if ($dostup == "edit" or $dostup == "show") {
- $s = "";
- if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "amount") {
- $s = $shipmentService->rowArraySum[$row["id"]] ?? 0;
- }
- if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "avg") {
- if (!empty($shipmentService->rowArraySum["cnt__" . $row["id"]])) {
- $s = round($shipmentService->rowArraySum[$row["id"]] ?? 0 / $shipmentService->rowArraySum["cnt__" . $row["id"]]);
- }
- }
-
- echo '<td class="text-center ' . $bg . '"><b>' . $s . '</b></td>';
- }
-}
-echo '</tr></tbody>';
-echo '</table>
-
-<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
-/*
-$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
-
-// суммируем деление и заносим данные в таблицу хранения данных по полям
-foreach($products as $productId => $name) {
-//echo"<br>$name ";
- $all=0;
- $division_auto_need_all=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
- // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
- // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
- $all =$all+$summ;
- $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
- // if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
-
-
- }
-
-$field_name="division_auto_need_all";
-//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
-if(!empty($division_auto_need_all)) {
- $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
- $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
-
-
-}
-
-//пробегаемся по всем продуктам
-foreach($products as $productId => $name) {
-
-
-$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
-
-
-echo"<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
-Сумма потребности =".$division_auto_need_all."
-Сумма получаено по факту ".$quantity_warehouseman_fact."";
-
-$division_ratio=1;
-if($division_auto_need_all > $quantity_warehouseman_fact) {
-$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
-
-echo"<font color=red>-меньше!</font>";
-
-echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
-
-}
-
-$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
-insert_store_orders_fields($data_uper,"division_ratio");
-
-
-}
-
-*/
-
-
-echo "<script>
-function ajaxFieldInfo(id){
- $('#modal-7 .modal-body').html('Загружаем....');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');
- $.ajax({
- url: '/shipments/ajaxFieldInfo/',
- method: 'post',
- dataType: 'html',
- data: {id: id},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }});
-}
-
-function ajaxUpdateFieldsDataTest(){
- $('#modal-7 .modal-body').html('Test Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipments/ajax-update-fields-data-test/',
- method: 'post',
- dataType: 'html',
- data: { id: '2', update:'1'},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }})
-}
-
-function ajaxUpdateFieldsData(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipments/ajaxUpdateFieldsData/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update:'1'},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }})
-}
-
-
-function ajaxUpdateStep(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipments/ajaxUpdateStep/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update_step:'1'},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }})
-}
-
-
-function ajaxUploadAutoPurchase(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipments/ajaxUploadAutoPurchase/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update_step:'1'},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }})
-}
-
-function foreachSalesHand(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipments/ajaxUpdateStep/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }})
-}
-
-
-function deleteAll(){
- const result = confirm('Удаляем данные?');
-
- if (result) {
-
- $('#modal-7 .modal-body').html('Удаляем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');
- $.ajax({
- url: '/shipments/ajaxUpdateStep/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, deleteAll:'1'},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }})
-}
-}
-
-
-</script>";
-
-echo '<!-- MODAL -->
- <div class="modal fade" id="modal-7">
- <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body p-0">
-
- </div>
-
- </div>
-</div>
-</div>';
-
-
-//include "templates/bottom.php";
-
-
-
-
-
-
-
-
-
-
-
-/*
-
---
-
-
-
---
-
-
- */
\ No newline at end of file
+++ /dev/null
-<?php
-
-use yii\helpers\ArrayHelper;
-use yii_app\records\AdminGroup;
-use yii_app\records\StoreOrders;
-use yii_app\records\StoreOrderStatusLog;
-use yii_app\records\Prices;
-use yii_app\records\StoreOrdersPrices;
-use yii_app\records\ProductsVarieties;
-use yii_app\records\StoreOrdersStatuses;
-use yii_app\records\StoreOrdersFields;
-use yii_app\records\StorePlanogram;
-use yii_app\records\ProductsClass;
-use yii\db\Expression;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-//include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
-
-//include"templates/top.php";
-
-//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
-global $products, // массив с товарами производителя прикрепленного к этой закупке
- $orderId, // id- заказа
- $store_id, // GUID магазина
- $storesArray, // массив с магазинами
- $group_id, // ID группы авторизованного сотрудника
- $fieldsRows, // массив с данными по полями - ключ name_eng
- $date_start_sale, // дата старта продаж от которой считаемстатистику
- $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
- $whereInProductsIdArr, // $whereInProductsId в форме массива
- $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
- $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
- $FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
- $status_order_id, // ID текущего статуса закупаки
- $store_orders_statuses, // массим со статсами закупок
- $statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
- $status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
- $store_orders_status_description, // - массив с описанием стутса
- $dostup_fields,
- $bg_fields,
- $ProductsOptions;
-
-$act='fields-data2'; // часть url action
-
-$group_id=$_SESSION["group_id"]; // ID группы сотрудника
-if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
-
-
-
-
-if(!empty($_REQUEST["group_id"])) {
- $group_id=(int)$_REQUEST["group_id"];
- $_SESSION["group_id_init"]=$group_id;
-}
-
-
-
-$time = strtotime('this week monday, 00:00'); // текущий понедельник в формате unixtimestamp
-$date2=date('Y-m-d 23:59:59', $time); // текущий понедельник
-$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
-
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
-
-
-// измененеи статуса заказа
-if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
- StoreOrders::updateAll(['status' => (int)$_POST["status_new"]], ['id' => $orderId]);
-// $db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
- $storeOrderStatusLog = new StoreOrderStatusLog;
- $storeOrderStatusLog->status = (int)$_POST["status_new"];
- $storeOrderStatusLog->order_id = $orderId;
- $storeOrderStatusLog->date = date('Y-m-d H:i:s');
- $storeOrderStatusLog->admin_id = $_SESSION["admin_id"];
- $storeOrderStatusLog->save();
-// $db::sql("INSERT IGNORE INTO store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
-
- mess("Статус изменен");
-}
-
-
-
-include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
-
-$data = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])
- ->where(['in', 'id', ['1','10','7','51','9','17','70']])->all(), 'id', 'name');
-//$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
-
-
-
-echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
-
-
-
-<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
-<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
-
-
-Описание статуса: '.$store_orders_status_description[$status_order_id].'
-
-';
-
-echo"Под кем будем просматривать ";
-foreach($data as $gid => $nameGroup) {
-
- echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
-
- if($gid==$group_id) echo"success"; else echo"outline-info";
-
- echo"\">$nameGroup</a>";
-
-}
-echo'
-<br>
-
-Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
-Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
-
-
-
-
-
-
-<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
-<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
-<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
-<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
-<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
-
-
-
-
-<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
-
-
-
-</div>';
-
-//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
-
-
-echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
-<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span> ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
-
-global $act;
-$act = 'fields-data2';
-// панель с магазинами
-showOrderStoresPanel();
-
-//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
-if($status_order_id==1) {
-
-
- echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";
-
-
- if(!empty($_REQUEST["load"])) {
- $data = Prices::find()->select(['product_id', 'price'])->where(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
-// $data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
- foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
- $data_uper=[];
- foreach($products as $productId => $nameProduct) {
- echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]." закуп ".$ProductsOptions[$productId]["price_zakup"]." ";
- $price=$productsPrices[$productId];
- $data_uper[$productId]["NULL"]["NULL"]=$price;
-
- StoreOrdersPrices::updateAll(['purchase_price' => $price],
- ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price', '0.00']]);
-// $db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
-//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
-
- }
-
-//розничная цена
- insert_store_orders_fields($data_uper,"purchase_price");
-
-
- $data_uper=[];
- foreach($products as $productId => $nameProduct) {
- $price=$ProductsOptions[$productId]["price_zakup"];
- $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];
- StoreOrdersPrices::updateAll(['purchase_price_zakup' => $price],
- ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price_zakup', '0.00']]);
-// $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
-//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
- }
- insert_store_orders_fields($data_uper,"purchase_price_zakup");
-
-//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
- }
-
-
-}
-
-
-$products_varieties=[];
-$data = ProductsVarieties::find()->select(['id', 'product_id', 'color', 'name'])->asArray()->all();
-//$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
-foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
-
-
-
-//если выбран магазин то
-if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
-
-echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
-$html='<thead><tr class="zg"><th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
-
-<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
-
-
-<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
-
-<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
-
-
-</th>';
-$thead=$html; // формируем thead
-$head_td=$html;
-
-
-global $rowArraySum;
-$rowArraySum=[];
-
-if(!empty($group_id)) {
-//извлекаем сортировку полей в зависимости от группы сотрудника
-//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
-
- $storeOrdersStatuses = StoreOrdersStatuses::find()->select(['fields_sort'])->where(['id' => $status_order_id])->asArray()->one();
- $sort = $storeOrdersStatuses['fields_sort'] ?? '';
-// $sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
-// if(!empty($sort)) $sort="ORDER BY FIELD(`id`, $sort) ";
-
- $dataQuery = StoreOrdersFields::find();
- if (!empty($sort)) {
- $dataQuery->orderBy([new Expression('FIELD(id, ' . $sort . ')')]);
- }
- $data = $dataQuery->asArray()->all();
-// $data=$db::getRows("SELECT * FROM store_orders_fields $sort");
-}
-foreach($data as $row) {
- $dostup=$dostup_fields[$row["id"]];
- $bg=$bg_fields[$row["id"]];
- if($dostup=="edit" or $dostup=="show") {
-
-
-
- $html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'" onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:90px;">
-<b>'.$row["name"].'</b></th>';
- $thead .=$html;
- $head_td .=$html;
- }
-
-}
-$thead .='</tr></thead>';
-$head_td .='</tr>';
-echo ''.$thead.'<tbody>';
-
-
-
-//$FiledsData=getDataFiledsData();
-
-
-// полнограммы по всем магазинам
-if(!empty($store_id)) {
- $data3 = StorePlanogram::find()->select(['store_id', 'product_id', 'quantity'])->where(['color' => ''])
- ->andWhere(['!=', 'store_id', ''])->andWhere(['>', 'quantity', '0'])->andWhere(['store_id' => $store_id])->asArray()->all();
-// $data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
-//AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
- foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
-}
-
-$data3 = ProductsClass::find()->where(['in', 'tip', ['potted','wrap']])->asArray()->all();
-//$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
-foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"];
-
-
-
-
-
-$trCount=0;
-foreach($products as $pid =>$name) {
- if($trCount==20) {
- $trCount=0;
- echo $head_td;
- }
- $trCount++;
-
- echo'<tr';
-
-
- if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
-
-
- if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
-
- //echo' style="opacity:0.5"';
- }
-
-
-
- echo'><td class="text-right">';
-//если статус общий то группируем по магазинам
- if(empty($statuses_stores_show[$status_order_id])) { echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>'; }
- echo''.$name.'';
-
-
-
-//узнаем категорибю товара
- $categoryId=$ProductsOptions[$pid]["parent_id"];
-// по категории узнаем тип товара горшечка или упаковка
- $tip=$products_class[$categoryId] ?? '';
-
-
- if(count($productsColorsArray[$pid] ?? [])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
- echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
- echo'</td>';
-
- foreach($data as $row) printFieldTd($row["name_eng"],$pid,$store_id);
-
- echo'</tr>';
-
-
-//begin colors
- foreach($productsColorsArray[$pid] ?? [] as $color) {
- $color=trim($color);
- if(!empty($color)) {
- echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;"><td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>';
-
- if(!empty($products_varieties[$pid][$color])) {
- echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';
- foreach($products_varieties[$pid][$color] as $k => $var) {
- echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
- }
- echo'</div>';
- }
-
- foreach($data as $row) {
- printFieldTd($row["name_eng"],$pid,$store_id,$color);
-
- }
- echo"</tr>";
- }
-
- }
-//end colors
-
-
-}
-
-
-echo'<tr class="bg-success zg"><td class="text-right"></td>';
-foreach($data as $row) {
- $dostup=$dostup_fields[$row["id"]];
- $bg=$bg_fields[$row["id"]];
- if($dostup=="edit" or $dostup=="show") {
- echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
- }
-}
-echo'</tr>
-<tr class="bg-success"><td class="text-right">итого</td>';
-foreach($data as $row) {
- $dostup=$dostup_fields[$row["id"]];
- if($dostup=="edit" or $dostup=="show") {
- $s="";
- if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
- if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
-
- echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
- }
-}
-echo'</tr></tbody>';
-echo'</table>
-
-<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
-/*
-$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
-
-// суммируем деление и заносим данные в таблицу хранения данных по полям
-foreach($products as $productId => $name) {
-//echo"<br>$name ";
- $all=0;
- $division_auto_need_all=0;
- foreach($storesArrayAll as $storeId => $nameStore) {
- // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
- // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
- $all =$all+$summ;
- $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
- // if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
-
-
- }
-
-$field_name="division_auto_need_all";
-//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
-if(!empty($division_auto_need_all)) {
- $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
- $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
-
-
-}
-
-//пробегаемся по всем продуктам
-foreach($products as $productId => $name) {
-
-
-$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
-$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
-
-
-echo"<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
-Сумма потребности =".$division_auto_need_all."
-Сумма получаено по факту ".$quantity_warehouseman_fact."";
-
-$division_ratio=1;
-if($division_auto_need_all > $quantity_warehouseman_fact) {
-$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
-
-echo"<font color=red>-меньше!</font>";
-
-echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
-
-}
-
-$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
-insert_store_orders_fields($data_uper,"division_ratio");
-
-
-}
-
-*/
-
-
-
-
-$_CONFIG["jscss"] .="<script>
- const param4x = $('meta[name=csrf-param]').attr('content');
-const token4x = $('meta[name=csrf-token]').attr('content');
-
-function ajaxFieldInfo(id){
- $('#modal-7 .modal-body').html('Загружаем....');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');
- $.ajax({
- url: '/shipment/ajaxFieldInfo/',
- method: 'post',
- dataType: 'html',
- data: {id: id},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }});
-}
-
-function ajaxUpdateFieldsData(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipment/ajax-update-fields-data/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update:'1', [param4x] : token4x},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }});
-}
-
-
-function ajaxUpdateStep(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipment/ajax-update-step/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update_step:'1', [param4x] : token4x},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }});
-}
-
-
-function ajaxUploadAutoPurchase(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipment/ajaxUploadAutoPurchase/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update_step:'1'},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }});
-}
-
-function foreachSalesHand(){
- $('#modal-7 .modal-body').html('Считаем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
- $.ajax({
- url: '/shipment/ajax-update-step/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, update_step:'1', foreachSalesHand:'1', [param4x] : token4x},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }});
-}
-
-
-function deleteAll(){
- const result = confirm('Удаляем данные?');
-
- if (result) {
-
- $('#modal-7 .modal-body').html('Удаляем данные');
-jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');
- $.ajax({
- url: '/shipment/ajax-update-step/',
- method: 'post',
- dataType: 'html',
- data: { id: $orderId, deleteAll:'1', [param4x] : token4x},
- success: function(data){
- $('#modal-7 .modal-body').html(data);
- }});
-}
-}
-
-
-</script>";
-
-$_CONFIG["jscss"] .='<!-- MODAL -->
- <div class="modal fade" id="modal-7">
- <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
- <div class="modal-content">
- <div class="modal-header">
- <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body p-0">
-
- </div>
-
- </div>
-</div>
-</div>';
-
-
-
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
-
-
-
-
+++ /dev/null
-<?php
-
-use \yii\helpers\ArrayHelper;
-use \yii_app\records\AdminGroup;
-use \yii_app\records\StoreOrdersFields;
-use \yii_app\records\StoreOrdersStatuses;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-//include"templates/top.php";
-
-//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
-
-$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
-//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
-
-echo "<div class='m-5'>";
-
-echo'<h1 class="page-title mb-0 text-primary">Настройка статусов в заказе у поставщиков кто может ставить статусы</h1>';
-
-
-if(!empty($_POST["save"])){
-
- foreach($_POST["description"] as $idr => $val) {
-
- StoreOrdersFields::updateAll(['description' => $val], ['id' => $idr]);
-// $db::sql("UPDATE store_orders_fields SET description=? WHERE id=?",[$val,$idr]);
-
- }
-
-
-}
-
-$data = StoreOrdersStatuses::find()->select(['id', 'dostup'])->asArray()->all();
-//$data=$db::getRows("SELECT id, dostup FROM `store_orders_statuses` WHERE 1");
-foreach($data as $row) {
- $dostup[$row["id"]] = json_decode($row["dostup"], true);
-
-}
-
-
-echo'<form method=post action="/shipment/fields/">';
-?><input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" /><?php
-
-
-$data = StoreOrdersFields::find()->asArray()->all();
-//$data=$db::getRows("SELECT * FROM store_orders_fields");
-echo'<table class="table table-hover"><thead><th width=100>название кратко</th>
-<th>name_eng</th>
-<th>SQL таблица сохранения</th>
-
-<th>тип</th>
-<th>тип данных</th>
-
-<th>сумма по столбцу</th>
-<th>сохраняем цвета в ячейке</th>
-
-
-</thead><tbody>';
-foreach($data as $row) {
-
- echo"
- <tr><td><b>".$row["name"]."<b><br>
- <small>".$row["name_full"]."</small></td>
-
-
- <td>".$row["name_eng"]."</td>
- <td>".$row["sql_table_values"]."</td>
- <td>".$row["type"]."";
-
- if(in_array($row["type"],array("multiplication","avg","difference")))
- echo" <input type=text class=\"form-control\" name=func_content[".$row["id"]."] value=\"".$row["func_content"]."\">";
-
- echo"</td>
- <td>".$row["tip"]."</td>
-
- <td>"; if($row["summ"]) echo"да"; echo"</td>
- <td>"; if($row["colors_save"]) echo"да"; echo"</td>
- </tr><tr><td colspan=7><textarea class=\"form-control\" name=description[".$row["id"]."] rows=1>".$row["description"]."</textarea></td></tr>";
- /*
- echo'<tr><td colspan=7><table>';
- foreach($statuses as $gid => $name) {
- if(!empty($roles[$gid])) {
-
- echo"<tr><td class=\"text-right\">".$name."</td><td style=\"min-width:300px\"> ";
-
- // $dostup[$status_id]
-
- echo' </td></tr>';
-
-
-
- }
- }
- echo'</table></td></tr>';
- */
-
-}
-echo'</tbody></table><button class="btn btn-success" name="save" value=1>сохранить</button></div></form>';
-
-echo "</div>";
-
-//include"templates/bottom.php";
-
-
-
-
-
-
<?php
+chdir(__DIR__ . '/../../');
-use yii\grid\ActionColumn;
-use yii\helpers\Url;
-use yii\helpers\Html;
-use yii\grid\GridView;
-use yii\widgets\Pjax;
-use yii_app\records\Dashboard;
-
-/* @var $this yii\web\View */
-/* @var $bonusConversionCost int */
-
-/* @var $userSalarySalut float */
-/* @var $userSalarySalutPremium float */
-/* @var $storeOrders array */
-/* @var $dozakupka array */
-/* @var $store_orders_statuses array */
-
-$this->title = 'Список закупок';
-$this->params['breadcrumbs'][] = $this->title;
-$modul = 'shipments';
-
-?>
-
-
-<div class="dashboard-index">
-
- <h1>
- <?= Html::encode($this->title) ?>
- <?= Html::a('+ добавить закупку', ['add'], ['class' => 'btn btn-success']) ?>
- </h1>
-
-</div>
-<?php
-
-foreach($storeOrders as $row) {
- ?>
- <div class="expanel expanel-default">
- <div class="expanel-heading">
-
- <span class="btn btn-white btn-light me-1" onclick="$('#external__<?php echo $row["id"]?>').toggle();">показать дозакупки</span>
- <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $row["id"]?> class="btn btn-default fs-5">
- <span class="btn btn-outline-info"><?php echo $row["id"]?></span> <?php echo $row["name"]?></a>
-
-
- <div class="d-inline-block dropdown me-2">
- <button type="button" class="btn bg-dark-transparent dropdown-toggle" onclick="$(this).parent().children('.dropdown-menu').toggle();">действия</button>
- <div class="dropdown-menu" style="display:none;">
- <a class="dropdown-item" href="/shipment/add/?id=<?php echo $row["id"]?>">правка</a>
- <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $row["id"]?>>старый интерфейс</a>
- <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $row["id"]?>>новый интерфейс</a>
- <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $row["id"]?> >новый интерфейс2</a>
- <a class="dropdown-item" href=/shipment/division/?id=<?php echo $row["id"]?>>деление</a>
- <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $row["id"]?>>цвета для кустовых при заказе</a>
-
- <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $row["id"]?>>деление - печать на складе</a>
- <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $row["id"]?>>деление - по цветам</a>
- </div>
- </div>
-
- <a href="/shipment/edit/?id=<?php echo $row["id"]?>" class="btn btn-warning btn-sm me-2"><?php echo $store_orders_statuses[$row["status"]]?></a>
- <small>дата продаж: <?php echo $row["date_start"]?>, создано <?php echo $row["date_add"]?> <i><?php echo $row["comments"]?></i></small>
-
-
-
-
- </div>
-
- <div class="expanel-body" id="external__<?php echo $row["id"] ?>" style="display:none;">
- <div class="row">
- <?php
- if (array_key_exists($row["id"], $dozakupka)) {
- foreach($dozakupka[$row["id"]] as $rows) {
-
- ?>
- <div class="col-12">
- <div class="ml-4">
- <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $rows["id"]?> class="btn btn-white fs-6 me-3">
- <span class="btn btn-outline-info fs-6 me-2"><?php echo $rows["id"]?></span><?php echo $rows["name"]?>
- <span class="me-2 btn btn-sm bg-warning"><?php echo $store_orders_statuses[$rows["status"]]?></span>
- </a>
- <div class="dropdown d-inline-block">
- <button type="button" class="btn bg-dark-transparent dropdown-toggle" onclick="$(this).parent().children('.dropdown-menu').toggle();">действия </button>
- <div class="dropdown-menu" style="">
- <a class="dropdown-item" href="/shipment/add/?id=<?php echo $rows["id"]?>">правка</a>
- <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $rows["id"]?>>старый интерфейс</a>
- <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $rows["id"]?>>новый интерфейс</a>
- <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $rows["id"]?> >новый интерфейс2</a>
- <a class="dropdown-item" href=/shipment/division/?id=<?php echo $rows["id"]?>>деление</a>
- <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $rows["id"]?>>цвета для кустовых при заказе</a>
- <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $rows["id"]?>>деление - печать на складе</a>
- <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $rows["id"]?>>деление - по цветам</a>
- </div>
- </div>
- <i><?php echo $rows["comment"] ?? ''?></i>
- <table class="table"><tbody></tbody></table>
- </div>
- </div>
- <?php
- }
- }
- ?>
-
- </div>
- </div>
-
-
- </div>
-
-
-
-
-
-<?php
-}
+include 'modul/shipment/index.php';
\ No newline at end of file
+++ /dev/null
-<?php
-
-use \yii_app\records\StorePlanogram;
-use \yii_app\records\StorePlanogramLogi;
-use \yii_app\records\StorePlanogramColorsSort;
-use \yii_app\records\Products1cOptions;
-use \yii_app\records\ProductsClass;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-//include"templates/top.php";
-
-$store_id = '';
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-
-
-//$dost=[1,2,4]; //$_SESSION["store_arr_dostup"]
-
-$k=0;
-$where="";
-foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
- if(!empty($guid)) {
- if($k!=0) $where .=", ";
- $where .="'$guid' ";
- $k++;
- }
-}
-
-if(!empty($where)) $where =" AND id in( $where )";
-
-
-if(in_array($_SESSION["group_id"],[1,10,51])) $editView=1; else $editView=0;
-
-$save=0;
-
-if(in_array($_SESSION["group_id"],[1,10])) $save=1;
-
-
-$massiver[]=["name"=>"П-ма мин.","title"=>"Полнограмма минимальная","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0"];
-$massiver[]=["name"=>"П-ма Макс.","title"=>"Полнограмма Максимальная","name_eng"=>"quantity_max", "name_eng_sql"=>"quantity_max", "background"=>"bg-danger2", "step"=>"1", "placeholder"=>"0"];
-
-
-
-echo'<h1 class="page-title mb-0 text-primary">полнограмма</h1>';
-
-$stores = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['and', ['tip' => 'city_store'], ['view' => '1']])
- ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' $where order by name ASC");
-
-
-
-foreach($stores as $strid=>$namestore){
- echo"<a href=\"/shipment/polnogramm/?store_id=$strid\" class=\"btn btn-";
- if(isset($store_id) && $store_id==$strid) echo"success"; else echo"info"; echo" btn-sm m-1\">$namestore</a>";
-}
-
-
-//$w="";
-$providers = yii\helpers\ArrayHelper::map(\yii_app\records\ShipmentProviders::find()->select(['name', 'id'])->all(), 'id', 'name');
-//$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-//$k=0;
-//foreach($in as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=","; $w .=" '$pid'"; $k++; }
-
-
-if(!empty($_POST["save_view"]) and $editView==1) {
- $db::sql("UPDATE products_1c SET view=0 WHERE tip='products'");
- foreach($_POST["view"] as $productId => $on) {
- $productId=htmlentities($productId);
- if($on=="on") $db::sql("UPDATE products_1c SET view=1 WHERE tip='products' AND id=?",[$productId]);
- //if(empty($on)) mess("<br> $productId = $on ");
- }
-}
-
-
-
-if(!empty($_POST["save"])) {
-
-
- mess("save");
-
-
- foreach($massiver as $m0 => $m1) {
- $name_eng=$m1["name_eng_sql"];
- foreach($_POST[$name_eng] as $m => $val) {
- $val= mb_eregi_replace('[^0-9.]', '', $val);
- $sql_param[$m][$name_eng]=$val;
-
- }
- }
-
-
-
-
- $log = [];
- foreach($sql_param as $prod_id => $massi) {
-
- $dataRow=$db::getRows("SELECT date_id, color, quantity, quantity_max FROM store_planogram_logi WHERE
-store_id='$store_id' AND product_id='$prod_id' order by date_id DESC LIMIT 12");
-
- $date_id="";
- foreach($dataRow as $row){
- if(empty($date_id)) $date_id=$row["date_id"];
- if(empty($row["color"])) $row["color"]="NULL";
-
- if($date_id==$row["date_id"]) {
- $log[$row["color"]]["quantity"]=$row["quantity"];
- $log[$row["color"]]["quantity_max"]=$row["quantity_max"];
- }
-
- }
-
-
-
- if(($log["NULL"]["quantity"] ?? 0) != $massi["quantity"])
- {
-
- $comment_id=(int)$_POST["comment_id"][$prod_id];
- // echo" <br>".$log["NULL"]["quantity"]." new_valiue= ".$massi["quantity"]." comment_id=$comment_id ";
- $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
- if (!$storePlanogram) {
- $storePlanogram = new StorePlanogram;
- $storePlanogram->store_id = $store_id;
- $storePlanogram->product_id = $prod_id;
- $storePlanogram->color = '';
- }
- foreach ($massi as $pole => $value) {
- $storePlanogram->$pole = $value;
- }
- $storePlanogram->save();
- if ($storePlanogram->getErrors()) {
- var_dump($storePlanogram->getErrors());
- }
-// $sql="INSERT IGNORE INTO store_planogram SET ";
-// $up= "store_id='$store_id', product_id='$prod_id', color=''"; foreach($massi as $pole =>$value) $up .=", $pole='$value' ";
-// $sql .="$up ON DUPLICATE KEY UPDATE $up";
-// $db::sql($sql);
- // echo"<br>$sql ";
- $storePlanogramLogi = StorePlanogramLogi::find()
- ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
- if (!$storePlanogramLogi) {
- $storePlanogramLogi = new StorePlanogramLogi;
- $storePlanogramLogi->date_id = date("Ymd");
- $storePlanogramLogi->store_id = $store_id;
- $storePlanogramLogi->product_id = $prod_id;
- $storePlanogramLogi->color = '';
- }
- foreach ($massi as $pole => $value) {
- $storePlanogramLogi->$pole = $value;
- }
- $storePlanogramLogi->comment_id = $comment_id;
- $storePlanogramLogi->save();
-// $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
-// $sql="INSERT IGNORE INTO store_planogram_logi SET ";
-// $sql .="$up ON DUPLICATE KEY UPDATE $up";
-// $db::sql($sql);
-
-
-
-
- foreach($_POST["quantity__color"][$prod_id] ?? [] as $color => $quan) {
- $color=trim($color);
- $quan=(int)$quan;
- if(!empty($color)) {
- $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
- if (!$storePlanogram) {
- $storePlanogram = new StorePlanogram;
- $storePlanogram->store_id = $store_id;
- $storePlanogram->product_id = $prod_id;
- $storePlanogram->color = $color;
- }
- $storePlanogram->quantity = $quan;
- $storePlanogram->save();
-// $sql="INSERT IGNORE INTO store_planogram SET ";
-// $up= " store_id='$store_id', product_id='$prod_id', color='$color', quantity='$quan' ";
-// $sql .="$up ON DUPLICATE KEY UPDATE $up";
-// $db::sql($sql);
-
- $storePlanogramLogi = StorePlanogramLogi::find()
- ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
- if (!$storePlanogramLogi) {
- $storePlanogramLogi = new StorePlanogramLogi;
- $storePlanogramLogi->date_id = date("Ymd");
- $storePlanogramLogi->store_id = $store_id;
- $storePlanogramLogi->product_id = $prod_id;
- $storePlanogramLogi->color = $color;
- }
- $storePlanogramLogi->comment_id = $comment_id;
- $storePlanogramLogi->save();
-// $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
-// $sql="INSERT IGNORE INTO store_planogram_logi SET ";
-// $sql .="$up ON DUPLICATE KEY UPDATE $up";
-// $db::sql($sql);
-
-
-
- }
- }
-
-
- foreach($_POST["quantity_max__color_max"][$prod_id] ?? [] as $color => $quan) {
- $color=trim($color);
- $quan=(int)$quan;
- if(!empty($color)) {
- $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
- if (!$storePlanogram) {
- $storePlanogram = new StorePlanogram;
- $storePlanogram->store_id = $store_id;
- $storePlanogram->product_id = $prod_id;
- $storePlanogram->color = $color;
- }
- $storePlanogram->quantity = $quan;
- $storePlanogram->save();
-// $sql="INSERT IGNORE INTO store_planogram SET ";
-// $up= " store_id='$store_id', product_id='$prod_id', color='$color', quantity_max='$quan' ";
-// $sql .="$up ON DUPLICATE KEY UPDATE $up";
-// $db::sql($sql);
- //echo"<br> $sql";
- }
- }
-
- }
-
-
- }
-
- mess("Полнограмма для магазина сохранена");
-}
-
-echo'<div class="table-responsive mt-3">';
-
-if($save==1) echo'<form method=post>' . '<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() .'" />';
-
-echo'
-<table class="table table-sm table-hover border-top text-nowrap"><thead>';
-
-foreach($massiver as $f =>$mass) {
- echo'<th style="width:90px;">'.$mass["name"].'</th>';
-}
-echo'<th class="w-90">наименование</th>';
-
-if($editView==1) echo'<th>видимый</th>';
-echo'</thead><tbody>';
-
-
-if (isset($store_id)) {
- $data3 = StorePlanogram::find()->where(['store_id' => $store_id, 'color' => ''])->asArray()->all();
-// $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
- foreach ($data3 as $row2) {
- $values_in[$row2["product_id"]]["quantity"] = $row2["quantity"];
- $values_in[$row2["product_id"]]["quantity_max"] = $row2["quantity_max"];
-
- }
-
- $data3 = StorePlanogram::find()->where(['store_id' => $store_id])->andWhere(['!=', 'color', ''])->asArray()->all();
-// $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
- foreach ($data3 as $row2) {
- $colors_in[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
- $colors_in_max[$row2["product_id"]][$row2["color"]] = $row2["quantity_max"];
- }
-}
-
-
-
-
-$colorSort=[];
-if (isset($store_id)) {
- $data = StorePlanogramColorsSort::find()->select(['product_id', 'color', 'posit'])->where(['store_id' => $store_id])
- ->orderBy(['product_id' => SORT_ASC, 'posit' => SORT_ASC])->asArray()->all();
-// $data = $db::getRows("SELECT product_id,color,posit FROM store_planogram_colors_sort WHERE store_id=? order by product_id ASC, posit ASC", [$store_id]);
- foreach ($data as $row) $colorSort[$row["product_id"]][] = $row["color"];
-}
-
-/*
-
-echo 'Максимальный размер данных: ' . ini_get('post_max_size') . '<br>';
-echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '<br>';
-echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '<br>';
-echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '<br>';
-echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '<br>';
-echo 'Память для скрипта: ' . ini_get('memory_limit') . '<br>';
-*/
-
-$providers[0]="-без поставщика-";
-
-$data = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'p.view'])
- ->innerJoin('products_1c p', 'p.id = o.id AND o.provider_id > 0')
- ->orderBy(['o.provider_id' => SORT_ASC, 'p.view' => SORT_DESC, 'p.name' => SORT_ASC])->asArray()->all();
-//$data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors,p.view FROM products_1c_options as o, products_1c as p WHERE
-//p.id=o.id AND o.provider_id>0 order by o.provider_id ASC, p.view DESC, p.name ASC");
-
-
-$products_group = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['tip' => 'products_group'])->all(), 'id', 'name');
-//$products_group=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products_group'");
-
-$data2 = ProductsClass::find()->alias('cl')->select(['p.id', 'p.name', 'p.parent_id', 'o.provider_id', 'o.colors', 'p.parent_id as category_id'])
- ->leftJoin('products_1c p', 'p.view =1 AND p.parent_id=cl.category_id')
- ->leftJoin('products_1c_options o', 'p.id = o.id')
- ->where(['cl.tip' => 'related'])
- ->groupBy(['p.id'])
- ->orderBy(['o.provider_id' => SORT_DESC, 'p.parent_id' => SORT_DESC, 'p.name' => SORT_ASC])
- ->asArray()->all();
-//$data2=$db::getRows("SELECT p.id, p.name, p.parent_id, o.provider_id, o.colors, p.parent_id as category_id FROM
-// products_class as cl
-// LEFT JOIN products_1c as p ON (p.view='1' AND p.parent_id=cl.category_id )
-// LEFT JOIN products_1c_options as o ON (p.id=o.id)
-//WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
-$data = array_merge($data, $data2);
-
-
-$providersIn = [];
-$category_idIn = [];
-$p = 0;
-foreach($data as $row) {
- if(!in_array($row["provider_id"],$providersIn)) {
-
- if(empty($providers[$row["provider_id"]])) {
- echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
- } elseif(!empty($providers[$row["provider_id"]]))
- {
- echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();"><td colspan=4 class="bg-success fs-4 p-2">+
- '.$providers[$row["provider_id"]].'</td></tr>';
- }
-
- $providersIn[]=$row["provider_id"];
-
- }
-
-
- if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
- echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
- <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
- $category_idIn[]=$row["category_id"];
- $p++;
- }
-
- echo"<tr style=\"display:none\" class=\"pr__".$row["provider_id"]." ";
- if(!empty($row["category_id"])) echo" category__".$row["category_id"];
- if(empty($row["view"])) echo" bg-warning";
- echo"\">";
- foreach($massiver as $f =>$mass) {
- echo'<td title="'.$mass["title"].'"><input onclick="$(\'.p'.$row["id"].'\').show();" type=numeric oninput="up(this)" min="0" name='.$mass["name_eng"].'['.$row["id"].'] value="';
- if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
- echo'"';
- if(!empty($mass["pattern"])) echo ' pattern="'.$mass["pattern"].'"';
- if(isset($mass["step"])) echo ' step="'.$mass["step"].'"';
- if(isset($mass["placeholder"])) echo ' placeholder="'.$mass["placeholder"].'"';
- echo' class="poln';
- if(isset($mass["background"])) echo ' '.$mass["background"];
- echo'"';
- echo'></td>';
-
- }
-
- echo"<td class=\"fs-5 p-1\">".$row["name"]." ";
- //if($providers[$row["provider_id"]]) echo"<span class=\"btn btn-sm btn-indigo\">".$providers[$row["provider_id"]]."</span>";
-
- if (isset($store_id)) {
- echo '<a href="/shipment/store-planogram-logi/?store_id=' . $store_id . '&product_id=' . $row["id"] . '">logi</a>';
- }
- echo'<select class="form-control p'.$row["id"].' bg-danger" name=comment_id['.$row["id"].'] style="display:none;width:100px;">';
- $sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
- foreach($sel as $sid => $sname){
- echo'<option value='.$sid.'';
- if(isset($sthis) && $sid==$sthis) echo' selected';
-
- echo'>'.$sname.'</option>';
-
- }
-
-
- echo'</select>';
-
-
- echo"</td>";
-
- if($editView==1) { echo"<td><input type=checkbox name=view[".$row["id"]."] "; if(isset($row["view"]) && $row["view"]==1) echo" checked"; echo"></td>";}
- echo"</tr>";
-
- if(!empty($row["colors"])) {
- $colors=explode(";",$row["colors"]);
-
-
-
-////////// color
- echo'<tr style="display:none" class="pr__'.$row["provider_id"].'"><td colspan=2 class="text-right pt-2">минимальные</td><td colspan=2>';
- foreach($colors as $color) {
- $color=trim($color);
- $percentTxt=""; $cssClass="";
- if(!empty($values_in[$row["id"]]["quantity"]) and !empty($colors_in[$row["id"]][$color])) {
- $percent=round(100*($colors_in[$row["id"]][$color]/$values_in[$row["id"]]["quantity"]),2);
- $percentTxt =" ($percent%)";
- $cssClass=" cssLime";
- }
-
-
- echo'<div class="dinlineblock'.$cssClass.'">
- <table cellpadding=0 cellspasing=0><td><input type=numeric name=quantity__color['.$row["id"].']['.$color.'] class="input-sm" value="'.(isset($colors_in) ? $colors_in[$row["id"]][$color] ?? '' : '').'"></td>
- <td>'.$color.''.$percentTxt.'</td></table></div>';
- //<span class="btn btn-sm btn-warning">цвет '.$row["name"].'</span>
-
- }
- echo'</div></td></tr>';
-////////// end color
-
-
-////////// color max
-
- if(!empty($colorSort[$row["id"]])) {
- $colors_new=[];
- foreach($colorSort[$row["id"]] as $color1 => $color) $colors_new[]=$color;
-
-
- foreach($colors as $color1 => $color) {
- // if(!in_array($color,$colors_new)) $colors_new[]=$color;
- }
-
-
- } else $colors_new=$colors;
-
-
-
-
- echo'<tr style="display:none" class="pr__'.$row["provider_id"].' bg-danger2"><td colspan=2 class="text-right pt-2"> <a href="/shipment/ProductColorSort/?product_id='.$row["id"].'&store_id='.$store_id.'" target=new class="fs-4 btn bt-info">⇅</a> максимальные</td><td colspan=2>';
- foreach($colors_new as $color) {
- $color=trim($color);
- echo'<div class="dinlineblock">
- <table cellpadding=0 cellspasing=0><td><input type=numeric name='.$mass["name_eng"].'__color_max['.$row["id"].']['.$color.'] class="input-sm" value="'.($colors_in_max[$row["id"]][$color] ?? '').'"></td>
- <td>'.$color.'</td></table></div>';
- }
- echo'</div></td></tr>';
-////////// end color max
-
-
-
-
-
- }
-
-
-}
-echo'</tbody></table>';
-
-
-
-if($save==1) {
-
-
- echo'<button type=submit name=save value=1 class="btn btn-success btn-lg m-2">сохранить</button>';
-
-
-// даем доступ к сохранению только изранным группам
- if($editView==1) {
- echo'<button type=submit name=save_view value=1 class="btn btn-success btn-lg m-2">изменить показ товаров в полнограмме</button>';
- }
-}
-
-
-if($save==1) echo'</form>';
-
-/*
-
-echo"<h2>Сопутка</h2>";
-$data=$db::getRows("SELECT p.id, p.name FROM products_class as cl, products_1c as p WHERE
-p.parent_id=cl.category_id AND cl.tip='related' order by p.name ASC");
-
-foreach($data as $row) {
-
-echo"<br> ".$row["provider_id"]." ".$row["name"]." ";
-}
-
-
-*/
-
-
-echo'</div>';
-
-
-
-
-$_CONFIG["jscss"]='
-<style>.table tbody tr td{padding:0;}
-
-.input-sm{width:70px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
-input[type="numeric"].poln,.poln{font-weight:bolder; width:90px; font-size:1.7rem; background:lime; color:#000; border:0;padding:2px; text-align:center;}
-.cssLime{background:#caefca;padding:0.4rem;}
-.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
-.bg-danger2,input[type="numeric"].poln.bg-danger2{background:#ffd0d0}
-
-
-</style>
-<script>
-function up(e) {
- if (e.value.indexOf(".") != \'-1\') {
- e.value=e.value.substring(0, e.value.indexOf(".") + 3);
- }
-
-
-
-}
-
-
-';
-/*
-
-
-function ajaxProductColorSort(product_id){
-
- jQuery(\'#modal-7\').modal(\'show\', {backdrop: \'static\'}); $(\'#modal-7 .modal-title\').text(\'Сортировка цветов по приоритету для товара\');
-
-$.ajax({
- url: \'/shipment/ProductColorSort/\',
- method: \'post\',
- dataType: \'html\',
- data: {product_id: product_id, store_id : \''.$store_id.'\'},
- success: function(data){
- $(\'#modal-7 .modal-body\').html(data);
- }});
-}
-</script>
-
-
-<!-- MODAL -->
- <div class="modal fade" id="modal-7">
- <div class="modal-dialog modal-dialog-centered text-center" role="document">
- <div class="modal-content modal-content-demo">
- <div class="modal-header">
- <h6 class="modal-title"></h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
- </div>
- <div class="modal-body">
-
- </div>
- <div class="modal-footer">
-
- <button class="btn btn-secondary" data-bs-dismiss="modal" type="button">закрыть</button>
- </div>
- </div>
- </div>
- </div>*/
-
-
-//include"templates/bottom.php";
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-
-
-
+++ /dev/null
-<?php
-
-use yii\widgets\ActiveForm;
-use yii\base\DynamicModel;
-
-use yii_app\helpers\PrintBlockHelper;
-
-use kartik\select2\Select2;
-
-/** @var $products array */
-/** @var $filterModel DynamicModel */
-/** @var $orderStoreSort array */
-/** @var $storeNamesByGuid array */
-/** @var $storePlanogramByStoreGuid array */
-/** @var $salesQuantity array */
-
-$this->registerCssFile('/css/customSortable.css');
-$this->registerJsFile('/js/Sortable.js', ['position' => \yii\web\View::POS_END]);
-$this->registerJsFile('/js/customSortable.js', ['position' => \yii\web\View::POS_END]);
-
-?>
-
-<div class="setDivisionPriority m-5">
- <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
- <?php PrintBlockHelper::printBlock('Товар', $filterForm->field($filterModel, 'productId')->widget(Select2::class, [
- 'data' => $products,
- 'language' => 'ru',
- 'options' => ['placeholder' => 'Товар...'],
- 'pluginOptions' => [
- 'allowClear' => true,
- ],
- 'pluginEvents' => [
- 'change' => 'function() {
- $("#filter-form").get(0).submit();
- }',
- ]
- ])->label(false)); ?>
- <?php ActiveForm::end(); ?>
- <?php if ($orderStoreSort && $storeNamesByGuid && $storePlanogramByStoreGuid): ?>
- <div class="row">
- <div class="col-1"></div>
- <div class="col-2">Магазин</div>
- <div class="col-2">Продажи</div>
- <div class="col-2">Планограмма минимум</div>
- <div class="col-2">Планограмма максимум</div>
- </div>
- <div class="draganddropTable" data-name="stores#<?= $filterModel->productId ?>">
- <?php foreach ($orderStoreSort as $orderStore): ?>
- <div class="row">
- <div class="col-1 drag-handler"></div>
- <div class="col-2">
- <?= $storeNamesByGuid[$orderStore->store_id] ?? '---' ?>
- </div>
- <div class="col-2">
- <?= $salesQuantity[$orderStore->store_id] ?? '---' ?>
- </div>
- <div class="col-2">
- <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity ?? '---' ?>
- </div>
- <div class="col-2">
- <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity_max ?? '---' ?>
- </div>
- </div>
- <?php endforeach; ?>
- </div>
- <?php endif; ?>
-</div>
+++ /dev/null
-<?php
-
-use yii_app\records\Products1c;
-use yii\helpers\ArrayHelper;
-use yii_app\records\StorePlanogram;
-use yii_app\records\StorePlanogramLogi;
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
-include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
-
-//include"templates/top.php";
-
-$store_id = $product_id = null;
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-if(!empty($_REQUEST["product_id"])) $product_id=htmlentities($_REQUEST["product_id"]);
-
-$sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
-
-echo'<h1 class="page-title mb-0 text-primary">Логи матрицы товара на магазине</h1>
-
-
-
-</p><div id=editDiv></div>';
-
-$storesAll = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store'])
- ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
-//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
-
-
-
-if(!empty($store_id)) {
- echo'<div class="table-responsive mt-3">
-
-
-история
-<table class="table">';
- echo'<tbody>';
-
- $dataRow = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $product_id, 'color' => ''])->one();
-// $dataRow=$db::getRow("SELECT * FROM store_planogram WHERE store_id=? AND product_id=? AND color=''",[$store_id,$product_id]);
-
-
- echo'<tr><td>сейчас</td><td>'.$dataRow["quantity"].'</td><td>'.$dataRow["quantity_max"].'</td><td>'.$dataRow["color"].'</td></tr>';
-
-
- $data = StorePlanogramLogi::find()->where(['store_id' => $store_id, 'product_id' => $product_id])
- ->orderBy(['date_id' => SORT_DESC, 'color' => SORT_ASC])->asArray()->all();
-// $data=$db::getRows("SELECT * FROM store_planogram_logi WHERE store_id=? AND product_id=? order by date_id DESC, color ASC",[$store_id,$product_id]);
-
-
- foreach($data as $row) {
-
- if($row["color"]=="")
- echo'<tr><td>'.$row["date_id"].'</td><td>'.$row["quantity"].'</td><td>'.$row["quantity_max"].'</td><td>'.$row["color"].'</td>
-<td>'.$sel[$row["comment_id"]].'</td>
-</tr>';
-
- }
-
-
- echo'</tbody></table>
-
-</div>';
-
-}
-
-//include"templates/bottom.php";
+++ /dev/null
-<?php
-
-include_once(dirname(__DIR__, 2) . "/startup.php");
-include_once(dirname(__DIR__, 2) . "/inc/db.php");
-
-if(!empty($_REQUEST["product_id"])) {
-
- $product_id=htmlentities($_REQUEST["product_id"]);
- $color=htmlentities($_REQUEST["color"]);
- $quantity=intval($_REQUEST["quantity"]);
- $store_id=htmlentities($_REQUEST["store_id"]);
- $date_id=intval($_REQUEST["date_id"]);
- echo"Сохранили количество =$quantity";
-
-
-
- if($color!="NULL") $color=str_replace('"','',$color);
- else $color='';
- $sql="INSERT IGNORE INTO store_products_fact SET ";
- $up= "store_id='$store_id', product_id='$product_id', date_id='$date_id', color='$color', quantity='$quantity' ";
- $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//echo"<br><br>++$color++$sql";
- $db::sql($sql);
-
-}
\ No newline at end of file
+++ /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"templates/top.php";
-
-if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
-//$date_id=date("Ymd");
-if(!empty($_REQUEST["date_id"])) $date_id=intval($_REQUEST["date_id"]);
-$arrayDate=["first","second","third","fourth","fifth"];
-$typeDay="monday";
-if(!isset($_SESSION["show_planogram_0"])) $_SESSION["show_planogram_0"]=1;
-
-if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="hide") $_SESSION["show_planogram_0"]=0;
-if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="show") $_SESSION["show_planogram_0"]=1;
-
-
-
-if(isset($_REQUEST["typeDay"]) && $_REQUEST["typeDay"]) $typeDay=htmlentities($_REQUEST["typeDay"]); //"wednesday";
-
-//$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE date_id!=? order by date_id desc LIMIT 1",[date("Ymd")]);
-//f(empty($date_n_id))
-$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE 1 order by date_id desc LIMIT 1");
-
-
-$massivert[$date_n_id]=date('d.m.Y', strtotime($date_n_id));
-$massiver_time[$date_n_id]=strtotime($date_n_id);
-if(empty($date_id)) $date_id=$date_n_id;
-
-
-if(date('l', time())=="Wednesday") $typeDay="wednesday";
-
-$dayLinkstArray=["monday"=>"Понедельник", "wednesday"=>"Среда" ];
-$typer="";
-foreach($dayLinkstArray as $lnk => $name) {
-
- $typer .="<a href=\"?typeDay=$lnk\" class=\"btn btn-sm btn-";
- if($typeDay==$lnk) $typer .="success"; else $typer .="info";$typer .=" me-2\">$name</a> ";
-}
-//echo"Выберите тип: $typer";
-
-
-$dayTextArray=[$typeDay];
-
-foreach($dayTextArray as $dayText) {
- foreach($arrayDate as $sl) {
- if(strtotime("$sl $dayText of this month")<time()) {
- $massivert[date('Ymd', strtotime("$sl $dayText of this month"))]=date('d.m.Y', strtotime("$sl $dayText of this month"));
- $massiver_time[date('Ymd', strtotime("$sl $dayText of this month"))]=strtotime("$sl $dayText of this month");
- }
- }
-}
-
-
-asort($massivert);
-
-$date_div="";
-foreach($massivert as $did => $date) {
-// if($massiver_time[$did]>0) {
- $date_div .="<a href=\"?date_id=$did\" class=\"btn btn-sm btn-";
- if($did==$date_id) $date_div .="success"; else $date_div .="info";
- $date_div .=" me-2\">$date</a> ";
-
-}
-
-
-
-//echo "<br>Выберите дату ".$date_div; and empty($date_id)
-if(empty($_REQUEST["date_id"]) and !empty($_REQUEST["store_id"])) {
-
- error_mess("Выберите дату $date_div");
-
- exit();
-}
-
-$data=$db::getRows("SELECT id,name, providers_arr FROM `store_orders` WHERE date_start>NOW() - interval 25 day");
-foreach($data as $row) {
- $pr=explode(",",$row["providers_arr"]);
- foreach($pr as $prid) { if(!empty($prid)) $prov[$prid]=$prid;}
-}
-//echo print_r($prov);;
-
-
-$k=0;
-$where="";
-foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
- if(!empty($guid)) {
- if($k!=0) $where .=",";
- $where.="'$guid' ";
- $k++;
- }
-}
-
-//if(!empty($where)) $where =" AND id in($where)";
-
-$massiver[]=["name"=>"Факт","title"=>"Фактические остатки","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0","type"=>"number","tip"=>"int"];
-$massiver[]=["name"=>"Комментарий","title"=>"Комментарий флориста","name_eng"=>"comment_type_id", "name_eng_sql"=>"comment_type_id", "class"=>"comment", "type"=>"select", "class"=>"sel",
- "values_arr"=>["0"=>"-выбрать-",
- 1=>"не хватило товара",
- 2=>"большое списание по товару",
- 3=>"много товара",
- 4=>"Цветок одного цвета ",
- 5=>"Цветок плохого качества ",
- 6=>"Не пользуются спросом",
- 7=>"Не заказывали ,а привезли"
- ],
-
-
-
-
-
-
-
- "tip"=>"int"];
-if(in_array($_SESSION["group_id"],[1,10,7,50])) $massiver[]=["name"=>"Ком-й кустовой","title"=>"Комментарий кустового","name_eng"=>"comments", "name_eng_sql"=>"comments", "class"=>"comment", "placeholder"=>"0","type"=>"textarea","tip"=>"string"];
-
-
-
-echo'<h1 class="page-title mb-0 text-primary">Фактические остатки на '.date('d.m.Y',strtotime($date_id));
-if(isset($store_id) && empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&date_id=$did&show_planogram_0=show\" class=\"ml-3 me-2 btn-warning btn-sm\">показывать товары с 0 полнограммой</a>";
-if(isset($store_id) && !empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&&show_planogram_0=hide\" class=\"ml-3 me-2 btn-danger btn-sm\">скрыть товары с 0 полнограммой</a>";
-echo'</h1>
-
-
-<a href="https://youtu.be/-jAr0uV5uZI" class="btn btn-danger btn-lg" target=new>Видео-инструкция</a> https://youtu.be/-jAr0uV5uZI
-<p>Флористы заполняют в понедельник и в среду до 11 часов по своему магазину. Вносят фактические остатки вместе по цветам тоже!
-Флористы или администраторы вносят комментарии из списка (3 причины). Далее кустовой просматривает и сотавляет свои комментарии текстом.
-Цифра в % на кнопке магазина показывает на сколько позиций заполнена полнограмма факт от полнограммы для данного магазина без учета цветов.
-<br>Заполняем на последнюю актуальную дату! '.$date_div.'
-
-
-
-
-</p><div id=editDiv></div>';
-
-
-if(empty($where)) mess("У вас не прописан доступ к магазинам автозаказа обратитесь +79308013638 Екатерина HR");
-
-
-$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view=1 AND id in($where) order by name ASC");
-$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
-
-
-
-// сколько заполнено по магазинам
-$storesFact=array(); $storesFactNo=array();
-// полнограммы по всем магазинам
-$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' AND store_id!='' AND quantity>0 AND store_id in($where)");
-foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
-
-// полнограммы факт по всем магазинам
-$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_products_fact WHERE date_id=? AND quantity>0 AND store_id in($where)",[$date_id]);
-foreach($data3 as $row2) $factAll[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
-
-
-foreach($stores as $stId =>$nameStore) {
-//echo"<br>магазин ".$nameStore." ";
- $cnt=0; $all=0;
- $arrays=$store_planogramAllStores[$stId] ?? [];
- if(!empty($stores[$stId])){
- foreach($arrays as $productId =>$quantity) {
- if($factAll[$stId][$productId] ?? 0 >0 and $quantity>0) {
- //echo"+ $productId = $quantity";
- $cnt++;
- }
- $all++;
- }
- $percent=round(100*($cnt/($all == 0 ? 1 : $all)));
-//echo" $cnt из $all =$percent %";
- $storesFact[$stId]=$percent;
-//не заполнившие магазины
- if($percent<15) $storesFactNo[]=$stId;
- }
-
-}
-// сколько заполнено по магазинам
-
-
-
-
-
-foreach($stores as $strid=>$namestore){
- echo"<a href=\"/shipment/store-products-fact/?store_id=$strid&date_id=$date_id\" class=\"btn btn-sm btn-";
- if(isset($store_id) && $store_id==$strid) echo"warning btn"; else echo"info"; echo" m-1\">";
-
- if($storesFact[$strid]>20) echo"<span class=\"btn btn-sm bg-success me-1\" title=\"Полнограмма заполнена на ".$storesFact[$strid]."%\">+".$storesFact[$strid]."%</span>";
-
- if(empty($storesFact[$strid])) echo"<span class=\"btn btn-sm bg-danger me-1\">-</span>";
- elseif($storesFact[$strid]<10) echo"<span class=\"btn btn-sm bg-danger me-1\">".$storesFact[$strid]."%</span>";
-
- if(empty($store_planogramAllStores[$strid])) echo"<span class=\"btn btn-sm bg-danger2 me-1\">нет полнограммы</span>";
-
- echo"$namestore</a>";
-}
-
-
-
-if(!empty($storesFactNo)) {
- echo'<p>магазины не заполнившие полнограмму';
- foreach($storesFactNo as $stId) echo'<span class="btn btn-danger me-2 btn-sm">'.$storesAll[$stId].'</span> ';
-
- echo'</p>';
-
-}
-
-
-$w="";
-$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
-$k=0;
-foreach(($in ?? []) as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=" OR"; $w .=" o.provider_id='$pid'"; $k++; }
-
-if(!empty($_POST["quantity"])) {
-
- foreach($massiver as $m0 => $m1) {
- $name_eng=$m1["name_eng_sql"];
- foreach($_POST[$name_eng] as $m => $val) {
- if($m1["tip"]=="int") $val= mb_eregi_replace('[^0-9.]', '', $val);
- else $val= htmlentities($val);
- if($val>=0) $sql_param[$m][$name_eng]=$val;
-
- }
- }
-
-
-
- foreach($sql_param as $prod_id => $massi) {
- $sql="INSERT IGNORE INTO store_products_fact SET ";
- $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color=''";
- foreach($massi as $pole =>$value) $up .=", $pole='$value' ";
- $sql .="$up ON DUPLICATE KEY UPDATE $up";
-
- $db::sql($sql);
-
- foreach($_POST["color"]["quantity"][$prod_id] as $color => $quantity) {
- $color=str_replace('"','',$color);
- $sql="INSERT IGNORE INTO store_products_fact SET ";
- $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color='$color', quantity='$quantity' ";
- $sql .="$up ON DUPLICATE KEY UPDATE $up";
-//echo"<br><br>++$color++$sql";
- $db::sql($sql);
- }
-
- }
-
-
-
-
- mess("Факт для магазина сохранена");
-}
-if(!empty($store_id)) {
- echo '<div class="table-responsive mt-3"><form action="" method=post>
-<table class="w-100" cellspasing=0 cellpadding=0 border=0>';
- echo '<tbody>';
-
-
- $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
- foreach ($data3 as $row2) $store_planogram[$row2["product_id"]] = $row2["quantity"];
-
- $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
- foreach ($data3 as $row2) $store_planogram_colors[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
-
-
- $data3 = $db::getRows("SELECT * FROM balances WHERE store_id=? AND quantity!=0", [$store_id]);
- foreach ($data3 as $row2) $balances[$row2["product_id"]] = $row2["quantity"];
-
-
- $data3 = $db::getRows("SELECT * FROM store_products_fact WHERE store_id=? AND date_id=?", [$store_id, $date_id]);
- foreach ($data3 as $row2) {
-
- foreach ($massiver as $m0 => $m1) {
- $name_eng = $m1["name_eng_sql"];
-
- if (empty($row2["color"])) $values_in[$row2["product_id"]][$name_eng] = $row2[$name_eng];
- else $values_in_color[$row2["product_id"]][$name_eng][$row2["color"]] = $row2[$name_eng];
- }
- }
-
-
- $where = "";
- if (!empty($prov)) {
- $where = " AND o.provider_id in(";
- $j = 0;
- foreach (($prov ?? []) as $pid) {
- if ($j > 0) $where .= ",";
- $where .= "'$pid'";
- $j++;
- }
- $where .= ")";
- }
-
- $data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
-WHERE o.provider_id>0 AND p.view='1' AND p.id=o.id $where order by o.provider_id ASC, p.name ASC");
-
-
- $products_group=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products_group'");
-//foreach($data4 as $row4) $products_group[$row4["id"]]=$row4["name"];
-
- $data2=$db::getRows("SELECT p.id, p.name, p.parent_id, o.provider_id, o.colors, p.parent_id as category_id FROM
- products_class as cl
- LEFT JOIN products_1c as p ON (p.view='1' AND p.parent_id=cl.category_id )
- LEFT JOIN products_1c_options as o ON (p.id=o.id)
-WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
-//SELECT p.id, p.name, p.parent_id, provider_id FROM products_class as cl, products_1c as p WHERE p.parent_id=cl.category_id AND cl.tip='related' AND p.view='1' order by p.parent_id, p.name ASC
-
- $data = array_merge($data, $data2);
-
-
-
- $p=0;
- $p2=0;
- $providersIn = [];
- $category_idIn = [];
- foreach($data as $row) {
-
-
- if(!in_array($row["provider_id"],$providersIn)) {
-
-
- if(empty($providers[$row["provider_id"]])) {
- echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
- }elseif(!empty($providers[$row["provider_id"]])) {
-
- echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();">
- <td colspan=6 class="p-2"><span class="bg-green fs-4 p-2 w-100 d-block">+ '.$providers[$row["provider_id"]].'</span></td></tr>';
-
- }
-
- echo' <tr style="';
-
- if($p>=1) echo"display:none;";
-
- echo'" class="pr__'.$row["provider_id"].'"><td class="w-10"><small>Наименование</small></td><td class="text-center"><small>остаток 1c</small></td>';
- foreach($massiver as $f =>$mass) echo'<td class="text-left"><small>'.$mass["name"].'</small></td>';
- echo'<td class="text-center"><small>пол-ма</small></td><td class="text-center"><small>разница</small></td><td class="text-center"><small>%</small></td><td class="w-70"></td></tr>';
-
- $providersIn[]=$row["provider_id"];
- $p++;
- }
-
-
- if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
- echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
- <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
- $category_idIn[]=$row["category_id"];
- $p2++;
- }
-
- // <small>".$providers[$row["provider_id"]]."</small>
-// echo"<tr style=\"display:none;\" class=\"pr__".$row["provider_id"]."\"><td colspan=4 class=\"fs-5\">".$row["name"]."</td></tr>";
-
- if($store_planogram[$row["id"]] ?? 0>0 or $_SESSION["show_planogram_0"]==1) {
- $difference=($store_planogram[$row["id"]] ?? 0)-($values_in[$row["id"]]["quantity"] ?? 0);
- if(!empty($store_planogram[$row["id"]])) $difference_percent=100-round(100*$difference/$store_planogram[$row["id"]]);
- else $difference_percent="";
-
-
- echo"<tr style=\"";
-
- if($p>1 or $p2>1) echo"display:none;";
-
- if(($store_planogram[$row["id"]] ?? 0) ==0) echo"opacity:0.9;";
- if($difference_percent==0 and ($store_planogram[$row["id"]]??0)!=0) echo"background:#ffe391;";
- if($difference_percent>=100) echo"background:#9effd2;";
-
-
-
- echo"\" class=\"trhover pr__".$row["provider_id"]."";
-
- if(!empty($row["category_id"])) echo" category__".$row["category_id"];
-
- if(($store_planogram[$row["id"]]?? 0)==0) echo" bg-danger2";
-
- echo"\"><td class=\"text-right fs-6 pr-2\">".$row["name"]."</td>
-
-<td class=\"text-center tdcntr\">".($balances[$row["id"]] ?? '')."</td>";
- foreach($massiver as $f =>$mass) {
- echo'<td title="'.$mass["title"].'">';
-
- if($mass["type"]=="number") {
- echo'<input type=number oninput="up(this)" onchange="storeProductsFactEdit(\''.$row["id"].'\',\'NULL\')" min="0" id="color_quantity_'.$row["id"].'_NULL" name='.$mass["name_eng"].'['.$row["id"].'] class="poln '.($mass["class"] ?? '').'" value="';
- if(isset($values_in[$row["id"]][$mass["name_eng"]])) echo $values_in[$row["id"]][$mass["name_eng"]];
- echo'"';
- if(!empty($mass["pattern"])) echo' pattern="'.$mass["pattern"].'"';
- if(isset($mass["step"])) echo' step="'.$mass["step"].'"';
- if(isset($mass["placeholder"])) echo' placeholder="'.$mass["placeholder"].'"';
- echo'>';
- }
- if($mass["type"]=="textarea") {
- echo'<textarea oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'" row=1>';
- if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
- echo'</textarea>';
- }
-
- if($mass["type"]=="select") {
- echo'<select oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'">';
- // echo"<option value=0 "; if(empty($values_in[$row["id"]])) echo "select"; echo">-выбрать-</option>";
-
- foreach($mass["values_arr"] as $v => $name) {
- echo"<option value=$v "; if($v==($values_in[$row["id"]][$mass["name_eng"]] ?? 0)) echo "selected";
- echo">$name</option>";
- }
- echo'</select>';
- }
- echo'</td>';
-
- }
-
-
- echo'<td class="tdcntr bg-default">'.($store_planogram[$row["id"]] ?? '').'</td>
-<td class="tdcntr bg-';
- if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
-
- if($difference<0) $difference="+".abs($difference);
- if($difference_percent<0) $difference_percent=">".abs($difference_percent);
-
- if(!empty($store_planogram[$row["id"]]) and !empty($difference_percent)) $difference_percent .="%";
- else $difference_percent ="";
- echo'">'.$difference.'</td>
-<td class="tdcntr bg-default">'.$difference_percent.'</td>';
-
-
- /* <td>
- <textarea class=\"form-control\" row=1 name=comment>".$row["name"]."</textarea>
- </td>*/
- echo"</tr>";
- $colors=explode(";",$row["colors"]);
- $colorShow=0;
- if(!empty($row["colors"])) {
- foreach($colors as $color_w) {
- if(!empty($store_planogram_colors[$row["id"]][trim($color_w)])) $colorShow++;
- }
-
- $colorShow=1;
- if($colorShow>0){
- echo"<tr style=\"";
- if($p>1) echo"display:none;";
-
- echo"\" class=\"pr__".$row["provider_id"]."\"><td colspan=5>
- <table class=\"tablecolors mb-5\">
- <thead><th class=zg rowspan=".count($colors).">
- </th><th><b>кол-во</b></th><th><b>цвет</b></th><th><b>полнограмма</b></th><th><b>расхождение шт.</b></th><th><b>заполнение %</b></th></thead>
- <tbody>";
-
-
-
- $j=0;
- foreach($colors as $color_w) {
- $color_w=trim($color_w);
-
-
- if(!empty($store_planogram_colors[$row["id"]][$color_w])) { }
-
- echo"<tr>";
-
- if($j==0) echo"<td class=zg rowspan=".count($colors)."><b>".$row["name"]."</b></td>";
-
- $j++;
- echo"<td><input onchange=\"storeProductsFactEdit('".$row["id"]."','$color_w')\" type=number class=input-sm name=color[quantity][".$row["id"]."][$color_w] id=\"color_quantity_".$row["id"]."_$color_w\" value=\"";
- if(isset($values_in_color[$row["id"]]["quantity"][$color_w] )) echo $values_in_color[$row["id"]]["quantity"][$color_w];
- echo"\"></td><td>$color_w</td>";
- $difference_percent=0;
- $difference=($store_planogram_colors[$row["id"]][$color_w] ?? 0)-($values_in_color[$row["id"]]["quantity"][$color_w] ?? 0);
- if($store_planogram_colors[$row["id"]][$color_w] ?? 0)
- $difference_percent=100-round(100*$difference/$store_planogram_colors[$row["id"]][$color_w]);
-
-
- if(!empty($difference_percent)) $difference_percent="$difference_percent%";
- else $difference_percent="";
-
-
-
- echo'<td class="bg-default tdcntr">';
- if(!empty($store_planogram_colors[$row["id"]][$color_w]) and !empty($difference_percent)) echo $store_planogram_colors[$row["id"]][$color_w];
-
- echo'</td>
-<td class="tdcntr bg-';
- if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
- echo'">';
-
- if(!empty($difference)) echo $difference;
-
- echo'</td><td class="tdcntr bg-default">'.$difference_percent.'</td>';
- echo'</tr>';
-
-
-
-
- }
-
-
-
- echo"</tbody></table></td></tr>";
-
- }
-
- }
-
- }
-
-
-
-
-
- }
- echo'</tbody></table>
-
-
-<button type=submit name=edits value=1 class="btn btn-success btn-lg m-2">сохранить</button>
-
-</form></div>';
-
- /*
-
- $data=$db::getRows("SELECT id, name FROM products_1c WHERE tip='products_group'");
- foreach($data as $row) $products_group[$row["id"]]=$row["name"];
-
-
-
-
- echo"<h2>Сопутка</h2><table class=\"table table-hover\"><thead></thead><tbody>";
- $data=$db::getRows("SELECT p.id, p.name, p.parent_id FROM products_class as cl, products_1c as p WHERE
- p.parent_id=cl.category_id AND cl.tip='related' AND p.view='1' order by p.parent_id, p.name ASC");
-
- foreach($data as $row) {
- if(empty($inGroup[$row["parent_id"]])){
-
- $inGroup[$row["parent_id"]]=$row["parent_id"];
- echo"<tr onclick=\"$('.p".$row["parent_id"]."').toggle();\"><td>
- <span class=\"bg-green fs-4 p-2 w-100 d-block\">+".$products_group[$row["parent_id"]]."</span></td></tr> ";
-
- } else {
-
- echo"<tr class=\"p".$row["parent_id"]."\" style=\"display:none;\"><td> ".$row["provider_id"]." ".$row["name"]."</td></tr> ";
-
-
- }
- }
-
- echo"</tbody></table>";
- */
- /*
-
- .zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
- .zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
- .zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
- .zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
- .zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
- .zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
- .zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
-
-
- table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
- table.zak thead th{margin:0 0.5rem;}
- table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
- table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
- .app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
- .zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
- .zak td.td_product:hover {background:#fff;}
-
- */
-global $_CONFIG;
-
- $_CONFIG["jscss"] = '<style>.t tbody tr td{padding:0;}
-.t tbody tr td input.form-control{padding:0;margin:0 2px;text-align:center;font-weight:bold;}
-
-.table tbody tr td{padding:0;}
-
-.input-sm{width:60px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
-input[type="numeric"].poln,.poln{font-weight:bolder; width:70px; font-size:1.3rem; background:lime; color:#000; border:0;padding:1px; text-align:center;}
-.cssLime{background:#caefca;padding:0.4rem;}
-.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
-table td.tdcntr{text-align:center; font-size:1.3rem;}
-.tablecolors tr:hover td,.trhover:hover {background:#cecece;}
-
-.tablecolors tr th {text-align:center;}
-.tablecolors tr th b{font-weight:normal;}
-
-.tablecolors tbody{border-bottom:1px #cdcdcd solid; }
-.tablecolors {margin:0.5rem 0 0 2rem; float:right;}
-table.tablecolors td.zg b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:1rem;}
-
-select.sel{width:90px;font-size:0.8rem; padding:0px;}
-textarea.comment{width:220px; border:0px; background:#e6e6e6;}
-
-.bg-danger2{background:#ffd1d1;}
-
-table tbody td small{color:#787878; text-align:center; font-size:0.7rem; margin:0 0.4rem;}
-</style>
-
-<script>
-const param6x = $(\'meta[name=csrf-param]\').attr(\'content\');
-const token6x = $(\'meta[name=csrf-token]\').attr(\'content\');
-
-
-$quantity=htmlentities($_REQUEST["quantity"]);
-
-
-function storeProductsFactEdit(product_id,color){
-
-var quantity=$(\'#color_quantity_\'+product_id+\'_\'+color+\'\').val();
-
- $.ajax({
- url: \'/shipment/store-products-fact-edit/\',
- method: \'post\',
- dataType: \'html\',
- data: {store_id: \''.$store_id.'\', date_id: \''.$date_id.'\', quantity: quantity, product_id: product_id, color: color, [param6x]: token6x},
- success: function(data) {
- $(\'#editDiv\').html(data);
- }});
-}
-
-
-function up(e) {
- if (e.value.indexOf(".") != \'-1\') {
- e.value=e.value.substring(0, e.value.indexOf(".") + 3);
- }
-}
-</script>';
-
- include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
-}
-
-//include"templates/bottom.php";
-
-
-
-
+++ /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");
-
-error_reporting(E_ALL ^ E_NOTICE);
-
-$date_14day=date("Y-m-d",time()-86400*7);
-$date2=date("Y-m-d",time());
-
-$where=""; $get="";
-if(!empty($_REQUEST["date1"])) {$date_14day=htmlentities($_REQUEST["date1"]); $where .=" AND date>='$date_14day'"; $get .="&date1=$date_14day"; }
-if(!empty($_REQUEST["date2"])) {$date2=htmlentities($_REQUEST["date2"]); $where .=" AND date<='$date2'"; $get .="&date2=$date2";}
-
-
-echo'<form method=post>
-<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() . '" />
-<table><td><input type=date name=date1 value="'.$date_14day.'" class="form-control"></td>
-<td><input type=date name=date2 value="'.$date2.'" class="form-control"> </td>
-<td><button class="btn btn-success" value="1" name=show>сохранить</button></td></table></form>';
-
-
-$stores=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
-
-
-$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt, w.store_id, prices.price
-FROM write_offs as w, write_offs_products as p , products_1c as products, prices
-WHERE p.write_offs_id=w.id AND products.id=p.product_id AND products.id=prices.product_id AND w.type='Брак' AND w.date>=? AND w.date<=? group BY w.store_id, p.product_id order by p.product_id, cnt DESC",[$date_14day,$date2]);
-
-foreach($data as $row) {
- $write[$row["product_id"]][$row["store_id"]] =$row["cnt"];
- $write_all[$row["store_id"]] +=$row["cnt"];
- $all +=$row["cnt"];
-
-
- $write_price_all[$row["store_id"]] +=$row["cnt"]*$row["price"];
- $all_price +=$row["cnt"]*$row["price"];
-}
-
-
-echo" Данные из 1c c $date_14day по $date2
- <h3>% списания от общего списания по магазинам</h3>
-
- Списнаия на сумму $all_price=
- <table class=\"table table-border\"><tbody>";
-foreach($stores as $storeId =>$store) {
-
- $percent_all=round(100*($write_all[$storeId]/($all + 0.0001)));
- $percantArr[$storeId]=$percent_all;
- $percentp_all=round(100*($write_price_all[$storeId]/($all_price + 0.0001)));
- $percantArrPrice[$storeId]=$percentp_all;
-
-}
-
-arsort($percantArr);
-foreach($percantArr as $storeId =>$percent_all) {
- if($percent_all>0) echo"<tr><td> ".$stores[$storeId]." </td><td>$percent_all%</td><td>".$write_price_all[$storeId]."</td><td>".$percantArrPrice[$storeId]."%</td></tr>";
-
-}
-
-echo"</tbody></table>";
-
-$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt
-FROM write_offs as w, write_offs_products as p , products_1c as products
-WHERE p.write_offs_id=w.id AND products.id=p.product_id AND w.type='Брак' AND w.date>=? AND w.date<=? group BY p.product_id order by cnt DESC",[$date_14day,$date2]);
-echo" <h3>Списания по магазинам</h3><table class=\"table table-border\">";
-foreach($data as $row) {
-
- echo"<tr><td><span class=\"btn btn-info btn-sm me-2\" onclick=\"$('.p".$row["product_id"]."').toggle()\">+</span>".$row["name"]."</td><td>".$row["cnt"]."</td></tr> ";
-
- foreach($write[$row["product_id"]] ?? [] as $storeId => $cnt) {
-
-
- $percent=round( ($cnt/$row["cnt"])*100 );
-
- echo"<tr style=\"display:none;\" class=\"p".$row["product_id"]."\"><td>$cnt <b>$percent%</b></td><td>".$stores[$storeId]."</td></tr>";
-
-
- }
-
-}
-echo"</table>";
-
-
-
-
-
-include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file
--- /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/uni.php");
+include_once(dirname(__DIR__, 2) . "/inc/uni2.php");
+
+global $h1,$group_menu,$uni_fields, $forma_sql_table, $modul, $act;
+$h1="Добавить "; $group_menu=0; $uni_fields=0;
+$modul="shipment";
+$forma_sql_table="store_orders";
+$act="add";
+$h1="Добавить закупку";
+if(empty($_REQUEST["id"])) {
+ if(!empty($_SESSION["cat_id"])) $catid=(int)$_SESSION["cat_id"];
+
+
+}
+if(!empty($_REQUEST["cat_id"])) { $catid=(int)$_REQUEST["cat_id"]; $_SESSION["default_".$modul."_cat_id"]=$catid; $_SESSION["cat_id"]=$catid;
+ $_SESSION["default"][$modul]["cat_id"]=$catid;
+}
+
+
+
+//include"templates/top.php";
+echo "<div class='m-5'>";
+construct_modul_form_azea($modul);
+echo "</div>";
+
+
+$_CONFIG["jscss"]='
+<link href="/azea/assets/plugins/fileupload/css/fileupload.css" rel="stylesheet" type="text/css" />
+<script src="/azea/assets/js/file-upload.js"></script>
+';
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file
--- /dev/null
+<?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
--- /dev/null
+<?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);
+
+
--- /dev/null
+<?php
+
+use \yii_app\records\StoreOrdersFields;
+use \yii_app\records\StoreOrdersFieldsData;
+use \yii_app\records\StoreOrdersFieldsDataLogi;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$id=(int)$_REQUEST["id"];
+$product_id=htmlentities($_REQUEST["product_id"]);
+$store_id=htmlentities($_REQUEST["store_id"]);
+$name_eng=htmlentities($_REQUEST["name_eng"]);
+$value=htmlentities($_REQUEST["value"]);
+$provider_id=intval($_REQUEST["provider_id"]);
+$color=htmlentities($_REQUEST["color"]);
+
+
+
+if(!empty($_REQUEST["id"]) and !empty($_REQUEST["product_id"])) {
+
+ $id=(int)$_REQUEST["id"];
+ $product_id=htmlentities($_REQUEST["product_id"]);
+ $store_id=htmlentities($_REQUEST["store_id"]);
+ $name_eng=htmlentities($_REQUEST["name_eng"]);
+ $value=htmlentities($_REQUEST["value"]);
+ $provider_id=intval($_REQUEST["provider_id"]);
+ $color=htmlentities($_REQUEST["color"]);
+
+
+
+ $whereInProductsId=" in('$product_id') ";
+ $products=[$product_id=>"товар"];
+
+
+//echo"$name_eng=$value $product_id $store_id";
+ if(!empty($store_id)) {
+ global $dependent_fields;
+ $data = StoreOrdersFields::find()->select(['id', 'dependent_fields', 'name_eng'])->asArray()->all();
+// $data=$db::getRows("SELECT id, dependent_fields, name_eng FROM store_orders_fields WHERE 1");
+ foreach($data as $row) {
+ $dependent_fields[$row["id"]]=explode(",",$row["dependent_fields"]);
+ $fieldRows[$row["id"]]=$row["name_eng"];
+ }
+
+ global $arrayp;
+
+ function recurs_depended($fieldId) {
+ global $dependent_fields,$arrayp;
+ $arrayp .=",".implode(",",$dependent_fields[$fieldId]);
+ foreach($dependent_fields[$fieldId] as $fieldId2) recurs_depended($fieldId2);
+ return $arrayp;
+ }
+
+
+
+ $row = StoreOrdersFields::find()->select(['id', 'tip'])->where(['name_eng' => $name_eng])->asArray()->one();
+// $row=$db::getRow("SELECT id, tip FROM store_orders_fields WHERE name_eng=?",[$name_eng]);
+ if(is_array($row)) {
+ $tip=$row["tip"];
+ $fieldId=$row["id"];
+
+
+
+ if(0) {
+ $arrayp=recurs_depended($fieldId);
+
+
+ $arrayp = array_unique(explode(",",$arrayp));
+ $arrayp = array_diff($arrayp, array(''));
+//echo "++++".print_r($arrayp)." ";
+
+
+ $updateFieldsArray=[];
+ echo"Пересчитываем зависимые поля и обновляем информацию в таблице store_orders_fields_data по товару $product_id универсальной функцией ";
+ foreach($arrayp as $k) {
+
+ if(is_numeric($k)) { echo"<br>---+++$k ".$fieldRows[$k]."";
+
+ $updateFieldsArray[]=$fieldRows[$k];
+
+ }
+
+ }
+
+
+
+
+
+
+ if(!empty($updateFieldsArray))
+ {
+//include_once("inc/functionsFiedlsData.php");
+
+//updateProductArrayDataField($updateFieldsArray);
+ }
+
+
+ }
+//print_r($updateFieldsArray);
+
+
+
+
+ if($tip=="string") $pole="value_text"; else $pole="value";
+
+ if(empty($color) or $color=='undefined' or $color=='NULL') $color='';
+ if(empty($store_id) or $store_id=='undefined' or $store_id=='NULL') $store_id='';
+
+
+ $up= "product_id='$product_id', order_id='$id', store_id='$store_id', field_name='$name_eng', field_id='$fieldId', color='$color', date_update=NOW(), hand=1";
+
+ if(isset($value)) {
+
+
+ //$db::sql("DELETE FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=?",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+ //echo"удаление пустой записи";
+
+
+
+ $value_old_pole = StoreOrdersFieldsData::find()->select([$pole])->where(['product_id' => $product_id, 'order_id' => $id, 'store_id' => $store_id, 'field_name' => $name_eng, 'field_id' => $fieldId, 'color' => $color])->asArray()->one();
+ $value_old = $value_old_pole[$pole];
+ //$value_old=$db::getValue("SELECT $pole FROM store_orders_fields_data WHERE product_id=? AND order_id=? AND store_id=? AND field_name=? AND field_id=? AND color=? LIMIT 1",[$product_id,$id,$store_id,$name_eng,$fieldId,$color]);
+ $value_old=str_replace('.000','',$value_old);
+
+ $storeOrdersFieldsData = StoreOrdersFieldsData::find()->where(['order_id' => $id, 'product_id' => $product_id,
+ 'store_id' => $store_id, 'field_id' => $fieldId, 'field_name' => $name_eng, 'color' => $color])->one();
+ if (!$storeOrdersFieldsData) {
+ $storeOrdersFieldsData = new StoreOrdersFieldsData;
+ $storeOrdersFieldsData->order_id = $id;
+ $storeOrdersFieldsData->product_id = $product_id;
+ $storeOrdersFieldsData->store_id = $store_id;
+ $storeOrdersFieldsData->field_id = $fieldId;
+ $storeOrdersFieldsData->field_name = $name_eng;
+ $storeOrdersFieldsData->color = $color;
+ }
+ $storeOrdersFieldsData->$pole = $value;
+ $storeOrdersFieldsData->save();
+// $sql="INSERT IGNORE INTO store_orders_fields_data SET ";
+// $up2 =" $pole='$value'";
+// $up .= ",".$up2;
+// $sql .="$up ON DUPLICATE KEY UPDATE $up2";
+// $db::sql($sql);
+//echo'сохранили '.$name_eng.' store_id='.$store_id.' '.$name_eng.' color='.$color.' value='.$value.' ';
+
+ $storeOrdersFieldsDataLogi = new StoreOrdersFieldsDataLogi;
+ $storeOrdersFieldsDataLogi->product_id = $product_id;
+ $storeOrdersFieldsDataLogi->field_id = $fieldId;
+ $storeOrdersFieldsDataLogi->order_id = $id;
+ $storeOrdersFieldsDataLogi->store_id = $store_id;
+ $storeOrdersFieldsDataLogi->color = $color;
+ $storeOrdersFieldsDataLogi->value = $value;
+ $storeOrdersFieldsDataLogi->value_old = $value_old;
+ $storeOrdersFieldsDataLogi->date_add = date('Y-m-d H:i:s');
+ $storeOrdersFieldsDataLogi->admin_id = $_SESSION["admin_id"];
+ $storeOrdersFieldsDataLogi->save();
+
+// $db::sql("INSERT INTO store_orders_fields_data_logi
+//(product_id,field_id,order_id,store_id,color,value,value_old,date_add,admin_id)
+//VALUES(?,?,?,?,?, ?, ?, NOW(), ?)", [$product_id,$fieldId,$id,$store_id,$color,$value,$value_old,$_SESSION["admin_id"]]);
+
+ }
+
+
+ } else echo'Поля '.$name_eng.' нет в таблице ';
+
+ }
+
+}
\ No newline at end of file
--- /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");
+
+
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+ $orderId, // id- заказа
+ $store_id, // GUID магазина
+ $storesArray, // массив с магазинами
+ $group_id, // ID группы авторизованного сотрудника
+ $fieldsRows, // массив с данными по полями - ключ name_eng
+ $date_start_sale, // дата старта продаж от которой считаемстатистику
+ $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+ $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+ $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+ $FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
+ $status_order_id, // ID текущего статуса закупаки
+ $store_orders_statuses, // массим со статсами закупок
+ $statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
+ $status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
+ $store_orders_status_description, // - массив с описанием стутса
+ $dostup_fields,
+ $bg_fields,
+ $ProductsOptions;
+
+
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+
+
+
+
--- /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");
+
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+ $orderId, // id- заказа
+ $store_id, // GUID магазина
+ $storesArray, // массив с магазинами
+ $group_id, // ID группы авторизованного сотрудника
+ $fieldsRows, // массив с данными по полями - ключ name_eng
+ $date_start_sale, // дата старта продаж от которой считаемстатистику
+ $order_date_add,
+ $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+ $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+ $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+ $FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
+ $status_order_id, // ID текущего статуса закупаки
+ $store_orders_statuses, // массим со статсами закупок
+ $statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
+ $status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
+ $store_orders_status_description, // - массив с описанием стутса
+ $dostup_fields,
+ $bg_fields,
+ $ProductsOptions;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+$whereDeleteData="";
+// параметр указывает на то что осток после деления распределяем автоматически в ячейки для ручной добавки к делению
+$foreachSalesHand=false;
+if($_REQUEST["foreachSalesHand"]==1) { $foreachSalesHand=true; $whereDeleteData .=",'division_hand'"; }
+
+
+if($_REQUEST["deleteAll"]==1) {
+ $db::sql("DELETE FROM store_orders_fields_data WHERE order_id='$orderId'");
+
+ mess("Данные удалены");
+
+ exit();
+}
+
+
+
+
+//$db::sql("DELETE FROM store_orders_fields_data WHERE (field_name='division_ratio' or field_name='division_auto' or field_name='storehouse_balance') AND order_id='$orderId'");
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name in ('division_hand_summ','division_summ','storehouse_balance', 'purchase_fact_difference','division_auto_all','delta_zakup','division_summ_all','delta_rejection' $whereDeleteData) AND order_id='$orderId'");
+
+include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+/*
+
+if(empty($providers)) $providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$storesArrayAll=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1'");
+
+
+// создаем массив со свойствами подсветки ячеек store_orders_fields_property
+$data=$db::getRows("SELECT * FROM store_orders_fields_property WHERE 1 order by id ASC");
+foreach($data as $row) {
+ $fieldsPropertyArray[$row["field_id"]][]=$row;
+ }
+
+ // достаем поля в массив
+$data=$db::getRows("SELECT * FROM store_orders_fields WHERE 1 order by position ASC");
+foreach($data as $row) {
+ $fieldsRows[$row["name_eng"]]=$row;
+ $fieldsRows[$row["name_eng"]]["property"]=$fieldsPropertyArray[$row["id"]];
+ $fieldsArrayDepended[$row["id"]]=explode(",",$row["dependent_fields"]); //считаем поля и зависимые поля рекурсивно
+ if($row["colors_save"]==1) $fields_colors[$row["name_eng"]]=$row["id"];
+ }
+
+
+// данные по закупке - достаем параметры закупки - дата старта продаж - от нее считаем продажи списания и закупки прошлой недели
+$OrderData=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start,
+DATE_FORMAT(division_date, '%Y-%m-%d') as division_date, UNIX_TIMESTAMP(date_update) as date_update, parent_id FROM store_orders WHERE id=?",[$orderId]);
+$providersIdInThisOrder=explode(",",$OrderData["providers_arr"]);
+$status_order_id=$OrderData["status"];
+$date_start_sale=$OrderData["date_start"];
+$date_update=$OrderData["date_update"];
+$date_start_division=$OrderData["division_date"];
+
+
+$whereProvidersId="";
+$k=0;
+foreach($providersIdInThisOrder as $pid) { if($k!=0) $whereProvidersId .=","; $whereProvidersId .="'$pid'"; $k++; }
+
+
+$whereInProductsId=" in (";
+$z="SELECT p.id, p.name, o.provider_id, o.price_zakup FROM products_1c_options as o, products_1c as p WHERE o.provider_id in($whereProvidersId) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+$data2=$db::getRows($z);
+$k=0;
+ foreach($data2 as $row) {
+ if($k!=0) $whereInProductsId .=","; $whereInProductsId .="'".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ $prov[$row["id"]]=$row["provider_id"];
+ $ProductsOptions[$row["id"]]["price_zakup"]=$row["price_zakup"];
+
+ $k++;
+ }
+$whereInProductsId .=")";
+
+
+*/
+
+// вычисляем массив по цветам привязанным к товару
+$colorsProduct=[];
+$data4=$db::getRows("SELECT id,colors FROM products_1c_options WHERE provider_id>0 AND colors!='' AND id $whereInProductsId group by id order by id");
+foreach($data4 as $row) {
+ $colors=explode(";",$row["colors"]);
+ foreach($colors as $color) {
+ $color=trim($color);
+ $colorsProduct[$row["id"]][$color]=$color;
+ }
+}
+
+
+
+
+
+$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id
+FROM sales as s, sales_products as p
+WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id $whereInProductsId AND s.date>=? - INTERVAL 14 day group BY p.product_id, s.store_id_1c order by
+squantity DESC",[$date_start_division]);
+foreach($data as $row){
+ $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
+
+}
+
+
+
+// товар в пути date_start<='$date_start_sale 00:00:00' AND date_start>='$date_start_sale' -interval 7 day
+
+$data=$db::getRows("SELECT id,name,providers_arr FROM store_orders WHERE date_add>='$order_date_add' - interval 7 day AND date_add<='$order_date_add' ");
+
+
+$j=0;
+$orders_where="";
+foreach($data as $row) {
+
+ $store_orders[$row["id"]]=$row["name"];
+ $providersIdInThisOrder2=explode(",",$row["providers_arr"]);
+ $whereProvidersId2="";
+ $k=0;
+ foreach($providersIdInThisOrder2 as $pid) { if($k!=0) $whereProvidersId2 .=","; $whereProvidersId2 .="'$pid'"; $k++; }
+
+ if($j>0) $orders_where .=",";
+
+ $orders_where .="'".$row["id"]."' ";
+ $j++;
+
+
+
+
+// формируем массив с товарами и часть условия для запросов $whereInProductsId - вхождение ID продуктов
+ $whereInProductsId_is=" in (";
+ $z="SELECT p.id, p.name, o.provider_id, o.price_zakup, p.parent_id FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id in($whereProvidersId2) AND p.id=o.id order by o.provider_id ASC, p.name ASC";
+ $data2=$db::getRows($z);
+ $k=0;
+ foreach($data2 as $row3) { if($k!=0) $whereInProductsId_is .=","; $whereInProductsId_is .="'".$row3["id"]."'";$k++;}
+ $whereInProductsId_is .=")";
+
+
+ echo" ".$row["id"].") ".$row["name"]." убираем информацию по остальным товарам<br>";
+ if(!empty($whereInProductsId_is) and $k>0) $db::sql("DELETE FROM store_orders_fields_data WHERE product_id NOT $whereInProductsId_is AND order_id='".$row["id"]."'");
+}
+$data_up=[];
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='goods_in_transit' AND order_id='$orderId'");
+
+
+if(!empty($orders_where))
+{
+
+
+ $orders_where=" AND order_id in($orders_where) AND order_id!='$orderId'";
+ $data=$db::getRows("SELECT order_id,product_id,value,color FROM store_orders_fields_data WHERE field_name='quantity_zakup_fact' AND value>0
+ $orders_where group by order_id, product_id,value,color");
+ foreach($data as $row) {
+ if(empty($row["color"])) $color="NULL"; else $color=$row["color"];
+ $data_up[$row["product_id"]]["NULL"][$color] +=(int)$row["value"];
+
+ $titleArr[$row["product_id"]]["NULL"][$color] .="
+ id=".$row["order_id"]." ".$store_orders[$row["order_id"]]."=".(int)$row["value"]." шт.";
+
+
+ }
+ insert_store_orders_fields($data_up,"goods_in_transit",$titleArr);
+}
+
+
+
+
+$data_up2=[];
+foreach($products as $productId =>$nameProduct) {
+
+ echo"<br><b>$nameProduct</b>";
+
+ $data_up=[];
+ $massivTitle=[];
+ foreach($storesArrayAll as $storeId => $nameStore) {
+
+//echo"<br>$nameStore ";
+
+ $colorsProductsArray[$productId]["NULL"]="NULL";
+
+ foreach($colorsProductsArray[$productId] as $color) {
+
+ $arrs2=returnFormula("division_auto_need", $productId, $storeId, $color);
+// echo "$color=".$arrs2["value"]." "; // title=".$arrs2["title"]."
+
+ $FiledsData["division_auto_need"][$productId][$storeId][$color]=$arrs2["value"];
+ if($color=="NULL") {
+ $data_up[$productId][$storeId][$color]=$arrs2["value"];
+ $division_auto_need_all[$productId] +=$arrs2["value"];
+ $massivTitle[$productId][$storeId][$color] =$arrs2["title"];
+
+ }
+
+ }
+ }
+
+
+ insert_store_orders_fields($data_up,"division_auto_need",$massivTitle);
+
+
+
+ echo"<br>Итого division_auto_need_all=".$division_auto_need_all[$productId]."
+
+старый коэфф=".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]."
+
+куплено по факту=".$FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"]."";
+
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
+ $data_up2[$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
+}
+
+
+
+
+insert_store_orders_fields($data_up2,"division_auto_need_all");
+
+
+
+
+$rowFactName="quantity_warehouseman_fact"; // old quantity_warehouseman_fact quantity_zakup_fact
+$data_up=[];
+foreach($products as $productId => $nameProduct) {
+ $massivSQL=array();
+ $FiledsData["division_theory_all"][$productId]["NULL"]["NULL"]=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+//+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]
+
+ if($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]>=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]) {
+ $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=1;
+ }
+ else $FiledsData["division_ratio"][$productId]["NULL"]["NULL"]=round($FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]/$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"],3);
+ echo"<br>$nameProduct = division_ratio ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+ $data_up[$productId]["NULL"]["NULL"]=$FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+}
+
+insert_store_orders_fields($data_up,"division_ratio");
+
+
+
+
+$data_up=[]; $datau=[]; $data_hand=[];
+foreach($products as $productId =>$nameProduct) {
+ $division_auto_all2=[];
+ echo"<br><b>$nameProduct - division_auto $rowFactName=".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]."</b>";
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ echo"<br>$nameStore ";
+
+ $colorsProductsArray[$productId]["NULL"]="NULL";
+ foreach($colorsProductsArray[$productId] as $color) {
+ $division_auto=$FiledsData["division_auto_need"][$productId][$storeId][$color] * $FiledsData["division_ratio"][$productId]["NULL"]["NULL"];
+
+ if(empty($FiledsData["min_lot"][$productId])) $min_lot=1; else $min_lot=$FiledsData["min_lot"][$productId];
+ $division_auto_ceil=ceilCoefficient($division_auto,$min_lot);
+
+
+ $title=" ".$FiledsData["division_auto_need"][$productId][$storeId][$color]." * ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." = $division_auto ->$division_auto_ceil ";
+
+
+ echo $title;
+
+
+ if($color=="NULL" and $storeId!="NULL") $storehouse_balance1=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all2[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+
+
+
+ $storehouse_balance0=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+ if($division_auto_ceil<=$storehouse_balance0 and $storehouse_balance1<0) { $storehouse_balance1=1;
+ if($color=="NULL" and $storeId!="NULL") $division_auto_all2[$productId] +=$division_auto_ceil;
+ echo"!!!!вносим все равно $storehouse_balance0";
+
+ }
+
+
+ if($storehouse_balance1<0) {
+
+ $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+ echo" !баланс! $storehouse_balance ";
+
+ echo"<span class=\"btn btn-danger\">не вносим</span>";
+
+ }
+ else {
+ if($color=="NULL" and $storeId!="NULL") {
+ $division_auto_all[$productId] +=$division_auto_ceil;
+ $division_auto_all2[$productId] +=$division_auto_ceil;
+
+ }
+
+ $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+ echo" баланс $storehouse_balance ";
+ $value=$division_auto_ceil;
+ $field_name="division_auto";
+ $field_id=$fieldsRows[$field_name]["id"];
+
+ if($storehouse_balance>=0) {
+ if($color=="NULL") {
+ $color="";
+ try {
+ $db::sql("INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update,title)
+ VALUES (?,?,?,?,?,?,?,?,'-1',NOW(),?) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW(), title=?",
+ [$productId, $orderId, $storeId, $field_name, $field_id, $value, "", $color, $title, $value, "",$title]);
+ }
+ catch (Exception $e)
+ {
+ echo 'Ошибка вставки данных field_name='.$field_name.' '.print_r($param).' error='. $e->getMessage();
+ }
+
+
+ $hand=$FiledsData["division_hand"][$productId][$storeId][$color];
+ if(empty($hand)) $hand=0;
+
+ $data_up[$productId][$storeId][$color]=$value+$hand;
+ $datau[$productId][$storeId][$color]="$value+".$hand;
+ }
+ } else {
+
+ echo"--не вносим--";
+ }
+
+
+
+ }
+
+
+ echo "all=".$division_auto_all2[$productId]." ";
+
+
+ }
+
+
+
+
+
+ }
+
+
+ $product_counter++;
+ insert_store_orders_fields($data_up,"division_summ",$datau);
+
+
+
+ $min_lot=$FiledsData["min_lot"][$productId];
+ $division_hand_summ=$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"];
+ $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+
+ // $data_up3=[];
+ // $data_up3[$productId]["NULL"]["NULL"]=$storehouse_balance;
+ // insert_store_orders_fields($data_up3,"storehouse_balance");
+
+ $field_name="storehouse_balance";
+ $field_id=$fieldsRows[$field_name]["id"];
+ $storeId="";
+ $color="";
+ $value=$storehouse_balance;
+
+
+ try {
+ $s="INSERT IGNORE INTO store_orders_fields_data (product_id, order_id, store_id, field_name, field_id, value, value_text, color,hand,date_update)
+ VALUES (?,?,?,?,?,?,?,?,'-1',NOW()) ON DUPLICATE KEY UPDATE value=?, hand=0, value_text=?, date_update=NOW()";
+ $db::sql($s, [$productId, $orderId, $storeId, $field_name, $field_id, $value, $value_text, $color, $value, $value_text]);
+
+ }
+ catch (Exception $e)
+ {
+ echo 'Ошибка вставки данных error='. $e->getMessage();
+ }
+
+
+ echo"<br>Итого division_auto_all=".$division_auto_all[$productId]." division_hand_summ=$division_hand_summ storehouse_balance=<b>$storehouse_balance</b> min_lot=$min_lot ";
+ $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all[$productId];
+
+
+// добавляем деление ручное по магазину по циклу - по рейтингу магазина
+
+ if($foreachSalesHand==true and $min_lot <=$storehouse_balance and $storehouse_balance>0){
+
+ echo"<br><b>Запускаем цикл начисления согласно продажам</b>";
+
+ $j=1;
+ $new_balance=0;
+ $nb=0;
+ do {
+ foreach($productsArrayStores[$productId] as $storeId =>$quantity) {
+ $new_balance=$storehouse_balance-$min_lot;
+
+ if( $new_balance>=0) {
+ $nb = $FiledsData["division_hand"][$productId][$storeId]["NULL"] + $min_lot;
+ $storehouse_balance=$storehouse_balance-$min_lot;
+
+ echo"<br><font color=blue> ".$storesArrayAll[$storeId]." =>$quantity</font> $storehouse_balance-$min_lot new_balance=$new_balance
+
+ + hand=$min_lot
+ hand_old=".$FiledsData["division_hand"][$productId][$storeId]["NULL"]."
+ hand_new=".$nb." ";
+
+ $FiledsData["division_hand"][$productId][$storeId]["NULL"] += $min_lot;
+ $data_hand[$productId][$storeId]["NULL"] +=$min_lot;
+ }
+
+ if( $new_balance<=0) break;
+
+
+ }
+ $j++;
+ } while($new_balance>0);
+
+
+
+ foreach($data_hand[$productId] as $storeId => $arr) {
+ echo"<br>data_up=".$storesArrayAll[$storeId]."= ".$arr["NULL"]." ";
+ }
+
+ }
+
+
+
+ if($product_counter>1) { echo"<font color=red>Выход из цикла!!!!</font>"; break;}
+
+
+}
+
+
+
+
+if($foreachSalesHand==true) {
+ insert_store_orders_fields($data_hand,"division_hand");
+ insert_store_orders_fields($data_hand,"division_auto_hand");
+
+
+}
+
+
+
+
+
+
+
+// деление по магазину
+$datau=[];
+$FiledsData["division_auto_all"]=[];
+$FiledsData["auto_purchase_formula_all"]=[];
+foreach($products as $productId =>$nameProduct) {
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // деление ручное сумма по магазину
+ $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] += $FiledsData["auto_purchase_formula"][$productId][$storeId]["NULL"];
+ $FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"] += $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $FiledsData["division_auto_all"][$productId]["NULL"]["NULL"] += $FiledsData["division_auto"][$productId][$storeId]["NULL"];
+ $datau["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"]."+". $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $FiledsData["division_summ"][$productId][$storeId]["NULL"]=$FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $FiledsData["division_delta"][$productId][$storeId]["NULL"]=round(100*($FiledsData["division_hand"][$productId][$storeId]["NULL"]/($FiledsData["division_auto"][$productId][$storeId]["NULL"] + 0.0001)));
+ $FiledsData["division_summ"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
+ $FiledsData["division_summ_all"][$productId]["NULL"]["NULL"] +=$FiledsData["division_summ"][$productId][$storeId]["NULL"];
+ $FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] - $FiledsData["quantity_zakup_fact"][$productId]["NULL"]["NULL"];
+ $FiledsData["delta_zakup"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["purchase_fact_difference"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + 0.0001),0);
+ $FiledsData["delta_rejection"][$productId]["NULL"]["NULL"]=round(100*$FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"]/($FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"] + $FiledsData["quantity_warehouseman_defective"][$productId]["NULL"]["NULL"] + 0.0001 ),0);
+
+
+
+ }
+}
+
+
+foreach($products as $productId =>$nameProduct) {
+ $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"]-$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"] ;
+
+
+ $FiledsData["auto_purchase_formula_all"][$productId]["NULL"]["NULL"] = $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"];
+
+}
+
+
+
+
+
+insert_store_orders_fields($FiledsData["division_hand_summ"],"division_hand_summ");
+insert_store_orders_fields($FiledsData["division_auto_all"],"division_auto_all");
+insert_store_orders_fields($FiledsData["division_summ"],"division_summ",$datau["division_summ"], false);
+insert_store_orders_fields($FiledsData["division_summ_all"],"division_summ_all");
+insert_store_orders_fields($FiledsData["division_delta"],"division_delta");
+insert_store_orders_fields($FiledsData["purchase_fact_difference"],"purchase_fact_difference","", false);
+insert_store_orders_fields($FiledsData["delta_zakup"],"delta_zakup","", false);
+insert_store_orders_fields($FiledsData["delta_rejection"],"delta_rejection","", false);
+insert_store_orders_fields($FiledsData["auto_purchase_formula_all"],"auto_purchase_formula_all","", false);
+insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
+
+
+
+foreach($products as $productId =>$nameProduct) {
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ foreach($colorsProduct[$productId] as $color) {
+ // echo"<br> $color ";
+ $summ=$FiledsData["division_auto"][$productId][$storeId][$color] + $FiledsData["division_hand"][$productId][$storeId][$color];
+ if(!empty($summ)) $FiledsData["division_summ"][$productId][$storeId][$color]=$summ;
+ }
+
+ }
+}
+insert_store_orders_fields($FiledsData["division_summ"],"division_summ","", false);
+
+
+//////////// остаток склада вновь считаем
+/*
+$datau=[];
+$data_storehouse_balance=[];
+foreach($products as $productId =>$nameProduct) {
+ $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-($division_auto_all[$productId]+$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]);
+ $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ( ".$division_auto_all[$productId]."+".$FiledsData["division_hand_summ"][$productId]["NULL"]["NULL"]." ) ";
+ echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]." ";
+ $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
+ $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
+}
+insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
+*/
+////////////
+
+$FiledsData["storehouse_balance"]=[];
+$datau=[];
+$data_storehouse_balance=[];
+$FiledsData["division_summ_all"][$productId]["NULL"]["NULL"]=0;
+foreach($products as $productId =>$nameProduct) {
+ echo"<br><h4>$nameProduct</h4>";
+ $alld=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // деление ручное сумма по магазину
+ $alld+=($FiledsData["division_auto"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"]);
+
+ echo"<br> $nameStore divauto=".$FiledsData["division_auto"][$productId][$storeId]["NULL"]." ".$FiledsData["division_hand"][$productId][$storeId]["NULL"]." =$alld ";
+
+
+ }
+
+ $storehouse_balance=$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]-$alld;
+ echo" <br> $nameProduct fact ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - ".$alld." = ".$storehouse_balance." ";
+ $datau[$productId]["NULL"]["NULL"]="факт $rowFactName ".$FiledsData["$rowFactName"][$productId]["NULL"]["NULL"]." - $alld ";
+ echo"<br> storehouse_balance $nameProduct = $storehouse_balance ".$datau[$productId]["NULL"]["NULL"]." ";
+ $FiledsData["storehouse_balance"][$productId]["NULL"]["NULL"]=$storehouse_balance;
+ $data_storehouse_balance[$productId]["NULL"]["NULL"]=$storehouse_balance;
+
+}
+insert_store_orders_fields($data_storehouse_balance,"storehouse_balance",$datau, false);
+
+
+// автоформула
+foreach($products as $productId =>$nameProduct) {
+ $param["sale_7day"]=0; $param["quantity"]=0; $param["quantity_fact"]=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ $param["sale_7day"] +=$FiledsData["sales_cnt"][$productId][$storeId]["NULL"];
+ $param["quantity"] +=$FiledsData["quantity"][$productId][$storeId]["NULL"];
+ $param["quantity_fact"] +=$FiledsData["quantity_fact"][$productId][$storeId]["NULL"];
+ }
+
+ echo"<br>Считаем автозаказ Продажи 7 дней ".$param["sale_7day"]." или ( ".$FiledsData["sales_cnt"][$productId]["NULL"]["NULL"].")
+
+quantity=".$param["quantity"]." или (".$FiledsData["quantity"][$productId]["NULL"]["NULL"].")
+
+quantity_fact=".$param["quantity_fact"]." или (".$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"].") ";
+
+
+
+// считаем запас на 3 дня
+ $FiledsData["auto_purchase_formula"]=[];
+ $sale_2day=ceil(3*($param["sale_7day"]/7));
+ $goods_in_transit=(int)$FiledsData["goods_in_transit"][$productId]["NULL"]["NULL"];
+ $quantity_fact=$FiledsData["quantity_fact"][$productId]["NULL"]["NULL"];
+ $quantity=$FiledsData["quantity"][$productId]["NULL"]["NULL"];
+ $fact=$quantity_fact + $goods_in_transit;
+ $fact_sale=$param["sale_7day"];// если факт продаж будет больше чем факт - перприсваеиваем
+
+ if(($fact-$fact_sale)>0) {
+ $saleweek1=$fact-$fact_sale ;
+ $zakaz= $param["sale_7day"] + $sale_2day + $quantity - $saleweek1;
+
+ echo 'sale_7day + sale_2day + quantity - $saleweek1 ';
+ }
+ else {
+ $zakaz= $param["sale_7day"] + $sale_2day + $quantity ;
+
+ echo" если";
+ }
+// считаем по такой же формуле но за две недели средняя - и если расхождение более 30% подсвевиваем красным
+
+ if($zakaz<0) $zakaz=0;
+//округлить до минимального лота деления
+ $ceil=ceilCoefficient($zakaz,$FiledsData["min_lot"][$productId]);
+ echo"<br><b>++Авто-заказ = $ceil (товар в пути $goods_in_transit)</b>";
+ $FiledsData["auto_purchase_formula"][$productId]["NULL"]["NULL"]=$ceil;
+}
+
+insert_store_orders_fields($FiledsData["auto_purchase_formula"],"auto_purchase_formula","", false);
+
+
+
+
+$data2=$db::getRows("SELECT product_id, sum(quantity) as quantity FROM balances WHERE quantity>0 AND store_id!='' AND product_id $whereInProductsId GROUP BY product_id");
+foreach($data2 as $row2) {
+ $FiledsData["quantity_storage"][$row2["product_id"]]["NULL"]["NULL"]=$row2["quantity"];
+}
+
+insert_store_orders_fields($FiledsData["quantity_storage"],"quantity_storage","", false);
+
+
--- /dev/null
+<?php
+
+use yii\base\DynamicModel;
+use yii\widgets\ActiveForm;
+use kartik\select2\Select2;
+
+use yii_app\helpers\PrintBlockHelper;
+
+/* @var $storeAll array */
+/* @var $products array */
+/* @var $colorsCnt array */
+/* @var $quantity_warehouseman_fact array */
+/* @var $orderId string */
+/* @var $productsMinLot array */
+/* @var $dataFieldsValues array */
+/* @var $storeGroups array */
+/* @var $filterModel DynamicModel */
+/* @var $division_name string */
+/* @var $division_date string */
+/* @var $products_colors array */
+/* @var $dataColor array */
+/* @var $dataHand array */
+
+$this->registerJsFile('/js/shipment/division-print-edit.js', ['position' => \yii\web\View::POS_END]);
+
+$storeGroupOptions = [-1 => 'Не выбран'];
+foreach ($storeGroups as $gIndex) {
+ $storeGroupOptions[$gIndex] = $gIndex;
+}
+
+$printOrientationOptions = [
+ 'portrait' => 'Портретная',
+ 'landscape' => 'Альбомная',
+];
+
+?>
+
+<div class="m-5">
+ <h5 class="page-title mb-0 text-primary">Деление по магазинам <?= $division_name ?> Дата деления <?= $division_date ?> id=<?= $orderId ?></h5>
+ <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
+ <div class="row">
+ <div class="col-1 text-right">Печатать цвет:</div>
+ <div class="col-1"><?= $filterForm->field($filterModel, 'printColor')->checkbox(['value' => 1, 'uncheckValue' => 0,
+ 'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
+ <div class="col-2 text-right">Печатать ручных добавок:</div>
+ <div class="col-1"><?= $filterForm->field($filterModel, 'printHand')->checkbox(['value' => '1', 'uncheckValue' => '0',
+ 'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
+ <div class="col-2 text-right">Показать столбцы итого:</div>
+ <div class="col-1"><?= $filterForm->field($filterModel, 'printSumm')->checkbox(['value' => '1', 'uncheckValue' => '0',
+ 'onclick' => '$("#filter-form").get(0).submit();'], false)->label(false) ?></div>
+ </div>
+ <?php PrintBlockHelper::printBlock('Выберите куст', $filterForm->field($filterModel, 'groupIndex')->widget(Select2::class, [
+ 'data' => $storeGroupOptions,
+ 'language' => 'ru',
+ 'options' => ['placeholder' => 'Куст...'],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ],
+ 'pluginEvents' => [
+ 'change' => 'function(e) {
+ $("#filter-form").get(0).submit();
+ }'
+ ],
+ ])->label(false)); ?>
+ <?php PrintBlockHelper::printBlock('Ориентация', $filterForm->field($filterModel, 'printOrientation')->widget(Select2::class, [
+ 'data' => $printOrientationOptions,
+ 'language' => 'ru',
+ 'options' => ['placeholder' => 'Ориентация...'],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ],
+ 'pluginEvents' => [
+ 'change' => 'function(e) {
+ $("#filter-form").get(0).submit();
+ }'
+ ],
+ ])->label(false)); ?>
+ <?php ActiveForm::end() ?>
+ <div class="col-1">
+ <button id="shipmentPrintButton" class="btn btn-primary btn-lg" onclick="printTable();">Print</button>
+ </div>
+ <div class="table-responsive">
+ <table class="table-hover zak">
+ <thead>
+ <tr class="zg">
+ <th class="td_product">наименование</th>
+ <th><b>мин-ый лот деления шт.</b></th>
+ <?php foreach($storeAll as $store): ?>
+ <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+ <th><b><?= $store->name ?></b></th>
+ <?php if ($filterModel->groupIndex != -1): ?>
+ <th style="min-width: 40px"></th>
+ <?php endif; ?>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <th><b>итого</b></th>
+ <th><b>куплено</b></th>
+ <th><b>разница</b></th>
+ </tr>
+ </thead>
+ <tbody>
+ <?php
+ $colorsCounter = [];
+ $ostatok = [];
+ ?>
+ <?php foreach($products as $productId => $productName): ?>
+ <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
+ <tr id="tr__<?= $productId ?>" class="trproduct">
+ <td class="td_product producted">
+ <span class="fs-6">
+ <a href="/shipment/divisionPrintEditProduct/?productId=<?= $productId ?>&id=<?= $orderId ?>"
+ target=new><?= $productName ?></a>
+ </span>
+ </td>
+ <td><?= $productsMinLot[$productId] ?></td>
+ <?php $divisionCnt = 0; ?>
+ <?php foreach($storeAll as $store): ?>
+ <?php
+ $value = ceil($dataFieldsValues[$productId][$store->id]["NULL"] ?? 0);
+ $ostatok[$productId][$store->id] = $value;
+ $divisionCnt += $value;
+ if (empty($value)) {
+ $value = "";
+ }
+ ?>
+ <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+ <td>
+ <?= $value ?>
+ <?php if (!empty($dataHand[$productId][$store->id]['NULL']) && $filterModel->printHand == 1): ?>
+ <sup style="color:green; font-size:0.5rem"><?= intval($dataHand[$productId][$store->id]["NULL"]) ?></sup>
+ <?php endif; ?>
+ </td>
+ <?php if ($filterModel->groupIndex != -1): ?>
+ <td style="min-width: 40px"></td>
+ <?php endif; ?>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <td><?= intval($divisionCnt) ?></td>
+ <td><?= intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]) ?></td>
+ <?php $r2 = $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] - $divisionCnt; ?>
+ <td <?= ($r2 != 0 ? 'class="bg-danger"' : '') ?> ><?= $r2 ?></td>
+ </tr>
+ <?php endif; ?>
+ <?php if ($filterModel->printColor == 1): ?>
+ <?php if (!empty($products_colors[$productId])): ?>
+ <?php foreach($products_colors[$productId] as $colorName): ?>
+ <?php
+ $colorName = trim($colorName);
+ $colorAllCnt = 0;
+ ?>
+ <?php if (!empty($dataColor[$productId][$colorName])): ?>
+ <tr>
+ <td class="tr"><?= $colorName ?>(<?= $dataColor[$productId][$colorName] ?> шт.)</td>
+ <td></td>
+ <?php
+ $colorsCounter[$productId]++;
+ $newHand = [];
+ ?>
+ <?php foreach($storeAll as $store): ?>
+ <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+ <?php
+ $value = ceil($dataFieldsValues[$productId][$store->id][$colorName] ?? 0);
+ $ostatok[$productId][$store->id] -= $value;
+ $colorAllCnt += $value;
+ ?>
+ <td <?= $value % ($productsMinLot[$productId] ?? 1) != 0 ? 'class="bg-danger"' : '' ?>
+ onclick="ShowInput('division_hand',
+ '<?= $store->id ?>',
+ '<?= $productId ?>',
+ '<?= $colorName ?>',
+ '<?= md5($colorName) ?>',
+ '<?= $productsMinLot[$productId] ?>',
+ '<?= $value ?>')"
+ id="division_hand<?= $store->id ?><?= $productId ?><?= md5($colorName) ?>" >
+ <?= $value ?>
+ </td>
+ <?php if ($filterModel->groupIndex != -1): ?>
+ <td style="min-width: 40px"></td>
+ <?php endif; ?>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <?php if ($filterModel->printSumm == 1): ?>
+ <?php $difColor = $dataColor[$productId][$colorName] - $colorAllCnt; ?>
+ <td><?= $colorAllCnt ?></td>
+ <td><?= $dataColor[$productId][$colorName] ?></td>
+ <td <?= $difColor != 0 ? 'class="bg-danger"' : '' ?>><?= $difColor ?></td>
+ <?php endif; ?>
+ </tr>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <?php endif; ?>
+ <?php if (!empty($colorsCounter[$productId])): ?>
+ <tr class="bg-success">
+ <td class="tr">остаток</td>
+ <td></td>
+ <?php foreach($storeAll as $store): ?>
+ <?php if ($filterModel->groupIndex == -1 || $store->parent_id == $filterModel->groupIndex): ?>
+ <?php $value = $ostatok[$productId][$store->id]; ?>
+ <td <?= $value < 0 ? 'class="bg-danger"' : '' ?> ><?= $value ?></td>
+ <?php if ($filterModel->groupIndex != -1): ?>
+ <td style="min-width: 40px"></td>
+ <?php endif; ?>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ <?php if ($filterModel->printSumm == 1): ?>
+ <td></td>
+ <td></td>
+ <td class="bg-danger"></td>
+ <?php endif; ?>
+ </tr>
+ <?php endif; ?>
+ <?php endif; ?>
+ <?php if (!empty($colorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"] > 0): ?>
+ <?php if ($filterModel->groupIndex == -1): ?>
+ <tr class="trproduct">
+ <td class="td_product"><span class="fs-6"> </span></td>
+ <td class="td_product"><span class="fs-6"> </span></td>
+ <?php foreach($storeAll as $store): ?>
+ <td class="td_product"><span class="fs-6"> </span></td>
+ <?php endforeach; ?>
+ <td class="td_product"><span class="fs-6"> </span></td>
+ <td class="td_product"><span class="fs-6"> </span></td>
+ <td class="td_product"><span class="fs-6"> </span></td>
+ </tr>
+ <?php endif; ?>
+ <?php endif; ?>
+ <?php endforeach; ?>
+ </tbody>
+ </table>
+ </div>
+</div>
+
+<script>
+ function printTable() {
+ const landscape = '<?= $filterModel->printOrientation ?>' === 'landscape';
+ const css = '@page { ' + (landscape ? 'size: landscape;' : '') + ' margin: 0; } #shipmentPrintButton, #filter-form {display: none;}' +
+ 'a[href]:after { content: "" !important;}',
+ head = document.head || document.getElementsByTagName('head')[0],
+ style = document.createElement('style');
+
+ style.media = 'print';
+ style.appendChild(document.createTextNode(css));
+
+ head.appendChild(style);
+
+ window.print();
+
+ head.removeChild(style)
+ }
+</script>
+
+<style>
+ table tbody tr td {
+ border: 3px solid black !important;
+ }
+
+ table.table tbody tr:hover td {
+ background: #cdcdcd
+ }
+
+ .zak tbody tr:hover td {
+ background: #cdcdcd
+ }
+
+ .zak > thead > tr > th, .zak tr.zg th, .zak tr.zg td {
+ font-size: 0.7rem;
+ min-width: 30px;
+ text-align: center;
+ font-weight: normal;
+ max-height: 60px;
+ overflow: hidden
+ }
+
+ .zak > thead > tr > th b {
+ font-weight: normal;
+ }
+
+ .zak > :not(caption) > * > * {
+ padding: 0.05rem;
+ box-shadow: none;
+ }
+
+ .zak td.fs-5 {
+ text-align: left;
+ padding: 0.3rem 1rem;
+ }
+
+ .zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+ }
+
+ .zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+ }
+
+ .zak td:hover:before {
+ background-color: #e3e3e3;
+ content: '';
+ height: 100%;
+ left: -5000px;
+ position: absolute;
+ top: 0;
+ width: 10000px;
+ z-index: -2;
+ }
+
+ .zak td:hover:after {
+ background-color: #cdcdcd;
+ content: '';
+ height: 10000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+ }
+
+ .zak tbody td input.form-control {
+ font-size: 0.8rem;
+ min-width: 70px;
+ max-width: 100px;
+ font-weight: bold;
+ border: 0;
+ border-radius: 0;
+ color: #333;
+ padding: 0.2rem;
+ margin: 0;
+ }
+
+ .zak tbody td input.form-control:focus {
+ border: 2px #cd0202 solid;
+ background: #ffccdb
+ }
+
+ .zak td.bg-danger, .zak td.bg-indigo, .zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo {
+ color: #fff;
+ }
+
+ table.zak thead th:not(:first-child), table.zak tr.zg th th:not(:first-child) {
+ vertical-align: bottom;
+ line-height: normal;
+ }
+
+ table.zak thead b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ }
+
+ table.zak tr.zg th b, table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight: normal;
+ font-size: 0.6rem;
+ }
+
+ .zak tr th .th_p_summ {
+ text-align: center;
+ font-weight: bold;
+ }
+
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+ }
+
+ .zak tbody tr td.td_product, .zak td.td_product {
+ tex-align: left;
+ }
+
+ .zak td.td_product:hover {
+ background: #fff;
+ }
+</style>
+<style>
+ .zak tbody tr:hover:not(.no-hover) td {
+ background: #cdcdcd
+ }
+
+ .zak > thead > tr > th, .zak tr.zg th {
+ font-size: 0.7rem;
+ min-width: 30px;
+ max-width: 40px;
+ text-align: center;
+ font-weight: normal;
+ overflow: hidden
+ }
+
+ .zak > thead > tr > th b, .zak > thead > tr > td b {
+ font-weight: normal;
+ }
+
+ .zak > :not(caption) > * > * {
+ padding: 0.05rem;
+ box-shadow: none;
+ }
+
+ .zak td.fs-5 {
+ text-align: left;
+ padding: 0.3rem 1rem;
+ }
+
+ .zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+ }
+
+ .zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+ }
+
+ table.zak thead th, table.zak tr.zg th th, table.zak tr.zg td td {
+ vertical-align: bottom;
+ line-height: normal;
+ }
+
+ table.zak thead b, table.zak tbody b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ }
+
+ table.zak tr.zg th b, table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight: normal;
+ font-size: 0.6rem;
+ }
+
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+ }
+
+ .zak tbody tr td.td_product, .zak td.td_product {
+ text-align: right;
+ }
+
+ .zak td.td_product:hover {
+ background: #fff;
+ }
+
+ .zak tr td.pr, .zak tr td.ost {
+ text-align: center;
+ }
+
+ .zak tr td.pr {
+ background: #ddd
+ }
+
+ .zak tr td.ost {
+ background: #e6e6e6
+ }
+
+ .zak td {
+ text-align: center;
+ vertical-align: bottom;
+ }
+
+ .zak td.lf {
+ text-align: left;
+ background: #fff
+ }
+
+ .zak td.tr {
+ text-align: right;
+ }
+
+ .zak td, .zak thead th {
+ color: #000;
+ }
+
+ .zak tr.trproduct td {
+ font-size: 1rem;
+ font-weight: bold;
+ }
+
+ input.greener {
+ border: 2px green solid;
+ }
+
+ input.editColor {
+ width: auto;
+ max-width: 70px;
+ }
+</style>
--- /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_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+global $products;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$act='division-print-edit2';
+$modul='shipment';
+$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
+
+$OrderId=$id;
+
+
+$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
+$in=explode(",",$row["providers_arr"]);
+$status_order_id=$row["status"];
+$division_date=$row["division_date"];
+
+$k=0;
+$printColor=1;
+if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
+
+
+$printHand=0;
+if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
+
+
+$printSumm=0;
+if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
+
+
+$printPercentMatrix=0;
+if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
+
+
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+ $kustArray[$row2["parent_id"]][]=$row2["id"];
+ $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+
+
+
+
+
+//sort($kustArray);
+
+$sortStoreId="";
+$i=0;
+foreach($kustArray as $kustId =>$massiv) {
+ foreach($massiv as $storeGuid) {
+ if($i>0) $sortStoreId .=",";
+ $sortStoreId .=$storeGuid;
+ $sortStore[]=$storeGuid;
+ $i++;
+ }
+ echo'</p>';
+}
+
+
+
+
+
+echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
+echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info btn-sm me-1">без цветов</a>
+
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info btn-sm me-1 ">показать ручные добавки</a>
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info btn-sm me-1 ">показать столбцы итого</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info btn-sm me-1 ">показать % от матрицы в цвете</a>
+
+
+
+
+<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
+
+
+
+$data=$db::getRows("SELECT * FROM store_planogram WHERE 1");
+foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["min"]=$row["quantity"];
+ $store_planogram[$row["product_id"]][$row["store_id"]][$row["color"]]["max"]=$row["quantity_max"];
+}
+
+
+
+
+$colorSort=[];
+$data=$db::getRows("SELECT product_id, store_id, color,posit FROM store_planogram_colors_sort WHERE 1 order by product_id ASC, posit ASC");
+foreach($data as $row) $colorSort[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["posit"];
+
+
+
+$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
+foreach($da as $r) {
+ $providers[$r["id"]]=$r["name"];
+ $providers_valuta[$r["id"]]=$r["valuta"];
+}
+
+
+
+$k=0;$w="";
+$privedrs_htm="";
+foreach($in as $pid) {
+//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
+ if($k!=0) $w .=","; $w .="'$pid'"; $k++; }
+
+$w2="";
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+//if($k!=0) $w2 .=" OR ";
+//$w2 .="i.id_1c='".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ $productsMinLot[$row["id"]]=$row["min_lot"];
+ $prov[$row["id"]]=$row["provider_id"];
+ $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
+ if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
+ $k++;
+}
+
+$division=array(); //division_summ =50
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
+$ColorsCnt = [];
+$dataFiedlsValuesColorsCnt = [];
+foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ if($row["store_id"]!="NULL") {
+ $ColorsCnt[$row["product_id"]] +=$row["value"];
+ $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+$division=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
+foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ if($row["store_id"]!="NULL") {
+ $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+
+
+
+$quantity_warehouseman_fact=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
+foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+
+ if($row["store_id"]=="NULL") {
+ $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
+ }
+}
+
+
+$colorPercent=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value,field_name FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and color!='' and field_name in('color_percent','division_hand')",[$OrderId]);
+foreach($data as $row) {
+ if($row["store_id"]!="NULL") {
+ if($row["field_name"]=="color_percent") $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
+ if($row["field_name"]=="division_hand") $divisionHand[$row["product_id"]][$row["store_id"]][$row["color"]]=round($row["value"]);
+
+
+ }
+}
+
+
+
+echo'<div id="edit_div"></div><div class="table-responsive">
+<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
+
+$head="";
+foreach($sortStore as $storeId) {
+ echo'<th style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
+ $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
+}
+if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+
+echo'</tr></thead><tbody>';
+
+
+$i=0;
+foreach($products as $productId =>$nameProduct) {
+//echo $nameProduct;
+ if(!empty($ColorsCnt[$productId]) and $quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
+
+ if($i==20) { echo'<tr class="zg"><td class="td_product">наименование</td>
+<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
+
+
+ if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+ echo'</tr>'; $i=0; }
+
+
+ echo'<tr id="tr__'.$productId.'" class="trproduct"';
+ echo'><td class="td_product producted"><span class="fs-6"><a href="/shipment/divisionPrintEditProduct/?productId='.$productId.'&id='.$OrderId.'" target=new>'.$nameProduct.'</a></span> ';
+ if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
+ onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
+ echo' </td><td>'.$productsMinLot[$productId].'</td>';
+
+ $divisionCnt=0;
+ foreach($sortStore as $storeId) {
+ $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+ $divisionCnt=$divisionCnt + $value;
+ if(empty($value)) $value="";
+ echo'<td class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
+
+ if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1) echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
+ echo'</td>';
+ }
+
+ if($printSumm==1) {
+ echo'<td>'.intval($divisionCnt).'</td>';
+
+ echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
+ $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
+
+ echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
+ }
+ $colspan=count($sortStore)+1;
+ echo'</tr>';
+
+//$ostatok[$productId]=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"];
+
+ if($printColor==1) {
+//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
+ $kk=0;
+// цвета
+ foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
+ $colorName=trim($colorName);
+ $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
+ if(1)//if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
+ {
+
+
+
+ /*
+ echo'<tr '; if($printColor!=1) echo'style="display:none;"';
+ echo' class="tr__'.md5($productId).' ';
+
+ // если не завезли такой цвет
+ if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
+
+
+ if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
+ echo'>
+ <td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.) в %';
+
+
+ echo'</td><td></td>';
+ $colorCounter=0;
+ foreach($sortStore as $storeId) {
+ $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
+
+ $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
+
+ // if(!empty($value)) $value .="%";
+
+ if(empty($value)) $value="";
+
+
+ $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+ $newcolorcnt=$value_real*($value/100);
+
+ // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
+
+ $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
+ $colorData[$productId][$storeId][$colorName2]=$colorcnt;
+
+ $colorCounter +=$colorcnt;
+
+ echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="'.$value_real.' -> '.$value.'%">'.$colorcnt.'';
+
+ if(!empty($value) and $printPercentMatrix==1) echo'<br>
+ <small style="color:green">'.$value.'%</small>';
+
+ echo'
+ </td>';
+ }
+
+
+ if($printSumm) {
+
+ $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
+ $znak="";
+ if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
+
+ $difference[$productId][$colorName]=$colorDifference;
+
+
+ echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
+ <td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
+
+ }
+
+
+ echo'</tr>';
+
+ */
+
+
+////////////// class="bg-secondary"
+
+
+ $colorAllcnt=0;
+ if(!empty($dataColor[$productId][$colorName])) {
+ echo'<tr><td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.)</td><td></td>';
+ $ColorsCounter[$productId]++;
+ $foreachBegin=$difference[$productId][$colorName];
+ $minLot=$productsMinLot[$productId];
+ $newHand=[];
+ foreach($sortStore as $storeId) {
+ //$colorData[$productId][$storeId][$colorName2]
+ if($colorData[$productId][$storeId][$colorName]>0 and $colorData[$productId][$storeId][$colorName]>=$minLot) {
+ if($foreachBegin>0) {
+ $foreachBegin -=$minLot;
+ $newHand[$storeId] +=-$minLot;
+
+
+
+ } else break;
+ }
+
+
+ }
+
+
+
+ foreach($sortStore as $storeId) {
+ $newColorInt=$colorData[$productId][$storeId][$colorName]-abs($newHand[$storeId]);
+
+ if(isset($divisionHand[$productId][$storeId][$colorName])) $newColorInt=$divisionHand[$productId][$storeId][$colorName];
+
+ $ostatok[$productId][$storeId] +=$newColorInt; //'.$newHand[$storeId].'= $(\'#input_division_hand'.$storeId.''.$productId.''.md5($colorName).'\').toggle();
+ echo'<td><span onclick="ShowInput(\'division_hand\',\''.$storeId.'\',\''.$productId.'\',\''.$colorName.'\',\''.md5($colorName).'\',\''.$productsMinLot[$productId].'\',\''.$newColorInt.'\')"
+ id="division_hand'.$storeId.''.$productId.''.md5($colorName).'">'.$newColorInt.'</span>
+
+ </td>';
+
+ $colorAllcnt +=$newColorInt;
+
+ // <input style="display:none;" type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'division_hand\',\''.$productId.'\',\''.$storeId.'\',\''.$colorName.'\',\''.md5($colorName).'\');" class="" id="input_division_hand'.$storeId.''.$productId.''.md5($colorName).'">
+// <sup>'.$store_planogram[$productId][$storeId][$colorName]["min"].'-'.$store_planogram[$productId][$storeId][$colorName]["max"].'</sup>
+ }
+
+
+ if($printSumm) {
+
+//$colorDifference=$colorCounter-$dataColor[$productId][$colorName];
+ $znak="";
+
+
+ $difcolor=$dataColor[$productId][$colorName]-$colorAllcnt;
+
+//if($colorCounter>$dataColor[$productId][$colorName]) $znak="+"; '.$colorCounter.' '.$dataColor[$productId][$colorName].'
+ echo'<td>'.$colorAllcnt.'</td><td>'.$dataColor[$productId][$colorName].'</td>
+<td '; if($difcolor!=0) echo' class="bg-danger"'; echo'>'.$difcolor.'</td>';
+
+ }
+
+ echo'</tr>';
+ }
+/////////////////
+
+ }
+
+
+ }// end color
+
+
+//////////////
+
+
+ if(!empty($ColorsCounter[$productId])) {
+ echo'<tr class="bg-success"><td class="tr">остаток</td><td></td>';
+ foreach($sortStore as $storeId) {
+
+
+ $ost=$dataFiedlsValues[$productId][$storeId]["NULL"] - $ostatok[$productId][$storeId];
+ //'.$ostatok[$productId][$storeId].'
+ echo'<td class="';
+ if($ost==0) echo'bg-success';
+ elseif($ost>0) echo'bg-indigo';
+ elseif($ost<0) echo'bg-danger';
+ echo'">'.$ost.'</td>';
+ }
+
+
+ if($printSumm) {
+
+ echo'<td></td><td></td>
+<td '; if($colorDifferenc1) echo' class="bg-danger"'; echo'></td>';
+
+ }
+
+ echo'</tr>';
+ }
+/////////////////
+
+
+
+
+
+ } // end if color
+
+
+
+ }
+
+
+
+}
+
+
+echo'</tbody></table></div>';
+//var onch=\'onchange="ajaxEditColor( \'\'+name_eng+\'\' , \'\'+store_id+\'\', \'\'+product_id+\'\', \'\'+color+\'\', \'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');"\';
+
+
+// $(\'#\'+name_id).after(\'<input type=number value="'.$newColorInt.'" onchange="ajaxEditColor(\'\'+name_eng+\'\',\'\'+product_id+\'\',\'\'+store_id+\'\',\'\'+color+\'\',\'\'+colormd5+\'\');" class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'">\');
+// class="" id="input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'"
+$_CONFIG["jscss"] .='
+
+
+
+<script>
+
+function editz(name_eng)
+{
+
+alert(\' \'+name_eng+\'\');
+}
+
+
+function ajaxEditColor(name_eng,store_id,product_id,color,colormd5)
+{
+
+var v =$(\'#input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\').val();
+var name_id=\'input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+
+
+
+$.ajax({
+ url: \'/shipment/ajaxEditFieldValue/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$OrderId.',
+ name_eng: name_eng,
+ store_id: store_id,
+ product_id: product_id,
+ color: color,
+ value: v},
+ success: function(data){
+ $(\'#\'+name_id+\'\').after(\'<span class="okk">\'+data+\'</span>\');
+ $(\'#\'+name_id+\'\').addClass(\'greener\');
+ }
+
+});
+
+setTimeout(function(){$(\'.okk\').remove();$(\'#\'+name_id+\'\').removeClass(\'greener\');}, 3000);
+
+}
+
+
+function ShowInput(name_eng,store_id,product_id,color,colormd5,step,value) {
+var name_id=\'\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\'\';
+
+
+if($(\'#\'+name_id+\'\').html()==value) {
+$(\'#\'+name_id+\'\').html(\'<input type=number class="editColor" onchange=ajaxEditColor("\'+name_eng+\'","\'+store_id+\'","\'+product_id+\'","\'+color+\'","\'+colormd5+\'") id=input_\'+name_eng+\'\'+store_id+\'\'+product_id+\'\'+colormd5+\' name=colorHand[\'+store_id+\'][\'+product_id+\'][\'+color+\'] value="\'+value+\'" step="\'+step+\'">\');
+}
+
+}
+
+</script>
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+.zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
+.zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
+.app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+.zak td.td_product:hover {background:#fff;}
+.zak tr td.pr,.zak tr td.ost{text-align:center;}
+.zak tr td.pr{background:#ddd}
+.zak tr td.ost{background:#e6e6e6}
+.zak td{text-align:center; vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+
+
+input.greener{border:2px green solid;}
+input.editColor{width:auto;max-width:70px;}
+</style>';
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
+
--- /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_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+global $products;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$act='division-print';
+$modul='shipment';
+$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
+
+$OrderId=$id;
+
+
+$row=$db::getRow("SELECT name,id,providers_arr, status, division_date, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
+$in=explode(",",$row["providers_arr"]);
+$status_order_id=$row["status"];
+$division_date=$row["division_date"];
+
+$k=0;
+$printColor=1;
+if(isset($_REQUEST["printColor"])) $printColor=(int)$_REQUEST["printColor"];
+
+
+$printHand=0;
+if(isset($_REQUEST["printHand"])) $printHand=(int)$_REQUEST["printHand"];
+
+
+$printSumm=0;
+if(isset($_REQUEST["printSumm"])) $printSumm=(int)$_REQUEST["printSumm"];
+
+
+$printPercentMatrix=0;
+if(isset($_REQUEST["printPercentMatrix"])) $printPercentMatrix=(int)$_REQUEST["printPercentMatrix"];
+
+
+$kustArray=array();
+$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+ $kustArray[$row2["parent_id"]][]=$row2["id"];
+ $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+
+//sort($kustArray);
+
+$sortStoreId="";
+$i=0;
+foreach($kustArray as $kustId =>$massiv) {
+ foreach($massiv as $storeGuid) {
+ if($i>0) $sortStoreId .=",";
+ $sortStoreId .=$storeGuid;
+ $sortStore[]=$storeGuid;
+ $i++;
+ }
+ echo'</p>';
+}
+
+
+
+
+
+echo'<h5 class="page-title mb-0 text-primary">Деление по магазинам '.$row["name"].' Дата деления '.$division_date.' id='.$row["id"].'</h5>';
+echo'<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=1" class="btn btn-info btn-sm me-1 ">печать вместе с цветами</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printColor=0" class="btn btn-info btn-sm me-1">без цветов</a>
+
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printHand=1" class="btn btn-info btn-sm me-1 ">показать ручные добавки</a>
+
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printSumm=1" class="btn btn-info btn-sm me-1 ">показать столбцы итого</a>
+<a href="/'.$modul.'/'.$act.'/?id='.$OrderId.'&printPercentMatrix=1" class="btn btn-info btn-sm me-1 ">показать % от матрицы в цвете</a>
+
+
+
+
+<p>Кладовщик печатает деление по магазинам на статусе наборка товара.</p>';
+
+
+
+$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
+foreach($da as $r) {
+ $providers[$r["id"]]=$r["name"];
+ $providers_valuta[$r["id"]]=$r["valuta"];
+}
+
+
+
+$k=0;$w="";
+$privedrs_htm="";
+foreach($in as $pid) {
+//$privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
+ if($k!=0) $w .=","; $w .="'$pid'"; $k++; }
+
+$w2="";
+
+$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id in($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+//if($k!=0) $w2 .=" OR ";
+//$w2 .="i.id_1c='".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ $productsMinLot[$row["id"]]=$row["min_lot"];
+ $prov[$row["id"]]=$row["provider_id"];
+ $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
+ if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
+ $k++;
+}
+
+$division=array(); //division_summ =50
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_summ'",[$OrderId]);
+foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ $dataFiedlsValues[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ if($row["store_id"]!="NULL") {
+ $ColorsCnt[$row["product_id"]] +=$row["value"];
+ $dataFiedlsValuesColorsCnt[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+$division=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and field_name='division_hand'",[$OrderId]);
+foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ $dataHand[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ if($row["store_id"]!="NULL") {
+ $dataHand[$row["product_id"]][$row["color"]] +=$row["value"]; }
+}
+
+
+
+
+
+$quantity_warehouseman_fact=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id='' and field_name='quantity_warehouseman_fact'",[$OrderId]);
+foreach($data as $row) {
+ if(empty($row["color"])) $row["color"]="NULL";
+ if(empty($row["store_id"])) $row["store_id"]="NULL";
+ $quantity_warehouseman_fact[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+
+ if($row["store_id"]=="NULL") {
+ $dataColor[$row["product_id"]][$row["color"]] +=$row["value"];
+ }
+}
+
+
+$colorPercent=array();
+$data=$db::getRows("SELECT product_id,store_id,color,value FROM store_orders_fields_data
+WHERE order_id=? AND store_id!='' and color!='' and field_name='color_percent'",[$OrderId]);
+foreach($data as $row) {
+ if($row["store_id"]!="NULL") {
+ $colorPercent[$row["product_id"]][$row["store_id"]][$row["color"]]=$row["value"];
+ }
+}
+
+
+
+echo'<div class="table-responsive">
+<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th><b>мин-ый лот деления шт.</b></th>';
+
+$head="";
+foreach($sortStore as $storeId) {
+ echo'<th style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></th>';
+ $head .='<td style="background:'.$kustBackground[$kustArrayReverse[$storeId]].'"><b>'.$storesAll[$storeId].'</b></td>';
+}
+if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+
+echo'</tr></thead><tbody>';
+
+
+$i=0;
+foreach($products as $productId =>$nameProduct) {
+//echo $nameProduct; !empty($ColorsCnt[$productId]) and
+ if($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]>0) {
+
+ if($i==20) { echo'<tr class="zg"><td class="td_product">наименование</td>
+<th><b>мин-ый лот деления шт.</b></th>'.$head.'';
+
+
+ if($printSumm==1) echo'<th><b>итого</b></th><th><b>куплено</b></th><th><b>разница</b></th>';
+
+ echo'</tr>'; $i=0; }
+
+
+ echo'<tr id="tr__'.$productId.'" class="trproduct"';
+ echo'><td class="td_product producted"><span class="fs-6">'.$nameProduct.'</span> ';
+ if(!empty($products_colors[$productId]) and $ColorsCnt[$productId]>0 and empty($printColor)) echo' <span class="btn btn-warning btn-sm"
+ onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>';
+ echo' </td><td>'.$productsMinLot[$productId].'</td>';
+
+ $divisionCnt=0;
+ foreach($sortStore as $storeId) {
+ $value=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+ $divisionCnt=$divisionCnt + $value;
+ if(empty($value)) $value="";
+ echo'<td class="kust'.$kustArrayReverse[$storeId].'">'.$value.'';
+
+ if(!empty($dataHand[$productId][$storeId]["NULL"]) and $printHand==1) echo'<sup style="color:green; font-size:0.5rem">'.intval($dataHand[$productId][$storeId]["NULL"]).'</sup>';
+ echo'</td>';
+ }
+
+ if($printSumm==1) {
+ echo'<td>'.intval($divisionCnt).'</td>';
+
+ echo'<td>'.intval($quantity_warehouseman_fact[$productId]["NULL"]["NULL"]).'</td>';
+ $r2=$quantity_warehouseman_fact[$productId]["NULL"]["NULL"]-$divisionCnt;
+
+ echo'<td '; if($r2!=0) echo' class="bg-danger"'; echo'>'.$r2.'</td>';
+ }
+ $colspan=count($sortStore)+1;
+ echo'</tr>';
+
+
+
+ if($printColor==1) {
+//<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>
+ $kk=0;
+// цвета
+ foreach($products_colors[$productId] ?? [] as $colorId => $colorName) {
+ $colorName=trim($colorName);
+ $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
+ if($dataFiedlsValuesColorsCnt[$productId][$colorName2]>0)
+ {
+
+
+
+
+ echo'<tr '; if($printColor!=1) echo'style="display:none;"';
+ echo' class="tr__'.md5($productId).' ';
+
+// если не завезли такой цвет
+ if(empty($dataColor[$productId][$colorName])) { echo' bg-danger'; }echo'" ';
+
+
+ if(empty($dataColor[$productId][$colorName])) { echo' style="opacity:0.4"'; }
+ echo'>
+<td class="tr">'.$colorName.' ('.$dataColor[$productId][$colorName].' шт.) в %';
+
+
+ echo'</td><td></td>';
+ $colorCounter=0;
+ foreach($sortStore as $storeId) {
+ $value=ceil($dataFiedlsValues[$productId][$storeId][$colorName2]);
+
+ $value=round(100*$colorPercent[$productId][$storeId][$colorName2]);
+
+ // if(!empty($value)) $value .="%";
+
+ if(empty($value)) $value="";
+
+
+ $value_real=ceil($dataFiedlsValues[$productId][$storeId]["NULL"]);
+ $newcolorcnt=$value_real*($value/100);
+
+ // $newcolorcnt=$dataColor[$productId][$colorName]*($value/100);
+
+ $colorcnt=ceilCoefficient($newcolorcnt,$productsMinLot[$productId]);
+
+ $colorCounter +=$colorcnt;
+
+ echo'<td class="kust'.$kustArrayReverse[$storeId].'" title="нужно поедлить '.$value_real.' '.$value.'%">'.$colorcnt.'';
+
+ if(!empty($value) and $printPercentMatrix==1) echo'<br>
+ <small style="color:green">'.$value.'%</small>';
+
+ echo'
+ </td>';
+ }
+
+
+ if($printSumm) {
+
+ $colorDifference=$colorCounter-$dataColor[$productId][$colorName];
+ $znak="";
+ if($colorCounter>$dataColor[$productId][$colorName]) $znak="+";
+
+
+ echo'<td>'.$colorCounter.'</td><td>'.$dataColor[$productId][$colorName].'</td>
+<td '; if($colorDifference!=0) echo' class="bg-danger"'; echo'>'.$znak.''.$colorDifference.'</td>';
+
+ }
+
+
+ echo'</tr>';
+
+ }
+
+
+ }// end color
+ } // end if color
+
+
+
+ }
+
+
+
+}
+
+
+echo'</tbody></table></div>';
+
+
+
+$_CONFIG["jscss"] .='
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+.zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
+.zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
+table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
+table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
+table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
+.app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+.zak td.td_product:hover {background:#fff;}
+.zak tr td.pr,.zak tr td.ost{text-align:center;}
+.zak tr td.pr{background:#ddd}
+.zak tr td.ost{background:#e6e6e6}
+.zak td{text-align:center; vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+.zak td.tr{text-align:right;}
+.zak td, .zak thead th{color:#000;}
+.zak tr.trproduct td{font-size:1rem;font-weight:bold;}
+</style>';
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
--- /dev/null
+<?php
+
+use yii\helpers\ArrayHelper;
+use yii\db\Expression;
+use yii_app\records\AdminGroup;
+use yii_app\records\Products1c;
+use yii_app\records\StoreOrdersStatuses;
+use yii_app\records\StoreOrders;
+use yii_app\records\ShipmentProviders;
+use yii_app\records\Products1cOptions;
+use yii_app\records\StoreOrdersItem;
+use yii_app\records\StoreOrdersPrices;
+use yii_app\records\StoreOrdersFields;
+use yii_app\records\StoreOrdersColors;
+use yii_app\records\Sales;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+
+//include"templates/top.php";
+
+global $products;
+$act='division';
+$modul='shipment';
+$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
+//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+$storesAll = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' order by name ASC");
+
+$data3 = StoreOrdersStatuses::find()->asArray()->all();
+//$data3=$db::getRows("SELECT * FROM store_orders_statuses");
+foreach($data3 as $row) {
+ $store_orders_statuses[$row["id"]]=$row["name"];
+ $statuses_groups[$row["id"]]=explode(",",$row["groups"]);
+ $statuses_stores_show[$row["id"]]=$row["stores_show"];
+ $statuses_dostup[$row["id"]]=json_decode($row["dostup"],true,512,JSON_UNESCAPED_UNICODE);
+ $status_edit_dostup[$row["id"]]=json_decode($row["status_edit_dostup"],true,512,JSON_UNESCAPED_UNICODE);
+
+}
+
+$group_id=$_SESSION["group_id"];
+
+global $order_id;
+
+if(!empty($_REQUEST["id"])) $id=(int)$_REQUEST["id"];
+
+$OrderId=$id;
+
+global $status_order_id;
+
+$row = StoreOrders::find()->select(['name', 'id', 'providers_arr', 'status', 'DATE_FORMAT(date_start, \'%Y-%m-%d\') as date_start', 'parent_id'])
+ ->where(['id' => $id])->asArray()->one();
+//$row=$db::getRow("SELECT name,id,providers_arr, status, DATE_FORMAT(date_start, '%Y-%m-%d') as date_start, parent_id FROM store_orders WHERE id=?",[$id]);
+$in=explode(",",$row["providers_arr"]);
+$status_order_id=$row["status"];
+$k=0;
+$where="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+ if(!empty($guid)) {
+ if($k!=0) $where .=" OR ";
+ $where .=" id='$guid' ";
+ $k++;
+ }
+}
+
+if(!empty($where)) $where =" AND ( $where )";
+
+
+//$users_group=$db::mapping("SELECT id,name FROM admin_group order by name ASC");
+$stores = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
+ ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' $where AND view='1' order by name ASC");
+
+$kustArray=array();
+$data2 = Products1c::find()->select(['parent_id', 'id'])->where(['tip' => 'city_store', 'view' => '1'])
+ ->andWhere(['!=', 'parent_id', ''])->orderBy(['parent_id' => SORT_ASC, 'name' => SORT_ASC])->asArray()->all();
+//$data2=$db::getRows("SELECT parent_id, id FROM products_1c WHERE tip='city_store' AND parent_id!='' AND view='1' order by parent_id ASC, name ASC");
+foreach($data2 as $row2) {
+ $kustArray[$row2["parent_id"]][]=$row2["id"];
+ $kustArrayReverse[$row2["id"]]=$row2["parent_id"];
+}
+
+$kustBackground[1]="#AFEEEE";
+$kustBackground[2]="#87CEFA";
+$kustBackground[3]="#EEE8AA";
+
+
+
+//sort($kustArray);
+
+$sortStoreId="";
+$i=0;
+foreach($kustArray as $kustId =>$massiv) {
+// echo"<p> Куст $kustId = ";
+ foreach($massiv as $storeGuid) {
+ // echo '<span class="btn btn-sm btn-info m-2"> '.$storesAll[$storeGuid]. '</span>';
+ if($i>0) $sortStoreId .=",";
+ $sortStoreId .=$storeGuid;
+ $sortStore[]=$storeGuid;
+ $i++;
+ }
+ echo'</p>';
+}
+
+
+
+
+
+echo'<h1 class="page-title mb-0 text-primary">Остаток склада '.$row["name"].' id='.$row["id"].'
+</h1>
+<span class="btn">'. $store_orders_statuses[$status_order_id] .' </span> ваша роль <b>'.$roles[$_SESSION["group_id"]].'</b>
+
+<div id="admin__online"></div>
+';
+
+$w="";
+
+$da = ShipmentProviders::find()->select(['id', 'name', 'valuta'])->asArray()->all();
+//$da=$db::getRows("SELECT id,name,valuta FROM shipment_providers");
+foreach($da as $r) {
+ $providers[$r["id"]]=$r["name"];
+ $providers_valuta[$r["id"]]=$r["valuta"];
+}
+
+
+
+$k=0;
+$privedrs_htm="";
+foreach($in as $pid) {
+ $privedrs_htm .='<span class="tag m-1">'.$providers[$pid].'</span>';
+ if($k!=0) $w .=" OR"; $w .=" o.provider_id='$pid'"; $k++; }
+//echo'<div class="row"><div class="col-12">'.$privedrs_htm.'</div></div>';
+
+$w2="";
+
+$data2 = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'o.min_lot'])
+ ->innerJoin('products_1c p', 'p.id = o.id')->where(['in', 'o.provider_id', $in])
+ ->orderBy(['o.provider_id' => SORT_ASC, 'p.name' => SORT_ASC])->asArray()->all();
+//$data2=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors, o.min_lot FROM products_1c_options as o, products_1c as p
+//WHERE ($w) AND p.id=o.id order by o.provider_id ASC, p.name ASC");
+$k=0;
+foreach($data2 as $row) {
+ if($k!=0) $w2 .=" OR ";
+ $w2 .="i.id_1c='".$row["id"]."'";
+ $products[$row["id"]]=$row["name"];
+ $productsMinLot[$row["id"]]=$row["min_lot"];
+ $prov[$row["id"]]=$row["provider_id"];
+ $productsIdArray[$row["provider_id"]][$row["id"]]=$row["name"];
+ if(!empty($row["colors"])) $products_colors[$row["id"]]=explode(";",$row["colors"]);
+ $k++;
+}
+
+$division=array();
+$division_prod = [];
+$data = StoreOrdersItem::find()->select(['division_fact as division_fact', 'store_id', 'product_id'])->where(['order_id' => $OrderId])
+ ->andWhere(['!=', 'store_id', ''])->asArray()->all();
+//$data=$db::getRows("SELECT division_fact as division_fact,store_id,product_id FROM store_orders_item WHERE order_id=? AND store_id!=''",[$OrderId]);
+foreach($data as $row) {
+ $division[$row["product_id"]][$row["store_id"]]=(int)$row["division_fact"];
+
+ $division_prod[$row["product_id"]] +=(int)$row["division_fact"];
+
+}
+
+
+// quantity_purchase_summ AND division_fact>0 or (quantity_purchase_summ>0 and division_fact='0')
+
+$data = StoreOrdersPrices::find()->select(['sum(quantity_warehouseman_fact) as quantity_warehouseman_fact', 'product_id', 'sum(quantity_purchase_summ) as quantity_purchase_summ'])
+ ->where(['order_id' => $OrderId])->groupBy(['product_id'])->asArray()->all();
+//$data=$db::getRows("SELECT sum(quantity_warehouseman_fact) as quantity_warehouseman_fact, product_id,
+//sum(quantity_purchase_summ) as quantity_purchase_summ FROM store_orders_prices WHERE order_id=? group by product_id",[$OrderId]);
+$quantity_warehouseman_fact = [];
+$products_no = [];
+foreach($data as $row) {
+ $quantity_warehouseman_fact[$row["product_id"]]=$row["quantity_warehouseman_fact"];
+ if($row["quantity_purchase_summ"]>0 and empty($division_prod[$row["product_id"]])) {
+ $products_no[$row["product_id"]]=$products[$row["product_id"]];
+ $products_quantity_purchase_summ[$row["product_id"]]=$row["quantity_purchase_summ"];
+ }
+
+
+}
+
+$data = StoreOrdersItem::find()->select(['sum(division_fact) as division_fact', 'product_id'])->where(['order_id' => $OrderId])
+ ->groupBy(['product_id'])->asArray()->all();
+//$data=$db::getRows("SELECT sum(division_fact) as division_fact,product_id FROM store_orders_item WHERE order_id=? group by product_id",[$OrderId]);
+foreach($data as $row) {
+ $QuantitySumm[$row["product_id"]]=$row["division_fact"];
+
+}
+
+global $quantityPurchase;
+$data = StoreOrdersItem::find()->select(['product_id', 'store_id', 'quantity_purchase'])->where(['order_id' => $OrderId])->asArray()->all();
+//$data=$db::getRows("SELECT product_id, store_id, quantity_purchase FROM store_orders_item WHERE order_id=?",[$OrderId]);
+$quantityPurchaseAll = [];
+foreach($data as $row) {
+ $quantityPurchase[$row["product_id"]][$row["store_id"]]=$quantityPurchase[$row["product_id"]][$row["store_id"]]+$row["quantity_purchase"];
+ $quantityPurchaseAll[$row["product_id"]]=$quantityPurchaseAll[$row["product_id"]]+$row["quantity_purchase"];
+
+
+}
+
+//print_r($products_no);
+
+//$products=array_merge($products,$products_no);
+foreach($products as $productId =>$nameProduct) {
+
+ if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
+
+ $ostatok=$quantity_warehouseman_fact[$productId]-$QuantitySumm[$productId];
+ if($ostatok>0) { // echo'<br> '.$nameProduct.'= '. $QuantitySumm[$productId] .' ostatok='.$ostatok.' ';
+ $ostatokReal[$productId]=$ostatok; }
+ // else echo'<br> Деление в минус '.$nameProduct.'= '. $QuantitySumm[$productId].' ostatok='.$ostatok.' ';
+
+ }
+}
+
+$fieldIdThisDivision=22;
+
+
+if(!empty($_REQUEST["fieldIdThisDivision"])) $fieldIdThisDivision=(int)$_REQUEST["fieldIdThisDivision"];
+
+$_SESSION["fieldIdThisDivision"]=$fieldIdThisDivision;
+
+$data = StoreOrdersFields::find()->select(['name_full', 'description', 'name_eng', 'sql_table_values'])
+ ->where(['id' => $fieldIdThisDivision])->asArray()->one();
+//$data=$db::getRow("SELECT name_full, description, name_eng,sql_table_values FROM `store_orders_fields` WHERE id=?",[$fieldIdThisDivision]);
+
+$arrField=["20"=>"Деление закупшик", "22"=>"Деление кустовых Пришло по фактку кладовщик ", 4=>"Заказ кустовых" ];
+foreach($arrField as $fid =>$name){
+ echo'<a href="/'.$modul.'/'.$act.'/?id='.$id.'&fieldIdThisDivision='.$fid.'" class="btn btn';
+ if($fid==$fieldIdThisDivision) echo'-success'; else echo'-info';
+ echo' m-2">'.$name.'</a>';
+
+}
+
+
+echo' <br> <b>'.$data["name_full"].'</b> '.$data["description"].' <b>'.$data["sql_table_values"].' '.$data["name_eng"].' </b> ';
+
+global $dataColorsValuesAll,$dataColorsValuesStores;
+//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
+$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'quantity', 'store_id'])
+ ->where(['order_id' => $OrderId])->andWhere(['not in', 'store_id', ['undefined', '']])
+ ->andWhere(['in', 'field_id', ['4', "" . $fieldIdThisDivision, '17', '20', '22']])
+ ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
+ ->asArray()->all();
+//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
+//and (field_id='4' or field_id='$fieldIdThisDivision' or field_id='17' or field_id='20' or field_id='22') group by product_id,provider_id, store_id, color, field_id",[$OrderId]);
+foreach($data5 as $row5) {
+
+
+ if($row5["store_id"]!=0) $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]+$row5["quantity"];
+
+
+ $dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$dataColorsValuesStores[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
+}
+
+
+
+
+//field_id='4' - заказ цвета от кустового , field_id='20' - деление факт
+$data5 = StoreOrdersColors::find()->select(['product_id', 'color', 'field_id', 'quantity', 'store_id'])->where(['order_id' => $OrderId])
+ ->andWhere(['not in', 'store_id', ['undefined', '']])->andWhere(['field_id' => "" . $fieldIdThisDivision])
+ ->groupBy(['product_id', 'provider_id', 'store_id', 'color'])
+ ->asArray()->all();
+//$data5=$db::getRows("SELECT product_id,color,field_id, quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined' and store_id!=''
+//and (field_id='$fieldIdThisDivision') group by product_id,provider_id, store_id, color",[$OrderId]);
+foreach($data5 as $row5) {
+ $ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] =$ColorsArr[$row5["product_id"]][$row5["color"]][$row5["field_id"]][$row5["store_id"]] + $row5["quantity"];
+}
+
+
+//print_r($dataColorsValuesAll);
+
+
+
+
+$dataColorsValuesAll=array();
+$data5 = StoreOrdersColors::find()->select(['product_id', 'provider_id', 'color', 'field_id', 'sum(quantity) as quantity', 'store_id'])
+ ->where(['order_id' => $OrderId])
+ ->andWhere(['store_id' => '0'])
+ ->andWhere(['field_id' => "" . $fieldIdThisDivision])
+ ->groupBy(['product_id', 'provider_id', 'store_id', 'color', 'field_id'])
+ ->asArray()->all();
+//$data5=$db::getRows("SELECT product_id,provider_id,color,field_id, sum(quantity) as quantity,store_id FROM store_orders_colors WHERE order_id=? and store_id!='undefined'
+//and store_id='0'
+//and (field_id='$fieldIdThisDivision') group by product_id,provider_id, store_id, color,field_id",[$OrderId]);
+foreach($data5 as $row5) {
+ $dataColorsValuesAll[$row5["product_id"]][$row5["color"]][$row5["field_id"]]=$row5["quantity"];
+}
+
+global $storesArr,$whereStores,$productsArrayStores;
+$storesArr = ArrayHelper::map(Products1c::find()->select(['id', 'name'])->where(['tip' => 'city_store', 'view' => '1'])->andWhere(['not in', 'name', ['09 Доставка букетов', '19 Пр. Октября 9а']])->all(), 'id', 'name');
+//$storesArr=$db::mapping("SELECT id,name FROM products_1c WHERE tip='city_store' AND view='1' AND name!='09 Доставка букетов' AND name!='19 Пр. Октября 9а'");
+$whereStores=" AND ( store_id_1c='-99' ";
+foreach($storesArr as $storeIdGuid => $nameStore) $whereStores .=" or s.store_id_1c='$storeIdGuid' ";
+$whereStores .=" ) ";
+
+$whereProducts=" AND ( p.product_id='-999' ";
+foreach($products as $productId =>$nameProduct) {
+ $whereProducts .=" or p.product_id='$productId' ";
+}
+$whereProducts .=" )";
+
+$data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c', 'p.product_id'])
+ ->innerJoin('sales_products p', 's.id = p.check_id')
+ ->where(['s.operation' => 'Продажа'])
+ ->andWhere(['in', 'p.product_id', array_keys($products)])
+ ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
+ ->groupBy(['p.product_id', 's.store_id_1c'])
+ ->orderBy(['squantity' => SORT_DESC])
+ ->asArray()->all();
+//$data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c, p.product_id
+//FROM sales as s, sales_products as p
+//WHERE s.id=p.check_id AND s.operation='Продажа' $whereProducts AND s.date>=NOW() - INTERVAL 14 day $whereStores group BY p.product_id, s.store_id_1c order by
+//squantity DESC");
+foreach($data as $row){
+ $productsArrayStores[$row["product_id"]][$row["store_id_1c"]]=$row["squantity"];
+
+}
+
+
+
+
+//функция автораспределения количество штук заказнных магазином , фактический приход по товару, сколкьо заказано кустовым, минимальный лот
+function autoDivision($productId,$quantityArr,$formulaFact,$formulaPurchase,$formulaMinLot) {
+ global $db,$storesArr,$whereStores,$productsArrayStores,$quantityPurchase;
+ /*
+ Распределение по делению.
+
+ Если заказ меньше Минимальный лот деления
+ Первый цикл подсчета полный цикл считаем в процентном соотношении доли заказа кустовым к общему приходу
+
+ Например Заказ =100 А пришло 65 штук
+ Последний цикл по рейтингу продаж по этой позиции за прошедшую неделю
+ По этой позиции
+ Если заказ больше то заказ распределяется 100%
+ Подсказка по пронципе продаж начисления %
+ */
+
+
+
+
+ /*
+ $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
+ FROM sales as s, sales_products as p
+ WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores group BY p.product_id, s.store_id_1c order by
+ squantity DESC",[$productId]);
+ */
+
+ $allQuantity=0;
+ foreach($quantityArr as $quantity) $allQuantity +=$quantity;
+
+
+ $txt="<h3>Сортировка по магазинам по этому товару</h3>
+<p>Продажи за последнюю неделю в шт.</p>";
+ $massivStoreSort=array();
+ $i=1;
+
+
+ if($formulaPurchase>=$formulaFact) $allQuantity=$formulaFact;
+ if($formulaPurchase<=$formulaFact) $allQuantity=$formulaPurchase;
+
+ $txt .="Считаем по $allQuantity ";
+
+ $txt .=" $allQuantity заказ кустовых $formulaPurchase ";
+ /*
+ foreach($data as $row){
+ $txt .="<tr><td>$i)</td><td>".$storesArr[$row["store_id_1c"]]."</td><td>".(int)$row["squantity"]." шт.</td></tr>";
+ $massivStoreSort[]=$row["store_id_1c"];
+ $massivStoreSortQuantity[$row["store_id_1c"]]=(int)$row["squantity"];
+
+ $i++;
+ }
+ */
+ if($formulaFact>=$formulaPurchase) $percentFact=1; else $percentFact=$formulaFact/$formulaPurchase;
+
+ $percentFact=round($percentFact,4);
+
+ $txt .=" <br>коэфициент умножения $percentFact -умноаем каждый заказ на этот коэф
+
+<table><tbody> ";
+
+ $onclick="";
+
+ $q_all=0;
+ foreach($quantityPurchase[$productId] as $store_id_1c => $quantity){
+
+//$percent=round($quantityArr[$store_id_1c]*$percentFact/$allQuantity,3);
+
+
+ $quantity_zakaz=round($quantityArr[$store_id_1c]*$percentFact);
+ $quantity_zakaz_round=ceilCoefficient($quantity_zakaz,$formulaMinLot);
+
+//$roundPBase=ceilCoefficient($formulaFact*$percent*$percentFact,$formulaMinLot);
+//if($percent>0 and $roundP==0 and $roundPAll<$formulaFact) $roundP=$formulaMinLot;
+ $q_all +=$quantityArr[$store_id_1c];
+
+ if($roundPBaseAll<$allQuantity) {
+ $roundPBaseAll +=$quantity_zakaz_round;
+
+ }
+
+ $txt .="<tr><td>$i)</td><td>".$storesArr[$store_id_1c]."</td><td>".(int)$quantity." шт.</td>
+<td>заказ ".$quantityArr[$store_id_1c]."</td>
+<td>".$percent."</td><td>$formulaFact</td>
+<td> $quantity_zakaz -> $quantity_zakaz_round </td></tr>";
+//$massivStoreSort[]=$store_id_1c;
+//$massivStoreSortQuantity[$store_id_1c]=(int)$quantity;
+
+
+ $autoReccomend[$store_id_1c]=$quantity_zakaz_round;
+
+ $onclick .='$(\'#autodivision_'.$productId.''.$store_id_1c.'\').text(\''.$quantity_zakaz_round.'\');';
+
+
+ $i++;
+ }
+ $txt .="<tr><td></td><td>Итого</td><td></td><td>$q_all</td><td></td><td></td><td>$roundPBaseAll</td></tr>";
+ $do=1;
+ if($roundPBaseAll==$q_all) $do=0;
+
+ $txt .="</tbody></table>всего заказано $allQuantity По факту $formulaFact = процент $percentFact% Всего базово на заказ $roundPAll
+
+
+<span class=\"btn btn-warning\" onclick=\"$onclick\">установить</span>
+
+";
+
+
+
+
+ $thiasQuantity=0;
+ $massivAddQuantity=array();
+ $data = Sales::find()->alias('s')->select(['sum(p.quantity) as squantity', 's.store_id_1c'])
+ ->innerJoin('sales_products p', 's.id = p.check_id')
+ ->where(['s.operation' => 'Продажа'])
+ ->andWhere(['p.product_id' => $productId])
+ ->andWhere(['>=', 's.date', new Expression('NOW() - INTERVAL 14 day')])
+ ->andWhere(['in', 's.store_id_1c', array_keys($storesArr)])
+ ->groupBy(['p.product_id', 's.store_id_1c'])
+ ->orderBy(['squantity' => SORT_DESC])
+ ->asArray()->all();
+// $data=$db::getRows("SELECT sum(p.quantity) as squantity,s.store_id_1c
+//FROM sales as s, sales_products as p
+//WHERE s.id=p.check_id AND s.operation='Продажа' AND p.product_id=? AND s.date>=NOW() - INTERVAL 14 day $whereStores group BY p.product_id, s.store_id_1c order by
+//squantity DESC",[$productId]);
+ foreach($data as $row){
+ $txt .="<br> $i) ".$storesArr[$row["store_id_1c"]]." ".(int)$row["squantity"]." шт. ";
+ $storeArr[$row["store_id_1c"]]=$row["squantity"];
+ $i++;
+ }
+
+
+
+
+// если первый цикл совсем ничего не начислил
+ if($roundPBaseAll<$allQuantity) {
+ $txt .="<br>
+Начинаем начисление по кругу отталкиваясь от продаж ++ $allQuantity ++";
+
+ $formulaFactForeach=$allQuantity;
+
+ for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+ if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла"; break; }
+
+ foreach($storeArr as $storeId =>$q) {
+ if($allQuantity>=($thiasQuantity+$formulaMinLot)) {
+
+ $massivAddQuantity[$storeId] +=$formulaMinLot;
+ $thiasQuantity +=$formulaMinLot;
+
+//$txt .="<br> 77777+++ ".$storesArr[$storeId]." = ".$massivAddQuantity[$storeId]." шт.";
+ $formulaFactForeach -=$formulaMinLot;
+ }
+
+ }
+ }
+
+ echo"<br>Цикл начисления";
+ $onclick="";
+ foreach($massivAddQuantity as $storeId => $q) {
+ $txt .="<br> +++ ".$storesArr[$storeId]." = ".(int)$q." шт.";
+ $onclick .='$(\'#autodivision_'.$productId.''.$storeId.'\').text(\''.$q.'\')';
+
+ }
+
+ $txt .="<br>Итого по второму кругу= ".(int)$thiasQuantity." шт.
+
+
+
+
+";
+
+
+ }
+// конец цикла
+
+ $thiasQuantity=0;
+ $massivAddQuantity=array();
+// распределяем излишки согласно процентам
+ if($formulaFact>$formulaPurchase) {
+
+ $izlishek=$formulaFact-$formulaPurchase;
+
+ $txt .="<br>Начинаем начисление излишков по кругу отталкиваясь от продаж";
+
+
+ $formulaFactForeach=$izlishek;
+
+ for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+ if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла"; break; }
+
+ foreach($storeArr as $storeId =>$q) {
+ if($izlishek>=($thiasQuantity+$formulaMinLot)) {
+ $massivAddQuantity[$storeId] +=$formulaMinLot;
+ $thiasQuantity +=$formulaMinLot;
+ $formulaFactForeach -=$formulaMinLot;
+ }
+
+ }
+ }
+
+
+
+
+ // echo"<br>Цикл начисления";
+ foreach($massivAddQuantity as $store_id_1c => $squantity) {
+
+ if(($allRecommendeted+$squantity)<=$formulaFact) {
+ $allRecommendeted +=$squantity;
+ $txt .="<br> +++ ".$storesArr[$store_id_1c]." = ".(int)$squantity." шт.";
+ $autoReccomend[$store_id_1c] +=$squantity;
+ }
+
+
+ }
+ $txt .="<br>Итого по третьему кругу= ".(int)$thiasQuantity." шт.";
+ }
+// конец цикла
+ $onclick="";
+ $AutoAll=0;
+ $txt .="<br>Рекомендованое распределение с излишками";
+ foreach($autoReccomend as $storeId => $count) {
+ if($AutoAll<$formulaFact and $formulaFact>=($AutoAll+$count)) {
+ $AutoAll +=$count;
+ $txt .="<br>+++ ".$storesArr[$storeId]." = ".(int)$count." шт.";
+ $onclick .='$(\'#autonew_'.$productId.''.$storeId.'\').text(\''.$count.'\');';
+
+ }
+
+ }
+ $txt .="<br>Итого распределено= ".(int)$AutoAll." шт.
+
+
+ <span class=\"btn btn-warning\" onclick=\"$onclick\">установить с делением излишков</span>
+";
+
+
+ $Purchase=0;
+ /*
+ foreach($storesArr as $storeId =>$storeName)
+ {
+ if(!in_array($storeId,$storesArr)) $massivStoreSort[]=$storeId;
+ if(!empty($autoQuantity[$storeId])) $Purchase=1;
+ }
+
+ $autoQuantity=array();
+ $print=1;
+ $formulaFactForeach=$formulaFact;
+
+ if($print==1) $txt .="<br>formulaFactForeach =$formulaFactForeach";
+ $j=1;
+
+
+
+
+ for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+
+
+
+ if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла"; break; }
+ if($print==1) $txt .="<br>++Цикл =$formulaFactForeach";
+
+
+
+ foreach($massivStoreSortQuantity as $storeId =>$q) {
+
+
+ //$txt .="<br>!!!!!! $formulaFactForeach -- minlot=$formulaMinLot---q=".$autoQuantity[$storeId]."------ ";
+
+
+
+
+ $ost=$formulaFact-$autoQuantityAll;
+
+ if($print==1) $txt .="<br>$j ) ".$storesArr[$storeId]." (fact=$formulaFact => $ost) ";
+ $j++;
+
+
+ //если товар не заказ кустовым то пропускаем магазин
+ if(empty($quantityArr[$storeId])) { $txt .=" -- пропускаем "; continue; }
+
+
+
+
+
+ //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
+ if($autoQuantityAll>$formulaFact) { if($print==1) $txt .="<br>=-----выход из цикла"; break; }
+
+ //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
+ if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot and ($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase))) {
+ // если общее количество товара все еще меньше факта то выполняем
+ if(($autoQuantityAll+$formulaMinLot)<=$formulaFact) {
+ if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
+ $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
+ $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
+ $formulaFactForeach -=$formulaMinLot;
+ if($print==1) $txt .=" all=$autoQuantityAll+ $formulaMinLot =>continue0";
+ continue;
+ } else {
+
+
+ if($formulaFact>=$formulaMinLot) {
+ $autoQuantityAll +=$formulaMinLot; // обновляем счетчик общего количества
+ $autoQuantity[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
+ $formulaFactForeach -=$formulaMinLot;
+ if($print==1) $txt .=" continue33 all=".$autoQuantity[$storeId]." qu=".$autoQuantity[$storeId]." formulaFactForeach=$formulaFactForeach ";
+
+ continue;
+ }
+
+
+
+
+ }
+ }
+
+
+ }
+
+ //если остаток меньше минимального лота
+ if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
+ if($quantityArr[$storeId]>=$autoQuantity[$storeId]) {
+ $autoQuantity[$storeId] +=$formulaFactForeach;
+ $autoQuantityAll +=$formulaFactForeach;
+ $formulaFactForeach -=$formulaFactForeach;
+ if($print==1) $txt .=" all2=$autoQuantityAll+ $formulaFactForeach BREAK ";
+ break;
+
+ }
+ }
+
+
+ //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
+ if($quantityArr[$storeId]>=$autoQuantity[$storeId] or empty($Purchase)) {
+
+
+ // $formulaFactForeach -=$formulaMinLot;
+
+ if($print==1) $txt .=" minlot=111";
+
+
+ }// вычитаем из счетчика цикла - минимальный лот
+ if($print==1) $txt .=" -> ".$autoQuantity[$storeId] ." шт остаток =$formulaFactForeach all=$autoQuantityAll+ formulaFactForeach=$formulaFactForeach ";
+
+ if($formulaFactForeach<=0) { $txt .="<br>=-----выход из цикла";
+ break; } // выходим из цикла - задача выполнена
+ }
+
+ }
+
+ $ostatky=$formulaFact-$autoQuantityAll;
+ if(($formulaFact-$autoQuantityAll)>0) if($print==1) $txt .="<br><font color=red>Остатки распределены между теми кто заказал но есть остатки $ostatky</font>";
+
+
+
+ //////////////
+
+ $formulaFactForeach=$ostatky;
+ $autoQuantityAllNew=0;
+ if($print==1) $txt .="<br><h3>Распределяем остатки</h3>formulaFactForeach =$formulaFactForeach";
+ $j=1;
+ for($kk=0;$kk<=$formulaFactForeach;$kk++) {
+ if($formulaFactForeach<=0) break;
+ if($print==1) $txt .="<br>++Цикл =$formulaFactForeach";
+ foreach($massivStoreSortQuantity as $storeId =>$q) {
+
+ if($print==1) $txt .="<br>$j ) ".$storesArr[$storeId]." ";
+ $j++;
+
+
+ //если общее количе тво превышает или равно фактическому числу прихода - выходим из цикла
+ if($autoQuantityAllNew>=$ostatky) break;
+
+ //если есть что распределять и остаток более или равен минимальному лоту и заказ кустового больше чем текущее сичло в счетчике который считается для магазина и если есть заказанные позиции в магазинах
+ if($formulaFactForeach>0 and $formulaFactForeach>=$formulaMinLot) {
+ // если общее количество товара все еще меньше факта то выполняем
+ if(($autoQuantityAllNew+$formulaMinLot)<$formulaFact) {
+
+ $autoQuantityAllNew +=$formulaMinLot; // обновляем счетчик общего количества
+ $autoQuantityNew[$storeId] +=$formulaMinLot; // добавляем в счетчик магазина минимальный лот деления
+ if($print==1) $txt .=" all=$autoQuantityAllNew+ $formulaMinLot ";
+
+ }
+
+
+ }
+
+ //если остаток меньше минимального лота
+ if($formulaFactForeach>0 and $formulaFactForeach<=$formulaMinLot) {
+
+ $autoQuantityNew[$storeId] +=$formulaFactForeach;
+ $autoQuantityAllNew +=$formulaFactForeach;
+
+ }
+
+
+ //если магазин заказывал больше или ровно столько сколько заказ и при этом эту позицию заказывали другие магазины
+ $formulaFactForeach -=$formulaMinLot; // вычитаем из счетчика цикла - минимальный лот
+ if($print==1) $txt .=" -> ".$autoQuantityNew[$storeId] ." шт остаток =$formulaFactForeach";
+ if($formulaFactForeach<=0) continue; // выходим из цикла - задача выполнена
+ }
+
+ }
+ /////////////
+
+
+
+
+ if($print==1) $txt .="<br><br>==================
+ <h6>Результат</h6>";
+
+ foreach($autoQuantity as $q =>$s) {
+ if($print==1) $txt .="<br>".$storesArr[$q]." =>$s";
+ }
+ */
+
+ if($print==1) $txt .="<br>Итого $autoQuantityAll шт.";
+ $array["auto"]=$autoQuantity;
+ $array["text"]=$txt;
+ $array["new"]=$autoQuantityNew;
+
+
+ return $array;
+
+
+
+}
+echo"<br><b>Товары которые были заказны кустовыми но не пришли:</b> было заказано ";
+foreach($products_no as $productId => $cnt) echo"".$products[$productId]."=$cnt шт., ";
+
+echo'<br><span class="btn btn-info m-3" onclick="$(\'.no_products\').show()">показать товары которые не пришли</span>';
+
+echo'<span class="btn btn-blue m-3" onclick="load_devision_ajax();">обновить данные</span>';
+
+
+
+echo'<div class="table-responsive">
+<table class="table-hover zak"><thead><tr class="zg"><th class="td_product">наименование</th><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>';
+
+$head="";
+foreach($sortStore as $storeId) {
+ echo'<th style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></th>';
+ $head .='<td style="background:'.($kustBackground[$kustArrayReverse[$storeId]] ?? '').'"><b>'.$storesAll[$storeId].'</b></td>';
+}
+echo'</tr></thead><tbody>';
+
+$i=0;
+foreach($products as $productId =>$nameProduct) {
+// or !empty($products_no[$productId])
+ if(isset($quantity_warehouseman_fact[$productId]) && $quantity_warehouseman_fact[$productId]>0){
+
+ if($i==20) { echo'<tr class="zg"><td class="td_product">наименование</td><th>приход</th><th><b>сумма кустовых</b></th><th><b>остаток на складе</b></th><th><b>мин-ый лот деления шт.</b></th>'.$head.'</tr>'; $i=0; }
+ echo'<tr id="tr__'.$productId.'"';
+ // style="display:none;"
+ if(!empty($products_no[$productId])) echo' class="bg-warning no_products"';
+ else $i++;
+ echo'><td class="td_product producted" id-data="'.$productId.'">'.$nameProduct.'
+ <span class="btn btn-white btn-sm" onclick="showKust(\''.$productId.'\');$(this).remove();">+ куст</span>';
+ if(!empty($products_colors[$productId])) echo' <span class="btn btn-warning btn-sm" onclick="$(\'.tr__'.md5($productId).'\').toggle();">+ цвета</span>
+
+
+
+ ';
+ echo' <span onclick="$(\'#tr_'.md5($productId).'\').toggle()" class="btn btn-warning btn-sm">+ распределение</span></td>
+ <td class="pr" id="quantity_warehouseman_fact'.$productId.'" title="'.$quantity_warehouseman_fact[$productId].'">'.$quantity_warehouseman_fact[$productId].'</td>
+ <td class="summa_kust summa_kust_'.$productId.'" id="summa_kust_'.$productId.'">'.$quantityPurchaseAll[$productId].'</td>
+ <td class="ost ost_product_'.$productId.'" id="ost_product_'.$productId.'">0</td>
+<td>'.$productsMinLot[$productId].'</td>';
+
+
+ foreach($sortStore as $storeId) {
+ $quatityArr[$storeId]=$quantityPurchase[$productId][$storeId];
+ // $formulaPurchaseArr[$storeId]=$quantityPurchaseAll[$productId][$storeId];
+
+ }
+
+ $formulaFact=$quantity_warehouseman_fact[$productId];
+ $formulaPurchase=$quantityPurchaseAll[$productId];
+ $formulaMinLot=$productsMinLot[$productId];
+//$auto="$formulaFact $formulaPurchase $formulaMinLot";
+
+ $autoArr=autoDivision($productId,$quatityArr,$formulaFact,$formulaPurchase,$formulaMinLot);
+
+
+ $autoQantityArr=$autoArr["auto"];
+ $autoTextArr=$autoArr["text"];
+
+ foreach($sortStore as $storeId) {
+ echo'<td class="kust'.$kustArrayReverse[$storeId].'">';
+
+ $q=$quantityPurchase[$productId][$storeId];
+
+
+
+
+ if(!empty($q)) echo'<small>к</small>'.$q.'';
+
+ echo'<br><small>а<span id="autodivision_'.$productId.''.$storeId.'"'.$autoQantityArr[$storeId].'</span>
+
+n=<span id="autonew_'.$productId.''.$storeId.'">'.$autoArr["new"][$storeId].'</span></small> ';
+
+ $provider_id=$prov[$productId];
+
+ if(isset($stores[$storeId])) {
+ echo'<input type=number class="form-control product_'.$productId.'" id="division_fact'.$productId.''.$storeId.'"
+onchange="EditField(\'division_fact\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.');" value="'.$division[$productId][$storeId].'">';
+
+ } else echo'<span class="product_'.$productId.'" title="'.$division[$productId][$storeId].'" id="division_fact'.$productId.''.$storeId.'">'.$division[$productId][$storeId].'</span>';
+
+
+
+
+ echo'</td>';
+
+
+
+ }
+
+
+
+ $colspan=25;
+
+ echo'</tr>
+
+<tr style="display:none" id="tr_'.md5($productId).'"><td colspan='.$colspan.' class="text-left lf">'.$autoTextArr.'</td></tr>';
+
+
+ $kk=0;
+// цвета
+
+
+
+
+ $reload='';
+ foreach($products_colors[$productId] as $colorId => $colorName) $reload .=';calc_color_product(\''.$productId.'\',\''.md5($colorName).'\')';
+ foreach($sortStore as $storeId) $reload .=';calc_color_product_store(\''.$productId.'\',\''.$storeId.'\')';
+
+
+
+ foreach($products_colors[$productId] as $colorId => $colorName) {
+ $colorName=trim($colorName);
+//$zakupFactColor=$dataColorsValuesAll[$productId][$colorName][17];
+ $zakupFactColor=$dataColorsValuesAll[$productId][$colorName][22];
+ echo'<tr style="display:none;" class="tr__'.md5($productId).' td_color_'.$productId.' color_tr_calc" title="color'.$productId.''.$storeId.''.md5("$colorName").'">
+<td>
+';
+
+
+
+ if($kk==0) echo'<span class="btn btn-info" onclick="calc_colors(\''.$productId.'\');'.$reload.'">обновить данные</span>';
+
+ $kk++;
+ echo'<table width=100%><td><span class="btn btn-sm btn-info" onclick="calc_color_product(\''.$productId.'\',\''.md5($colorName).'\');">обновить</span></td><td width=70%>'.$colorName.'</td></table></td>
+<td class="pr" id="quantity_color'.$productId.''.md5($colorName).'" title="'.$zakupFactColor.'">';
+
+ if(1) {
+ /*
+ echo'<input title="Приход по цвету от закупщика" type=number class="form-control" id="quantity_zakup_fact_color'.$productId.''.md5("$colorName").'"
+ onchange="EditZakupColor(\'17\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_zakup_fact_color'.$productId.''.md5("$colorName").'\');"
+ value="'.$zakupFactColor.'">';
+ */
+
+ echo'<input title="Приход по цвету от кладовщика quantity_warehouseman_fact" type=number class="form-control ostatok__'.$productId.''.md5($colorName).'" id="quantity_warehouseman_fact'.$productId.''.md5("$colorName").'"
+onchange="EditZakupColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\','.$provider_id.',\''.$colorName.'\',\'quantity_warehouseman_fact'.$productId.''.md5("$colorName").'\');"
+value="'.$zakupFactColor.'">';
+
+
+ } else echo'<span id-dd="color_'.$productId.''.md5("$colorName").'" class="" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$zakupFactColor.'</span>';
+
+
+ echo'</td>
+ <td class="ost summa_kust_'.$productId.''.md5($colorName).'" id="summa_color1_'.$productId.''.md5($colorName).'"></td>
+ <td class="ost ost_product_'.$productId.''.md5($colorName).'" id="ost_color1_'.$productId.''.md5($colorName).'">0</td>
+<td>'.$productsMinLot[$productId].'</td>';
+
+ foreach($sortStore as $storeId) {
+
+ $divisionFact=$dataColorsValuesStores[$productId][$colorName][$fieldIdThisDivision][$storeId];
+ /*
+ $colorName=str_replace('/','',$colorName);
+ $colorName=str_replace('\'','',$colorName);
+ $colorName = preg_replace ("~/~", "", $colorName);
+ $colorName = preg_replace ("~\~", "", $colorName);
+ */
+ $colorName2=trim(str_replace(['\\','/'],['',''],$colorName));
+// если это деление факта
+//if(empty($divisionFact) and $fieldIdThisDivision==20) $divisionFact=$dataColorsValuesStores[$productId][$colorName][4][$storeId];
+//if(empty($divisionFact) and $fieldIdThisDivision==20) $divisionFact=$dataColorsValuesStores[$productId][$colorName][20][$storeId];
+//if(empty($divisionFact))
+//$divisionFact=$dataColorsValuesStores["$productId"]["$colorName2"][22][$storeId];
+ $divisionFact=$ColorsArr["$productId"]["$colorName2"][22][$storeId];
+
+//$divisionFact=$db::getValue("SELECT quantity FROM store_orders_colors WHERE order_id=? AND store_id=? AND product_id=? AND color='$colorName2' and field_id='22' LIMIT 1",[$OrderId, $storeId, $productId]);
+
+
+ echo'<td class="kust'.$kustArrayReverse[$storeId].'">';
+
+//$colorName=$colorName2;
+
+ if(isset($stores[$storeId])) {
+ echo'<input type=number id-dd="color_'.$productId.$storeId.md5("$colorName").'" class="form-control color_'.$productId.''.md5("$colorName").'
+
+color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.''.$storeId.''.md5("$colorName").'" id="color'.$productId.''.$storeId.''.md5("$colorName").'"
+onchange="EditFieldColor(\''.$fieldIdThisDivision.'\',\''.$productId.'\',\''.$storeId.'\','.$provider_id.',\''.$colorName.'\',\'color'.$productId.''.$storeId.''.md5("$colorName").'\');"
+value="'.$divisionFact.'">'.$divisionFact.'';
+
+ } else echo'<span id-dd="color_'.$productId.''.md5("$colorName").'" class="color_'.$productId.''.md5("$colorName").' color_'.$productId.' color_'.$productId.''.$storeId.' color_'.$productId.$storeId.md5("$colorName").'" title="'.$divisionFact.'" id="color'.$productId.''.$storeId.''.md5("$colorName").'">'.$divisionFact.'</span>';
+
+
+ echo'</td>';
+
+
+ }
+
+ echo'</tr>';
+ }
+
+ if(!empty($products_colors[$productId])) {
+
+ echo'<tr style="display:none;" class="bg-warning tr__'.md5($productId).'"><td>Итого по цветам</td>
+
+<td class="sm_kust" id="color_summ_kust_'.$productId.'" title=""></td><td class="pr" id="color_summ_'.$productId.'" title=""></td>
+ <td class="ost ost_color_summ_'.$productId.'" id="ost_color_summ_'.$productId.'">0</td>
+<td>'.$productsMinLot[$productId].'</td>';
+
+ foreach($sortStore as $storeId) {
+
+ echo'<td class="kust'.$kustArrayReverse[$storeId].'" id="summ_store_color_'.$productId.''.$storeId.'">
+<span class="btn btn-sm btn-info" onclick="calc_color_product_store(\''.$productId.'\',\''.$storeId.'\');">обновить</span>
+
+</td>';
+
+
+ }
+
+ echo'</tr>';
+
+ }
+
+
+//end colors
+
+
+
+ }
+
+
+
+}
+
+
+echo'</tbody></table></div>';
+
+
+echo'<h2>Излишки на складе после деления </h2>
+<p>Уходят на центральный склад. Минусовые деления не учитываются!</p>
+
+
+<table class="zak">
+<thead><th>наименование</th><th>сотаток шт.</th></thead>
+
+<tbody>';
+if (isset($ostatokReal)) {
+ arsort($ostatokReal);
+ foreach ($ostatokReal as $productId => $count) {
+ echo '<tr><td>' . $products[$productId] . '</td><td>' . $count . '</td></tr> ';
+
+ }
+}
+echo'</tbody></table>';
+
+
+//if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+$_SESSION["order_id"]=$OrderId;
+$_CONFIG["jscss"]='
+
+<script>
+ function AjaxGetJson(url, callback) {
+ var xmlhttp = new XMLHttpRequest();
+ xmlhttp.onreadystatechange = function () {
+ if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
+ /* console.log(\'responseText:\' + xmlhttp.responseText); */
+ try {
+ let data = JSON.parse(xmlhttp.responseText);
+ callback(data);
+ } catch (err) {
+ /* console.log(err.message + " in " + xmlhttp.responseText); */
+ }
+ }
+ };
+ xmlhttp.open("GET", url, true);
+ xmlhttp.send();
+ }
+
+
+function calcu(product_id) {
+
+
+var myNodeList = document.querySelectorAll(\'.td_color_\'+product_id+\'\');
+if( myNodeList.length) {
+let summa_color = 0;
+for (let el of myNodeList) {
+ let id_element = el.getAttribute(\'title\');
+ let val=$(\'#\'+id_element).val();
+ if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+ if(typeof val !== \'undefined\' && val!=\'\') {
+ val = Number(val);
+ summa_color = summa_color + val;
+ summa_color = Number(summa_color);
+ }
+
+ }
+
+
+
+}
+
+
+
+
+
+
+var myNodeList = document.querySelectorAll(\'.product_\'+product_id+\'\');
+
+if( myNodeList.length) {
+
+let summa = 0;
+
+let prihod = $(\'#quantity_warehouseman_fact\'+product_id+\'\').text();
+ prihod = Number(prihod);
+for (let el of myNodeList) {
+ let val = el.value;
+ if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+ if(typeof val !== \'undefined\' && val!=\'\') {
+ val = Number(val);
+ summa = summa + val;
+ summa = Number(summa);
+
+ }
+
+ }
+
+$(\'#summa_kust_\'+product_id+\'\').text(summa);
+let pr =0;
+pr = prihod - summa;
+ pr = Number(pr);
+$(\'#ost_product_\'+product_id+\'\').text(pr);
+
+if(pr < 0) {
+$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#CD5C5C\');
+$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#fff\');
+
+} else {
+
+$(\'.ost_product_\'+product_id+\'\').css(\'background\',\'#90EE90\');
+$(\'.ost_product_\'+product_id+\'\').css(\'color\',\'#222222\');
+
+}
+
+
+}
+/*calc_colors(product_id);*/
+}
+
+
+function unique(arr) {
+ let result = [];
+
+ for (let str of arr) {
+ if (!result.includes(str)) {
+ result.push(str);
+ }
+ }
+
+ return result;
+}
+
+function calc_colors(product_id) {
+
+var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\');
+if( myNodeList.length) {
+let summa = 0;
+let summa_kust = $(\'#summa_kust_\'+product_id+\'\').text();
+summa_kust = Number(summa_kust);
+let class_arr=[];
+let class_vl=[];
+var id_last;
+for (let el of myNodeList) {
+ let val = el.value;
+ if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+
+ let id_dd = el.getAttribute(\'id-dd\');
+ id_last = id_dd;
+ class_arr.push(id_dd);
+
+
+
+ if(typeof val !== \'undefined\' && val!=\'\') {
+ val = Number(val);
+ summa = summa + val;
+ summa = Number(summa);
+ class_vl[id_dd]=class_vl[id_dd]+val;
+
+
+
+ }
+
+ }
+
+
+for (let el of class_vl) {
+ $(\'#ost_\'+el+\'\').text(class_vl[el]);
+
+}
+
+
+ /* console.log(\'class_vl= \'+class_vl+\' \'); */
+
+
+
+
+ class_arr = unique(class_arr);
+
+ for (let el2 of class_arr) {
+ let summa_color_store=0;
+ var myNodeList = document.querySelectorAll(\'.\'+class_arr+\'\');
+if( myNodeList.length) {
+
+ for (let el of myNodeList) {
+ let val = el.value;
+ if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+ if(typeof val !== \'undefined\' && val!=\'\') {
+ val = Number(val);
+ summa_color_store = summa_color_store + val;
+ summa_color_store = Number(summa_color_store);
+
+ }
+ }
+
+summa_color_store = Number(summa_color_store);
+$(\'#summ_store_\'+class_arr+\'\').text(summa_color_store);
+
+
+ }
+
+
+/* console.log(\' class_arr= \'+class_arr+\' summa_color_store= \'+summa_color_store+\' \'); */
+
+ }
+
+
+
+summa = Number(summa);
+$(\'#color_summ_\'+product_id+\'\').text(summa);
+
+
+let pr =0;
+pr = summa_kust - summa;
+$(\'#ost_color_summ_\'+product_id+\'\').text(pr);
+
+if(pr < 0) {
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#CD5C5C\');
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#fff\');
+
+} else {
+
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'background\',\'#90EE90\');
+$(\'.ost_color_summ_\'+product_id+\'\').css(\'color\',\'#222222\');
+
+}
+
+}
+
+}
+
+
+function calc_color_product(product_id, md5) {
+
+var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+md5+\'\');
+if( myNodeList.length) {
+let summa = 0;
+let summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').text();
+summa_kust = Number(summa_kust);
+if(summa_kust==\'\') summa_kust = $(\'#quantity_warehouseman_fact\'+product_id+\'\'+md5+\'\').val();
+summa_kust = Number(summa_kust);
+
+
+let class_arr=[];
+let class_vl=[];
+var id_last;
+for (let el of myNodeList) {
+ let val = el.value;
+ if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+
+ let id_dd = el.getAttribute(\'id-dd\');
+ id_last = id_dd;
+ class_arr.push(id_dd);
+
+
+
+ if(typeof val !== \'undefined\' && val!=\'\') {
+ val = Number(val);
+ summa = summa + val;
+ summa = Number(summa);
+ class_vl[id_dd]=class_vl[id_dd]+val;
+
+
+
+ }
+
+ }
+
+
+
+summa = Number(summa);
+$(\'#summa_color1_\'+product_id+\'\'+md5+\'\').text(summa);
+
+
+let pr =0;
+pr = summa_kust - summa;
+$(\'#ost_color1_\'+product_id+\'\'+md5+\'\').text(pr);
+
+if(pr < 0) {
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#CD5C5C\');
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');
+
+}
+if(pr>0) {
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'blue\');
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#fff\');
+
+}
+if(pr==\'0\') {
+
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'background\',\'#90EE90\');
+$(\'.ost_product_\'+product_id+\'\'+md5+\'\').css(\'color\',\'#222222\');
+
+}
+
+}
+
+}
+
+
+function calc_color_product_store(product_id, store_id) {
+
+var myNodeList = document.querySelectorAll(\'.color_\'+product_id+\'\'+store_id+\'\');
+if( myNodeList.length) {
+let summa = 0;
+
+let class_arr=[];
+let class_vl=[];
+var id_last;
+for (let el of myNodeList) {
+ let val = el.value;
+ if(typeof val === \'undefined\') val = el.getAttribute(\'title\');
+
+ let id_dd = el.getAttribute(\'id-dd\');
+ id_last = id_dd;
+ class_arr.push(id_dd);
+ if(typeof val !== \'undefined\' && val!=\'\') {
+ val = Number(val);
+ summa = summa + val;
+ summa = Number(summa);
+
+
+ }
+
+ }
+summa = Number(summa);
+$(\'#summ_store_color_\'+product_id+\'\'+store_id+\'\').text(summa);
+
+
+}
+
+}
+
+
+
+jQuery(document).ready(function($) {
+ $(".form-control").focus(function(){
+ $(".form-control").removeClass("active");
+ $(this).addClass("active");
+ }).blur(function(){
+
+ })
+});
+
+
+
+function load_devision_ajax() {
+
+
+
+var myNodeList = document.querySelectorAll(\'.producted\');
+if( myNodeList.length) {
+for (let el of myNodeList) {
+ let product_id = el.getAttribute(\'id-data\');
+ calcu(product_id);
+}
+}
+AjaxGetJson(\'/shipment/ajax-division/\', function (data) {
+
+
+for (product_id in data) {
+ for (store_id in data[product_id]) {
+ /* console.log(\' product_id= \'+product_id+\' store_id= \'+store_id+\' = \'+data[product_id][store_id]); */
+ let new_val = data[product_id][store_id][\'division_fact\'];
+ let colors_array = data[product_id][store_id][\'color\'];
+
+ for (color in data[product_id][store_id][\'color\']) {
+ let color_quantity = data[product_id][store_id][\'color\'][color];
+ let color_md5 = color;
+ let dividcolor=\'color\'+product_id+\'\'+store_id+\'\'+color_md5+\'\';
+
+ if($(\'#\'+dividcolor).hasClass("active")){} else {
+ $(\'#\'+dividcolor).val(\'\'+color_quantity+\'\');
+ $(\'#\'+dividcolor).text(\'\'+color_quantity+\'\');
+ $(\'#\'+dividcolor).attr(\'title\',\'\'+color_quantity+\'\');
+ }
+ }
+
+ let divid=\'division_fact\'+product_id+\'\'+store_id;
+ let val=$(\'#\'+divid).val();
+
+
+ if(val!=new_val && $(\'#\'+divid).type == "input") {
+ $(\'#\'+divid).css(\'border\',\'1px #cd0202 solid\');
+ calcu(product_id);
+ }
+
+ if($(\'#\'+divid).hasClass("active")){
+ } else {
+ $(\'#\'+divid).val(\'\'+new_val+\'\');
+ $(\'#\'+divid).text(\'\'+new_val+\'\');
+ $(\'#\'+divid).attr(\'title\',\'\'+new_val+\'\');
+ }
+
+ }
+
+
+}
+
+ });
+
+}
+
+
+window.onload = function() {
+load_devision_ajax();
+};
+
+setInterval(function () {
+
+/*load_devision_ajax();*/
+
+ },5000);
+
+/*
+setInterval(function () {
+var myNodeList = document.querySelectorAll(\'.producted\');
+if( myNodeList.length) {
+for (let el of myNodeList) {
+ let product_id = el.getAttribute(\'id-data\');
+ calc_colors(product_id);
+}
+}
+
+},5000);
+
+*/
+
+var param = $("meta[name=csrf-param]").attr("content");
+var token = $("meta[name=csrf-token]").attr("content");
+
+setInterval(function () {
+$.ajax({
+ url: \'/shipment/ajax-admin-online/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { modul: \''.$modul.'\', action: \''.$act.'\', entity_id: '.$OrderId.', [param]: token},
+ success: function(data){
+ let data2 = JSON.parse(data);
+ let html =\'сейчас с этой страницей работают: \';
+ for (product_id in data2) {
+ html +=\'<span class="tag me-2">\'+data2[product_id]+\'</span>\';
+ }
+
+ $(\'#admin__online\').html(html);
+
+ }});
+},12000);
+
+
+
+function showKust(product_id){
+
+$.ajax({
+ url: \'/shipment/ajaxDivisionKust/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { order_id: '.$OrderId.', product_id: \'\'+product_id+\'\' },
+ success: function(data){
+ $(\'#tr__\'+product_id).after(data);
+
+ }});
+}
+
+
+function changef(id,typeint)
+{
+var uname=$(\'#\'+id+\'\').val();
+
+if(typeint==\'double\') uname = uname.replace(/[^0-9.\s]/gi, \'\');
+if(typeint==\'int\') uname = uname.replace(/[^0-9\s]/gi, \'\');
+$(\'#\'+id+\'\').val(\'\'+uname+\'\');
+}
+
+
+
+function EditField22(name_eng,product_id,store_id,provider_id)
+{
+/*
+changef(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\',\'int\');
+$.ajax({
+ url: \'/shipment/ajaxEditField/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$OrderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val()+\'\' },
+ success: function(data){
+
+ $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok\'+data+\'</span>\');
+ setTimeout(function(){$(\'.okk\').remove();}, 5000);
+
+
+ }});
+*/
+
+
+
+}
+
+
+
+
+
+function EditField(name_eng,product_id,store_id,provider_id)
+{
+/* alert(\' name \'+name_eng+\' product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');*/
+
+var v=$(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').val();
+$.ajax({
+ url: \'/shipment/ajaxEditField/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id: '.$OrderId.', name_eng: \'\'+name_eng+\'\', store_id:\'\'+store_id+\'\', product_id:\'\'+product_id+\'\', provider_id: \'\'+provider_id+\'\', value:\'\'+v+\'\' },
+ success: function(data){
+ $(\'#\'+name_eng+\'\'+product_id+\'\'+store_id+\'\').after(\'<span class="okk">ok</span>\');
+ setTimeout(function(){$(\'.okk\').remove();}, 6000);
+ }});
+}
+
+function EditFieldColor(field_id,product_id,store_id,provider_id,color,color_md5)
+{
+var v=$(\'#\'+color_md5+\'\').val();
+/*alert(\' field_id \'+field_id+\' v=\'+v+\' color=\'+color+\' color_md5=\'+color_md5+\' product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
+*/
+
+$.ajax({
+ url: \'/shipment/ajaxEditFieldColor/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',store_id:\'\'+store_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },
+ success: function(data){
+ $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
+ setTimeout(function(){$(\'.okk\').remove();}, 6000);
+ }});
+}
+
+
+function EditZakupColor(field_id,product_id,provider_id,color,color_md5)
+{
+var v=$(\'#\'+color_md5+\'\').val();
+/*alert(\' field_id \'+field_id+\' v=\'+v+\' color=\'+color+\' color_md5=\'+color_md5+\' product_id=\'+product_id+\' store_id=\'+store_id+\' provider_id=\'+provider_id+\'\');
+*/
+
+$.ajax({
+ url: \'/shipment/ajaxEditZakupColor/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: { id:'.$OrderId.',field_id:\'\'+field_id+\'\',product_id:\'\'+product_id+\'\', provider_id:\'\'+provider_id+\'\',value:\'\'+v+\'\',color:\'\'+color+\'\' },
+ success: function(data){
+ $(\'#\'+color_md5+\'\').after(\'<span class="okk">ok \'+data+\'</span>\');
+ setTimeout(function(){$(\'.okk\').remove();}, 3000);
+ }});
+}
+
+
+</script>
+
+<style>
+.zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+.zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+.zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+.zak> :not(caption)>*>* {
+ padding: 0.05rem;
+ background-color: 1px;
+ box-shadow: none;
+}
+.zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+.zak {
+ border-collapse: collapse;
+ border-spacing: 0;
+ overflow: hidden;
+}
+.zak th, .zak td {
+ border: 1px solid #e6e6e6;
+ padding: 0.1rem;
+ vertical-align: middle;
+ position: relative;
+}
+
+
+.zak td:hover:before,.zak td.kust1:hover:before {
+ background-color: #e3e3e3;
+ content: \'\';
+ height: 100%;
+ left: -5000px;
+ position: absolute;
+ top: 0;
+ width: 10000px;
+ z-index: -2;
+}
+
+.zak td:hover:after,.zak td.kust1:after {
+ background-color: #cdcdcd;
+ content: \'\';
+ height: 10000px;
+ left: 0;
+ position: absolute;
+ top: -5000px;
+ width: 100%;
+ z-index: -1;
+}
+
+.zak tbody td input.form-control{font-size:0.7rem;max-width:50px;border:0;border-radius:0;color:#333;padding:0.1rem;margin:0;text-align:center;}
+.zak tbody td input.form-control:focus{border:2px #cd0202 solid;background:#ffccdb}
+.zak td.bg-danger,.zak td.bg-indigo,.zak td.bg-info, .zak tr th.bg-danger, .zak tr th.bg-info, .zak tr th.bg-indigo{color:#fff;}
+
+table.zak thead th,
+table.zak tr.zg th th,table.zak tr.zg td td {
+ vertical-align: bottom;
+ line-height: normal;
+}
+table.zak thead b, table.zak tbody b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+
+}
+
+
+table.zak tr.zg th b, table.zak tr.zg td b {
+ writing-mode: vertical-rl;
+ transform: scale(-1);
+ font-weight:normal; font-size:0.6rem;
+}
+
+ .app-content .side-app {
+ padding: 25px 0.5rem 0 0.5rem;
+}
+
+.zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+.zak td.td_product:hover {background:#fff;}
+
+.zak tr td.pr,.zak tr td.ost{text-align:center;}
+.zak tr td.pr{background:#ddd}
+.zak tr td.ost{background:#e6e6e6}
+
+.zak td{text-align:center; vertical-align: bottom;}
+.zak td.lf{text-align:left; background:#fff}
+
+';
+/*
+foreach($kustBackground as $kustId =>$bg) {
+
+$_CONFIG["jscss"] .='
+table.zak tr td.kust'.$kustId.' {background:'.$bg.'}
+table.zak tr:hover td.kust'.$kustId.' {background:#cdcdcd}
+
+';
+
+}
+*/
+
+$_CONFIG["jscss"] .='
+input::-webkit-outer-spin-button,
+input::-webkit-inner-spin-button {
+ -webkit-appearance: none;
+ margin: 0;
+}</style>';
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
--- /dev/null
+<?php
+
+
+use yii\grid\ActionColumn;
+use yii\helpers\Url;
+use yii\helpers\Html;
+use yii\grid\GridView;
+use yii\widgets\Pjax;
+use yii_app\records\Dashboard;
+use yii_app\records\StoreOrdersFields;
+use yii_app\records\StoreOrdersStatuses;
+use yii_app\records\StoreOrderStatus;
+use yii_app\services\ShipmentService;
+
+/* @var $this yii\web\View */
+/* @var $bonusConversionCost int */
+
+/* @var $userSalarySalut float */
+/* @var $userSalarySalutPremium float */
+/* @var $storeOrders array */
+/* @var $dozakupka array */
+/* @var $store_orders_statuses array */
+/* @var $dataStoreOrdersFields array */
+/* @var $dostupFields array */
+/* @var $bgFields array */
+/* @var $orders_status_description array */
+/* @var $adminGroups array */
+/* @var $urlActionPart string */
+/* @var $orderId string */
+/* @var $groupId int */
+/* @var $userGroup string */
+/* @var $orderData array */
+/* @var $storeOrderStatusDescription string */
+/* @var $storeOrderStatus string */
+/* @var $storeId ?int */
+/* @var $status_order_id int */
+/* @var $status_edit_dostup array */
+/* @var $store_orders_status_description array */
+/* @var $storesArray array */
+/* @var $storeArr array */
+/* @var $store_orders_statuses array */
+/* @var $statuses_stores_show array */
+/* @var $products_varieties array */
+/* @var $products_class array */
+/* @var $products array */
+/* @var $productsOptions array */
+/* @var $productsColorsArray array */
+/* @var $prov array */
+/* @var $statuses_dostup array */
+/* @var $dostup_fields array */
+/* @var $bg_fields array */
+/* @var $fieldsRows array */
+/* @var $dataTableHeader array */
+/* @var $shipmentService object */
+
+$this->title = 'Заказ товара';
+$this->params['breadcrumbs'][] = $this->title;
+$modul = 'shipment';
+
+
+
+$this->registerCssFile('/css/table/table.css', ['position' => \yii\web\View::POS_END]);
+
+?>
+
+
+ <div class="index">
+
+ <h1><?= Html::encode($this->title) ?></h1>
+
+
+
+
+ </div>
+ <div class="alert alert-warning" role="alert"><a href="/shipments/index" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+ <a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+ <a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+ Описание статуса: <?php echo $storeOrderStatusDescription ?> Под кем будем просматривать
+<?php
+foreach ($adminGroups as $gid => $nameGroup) {
+
+ $buttonStyle = '';
+ $urlRow = '/shipment/' . $urlActionPart .'/?id=' . $orderId . '&group_id=' . $gid;
+
+ if ($gid == $groupId) {
+ $buttonStyle = 'btn-success';
+ } else {
+ $buttonStyle = 'btn-outline-info';
+ }
+
+ ?><a href='<?= $urlRow?>' class='m-1 btn btn-sm <?php echo $buttonStyle;?>'><?php echo $nameGroup; ?></a><?php
+
+}
+?>
+
+
+<br>
+<?php
+?>
+
+
+ Дата старта продаж (от этой даты считаем продажи при авто-заказе) <?php echo $orderData['date_start']; ?>
+ Дата деления (от этой даты считаем продажи при делении)<?php echo $orderData['division_date']; ?>
+
+
+
+
+<!--<a href="/shipment/' . $urlActionPart . '/?id=' . $orderId . '&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsDataTest();" class="btn btn-info me-2">1) TEST!!! поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>
+
+<a href="/shipment/<?php echo $urlActionPart;?>/?id=<?php echo $orderId ?>'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+<h1 class="page-title mb-0 text-primary">Заказ товара <?php echo $orderData["name"] ?> id=<?php echo $orderId ?>
+<span class="btn btn-lime"><?php echo $storeOrderStatus ?></span> ваша роль <b> <?php echo $userGroup ?></b></h1>';
+
+<?php
+// панель с магазинами
+ShipmentService::showOrderStoresPanel(
+ $status_order_id,
+ $status_edit_dostup,
+ $store_orders_status_description,
+ $storesArray,
+ $storeArr,
+ $storeId,
+ $store_orders_statuses,
+ $statuses_stores_show,
+ $urlActionPart,
+ $orderId,
+ $groupId
+);
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if (!empty($status_order_id) && $status_order_id == 1) {
+
+
+ ?><a href=\"/shipment/$urlActionPart/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a><?php
+
+
+ if (!empty($_REQUEST["load"])) {
+ $data = $db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+ foreach ($data as $row) {
+ $productsPrices[$row["product_id"]] = $row["price"];
+ }
+ $data_uper = [];
+ foreach ($products as $productId => $nameProduct) {
+ echo "<br>$nameProduct Роз. цена=" . $productsPrices[$productId] . " закуп " . $productsOptions[$productId]["price_zakup"] . " ";
+ $price = $productsPrices[$productId];
+ $data_uper[$productId]["NULL"]["NULL"] = $price;
+
+ $db::sql("
+ UPDATE
+ `store_orders_prices`
+ SET purchase_price='$price'
+ WHERE
+ product_id='$productId'
+ AND
+ order_id='$orderId'
+ AND
+ provider_id=1
+ AND
+ purchase_price!='0.00'"
+ );
+
+ }
+
+//розничная цена
+ insert_store_orders_fields($data_uper, "purchase_price");
+
+
+ $data_uper = [];
+ foreach ($products as $productId => $nameProduct) {
+ $price = $productsOptions[$productId]["price_zakup"];
+ $data_uper[$productId]["NULL"]["NULL"] = $productsOptions[$productId]["price_zakup"];
+ $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+ }
+ insert_store_orders_fields($data_uper, "purchase_price_zakup");
+
+//header("Location: /shipment/$urlActionPart/?id=$orderId&group_id=$gid");
+ }
+
+
+}
+
+
+//если выбран магазин то
+if (!empty($store_id)) echo '<input type=hidden name=store_id_id value=' . $store_id . ' id=store_id_id>';
+
+echo '
+<div id=edit_div></div>
+<div class="table-responsive mt-3">
+ <table class="zak">';
+$html = '<thead>
+ <tr class="zg">
+ <th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+ <span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id=' . $status_order_id . '" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead = $html; // формируем thead
+$head_td = $html;
+
+
+
+$rowArraySum = [];
+$shipmentService->rowArraySum = [];
+
+
+if (!empty($groupId)) {
+ foreach ($dataStoreOrdersFields as $row) {
+ $dostup = $dostup_fields[$row["id"]];
+ $bg = $bg_fields[$row["id"]];
+ if ($dostup == "edit" or $dostup == "show") {
+
+
+ $html = '<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="' . $row["name_full"] . ' ' . $row["name_eng"] . '" onclick="ajaxFieldInfo(' . $row["id"] . ')" style="max-width:90px;">
+ <b>' . $row["name"] . '</b></th>';
+ $thead .= $html;
+ $head_td .= $html;
+ }
+
+ }
+}
+
+$thead .= '</tr></thead>';
+$head_td .= '</tr>';
+echo '' . $thead . '<tbody>';
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if (!empty($store_id)) {
+ $data3 = $db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
+AND store_id!='' AND quantity>0 AND store_id=?", [$store_id]);
+ foreach ($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]] = $row2["quantity"];
+}
+
+//$data3 = $db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+//$data3 = ProductsClass::find()->andWhere(['tip' => array('potted','wrap')])->asArray()->all();
+
+
+
+
+$trCount = 0;
+foreach ($products as $pid => $name) {
+ if ($trCount == 20) {
+ $trCount = 0;
+ echo $head_td;
+ }
+ $trCount++;
+
+ echo '<tr';
+
+
+ if (!empty($store_id) and empty($store_planogramAllStores[$store_id][$pid])) {
+ echo ' class="bg-danger"';
+ }
+
+
+ if (empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) {
+// echo ' class="bg-danger"';
+//
+// echo ' style="opacity:0.5"';
+ }
+
+
+ echo '><td class="text-right">';
+//если статус общий то группируем по магазинам
+ if (empty($statuses_stores_show[$status_order_id])) {
+ echo '<span onclick="$(\'.trstores_' . $pid . '\').toggle();" class="btn btn-default btn-sm">+</span>';
+ }
+ echo '' . $name . '';
+
+
+//узнаем категорибю товара
+ $categoryId = $productsOptions[$pid]["parent_id"];
+ $tip = '';
+// по категории узнаем тип товара горшечка или упаковка
+ if (!empty($products_class[$categoryId])) {
+ $tip = $products_class[$categoryId];
+ }
+
+
+ if (array_key_exists($pid, $productsColorsArray)) {
+ if (count($productsColorsArray[$pid]) > 0) {
+ echo '<span onclick="$(\'.trcolors_' . $pid . '\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+ }
+ }
+ echo '<input type=hidden name=provider_id[' . $pid . '] value="' . $prov[$pid] . '">';
+ echo '</td>';
+
+
+// if (!empty($store_id)) {
+ foreach ($dataStoreOrdersFields as $row) {
+ $shipmentService->printFieldTd($row["name_eng"], $pid, null);
+ }
+// }
+
+ echo '</tr>';
+
+
+//begin colors
+ if (array_key_exists($pid, $productsColorsArray)) {
+ foreach ($productsColorsArray[$pid] as $color) {
+ $color = trim($color);
+ if (!empty($color)) {
+ echo '<tr class="trcolors trcolors_' . $pid . ' bg-gray-300" style="display:none;"><td class="text-right">' . $name . ' + <span class="btn btn-sm btn-warning me-1">' . $color . '</span>';
+
+ if (!empty($products_varieties[$pid][$color])) {
+ echo '<div class="sorts_flowers" style="display:none;"><br>сорта ';
+ foreach ($products_varieties[$pid][$color] as $k => $var) {
+ echo "<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
+ }
+ echo '</div>';
+ }
+
+
+
+ if (!empty($store_id) && !empty($color)) {
+ foreach ($dataStoreOrdersFields as $row) {
+// printFieldTd($row["name_eng"], $pid, null, null);
+ $shipmentService->printFieldTd($row["name_eng"], $pid, $store_id, $color);
+ }
+ }
+
+ echo "</tr>";
+ }
+
+ }
+ }
+//end colors
+
+
+}
+
+
+echo '<tr class="bg-success zg"><td class="text-right"></td>';
+foreach ($dataStoreOrdersFields as $row) {
+ $dostup = $dostup_fields[$row["id"]];
+ $bg = $bg_fields[$row["id"]];
+ if ($dostup == "edit" or $dostup == "show") {
+ echo '<td class="text-center" title="' . $row["name_full"] . ' ' . $row["name_eng"] . '"><b>' . $row["name"] . ' (' . $fieldsRows[$row["name_eng"]]["row_type_sum"] . ')</b></td>';
+ }
+}
+echo '</tr>
+<tr class="bg-success"><td class="text-right">итого -ГО</td>';
+foreach ($dataStoreOrdersFields as $row) {
+ $dostup = $dostup_fields[$row["id"]];
+ if ($dostup == "edit" or $dostup == "show") {
+ $s = "";
+ if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "amount") {
+ $s = $shipmentService->rowArraySum[$row["id"]] ?? 0;
+ }
+ if ($fieldsRows[$row["name_eng"]]["row_type_sum"] == "avg") {
+ if (!empty($shipmentService->rowArraySum["cnt__" . $row["id"]])) {
+ $s = round($shipmentService->rowArraySum[$row["id"]] ?? 0 / $shipmentService->rowArraySum["cnt__" . $row["id"]]);
+ }
+ }
+
+ echo '<td class="text-center ' . $bg . '"><b>' . $s . '</b></td>';
+ }
+}
+echo '</tr></tbody>';
+echo '</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+/*
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+ $all=0;
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $all =$all+$summ;
+ $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+ // if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
+
+
+ }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+
+
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+
+
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+echo "<script>
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');
+ $.ajax({
+ url: '/shipments/ajaxFieldInfo/',
+ method: 'post',
+ dataType: 'html',
+ data: {id: id},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function ajaxUpdateFieldsDataTest(){
+ $('#modal-7 .modal-body').html('Test Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipments/ajax-update-fields-data-test/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: '2', update:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }})
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipments/ajaxUpdateFieldsData/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }})
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipments/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }})
+}
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipments/ajaxUploadAutoPurchase/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }})
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipments/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1', foreachSalesHand:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }})
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+
+ if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');
+ $.ajax({
+ url: '/shipments/ajaxUpdateStep/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, deleteAll:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }})
+}
+}
+
+
+</script>";
+
+echo '<!-- MODAL -->
+ <div class="modal fade" id="modal-7">
+ <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body p-0">
+
+ </div>
+
+ </div>
+</div>
+</div>';
+
+
+//include "templates/bottom.php";
+
+
+
+
+
+
+
+
+
+
+
+/*
+
+--
+
+
+
+--
+
+
+ */
\ No newline at end of file
--- /dev/null
+<?php
+
+use yii\helpers\ArrayHelper;
+use yii_app\records\AdminGroup;
+use yii_app\records\StoreOrders;
+use yii_app\records\StoreOrderStatusLog;
+use yii_app\records\Prices;
+use yii_app\records\StoreOrdersPrices;
+use yii_app\records\ProductsVarieties;
+use yii_app\records\StoreOrdersStatuses;
+use yii_app\records\StoreOrdersFields;
+use yii_app\records\StorePlanogram;
+use yii_app\records\ProductsClass;
+use yii\db\Expression;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+//include_once(dirname(__DIR__, 2) . "/inc/shipment.php");
+
+//include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет дступа");
+global $products, // массив с товарами производителя прикрепленного к этой закупке
+ $orderId, // id- заказа
+ $store_id, // GUID магазина
+ $storesArray, // массив с магазинами
+ $group_id, // ID группы авторизованного сотрудника
+ $fieldsRows, // массив с данными по полями - ключ name_eng
+ $date_start_sale, // дата старта продаж от которой считаемстатистику
+ $whereInProductsId, // условие sql запроса по вхождение только определнных продуктов по ID. in ('1',...,'12')
+ $whereInProductsIdArr, // $whereInProductsId в форме массива
+ $FiledsData, // массив со всеми данными по всем магазинам работаем с ним - в нем все перменные
+ $FiledsDataSumm, // массив с суммой данных по столбцам по всем магазинам - по каждому товару
+ $FiledsDataSummStats, // массив с суммами по всем магазинам и цветам
+ $status_order_id, // ID текущего статуса закупаки
+ $store_orders_statuses, // массим со статсами закупок
+ $statuses_stores_show, // массив со статусами на которых необходимо выводить список магазинов
+ $status_edit_dostup, //массив с доступами к полям - просомтр или редактирование
+ $store_orders_status_description, // - массив с описанием стутса
+ $dostup_fields,
+ $bg_fields,
+ $ProductsOptions;
+
+$act='fields-data2'; // часть url action
+
+$group_id=$_SESSION["group_id"]; // ID группы сотрудника
+if(!empty($_SESSION["group_id_init"])) $group_id=$_SESSION["group_id_init"];
+
+
+
+
+if(!empty($_REQUEST["group_id"])) {
+ $group_id=(int)$_REQUEST["group_id"];
+ $_SESSION["group_id_init"]=$group_id;
+}
+
+
+
+$time = strtotime('this week monday, 00:00'); // текущий понедельник в формате unixtimestamp
+$date2=date('Y-m-d 23:59:59', $time); // текущий понедельник
+$date1=date('Y-m-d 00:00:00', $time-86400*7); // текущий понедельник минус сеть дней
+
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["id"])) { $orderId=(int)$_REQUEST["id"]; } else exit("Укажите ID закупки");
+
+
+// измененеи статуса заказа
+if(!empty($_POST["edit_status"]) and !empty($_REQUEST["id"])) {
+ StoreOrders::updateAll(['status' => (int)$_POST["status_new"]], ['id' => $orderId]);
+// $db::sql("UPDATE store_orders SET status=? WHERE id=?",[(int)$_POST["status_new"],$orderId]);
+ $storeOrderStatusLog = new StoreOrderStatusLog;
+ $storeOrderStatusLog->status = (int)$_POST["status_new"];
+ $storeOrderStatusLog->order_id = $orderId;
+ $storeOrderStatusLog->date = date('Y-m-d H:i:s');
+ $storeOrderStatusLog->admin_id = $_SESSION["admin_id"];
+ $storeOrderStatusLog->save();
+// $db::sql("INSERT IGNORE INTO store_order_status_log (status, order_id, date, admin_id) VALUES (?,?,NOW(),?)",[(int)$_POST["status_new"],$orderId, $_SESSION["admin_id"]]);
+
+ mess("Статус изменен");
+}
+
+
+
+include_once(dirname(__DIR__, 2) . "/inc/functionsFiedlsData.php");
+
+$data = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])
+ ->where(['in', 'id', ['1','10','7','51','9','17','70']])->all(), 'id', 'name');
+//$data=$db::mapping("SELECT id,name FROM admin_group WHERE id in ('1','10','7','51','9','17','70')");
+
+
+
+echo'<div class="alert alert-warning" role="alert"><a href="/shipment/" class="btn me-2 btn-info">❮ назад в закупки</a>
+
+
+
+<a href="https://youtu.be/Ol0mWDFYKsw" class="btn me-2 btn-danger" target=new>видео-инструкция новый интерфейс 2</a>
+<a href="https://youtu.be/4sGW2MqDMgM" class="btn me-2 btn-danger" target=new>видео2</a>
+
+
+Описание статуса: '.$store_orders_status_description[$status_order_id].'
+
+';
+
+echo"Под кем будем просматривать ";
+foreach($data as $gid => $nameGroup) {
+
+ echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid\" class=\"m-1 btn btn-sm btn-";
+
+ if($gid==$group_id) echo"success"; else echo"outline-info";
+
+ echo"\">$nameGroup</a>";
+
+}
+echo'
+<br>
+
+Дата старта продаж (от этой даты считаем продажи при авто-заказе) '.$OrderData["date_start"].'
+Дата деления (от этой даты считаем продажи при делении)'.$OrderData["division_date"].'
+
+
+
+
+
+
+<!--<a href="/shipment/'.$act.'/?id='.$orderId.'&insert=1" class="btn btn-danger me-2">1) подгрузить данные из старого интерфейса</a>-->
+<span onclick="ajaxUpdateFieldsData();" class="btn btn-info me-2">1) поссчитать статистические данные данные</span>
+<span onclick="ajaxUpdateStep();" class="btn btn-indigo me-2">2) обновить остаток склада</span>
+<span onclick="foreachSalesHand();" class="btn btn-warning me-2"> 3) обновить с распределене остатков склада по ячейкам добавка вручную</span>
+<span onclick="ajaxUploadAutoPurchase();" class="btn btn-warning me-2">автозаказ общий обновить</span>
+
+
+
+
+<span onclick="deleteAll();" class="btn btn-danger me-2">!!!очистить все данные из нового интерфейса!!</span>
+
+
+
+</div>';
+
+//<a href="/shipment/'.$act.'/?id='.$orderId.'&update=1" class="btn btn-info me-2">обновить данные в таблице</a>
+
+
+echo'<h1 class="page-title mb-0 text-primary">Заказ товара '.$OrderData["name"].' id='.$orderId.'
+<span class="btn btn-lime">'.$store_orders_statuses[$status_order_id] .'</span> ваша роль <b>'.$users_group[$_SESSION["group_id"]].'</b></h1>';
+
+global $act;
+$act = 'fields-data2';
+// панель с магазинами
+showOrderStoresPanel();
+
+//если статус новый то вносим цены по товарам в нужые столбцы - розничная цена
+if($status_order_id==1) {
+
+
+ echo"<a href=\"/shipment/$act/?id=$orderId&group_id=$gid&load=purchase_price\" class=\"btn btn-danger me-2\">загрузить розничные цены</a>";
+
+
+ if(!empty($_REQUEST["load"])) {
+ $data = Prices::find()->select(['product_id', 'price'])->where(['in', 'product_id', $whereInProductsIdArr])->asArray()->all();
+// $data=$db::getRows("SELECT product_id, price FROM `prices` WHERE product_id $whereInProductsId");
+ foreach($data as $row) $productsPrices[$row["product_id"]]=$row["price"];
+ $data_uper=[];
+ foreach($products as $productId => $nameProduct) {
+ echo"<br>$nameProduct Роз. цена=".$productsPrices[$productId]." закуп ".$ProductsOptions[$productId]["price_zakup"]." ";
+ $price=$productsPrices[$productId];
+ $data_uper[$productId]["NULL"]["NULL"]=$price;
+
+ StoreOrdersPrices::updateAll(['purchase_price' => $price],
+ ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price', '0.00']]);
+// $db::sql("UPDATE `store_orders_prices` SET purchase_price='$price'
+//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price!='0.00'");
+
+ }
+
+//розничная цена
+ insert_store_orders_fields($data_uper,"purchase_price");
+
+
+ $data_uper=[];
+ foreach($products as $productId => $nameProduct) {
+ $price=$ProductsOptions[$productId]["price_zakup"];
+ $data_uper[$productId]["NULL"]["NULL"]=$ProductsOptions[$productId]["price_zakup"];
+ StoreOrdersPrices::updateAll(['purchase_price_zakup' => $price],
+ ['and', ['product_id' => $productId], ['order_id' => $orderId], ['provider_id' => 1], ['!=', 'purchase_price_zakup', '0.00']]);
+// $db::sql("UPDATE `store_orders_prices` SET purchase_price_zakup='$price'
+//WHERE product_id='$productId' AND order_id='$orderId' AND provider_id=1 AND purchase_price_zakup!='0.00'");
+ }
+ insert_store_orders_fields($data_uper,"purchase_price_zakup");
+
+//header("Location: /shipment/$act/?id=$orderId&group_id=$gid");
+ }
+
+
+}
+
+
+$products_varieties=[];
+$data = ProductsVarieties::find()->select(['id', 'product_id', 'color', 'name'])->asArray()->all();
+//$data=$db::getRows("SELECT id,product_id,color,name FROM `products_varieties`");
+foreach($data as $row) $products_varieties[$row["product_id"]][$row["color"]][$row["id"]]=$row["name"];
+
+
+
+//если выбран магазин то
+if(!empty($store_id)) echo'<input type=hidden name=store_id_id value='.$store_id.' id=store_id_id>';
+
+echo'<div id=edit_div></div><div class="table-responsive mt-3"><table class="zak">';
+$html='<thead><tr class="zg"><th class="text-right">наименование <span onclick="$(\'.trcolors\').toggle();" class="btn btn-sm btn-warning">раскрыть цвета</span>
+
+<span onclick="$(\'.sorts_flowers\').toggle();" class="btn btn-sm btn-warning">показать сорта</span>
+
+
+<a href="/shipment/statusFieldsSort/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-secondary">сортировка столбцов</a>
+
+<a href="/shipment/config/?status_id='.$status_order_id.'" target=new class="btn btn-sm btn-grey">настройка столбцов</a>
+
+
+</th>';
+$thead=$html; // формируем thead
+$head_td=$html;
+
+
+global $rowArraySum;
+$rowArraySum=[];
+
+if(!empty($group_id)) {
+//извлекаем сортировку полей в зависимости от группы сотрудника
+//$sort=$db::getValue("SELECT fields_sort FROM store_orders_fields_sort WHERE group_id=?",[$group_id]);
+
+ $storeOrdersStatuses = StoreOrdersStatuses::find()->select(['fields_sort'])->where(['id' => $status_order_id])->asArray()->one();
+ $sort = $storeOrdersStatuses['fields_sort'] ?? '';
+// $sort=$db::getValue("SELECT fields_sort FROM store_orders_statuses WHERE id=?",[$status_order_id]);
+// if(!empty($sort)) $sort="ORDER BY FIELD(`id`, $sort) ";
+
+ $dataQuery = StoreOrdersFields::find();
+ if (!empty($sort)) {
+ $dataQuery->orderBy([new Expression('FIELD(id, ' . $sort . ')')]);
+ }
+ $data = $dataQuery->asArray()->all();
+// $data=$db::getRows("SELECT * FROM store_orders_fields $sort");
+}
+foreach($data as $row) {
+ $dostup=$dostup_fields[$row["id"]];
+ $bg=$bg_fields[$row["id"]];
+ if($dostup=="edit" or $dostup=="show") {
+
+
+
+ $html ='<th class="text-center" data-bs-placement="top" data-bs-toggle="tooltip" data-bs-original-title="'.$row["name_full"].' '.$row["name_eng"].'" onclick="ajaxFieldInfo('.$row["id"].');" style="max-width:90px;">
+<b>'.$row["name"].'</b></th>';
+ $thead .=$html;
+ $head_td .=$html;
+ }
+
+}
+$thead .='</tr></thead>';
+$head_td .='</tr>';
+echo ''.$thead.'<tbody>';
+
+
+
+//$FiledsData=getDataFiledsData();
+
+
+// полнограммы по всем магазинам
+if(!empty($store_id)) {
+ $data3 = StorePlanogram::find()->select(['store_id', 'product_id', 'quantity'])->where(['color' => ''])
+ ->andWhere(['!=', 'store_id', ''])->andWhere(['>', 'quantity', '0'])->andWhere(['store_id' => $store_id])->asArray()->all();
+// $data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color=''
+//AND store_id!='' AND quantity>0 AND store_id=?",[$store_id]);
+ foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+}
+
+$data3 = ProductsClass::find()->where(['in', 'tip', ['potted','wrap']])->asArray()->all();
+//$data3=$db::getRows("SELECT * FROM products_class WHERE tip in ('potted','wrap')");
+foreach($data3 as $row2) $products_class[$row2["category_id"]]=$row2["tip"];
+
+
+
+
+
+$trCount=0;
+foreach($products as $pid =>$name) {
+ if($trCount==20) {
+ $trCount=0;
+ echo $head_td;
+ }
+ $trCount++;
+
+ echo'<tr';
+
+
+ if(empty($store_planogramAllStores[$store_id][$pid]) and !empty($store_id)) echo' class="bg-danger"';
+
+
+ if(empty($FiledsData["quantity_warehouseman_fact"][$pid]["NULL"]["NULL"]) and $status_order_id >= 6) { echo' class="bg-danger"';
+
+ //echo' style="opacity:0.5"';
+ }
+
+
+
+ echo'><td class="text-right">';
+//если статус общий то группируем по магазинам
+ if(empty($statuses_stores_show[$status_order_id])) { echo'<span onclick="$(\'.trstores_'.$pid.'\').toggle();" class="btn btn-default btn-sm">+</span>'; }
+ echo''.$name.'';
+
+
+
+//узнаем категорибю товара
+ $categoryId=$ProductsOptions[$pid]["parent_id"];
+// по категории узнаем тип товара горшечка или упаковка
+ $tip=$products_class[$categoryId] ?? '';
+
+
+ if(count($productsColorsArray[$pid] ?? [])>0) echo'<span onclick="$(\'.trcolors_'.$pid.'\').toggle();" class="btn btn-sm btn-success">+ цвета</span>';
+ echo'<input type=hidden name=provider_id['.$pid.'] value="'.$prov[$pid].'">';
+ echo'</td>';
+
+ foreach($data as $row) printFieldTd($row["name_eng"],$pid,$store_id);
+
+ echo'</tr>';
+
+
+//begin colors
+ foreach($productsColorsArray[$pid] ?? [] as $color) {
+ $color=trim($color);
+ if(!empty($color)) {
+ echo'<tr class="trcolors trcolors_'.$pid.' bg-gray-300" style="display:none;"><td class="text-right">'.$name.' + <span class="btn btn-sm btn-warning me-1">'.$color.'</span>';
+
+ if(!empty($products_varieties[$pid][$color])) {
+ echo'<div class="sorts_flowers" style="display:none;"><br>сорта ';
+ foreach($products_varieties[$pid][$color] as $k => $var) {
+ echo"<span class=\"btn btn-sm btn-outline-info me-1\">$var</span>";
+ }
+ echo'</div>';
+ }
+
+ foreach($data as $row) {
+ printFieldTd($row["name_eng"],$pid,$store_id,$color);
+
+ }
+ echo"</tr>";
+ }
+
+ }
+//end colors
+
+
+}
+
+
+echo'<tr class="bg-success zg"><td class="text-right"></td>';
+foreach($data as $row) {
+ $dostup=$dostup_fields[$row["id"]];
+ $bg=$bg_fields[$row["id"]];
+ if($dostup=="edit" or $dostup=="show") {
+ echo'<td class="text-center" title="'.$row["name_full"].' '.$row["name_eng"].'"><b>'.$row["name"].' ('.$fieldsRows[$row["name_eng"]]["row_type_sum"].')</b></td>';
+ }
+}
+echo'</tr>
+<tr class="bg-success"><td class="text-right">итого</td>';
+foreach($data as $row) {
+ $dostup=$dostup_fields[$row["id"]];
+ if($dostup=="edit" or $dostup=="show") {
+ $s="";
+ if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="amount") $s=$rowArraySum[$row["id"]];
+ if($fieldsRows[$row["name_eng"]]["row_type_sum"]=="avg") $s=round($rowArraySum[$row["id"]]/$rowArraySum["cnt__".$row["id"]]);
+
+ echo'<td class="text-center '.$bg.'"><b>'.$s.'</b></td>';
+ }
+}
+echo'</tr></tbody>';
+echo'</table>
+
+<style>table tr td.bg-lime{background:lime;color:#fff;}</style>';
+/*
+$db::sql("DELETE FROM store_orders_fields_data WHERE field_name='division_auto_need_all' AND order_id='$orderId'");
+
+// суммируем деление и заносим данные в таблицу хранения данных по полям
+foreach($products as $productId => $name) {
+//echo"<br>$name ";
+ $all=0;
+ $division_auto_need_all=0;
+ foreach($storesArrayAll as $storeId => $nameStore) {
+ // echo"<br> <b>$nameStore</b>division_auto_need= ".$FiledsData["division_auto_need"][$productId][$storeId]["NULL"]." ";
+ // $summ=$FiledsData["division_auto_need"][$productId][$storeId]["NULL"] + $FiledsData["division_hand"][$productId][$storeId]["NULL"];
+ $all =$all+$summ;
+ $division_auto_need_all += $FiledsData["division_auto_need"][$productId][$storeId]["NULL"];
+ // if(!empty($summ)) { $data_uper=[];$data_uper[$productId][$storeId]["NULL"]=$summ;insert_store_orders_fields($data_uper,"division_summ");}
+
+
+ }
+
+$field_name="division_auto_need_all";
+//echo" Итого деления потребность + $division_auto_need_all = ".$FiledsData[$field_name][$productId]["NULL"]["NULL"]." division_auto_need_all=$division_auto_need_all ";
+if(!empty($division_auto_need_all)) {
+ $FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]=$division_auto_need_all;
+ $data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_auto_need_all;insert_store_orders_fields($data_uper,"division_auto_need_all");}
+
+
+}
+
+//пробегаемся по всем продуктам
+foreach($products as $productId => $name) {
+
+
+$division_auto_need_all=$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"];
+$quantity_warehouseman_fact=$FiledsData["quantity_warehouseman_fact"][$productId]["NULL"]["NULL"];
+
+
+echo"<br><b>$name</b> division_auto_need_all=".$FiledsData["division_auto_need_all"][$productId]["NULL"]["NULL"]."
+Сумма потребности =".$division_auto_need_all."
+Сумма получаено по факту ".$quantity_warehouseman_fact."";
+
+$division_ratio=1;
+if($division_auto_need_all > $quantity_warehouseman_fact) {
+$division_ratio=round($quantity_warehouseman_fact/$division_auto_need_all,2);
+
+echo"<font color=red>-меньше!</font>";
+
+echo" применяем коэффициент $division_ratio = ".$FiledsData["division_ratio"][$productId]["NULL"]["NULL"]." ";
+
+}
+
+$data_uper=[];$data_uper[$productId]["NULL"]["NULL"]=$division_ratio;
+insert_store_orders_fields($data_uper,"division_ratio");
+
+
+}
+
+*/
+
+
+
+
+$_CONFIG["jscss"] .="<script>
+ const param4x = $('meta[name=csrf-param]').attr('content');
+const token4x = $('meta[name=csrf-token]').attr('content');
+
+function ajaxFieldInfo(id){
+ $('#modal-7 .modal-body').html('Загружаем....');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('');
+ $.ajax({
+ url: '/shipment/ajaxFieldInfo/',
+ method: 'post',
+ dataType: 'html',
+ data: {id: id},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function ajaxUpdateFieldsData(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajax-update-fields-data/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update:'1', [param4x] : token4x},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function ajaxUpdateStep(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajax-update-step/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1', [param4x] : token4x},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function ajaxUploadAutoPurchase(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajaxUploadAutoPurchase/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1'},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+function foreachSalesHand(){
+ $('#modal-7 .modal-body').html('Считаем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Обновляем данные');
+ $.ajax({
+ url: '/shipment/ajax-update-step/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, update_step:'1', foreachSalesHand:'1', [param4x] : token4x},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+
+
+function deleteAll(){
+ const result = confirm('Удаляем данные?');
+
+ if (result) {
+
+ $('#modal-7 .modal-body').html('Удаляем данные');
+jQuery('#modal-7').modal('show', {backdrop: 'static'}); $('#modal-7 .modal-title').text('Удаляем данные');
+ $.ajax({
+ url: '/shipment/ajax-update-step/',
+ method: 'post',
+ dataType: 'html',
+ data: { id: $orderId, deleteAll:'1', [param4x] : token4x},
+ success: function(data){
+ $('#modal-7 .modal-body').html(data);
+ }});
+}
+}
+
+
+</script>";
+
+$_CONFIG["jscss"] .='<!-- MODAL -->
+ <div class="modal fade" id="modal-7">
+ <div class="modal-dialog modal-lg modal-dialog-centered text-center" role="document">
+ <div class="modal-content">
+ <div class="modal-header">
+ <h6 class="modal-title">Описание поля</h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body p-0">
+
+ </div>
+
+ </div>
+</div>
+</div>';
+
+
+
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
+
+
+
+
--- /dev/null
+<?php
+
+use \yii\helpers\ArrayHelper;
+use \yii_app\records\AdminGroup;
+use \yii_app\records\StoreOrdersFields;
+use \yii_app\records\StoreOrdersStatuses;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+//include"templates/top.php";
+
+//if($_SESSION["group_id"]>2) exit("У вас нет доступа");
+
+$roles = ArrayHelper::map(AdminGroup::find()->select(['id', 'name'])->where(['in', 'id', [7, 30, 17, 70, 71, 9, 51, 1, 10]])->all(), 'id', 'name');
+//$roles=$db::mapping("SELECT id, name FROM admin_group WHERE id=7 or id=30 or id=17 or id=70 or id=71 or id=9 or id=51 or id=1 or id=10");
+
+echo "<div class='m-5'>";
+
+echo'<h1 class="page-title mb-0 text-primary">Настройка статусов в заказе у поставщиков кто может ставить статусы</h1>';
+
+
+if(!empty($_POST["save"])){
+
+ foreach($_POST["description"] as $idr => $val) {
+
+ StoreOrdersFields::updateAll(['description' => $val], ['id' => $idr]);
+// $db::sql("UPDATE store_orders_fields SET description=? WHERE id=?",[$val,$idr]);
+
+ }
+
+
+}
+
+$data = StoreOrdersStatuses::find()->select(['id', 'dostup'])->asArray()->all();
+//$data=$db::getRows("SELECT id, dostup FROM `store_orders_statuses` WHERE 1");
+foreach($data as $row) {
+ $dostup[$row["id"]] = json_decode($row["dostup"], true);
+
+}
+
+
+echo'<form method=post action="/shipment/fields/">';
+?><input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" /><?php
+
+
+$data = StoreOrdersFields::find()->asArray()->all();
+//$data=$db::getRows("SELECT * FROM store_orders_fields");
+echo'<table class="table table-hover"><thead><th width=100>название кратко</th>
+<th>name_eng</th>
+<th>SQL таблица сохранения</th>
+
+<th>тип</th>
+<th>тип данных</th>
+
+<th>сумма по столбцу</th>
+<th>сохраняем цвета в ячейке</th>
+
+
+</thead><tbody>';
+foreach($data as $row) {
+
+ echo"
+ <tr><td><b>".$row["name"]."<b><br>
+ <small>".$row["name_full"]."</small></td>
+
+
+ <td>".$row["name_eng"]."</td>
+ <td>".$row["sql_table_values"]."</td>
+ <td>".$row["type"]."";
+
+ if(in_array($row["type"],array("multiplication","avg","difference")))
+ echo" <input type=text class=\"form-control\" name=func_content[".$row["id"]."] value=\"".$row["func_content"]."\">";
+
+ echo"</td>
+ <td>".$row["tip"]."</td>
+
+ <td>"; if($row["summ"]) echo"да"; echo"</td>
+ <td>"; if($row["colors_save"]) echo"да"; echo"</td>
+ </tr><tr><td colspan=7><textarea class=\"form-control\" name=description[".$row["id"]."] rows=1>".$row["description"]."</textarea></td></tr>";
+ /*
+ echo'<tr><td colspan=7><table>';
+ foreach($statuses as $gid => $name) {
+ if(!empty($roles[$gid])) {
+
+ echo"<tr><td class=\"text-right\">".$name."</td><td style=\"min-width:300px\"> ";
+
+ // $dostup[$status_id]
+
+ echo' </td></tr>';
+
+
+
+ }
+ }
+ echo'</table></td></tr>';
+ */
+
+}
+echo'</tbody></table><button class="btn btn-success" name="save" value=1>сохранить</button></div></form>';
+
+echo "</div>";
+
+//include"templates/bottom.php";
+
+
+
+
+
+
--- /dev/null
+<?php
+
+
+use yii\grid\ActionColumn;
+use yii\helpers\Url;
+use yii\helpers\Html;
+use yii\grid\GridView;
+use yii\widgets\Pjax;
+use yii_app\records\Dashboard;
+
+/* @var $this yii\web\View */
+/* @var $bonusConversionCost int */
+
+/* @var $userSalarySalut float */
+/* @var $userSalarySalutPremium float */
+/* @var $storeOrders array */
+/* @var $dozakupka array */
+/* @var $store_orders_statuses array */
+
+$this->title = 'Список закупок';
+$this->params['breadcrumbs'][] = $this->title;
+$modul = 'shipments';
+
+?>
+
+
+<div class="dashboard-index">
+
+ <h1>
+ <?= Html::encode($this->title) ?>
+ <?= Html::a('+ добавить закупку', ['add'], ['class' => 'btn btn-success']) ?>
+ </h1>
+
+</div>
+<?php
+
+foreach($storeOrders as $row) {
+ ?>
+ <div class="expanel expanel-default">
+ <div class="expanel-heading">
+
+ <span class="btn btn-white btn-light me-1" onclick="$('#external__<?php echo $row["id"]?>').toggle();">показать дозакупки</span>
+ <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $row["id"]?> class="btn btn-default fs-5">
+ <span class="btn btn-outline-info"><?php echo $row["id"]?></span> <?php echo $row["name"]?></a>
+
+
+ <div class="d-inline-block dropdown me-2">
+ <button type="button" class="btn bg-dark-transparent dropdown-toggle" onclick="$(this).parent().children('.dropdown-menu').toggle();">действия</button>
+ <div class="dropdown-menu" style="display:none;">
+ <a class="dropdown-item" href="/shipment/add/?id=<?php echo $row["id"]?>">правка</a>
+ <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $row["id"]?>>старый интерфейс</a>
+ <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $row["id"]?>>новый интерфейс</a>
+ <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $row["id"]?> >новый интерфейс2</a>
+ <a class="dropdown-item" href=/shipment/division/?id=<?php echo $row["id"]?>>деление</a>
+ <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $row["id"]?>>цвета для кустовых при заказе</a>
+
+ <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $row["id"]?>>деление - печать на складе</a>
+ <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $row["id"]?>>деление - по цветам</a>
+ </div>
+ </div>
+
+ <a href="/shipment/edit/?id=<?php echo $row["id"]?>" class="btn btn-warning btn-sm me-2"><?php echo $store_orders_statuses[$row["status"]]?></a>
+ <small>дата продаж: <?php echo $row["date_start"]?>, создано <?php echo $row["date_add"]?> <i><?php echo $row["comments"]?></i></small>
+
+
+
+
+ </div>
+
+ <div class="expanel-body" id="external__<?php echo $row["id"] ?>" style="display:none;">
+ <div class="row">
+ <?php
+ if (array_key_exists($row["id"], $dozakupka)) {
+ foreach($dozakupka[$row["id"]] as $rows) {
+
+ ?>
+ <div class="col-12">
+ <div class="ml-4">
+ <a href=/<?php echo $modul?>/fields-data/?id=<?php echo $rows["id"]?> class="btn btn-white fs-6 me-3">
+ <span class="btn btn-outline-info fs-6 me-2"><?php echo $rows["id"]?></span><?php echo $rows["name"]?>
+ <span class="me-2 btn btn-sm bg-warning"><?php echo $store_orders_statuses[$rows["status"]]?></span>
+ </a>
+ <div class="dropdown d-inline-block">
+ <button type="button" class="btn bg-dark-transparent dropdown-toggle" onclick="$(this).parent().children('.dropdown-menu').toggle();">действия </button>
+ <div class="dropdown-menu" style="">
+ <a class="dropdown-item" href="/shipment/add/?id=<?php echo $rows["id"]?>">правка</a>
+ <a class="dropdown-item" href=/<?php echo $modul?>/view/?id=<?php echo $rows["id"]?>>старый интерфейс</a>
+ <a class="dropdown-item" href=/<?php echo $modul?>/view2/?id=<?php echo $rows["id"]?>>новый интерфейс</a>
+ <a class="dropdown-item" href=/shipment/fields-data2/?id=<?php echo $rows["id"]?> >новый интерфейс2</a>
+ <a class="dropdown-item" href=/shipment/division/?id=<?php echo $rows["id"]?>>деление</a>
+ <a class="dropdown-item" href=/<?php echo $modul?>/purchase/?id=<?php echo $rows["id"]?>>цвета для кустовых при заказе</a>
+ <a class="dropdown-item" href=/shipment/division-print/?id=<?php echo $rows["id"]?>>деление - печать на складе</a>
+ <a class="dropdown-item" href=/shipment/division-print-edit2/?id=<?php echo $rows["id"]?>>деление - по цветам</a>
+ </div>
+ </div>
+ <i><?php echo $rows["comment"] ?? ''?></i>
+ <table class="table"><tbody></tbody></table>
+ </div>
+ </div>
+ <?php
+ }
+ }
+ ?>
+
+ </div>
+ </div>
+
+
+ </div>
+
+
+
+
+
+<?php
+}
--- /dev/null
+<?php
+
+use \yii_app\records\StorePlanogram;
+use \yii_app\records\StorePlanogramLogi;
+use \yii_app\records\StorePlanogramColorsSort;
+use \yii_app\records\Products1cOptions;
+use \yii_app\records\ProductsClass;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+//include"templates/top.php";
+
+$store_id = '';
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+
+
+//$dost=[1,2,4]; //$_SESSION["store_arr_dostup"]
+
+$k=0;
+$where="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+ if(!empty($guid)) {
+ if($k!=0) $where .=", ";
+ $where .="'$guid' ";
+ $k++;
+ }
+}
+
+if(!empty($where)) $where =" AND id in( $where )";
+
+
+if(in_array($_SESSION["group_id"],[1,10,51])) $editView=1; else $editView=0;
+
+$save=0;
+
+if(in_array($_SESSION["group_id"],[1,10])) $save=1;
+
+
+$massiver[]=["name"=>"П-ма мин.","title"=>"Полнограмма минимальная","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0"];
+$massiver[]=["name"=>"П-ма Макс.","title"=>"Полнограмма Максимальная","name_eng"=>"quantity_max", "name_eng_sql"=>"quantity_max", "background"=>"bg-danger2", "step"=>"1", "placeholder"=>"0"];
+
+
+
+echo'<h1 class="page-title mb-0 text-primary">полнограмма</h1>';
+
+$stores = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['and', ['tip' => 'city_store'], ['view' => '1']])
+ ->andWhere(['in', 'id', $_SESSION["store_arr_guid_dostup"]])->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view='1' $where order by name ASC");
+
+
+
+foreach($stores as $strid=>$namestore){
+ echo"<a href=\"/shipment/polnogramm/?store_id=$strid\" class=\"btn btn-";
+ if(isset($store_id) && $store_id==$strid) echo"success"; else echo"info"; echo" btn-sm m-1\">$namestore</a>";
+}
+
+
+//$w="";
+$providers = yii\helpers\ArrayHelper::map(\yii_app\records\ShipmentProviders::find()->select(['name', 'id'])->all(), 'id', 'name');
+//$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+//$k=0;
+//foreach($in as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=","; $w .=" '$pid'"; $k++; }
+
+
+if(!empty($_POST["save_view"]) and $editView==1) {
+ $db::sql("UPDATE products_1c SET view=0 WHERE tip='products'");
+ foreach($_POST["view"] as $productId => $on) {
+ $productId=htmlentities($productId);
+ if($on=="on") $db::sql("UPDATE products_1c SET view=1 WHERE tip='products' AND id=?",[$productId]);
+ //if(empty($on)) mess("<br> $productId = $on ");
+ }
+}
+
+
+
+if(!empty($_POST["save"])) {
+
+
+ mess("save");
+
+
+ foreach($massiver as $m0 => $m1) {
+ $name_eng=$m1["name_eng_sql"];
+ foreach($_POST[$name_eng] as $m => $val) {
+ $val= mb_eregi_replace('[^0-9.]', '', $val);
+ $sql_param[$m][$name_eng]=$val;
+
+ }
+ }
+
+
+
+
+ $log = [];
+ foreach($sql_param as $prod_id => $massi) {
+
+ $dataRow=$db::getRows("SELECT date_id, color, quantity, quantity_max FROM store_planogram_logi WHERE
+store_id='$store_id' AND product_id='$prod_id' order by date_id DESC LIMIT 12");
+
+ $date_id="";
+ foreach($dataRow as $row){
+ if(empty($date_id)) $date_id=$row["date_id"];
+ if(empty($row["color"])) $row["color"]="NULL";
+
+ if($date_id==$row["date_id"]) {
+ $log[$row["color"]]["quantity"]=$row["quantity"];
+ $log[$row["color"]]["quantity_max"]=$row["quantity_max"];
+ }
+
+ }
+
+
+
+ if(($log["NULL"]["quantity"] ?? 0) != $massi["quantity"])
+ {
+
+ $comment_id=(int)$_POST["comment_id"][$prod_id];
+ // echo" <br>".$log["NULL"]["quantity"]." new_valiue= ".$massi["quantity"]." comment_id=$comment_id ";
+ $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
+ if (!$storePlanogram) {
+ $storePlanogram = new StorePlanogram;
+ $storePlanogram->store_id = $store_id;
+ $storePlanogram->product_id = $prod_id;
+ $storePlanogram->color = '';
+ }
+ foreach ($massi as $pole => $value) {
+ $storePlanogram->$pole = $value;
+ }
+ $storePlanogram->save();
+ if ($storePlanogram->getErrors()) {
+ var_dump($storePlanogram->getErrors());
+ }
+// $sql="INSERT IGNORE INTO store_planogram SET ";
+// $up= "store_id='$store_id', product_id='$prod_id', color=''"; foreach($massi as $pole =>$value) $up .=", $pole='$value' ";
+// $sql .="$up ON DUPLICATE KEY UPDATE $up";
+// $db::sql($sql);
+ // echo"<br>$sql ";
+ $storePlanogramLogi = StorePlanogramLogi::find()
+ ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => ''])->one();
+ if (!$storePlanogramLogi) {
+ $storePlanogramLogi = new StorePlanogramLogi;
+ $storePlanogramLogi->date_id = date("Ymd");
+ $storePlanogramLogi->store_id = $store_id;
+ $storePlanogramLogi->product_id = $prod_id;
+ $storePlanogramLogi->color = '';
+ }
+ foreach ($massi as $pole => $value) {
+ $storePlanogramLogi->$pole = $value;
+ }
+ $storePlanogramLogi->comment_id = $comment_id;
+ $storePlanogramLogi->save();
+// $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
+// $sql="INSERT IGNORE INTO store_planogram_logi SET ";
+// $sql .="$up ON DUPLICATE KEY UPDATE $up";
+// $db::sql($sql);
+
+
+
+
+ foreach($_POST["quantity__color"][$prod_id] ?? [] as $color => $quan) {
+ $color=trim($color);
+ $quan=(int)$quan;
+ if(!empty($color)) {
+ $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
+ if (!$storePlanogram) {
+ $storePlanogram = new StorePlanogram;
+ $storePlanogram->store_id = $store_id;
+ $storePlanogram->product_id = $prod_id;
+ $storePlanogram->color = $color;
+ }
+ $storePlanogram->quantity = $quan;
+ $storePlanogram->save();
+// $sql="INSERT IGNORE INTO store_planogram SET ";
+// $up= " store_id='$store_id', product_id='$prod_id', color='$color', quantity='$quan' ";
+// $sql .="$up ON DUPLICATE KEY UPDATE $up";
+// $db::sql($sql);
+
+ $storePlanogramLogi = StorePlanogramLogi::find()
+ ->where(['date_id' => date("Ymd"), 'store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
+ if (!$storePlanogramLogi) {
+ $storePlanogramLogi = new StorePlanogramLogi;
+ $storePlanogramLogi->date_id = date("Ymd");
+ $storePlanogramLogi->store_id = $store_id;
+ $storePlanogramLogi->product_id = $prod_id;
+ $storePlanogramLogi->color = $color;
+ }
+ $storePlanogramLogi->comment_id = $comment_id;
+ $storePlanogramLogi->save();
+// $up .=", date_id='".date("Ymd")."', comment_id='$comment_id'";
+// $sql="INSERT IGNORE INTO store_planogram_logi SET ";
+// $sql .="$up ON DUPLICATE KEY UPDATE $up";
+// $db::sql($sql);
+
+
+
+ }
+ }
+
+
+ foreach($_POST["quantity_max__color_max"][$prod_id] ?? [] as $color => $quan) {
+ $color=trim($color);
+ $quan=(int)$quan;
+ if(!empty($color)) {
+ $storePlanogram = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $prod_id, 'color' => $color])->one();
+ if (!$storePlanogram) {
+ $storePlanogram = new StorePlanogram;
+ $storePlanogram->store_id = $store_id;
+ $storePlanogram->product_id = $prod_id;
+ $storePlanogram->color = $color;
+ }
+ $storePlanogram->quantity = $quan;
+ $storePlanogram->save();
+// $sql="INSERT IGNORE INTO store_planogram SET ";
+// $up= " store_id='$store_id', product_id='$prod_id', color='$color', quantity_max='$quan' ";
+// $sql .="$up ON DUPLICATE KEY UPDATE $up";
+// $db::sql($sql);
+ //echo"<br> $sql";
+ }
+ }
+
+ }
+
+
+ }
+
+ mess("Полнограмма для магазина сохранена");
+}
+
+echo'<div class="table-responsive mt-3">';
+
+if($save==1) echo'<form method=post>' . '<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() .'" />';
+
+echo'
+<table class="table table-sm table-hover border-top text-nowrap"><thead>';
+
+foreach($massiver as $f =>$mass) {
+ echo'<th style="width:90px;">'.$mass["name"].'</th>';
+}
+echo'<th class="w-90">наименование</th>';
+
+if($editView==1) echo'<th>видимый</th>';
+echo'</thead><tbody>';
+
+
+if (isset($store_id)) {
+ $data3 = StorePlanogram::find()->where(['store_id' => $store_id, 'color' => ''])->asArray()->all();
+// $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
+ foreach ($data3 as $row2) {
+ $values_in[$row2["product_id"]]["quantity"] = $row2["quantity"];
+ $values_in[$row2["product_id"]]["quantity_max"] = $row2["quantity_max"];
+
+ }
+
+ $data3 = StorePlanogram::find()->where(['store_id' => $store_id])->andWhere(['!=', 'color', ''])->asArray()->all();
+// $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
+ foreach ($data3 as $row2) {
+ $colors_in[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
+ $colors_in_max[$row2["product_id"]][$row2["color"]] = $row2["quantity_max"];
+ }
+}
+
+
+
+
+$colorSort=[];
+if (isset($store_id)) {
+ $data = StorePlanogramColorsSort::find()->select(['product_id', 'color', 'posit'])->where(['store_id' => $store_id])
+ ->orderBy(['product_id' => SORT_ASC, 'posit' => SORT_ASC])->asArray()->all();
+// $data = $db::getRows("SELECT product_id,color,posit FROM store_planogram_colors_sort WHERE store_id=? order by product_id ASC, posit ASC", [$store_id]);
+ foreach ($data as $row) $colorSort[$row["product_id"]][] = $row["color"];
+}
+
+/*
+
+echo 'Максимальный размер данных: ' . ini_get('post_max_size') . '<br>';
+echo 'Максимальный размер файлов: ' . ini_get('upload_max_filesize') . '<br>';
+echo 'Максимальное количество переменных: ' . ini_get('max_input_vars') . '<br>';
+echo 'Максимальное время выполнения скрипта: ' . ini_get('max_execution_time') . '<br>';
+echo 'Максимальное время обработки данных: ' . ini_get('max_input_time') . '<br>';
+echo 'Память для скрипта: ' . ini_get('memory_limit') . '<br>';
+*/
+
+$providers[0]="-без поставщика-";
+
+$data = Products1cOptions::find()->alias('o')->select(['p.id', 'p.name', 'o.provider_id', 'o.colors', 'p.view'])
+ ->innerJoin('products_1c p', 'p.id = o.id AND o.provider_id > 0')
+ ->orderBy(['o.provider_id' => SORT_ASC, 'p.view' => SORT_DESC, 'p.name' => SORT_ASC])->asArray()->all();
+//$data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors,p.view FROM products_1c_options as o, products_1c as p WHERE
+//p.id=o.id AND o.provider_id>0 order by o.provider_id ASC, p.view DESC, p.name ASC");
+
+
+$products_group = yii\helpers\ArrayHelper::map(\yii_app\records\Products1c::find()->select(['name', 'id'])->where(['tip' => 'products_group'])->all(), 'id', 'name');
+//$products_group=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products_group'");
+
+$data2 = ProductsClass::find()->alias('cl')->select(['p.id', 'p.name', 'p.parent_id', 'o.provider_id', 'o.colors', 'p.parent_id as category_id'])
+ ->leftJoin('products_1c p', 'p.view =1 AND p.parent_id=cl.category_id')
+ ->leftJoin('products_1c_options o', 'p.id = o.id')
+ ->where(['cl.tip' => 'related'])
+ ->groupBy(['p.id'])
+ ->orderBy(['o.provider_id' => SORT_DESC, 'p.parent_id' => SORT_DESC, 'p.name' => SORT_ASC])
+ ->asArray()->all();
+//$data2=$db::getRows("SELECT p.id, p.name, p.parent_id, o.provider_id, o.colors, p.parent_id as category_id FROM
+// products_class as cl
+// LEFT JOIN products_1c as p ON (p.view='1' AND p.parent_id=cl.category_id )
+// LEFT JOIN products_1c_options as o ON (p.id=o.id)
+//WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
+$data = array_merge($data, $data2);
+
+
+$providersIn = [];
+$category_idIn = [];
+$p = 0;
+foreach($data as $row) {
+ if(!in_array($row["provider_id"],$providersIn)) {
+
+ if(empty($providers[$row["provider_id"]])) {
+ echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
+ } elseif(!empty($providers[$row["provider_id"]]))
+ {
+ echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();"><td colspan=4 class="bg-success fs-4 p-2">+
+ '.$providers[$row["provider_id"]].'</td></tr>';
+ }
+
+ $providersIn[]=$row["provider_id"];
+
+ }
+
+
+ if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
+ echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
+ <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
+ $category_idIn[]=$row["category_id"];
+ $p++;
+ }
+
+ echo"<tr style=\"display:none\" class=\"pr__".$row["provider_id"]." ";
+ if(!empty($row["category_id"])) echo" category__".$row["category_id"];
+ if(empty($row["view"])) echo" bg-warning";
+ echo"\">";
+ foreach($massiver as $f =>$mass) {
+ echo'<td title="'.$mass["title"].'"><input onclick="$(\'.p'.$row["id"].'\').show();" type=numeric oninput="up(this)" min="0" name='.$mass["name_eng"].'['.$row["id"].'] value="';
+ if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
+ echo'"';
+ if(!empty($mass["pattern"])) echo ' pattern="'.$mass["pattern"].'"';
+ if(isset($mass["step"])) echo ' step="'.$mass["step"].'"';
+ if(isset($mass["placeholder"])) echo ' placeholder="'.$mass["placeholder"].'"';
+ echo' class="poln';
+ if(isset($mass["background"])) echo ' '.$mass["background"];
+ echo'"';
+ echo'></td>';
+
+ }
+
+ echo"<td class=\"fs-5 p-1\">".$row["name"]." ";
+ //if($providers[$row["provider_id"]]) echo"<span class=\"btn btn-sm btn-indigo\">".$providers[$row["provider_id"]]."</span>";
+
+ if (isset($store_id)) {
+ echo '<a href="/shipment/store-planogram-logi/?store_id=' . $store_id . '&product_id=' . $row["id"] . '">logi</a>';
+ }
+ echo'<select class="form-control p'.$row["id"].' bg-danger" name=comment_id['.$row["id"].'] style="display:none;width:100px;">';
+ $sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
+ foreach($sel as $sid => $sname){
+ echo'<option value='.$sid.'';
+ if(isset($sthis) && $sid==$sthis) echo' selected';
+
+ echo'>'.$sname.'</option>';
+
+ }
+
+
+ echo'</select>';
+
+
+ echo"</td>";
+
+ if($editView==1) { echo"<td><input type=checkbox name=view[".$row["id"]."] "; if(isset($row["view"]) && $row["view"]==1) echo" checked"; echo"></td>";}
+ echo"</tr>";
+
+ if(!empty($row["colors"])) {
+ $colors=explode(";",$row["colors"]);
+
+
+
+////////// color
+ echo'<tr style="display:none" class="pr__'.$row["provider_id"].'"><td colspan=2 class="text-right pt-2">минимальные</td><td colspan=2>';
+ foreach($colors as $color) {
+ $color=trim($color);
+ $percentTxt=""; $cssClass="";
+ if(!empty($values_in[$row["id"]]["quantity"]) and !empty($colors_in[$row["id"]][$color])) {
+ $percent=round(100*($colors_in[$row["id"]][$color]/$values_in[$row["id"]]["quantity"]),2);
+ $percentTxt =" ($percent%)";
+ $cssClass=" cssLime";
+ }
+
+
+ echo'<div class="dinlineblock'.$cssClass.'">
+ <table cellpadding=0 cellspasing=0><td><input type=numeric name=quantity__color['.$row["id"].']['.$color.'] class="input-sm" value="'.(isset($colors_in) ? $colors_in[$row["id"]][$color] ?? '' : '').'"></td>
+ <td>'.$color.''.$percentTxt.'</td></table></div>';
+ //<span class="btn btn-sm btn-warning">цвет '.$row["name"].'</span>
+
+ }
+ echo'</div></td></tr>';
+////////// end color
+
+
+////////// color max
+
+ if(!empty($colorSort[$row["id"]])) {
+ $colors_new=[];
+ foreach($colorSort[$row["id"]] as $color1 => $color) $colors_new[]=$color;
+
+
+ foreach($colors as $color1 => $color) {
+ // if(!in_array($color,$colors_new)) $colors_new[]=$color;
+ }
+
+
+ } else $colors_new=$colors;
+
+
+
+
+ echo'<tr style="display:none" class="pr__'.$row["provider_id"].' bg-danger2"><td colspan=2 class="text-right pt-2"> <a href="/shipment/ProductColorSort/?product_id='.$row["id"].'&store_id='.$store_id.'" target=new class="fs-4 btn bt-info">⇅</a> максимальные</td><td colspan=2>';
+ foreach($colors_new as $color) {
+ $color=trim($color);
+ echo'<div class="dinlineblock">
+ <table cellpadding=0 cellspasing=0><td><input type=numeric name='.$mass["name_eng"].'__color_max['.$row["id"].']['.$color.'] class="input-sm" value="'.($colors_in_max[$row["id"]][$color] ?? '').'"></td>
+ <td>'.$color.'</td></table></div>';
+ }
+ echo'</div></td></tr>';
+////////// end color max
+
+
+
+
+
+ }
+
+
+}
+echo'</tbody></table>';
+
+
+
+if($save==1) {
+
+
+ echo'<button type=submit name=save value=1 class="btn btn-success btn-lg m-2">сохранить</button>';
+
+
+// даем доступ к сохранению только изранным группам
+ if($editView==1) {
+ echo'<button type=submit name=save_view value=1 class="btn btn-success btn-lg m-2">изменить показ товаров в полнограмме</button>';
+ }
+}
+
+
+if($save==1) echo'</form>';
+
+/*
+
+echo"<h2>Сопутка</h2>";
+$data=$db::getRows("SELECT p.id, p.name FROM products_class as cl, products_1c as p WHERE
+p.parent_id=cl.category_id AND cl.tip='related' order by p.name ASC");
+
+foreach($data as $row) {
+
+echo"<br> ".$row["provider_id"]." ".$row["name"]." ";
+}
+
+
+*/
+
+
+echo'</div>';
+
+
+
+
+$_CONFIG["jscss"]='
+<style>.table tbody tr td{padding:0;}
+
+.input-sm{width:70px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
+input[type="numeric"].poln,.poln{font-weight:bolder; width:90px; font-size:1.7rem; background:lime; color:#000; border:0;padding:2px; text-align:center;}
+.cssLime{background:#caefca;padding:0.4rem;}
+.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
+.bg-danger2,input[type="numeric"].poln.bg-danger2{background:#ffd0d0}
+
+
+</style>
+<script>
+function up(e) {
+ if (e.value.indexOf(".") != \'-1\') {
+ e.value=e.value.substring(0, e.value.indexOf(".") + 3);
+ }
+
+
+
+}
+
+
+';
+/*
+
+
+function ajaxProductColorSort(product_id){
+
+ jQuery(\'#modal-7\').modal(\'show\', {backdrop: \'static\'}); $(\'#modal-7 .modal-title\').text(\'Сортировка цветов по приоритету для товара\');
+
+$.ajax({
+ url: \'/shipment/ProductColorSort/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: {product_id: product_id, store_id : \''.$store_id.'\'},
+ success: function(data){
+ $(\'#modal-7 .modal-body\').html(data);
+ }});
+}
+</script>
+
+
+<!-- MODAL -->
+ <div class="modal fade" id="modal-7">
+ <div class="modal-dialog modal-dialog-centered text-center" role="document">
+ <div class="modal-content modal-content-demo">
+ <div class="modal-header">
+ <h6 class="modal-title"></h6><button aria-label="Close" class="btn-close" data-bs-dismiss="modal" type="button"><span aria-hidden="true">×</span></button>
+ </div>
+ <div class="modal-body">
+
+ </div>
+ <div class="modal-footer">
+
+ <button class="btn btn-secondary" data-bs-dismiss="modal" type="button">закрыть</button>
+ </div>
+ </div>
+ </div>
+ </div>*/
+
+
+//include"templates/bottom.php";
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+
+
+
--- /dev/null
+<?php
+
+use yii\widgets\ActiveForm;
+use yii\base\DynamicModel;
+
+use yii_app\helpers\PrintBlockHelper;
+
+use kartik\select2\Select2;
+
+/** @var $products array */
+/** @var $filterModel DynamicModel */
+/** @var $orderStoreSort array */
+/** @var $storeNamesByGuid array */
+/** @var $storePlanogramByStoreGuid array */
+/** @var $salesQuantity array */
+
+$this->registerCssFile('/css/customSortable.css');
+$this->registerJsFile('/js/Sortable.js', ['position' => \yii\web\View::POS_END]);
+$this->registerJsFile('/js/customSortable.js', ['position' => \yii\web\View::POS_END]);
+
+?>
+
+<div class="setDivisionPriority m-5">
+ <?php $filterForm = ActiveForm::begin(['id' => 'filter-form']); ?>
+ <?php PrintBlockHelper::printBlock('Товар', $filterForm->field($filterModel, 'productId')->widget(Select2::class, [
+ 'data' => $products,
+ 'language' => 'ru',
+ 'options' => ['placeholder' => 'Товар...'],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ],
+ 'pluginEvents' => [
+ 'change' => 'function() {
+ $("#filter-form").get(0).submit();
+ }',
+ ]
+ ])->label(false)); ?>
+ <?php ActiveForm::end(); ?>
+ <?php if ($orderStoreSort && $storeNamesByGuid && $storePlanogramByStoreGuid): ?>
+ <div class="row">
+ <div class="col-1"></div>
+ <div class="col-2">Магазин</div>
+ <div class="col-2">Продажи</div>
+ <div class="col-2">Планограмма минимум</div>
+ <div class="col-2">Планограмма максимум</div>
+ </div>
+ <div class="draganddropTable" data-name="stores#<?= $filterModel->productId ?>">
+ <?php foreach ($orderStoreSort as $orderStore): ?>
+ <div class="row">
+ <div class="col-1 drag-handler"></div>
+ <div class="col-2">
+ <?= $storeNamesByGuid[$orderStore->store_id] ?? '---' ?>
+ </div>
+ <div class="col-2">
+ <?= $salesQuantity[$orderStore->store_id] ?? '---' ?>
+ </div>
+ <div class="col-2">
+ <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity ?? '---' ?>
+ </div>
+ <div class="col-2">
+ <?= $storePlanogramByStoreGuid[$orderStore->store_id]->quantity_max ?? '---' ?>
+ </div>
+ </div>
+ <?php endforeach; ?>
+ </div>
+ <?php endif; ?>
+</div>
--- /dev/null
+<?php
+
+use yii_app\records\Products1c;
+use yii\helpers\ArrayHelper;
+use yii_app\records\StorePlanogram;
+use yii_app\records\StorePlanogramLogi;
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+include_once(dirname(__DIR__, 2) . "/inc/base_new.php");
+include_once(dirname(__DIR__, 2) . "/inc/design_new.php");
+
+//include"templates/top.php";
+
+$store_id = $product_id = null;
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+if(!empty($_REQUEST["product_id"])) $product_id=htmlentities($_REQUEST["product_id"]);
+
+$sel=[0=>"-выбрать причину-",1=>"перетарка",2=>"недотарка"];
+
+echo'<h1 class="page-title mb-0 text-primary">Логи матрицы товара на магазине</h1>
+
+
+
+</p><div id=editDiv></div>';
+
+$storesAll = ArrayHelper::map(Products1c::find()->select(['name', 'id'])->where(['tip' => 'city_store'])
+ ->orderBy(['name' => SORT_ASC])->all(), 'id', 'name');
+//$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
+
+
+
+if(!empty($store_id)) {
+ echo'<div class="table-responsive mt-3">
+
+
+история
+<table class="table">';
+ echo'<tbody>';
+
+ $dataRow = StorePlanogram::find()->where(['store_id' => $store_id, 'product_id' => $product_id, 'color' => ''])->one();
+// $dataRow=$db::getRow("SELECT * FROM store_planogram WHERE store_id=? AND product_id=? AND color=''",[$store_id,$product_id]);
+
+
+ echo'<tr><td>сейчас</td><td>'.$dataRow["quantity"].'</td><td>'.$dataRow["quantity_max"].'</td><td>'.$dataRow["color"].'</td></tr>';
+
+
+ $data = StorePlanogramLogi::find()->where(['store_id' => $store_id, 'product_id' => $product_id])
+ ->orderBy(['date_id' => SORT_DESC, 'color' => SORT_ASC])->asArray()->all();
+// $data=$db::getRows("SELECT * FROM store_planogram_logi WHERE store_id=? AND product_id=? order by date_id DESC, color ASC",[$store_id,$product_id]);
+
+
+ foreach($data as $row) {
+
+ if($row["color"]=="")
+ echo'<tr><td>'.$row["date_id"].'</td><td>'.$row["quantity"].'</td><td>'.$row["quantity_max"].'</td><td>'.$row["color"].'</td>
+<td>'.$sel[$row["comment_id"]].'</td>
+</tr>';
+
+ }
+
+
+ echo'</tbody></table>
+
+</div>';
+
+}
+
+//include"templates/bottom.php";
--- /dev/null
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+
+if(!empty($_REQUEST["product_id"])) {
+
+ $product_id=htmlentities($_REQUEST["product_id"]);
+ $color=htmlentities($_REQUEST["color"]);
+ $quantity=intval($_REQUEST["quantity"]);
+ $store_id=htmlentities($_REQUEST["store_id"]);
+ $date_id=intval($_REQUEST["date_id"]);
+ echo"Сохранили количество =$quantity";
+
+
+
+ if($color!="NULL") $color=str_replace('"','',$color);
+ else $color='';
+ $sql="INSERT IGNORE INTO store_products_fact SET ";
+ $up= "store_id='$store_id', product_id='$product_id', date_id='$date_id', color='$color', quantity='$quantity' ";
+ $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//echo"<br><br>++$color++$sql";
+ $db::sql($sql);
+
+}
\ No newline at end of file
--- /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"templates/top.php";
+
+if(!empty($_REQUEST["store_id"])) $store_id=htmlentities($_REQUEST["store_id"]);
+//$date_id=date("Ymd");
+if(!empty($_REQUEST["date_id"])) $date_id=intval($_REQUEST["date_id"]);
+$arrayDate=["first","second","third","fourth","fifth"];
+$typeDay="monday";
+if(!isset($_SESSION["show_planogram_0"])) $_SESSION["show_planogram_0"]=1;
+
+if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="hide") $_SESSION["show_planogram_0"]=0;
+if(isset($_GET["show_planogram_0"]) && $_GET["show_planogram_0"]=="show") $_SESSION["show_planogram_0"]=1;
+
+
+
+if(isset($_REQUEST["typeDay"]) && $_REQUEST["typeDay"]) $typeDay=htmlentities($_REQUEST["typeDay"]); //"wednesday";
+
+//$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE date_id!=? order by date_id desc LIMIT 1",[date("Ymd")]);
+//f(empty($date_n_id))
+$date_n_id=$db::getValue("SELECT date_id FROM `store_products_fact` WHERE 1 order by date_id desc LIMIT 1");
+
+
+$massivert[$date_n_id]=date('d.m.Y', strtotime($date_n_id));
+$massiver_time[$date_n_id]=strtotime($date_n_id);
+if(empty($date_id)) $date_id=$date_n_id;
+
+
+if(date('l', time())=="Wednesday") $typeDay="wednesday";
+
+$dayLinkstArray=["monday"=>"Понедельник", "wednesday"=>"Среда" ];
+$typer="";
+foreach($dayLinkstArray as $lnk => $name) {
+
+ $typer .="<a href=\"?typeDay=$lnk\" class=\"btn btn-sm btn-";
+ if($typeDay==$lnk) $typer .="success"; else $typer .="info";$typer .=" me-2\">$name</a> ";
+}
+//echo"Выберите тип: $typer";
+
+
+$dayTextArray=[$typeDay];
+
+foreach($dayTextArray as $dayText) {
+ foreach($arrayDate as $sl) {
+ if(strtotime("$sl $dayText of this month")<time()) {
+ $massivert[date('Ymd', strtotime("$sl $dayText of this month"))]=date('d.m.Y', strtotime("$sl $dayText of this month"));
+ $massiver_time[date('Ymd', strtotime("$sl $dayText of this month"))]=strtotime("$sl $dayText of this month");
+ }
+ }
+}
+
+
+asort($massivert);
+
+$date_div="";
+foreach($massivert as $did => $date) {
+// if($massiver_time[$did]>0) {
+ $date_div .="<a href=\"?date_id=$did\" class=\"btn btn-sm btn-";
+ if($did==$date_id) $date_div .="success"; else $date_div .="info";
+ $date_div .=" me-2\">$date</a> ";
+
+}
+
+
+
+//echo "<br>Выберите дату ".$date_div; and empty($date_id)
+if(empty($_REQUEST["date_id"]) and !empty($_REQUEST["store_id"])) {
+
+ error_mess("Выберите дату $date_div");
+
+ exit();
+}
+
+$data=$db::getRows("SELECT id,name, providers_arr FROM `store_orders` WHERE date_start>NOW() - interval 25 day");
+foreach($data as $row) {
+ $pr=explode(",",$row["providers_arr"]);
+ foreach($pr as $prid) { if(!empty($prid)) $prov[$prid]=$prid;}
+}
+//echo print_r($prov);;
+
+
+$k=0;
+$where="";
+foreach($_SESSION["store_arr_guid_dostup"] as $guid) {
+ if(!empty($guid)) {
+ if($k!=0) $where .=",";
+ $where.="'$guid' ";
+ $k++;
+ }
+}
+
+//if(!empty($where)) $where =" AND id in($where)";
+
+$massiver[]=["name"=>"Факт","title"=>"Фактические остатки","name_eng"=>"quantity", "name_eng_sql"=>"quantity", "step"=>"1", "placeholder"=>"0","type"=>"number","tip"=>"int"];
+$massiver[]=["name"=>"Комментарий","title"=>"Комментарий флориста","name_eng"=>"comment_type_id", "name_eng_sql"=>"comment_type_id", "class"=>"comment", "type"=>"select", "class"=>"sel",
+ "values_arr"=>["0"=>"-выбрать-",
+ 1=>"не хватило товара",
+ 2=>"большое списание по товару",
+ 3=>"много товара",
+ 4=>"Цветок одного цвета ",
+ 5=>"Цветок плохого качества ",
+ 6=>"Не пользуются спросом",
+ 7=>"Не заказывали ,а привезли"
+ ],
+
+
+
+
+
+
+
+ "tip"=>"int"];
+if(in_array($_SESSION["group_id"],[1,10,7,50])) $massiver[]=["name"=>"Ком-й кустовой","title"=>"Комментарий кустового","name_eng"=>"comments", "name_eng_sql"=>"comments", "class"=>"comment", "placeholder"=>"0","type"=>"textarea","tip"=>"string"];
+
+
+
+echo'<h1 class="page-title mb-0 text-primary">Фактические остатки на '.date('d.m.Y',strtotime($date_id));
+if(isset($store_id) && empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&date_id=$did&show_planogram_0=show\" class=\"ml-3 me-2 btn-warning btn-sm\">показывать товары с 0 полнограммой</a>";
+if(isset($store_id) && !empty($_SESSION["show_planogram_0"])) echo" <a href=\"?store_id=$store_id&&show_planogram_0=hide\" class=\"ml-3 me-2 btn-danger btn-sm\">скрыть товары с 0 полнограммой</a>";
+echo'</h1>
+
+
+<a href="https://youtu.be/-jAr0uV5uZI" class="btn btn-danger btn-lg" target=new>Видео-инструкция</a> https://youtu.be/-jAr0uV5uZI
+<p>Флористы заполняют в понедельник и в среду до 11 часов по своему магазину. Вносят фактические остатки вместе по цветам тоже!
+Флористы или администраторы вносят комментарии из списка (3 причины). Далее кустовой просматривает и сотавляет свои комментарии текстом.
+Цифра в % на кнопке магазина показывает на сколько позиций заполнена полнограмма факт от полнограммы для данного магазина без учета цветов.
+<br>Заполняем на последнюю актуальную дату! '.$date_div.'
+
+
+
+
+</p><div id=editDiv></div>';
+
+
+if(empty($where)) mess("У вас не прописан доступ к магазинам автозаказа обратитесь +79308013638 Екатерина HR");
+
+
+$stores=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' AND view=1 AND id in($where) order by name ASC");
+$storesAll=$db::mapping("SELECT name,id FROM products_1c WHERE tip='city_store' order by name ASC");
+
+
+
+// сколько заполнено по магазинам
+$storesFact=array(); $storesFactNo=array();
+// полнограммы по всем магазинам
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_planogram WHERE color='' AND store_id!='' AND quantity>0 AND store_id in($where)");
+foreach($data3 as $row2) $store_planogramAllStores[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+
+// полнограммы факт по всем магазинам
+$data3=$db::getRows("SELECT store_id,product_id,quantity FROM store_products_fact WHERE date_id=? AND quantity>0 AND store_id in($where)",[$date_id]);
+foreach($data3 as $row2) $factAll[$row2["store_id"]][$row2["product_id"]]=$row2["quantity"];
+
+
+foreach($stores as $stId =>$nameStore) {
+//echo"<br>магазин ".$nameStore." ";
+ $cnt=0; $all=0;
+ $arrays=$store_planogramAllStores[$stId] ?? [];
+ if(!empty($stores[$stId])){
+ foreach($arrays as $productId =>$quantity) {
+ if($factAll[$stId][$productId] ?? 0 >0 and $quantity>0) {
+ //echo"+ $productId = $quantity";
+ $cnt++;
+ }
+ $all++;
+ }
+ $percent=round(100*($cnt/($all == 0 ? 1 : $all)));
+//echo" $cnt из $all =$percent %";
+ $storesFact[$stId]=$percent;
+//не заполнившие магазины
+ if($percent<15) $storesFactNo[]=$stId;
+ }
+
+}
+// сколько заполнено по магазинам
+
+
+
+
+
+foreach($stores as $strid=>$namestore){
+ echo"<a href=\"/shipment/store-products-fact/?store_id=$strid&date_id=$date_id\" class=\"btn btn-sm btn-";
+ if(isset($store_id) && $store_id==$strid) echo"warning btn"; else echo"info"; echo" m-1\">";
+
+ if($storesFact[$strid]>20) echo"<span class=\"btn btn-sm bg-success me-1\" title=\"Полнограмма заполнена на ".$storesFact[$strid]."%\">+".$storesFact[$strid]."%</span>";
+
+ if(empty($storesFact[$strid])) echo"<span class=\"btn btn-sm bg-danger me-1\">-</span>";
+ elseif($storesFact[$strid]<10) echo"<span class=\"btn btn-sm bg-danger me-1\">".$storesFact[$strid]."%</span>";
+
+ if(empty($store_planogramAllStores[$strid])) echo"<span class=\"btn btn-sm bg-danger2 me-1\">нет полнограммы</span>";
+
+ echo"$namestore</a>";
+}
+
+
+
+if(!empty($storesFactNo)) {
+ echo'<p>магазины не заполнившие полнограмму';
+ foreach($storesFactNo as $stId) echo'<span class="btn btn-danger me-2 btn-sm">'.$storesAll[$stId].'</span> ';
+
+ echo'</p>';
+
+}
+
+
+$w="";
+$providers=$db::mapping("SELECT id,name FROM shipment_providers ");
+$k=0;
+foreach(($in ?? []) as $pid) { echo'<span class="tag m-1">'.$providers[$pid].'</span>'; if($k!=0) $w .=" OR"; $w .=" o.provider_id='$pid'"; $k++; }
+
+if(!empty($_POST["quantity"])) {
+
+ foreach($massiver as $m0 => $m1) {
+ $name_eng=$m1["name_eng_sql"];
+ foreach($_POST[$name_eng] as $m => $val) {
+ if($m1["tip"]=="int") $val= mb_eregi_replace('[^0-9.]', '', $val);
+ else $val= htmlentities($val);
+ if($val>=0) $sql_param[$m][$name_eng]=$val;
+
+ }
+ }
+
+
+
+ foreach($sql_param as $prod_id => $massi) {
+ $sql="INSERT IGNORE INTO store_products_fact SET ";
+ $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color=''";
+ foreach($massi as $pole =>$value) $up .=", $pole='$value' ";
+ $sql .="$up ON DUPLICATE KEY UPDATE $up";
+
+ $db::sql($sql);
+
+ foreach($_POST["color"]["quantity"][$prod_id] as $color => $quantity) {
+ $color=str_replace('"','',$color);
+ $sql="INSERT IGNORE INTO store_products_fact SET ";
+ $up= "store_id='$store_id', product_id='$prod_id', date_id='$date_id', color='$color', quantity='$quantity' ";
+ $sql .="$up ON DUPLICATE KEY UPDATE $up";
+//echo"<br><br>++$color++$sql";
+ $db::sql($sql);
+ }
+
+ }
+
+
+
+
+ mess("Факт для магазина сохранена");
+}
+if(!empty($store_id)) {
+ echo '<div class="table-responsive mt-3"><form action="" method=post>
+<table class="w-100" cellspasing=0 cellpadding=0 border=0>';
+ echo '<tbody>';
+
+
+ $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color=''", [$store_id]);
+ foreach ($data3 as $row2) $store_planogram[$row2["product_id"]] = $row2["quantity"];
+
+ $data3 = $db::getRows("SELECT * FROM store_planogram WHERE store_id=? AND color!=''", [$store_id]);
+ foreach ($data3 as $row2) $store_planogram_colors[$row2["product_id"]][$row2["color"]] = $row2["quantity"];
+
+
+ $data3 = $db::getRows("SELECT * FROM balances WHERE store_id=? AND quantity!=0", [$store_id]);
+ foreach ($data3 as $row2) $balances[$row2["product_id"]] = $row2["quantity"];
+
+
+ $data3 = $db::getRows("SELECT * FROM store_products_fact WHERE store_id=? AND date_id=?", [$store_id, $date_id]);
+ foreach ($data3 as $row2) {
+
+ foreach ($massiver as $m0 => $m1) {
+ $name_eng = $m1["name_eng_sql"];
+
+ if (empty($row2["color"])) $values_in[$row2["product_id"]][$name_eng] = $row2[$name_eng];
+ else $values_in_color[$row2["product_id"]][$name_eng][$row2["color"]] = $row2[$name_eng];
+ }
+ }
+
+
+ $where = "";
+ if (!empty($prov)) {
+ $where = " AND o.provider_id in(";
+ $j = 0;
+ foreach (($prov ?? []) as $pid) {
+ if ($j > 0) $where .= ",";
+ $where .= "'$pid'";
+ $j++;
+ }
+ $where .= ")";
+ }
+
+ $data=$db::getRows("SELECT p.id, p.name, o.provider_id, o.colors FROM products_1c_options as o, products_1c as p
+WHERE o.provider_id>0 AND p.view='1' AND p.id=o.id $where order by o.provider_id ASC, p.name ASC");
+
+
+ $products_group=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products_group'");
+//foreach($data4 as $row4) $products_group[$row4["id"]]=$row4["name"];
+
+ $data2=$db::getRows("SELECT p.id, p.name, p.parent_id, o.provider_id, o.colors, p.parent_id as category_id FROM
+ products_class as cl
+ LEFT JOIN products_1c as p ON (p.view='1' AND p.parent_id=cl.category_id )
+ LEFT JOIN products_1c_options as o ON (p.id=o.id)
+WHERE cl.tip='related' group by p.id order by o.provider_id, p.parent_id, p.name ASC");
+//SELECT p.id, p.name, p.parent_id, provider_id FROM products_class as cl, products_1c as p WHERE p.parent_id=cl.category_id AND cl.tip='related' AND p.view='1' order by p.parent_id, p.name ASC
+
+ $data = array_merge($data, $data2);
+
+
+
+ $p=0;
+ $p2=0;
+ $providersIn = [];
+ $category_idIn = [];
+ foreach($data as $row) {
+
+
+ if(!in_array($row["provider_id"],$providersIn)) {
+
+
+ if(empty($providers[$row["provider_id"]])) {
+ echo'<tr><td colspan=6 class="p-2"><span class="bg-warning fs-1 p-2 w-100 d-block">Сопутка</span></td></tr>';
+ }elseif(!empty($providers[$row["provider_id"]])) {
+
+ echo'<tr style="cursor:pointer;" onclick="$(\'.pr__'.$row["provider_id"].'\').toggle();">
+ <td colspan=6 class="p-2"><span class="bg-green fs-4 p-2 w-100 d-block">+ '.$providers[$row["provider_id"]].'</span></td></tr>';
+
+ }
+
+ echo' <tr style="';
+
+ if($p>=1) echo"display:none;";
+
+ echo'" class="pr__'.$row["provider_id"].'"><td class="w-10"><small>Наименование</small></td><td class="text-center"><small>остаток 1c</small></td>';
+ foreach($massiver as $f =>$mass) echo'<td class="text-left"><small>'.$mass["name"].'</small></td>';
+ echo'<td class="text-center"><small>пол-ма</small></td><td class="text-center"><small>разница</small></td><td class="text-center"><small>%</small></td><td class="w-70"></td></tr>';
+
+ $providersIn[]=$row["provider_id"];
+ $p++;
+ }
+
+
+ if(isset($row["category_id"]) && !in_array($row["category_id"],$category_idIn) and !empty($products_group[$row["category_id"]])) {
+ echo'<tr style="cursor:pointer;" onclick="$(\'.category__'.$row["category_id"].'\').toggle();">
+ <td colspan=6 class="p-2"><span class="bg-grey fs-4 p-2 w-100 d-block">+ '.$products_group[$row["category_id"]].'</span></td></tr>';
+ $category_idIn[]=$row["category_id"];
+ $p2++;
+ }
+
+ // <small>".$providers[$row["provider_id"]]."</small>
+// echo"<tr style=\"display:none;\" class=\"pr__".$row["provider_id"]."\"><td colspan=4 class=\"fs-5\">".$row["name"]."</td></tr>";
+
+ if($store_planogram[$row["id"]] ?? 0>0 or $_SESSION["show_planogram_0"]==1) {
+ $difference=($store_planogram[$row["id"]] ?? 0)-($values_in[$row["id"]]["quantity"] ?? 0);
+ if(!empty($store_planogram[$row["id"]])) $difference_percent=100-round(100*$difference/$store_planogram[$row["id"]]);
+ else $difference_percent="";
+
+
+ echo"<tr style=\"";
+
+ if($p>1 or $p2>1) echo"display:none;";
+
+ if(($store_planogram[$row["id"]] ?? 0) ==0) echo"opacity:0.9;";
+ if($difference_percent==0 and ($store_planogram[$row["id"]]??0)!=0) echo"background:#ffe391;";
+ if($difference_percent>=100) echo"background:#9effd2;";
+
+
+
+ echo"\" class=\"trhover pr__".$row["provider_id"]."";
+
+ if(!empty($row["category_id"])) echo" category__".$row["category_id"];
+
+ if(($store_planogram[$row["id"]]?? 0)==0) echo" bg-danger2";
+
+ echo"\"><td class=\"text-right fs-6 pr-2\">".$row["name"]."</td>
+
+<td class=\"text-center tdcntr\">".($balances[$row["id"]] ?? '')."</td>";
+ foreach($massiver as $f =>$mass) {
+ echo'<td title="'.$mass["title"].'">';
+
+ if($mass["type"]=="number") {
+ echo'<input type=number oninput="up(this)" onchange="storeProductsFactEdit(\''.$row["id"].'\',\'NULL\')" min="0" id="color_quantity_'.$row["id"].'_NULL" name='.$mass["name_eng"].'['.$row["id"].'] class="poln '.($mass["class"] ?? '').'" value="';
+ if(isset($values_in[$row["id"]][$mass["name_eng"]])) echo $values_in[$row["id"]][$mass["name_eng"]];
+ echo'"';
+ if(!empty($mass["pattern"])) echo' pattern="'.$mass["pattern"].'"';
+ if(isset($mass["step"])) echo' step="'.$mass["step"].'"';
+ if(isset($mass["placeholder"])) echo' placeholder="'.$mass["placeholder"].'"';
+ echo'>';
+ }
+ if($mass["type"]=="textarea") {
+ echo'<textarea oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'" row=1>';
+ if(isset($values_in[$row["id"]][$mass["name_eng"]] )) echo $values_in[$row["id"]][$mass["name_eng"]];
+ echo'</textarea>';
+ }
+
+ if($mass["type"]=="select") {
+ echo'<select oninput="up(this)" name='.$mass["name_eng"].'['.$row["id"].'] class="form-control '.$mass["class"].'">';
+ // echo"<option value=0 "; if(empty($values_in[$row["id"]])) echo "select"; echo">-выбрать-</option>";
+
+ foreach($mass["values_arr"] as $v => $name) {
+ echo"<option value=$v "; if($v==($values_in[$row["id"]][$mass["name_eng"]] ?? 0)) echo "selected";
+ echo">$name</option>";
+ }
+ echo'</select>';
+ }
+ echo'</td>';
+
+ }
+
+
+ echo'<td class="tdcntr bg-default">'.($store_planogram[$row["id"]] ?? '').'</td>
+<td class="tdcntr bg-';
+ if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
+
+ if($difference<0) $difference="+".abs($difference);
+ if($difference_percent<0) $difference_percent=">".abs($difference_percent);
+
+ if(!empty($store_planogram[$row["id"]]) and !empty($difference_percent)) $difference_percent .="%";
+ else $difference_percent ="";
+ echo'">'.$difference.'</td>
+<td class="tdcntr bg-default">'.$difference_percent.'</td>';
+
+
+ /* <td>
+ <textarea class=\"form-control\" row=1 name=comment>".$row["name"]."</textarea>
+ </td>*/
+ echo"</tr>";
+ $colors=explode(";",$row["colors"]);
+ $colorShow=0;
+ if(!empty($row["colors"])) {
+ foreach($colors as $color_w) {
+ if(!empty($store_planogram_colors[$row["id"]][trim($color_w)])) $colorShow++;
+ }
+
+ $colorShow=1;
+ if($colorShow>0){
+ echo"<tr style=\"";
+ if($p>1) echo"display:none;";
+
+ echo"\" class=\"pr__".$row["provider_id"]."\"><td colspan=5>
+ <table class=\"tablecolors mb-5\">
+ <thead><th class=zg rowspan=".count($colors).">
+ </th><th><b>кол-во</b></th><th><b>цвет</b></th><th><b>полнограмма</b></th><th><b>расхождение шт.</b></th><th><b>заполнение %</b></th></thead>
+ <tbody>";
+
+
+
+ $j=0;
+ foreach($colors as $color_w) {
+ $color_w=trim($color_w);
+
+
+ if(!empty($store_planogram_colors[$row["id"]][$color_w])) { }
+
+ echo"<tr>";
+
+ if($j==0) echo"<td class=zg rowspan=".count($colors)."><b>".$row["name"]."</b></td>";
+
+ $j++;
+ echo"<td><input onchange=\"storeProductsFactEdit('".$row["id"]."','$color_w')\" type=number class=input-sm name=color[quantity][".$row["id"]."][$color_w] id=\"color_quantity_".$row["id"]."_$color_w\" value=\"";
+ if(isset($values_in_color[$row["id"]]["quantity"][$color_w] )) echo $values_in_color[$row["id"]]["quantity"][$color_w];
+ echo"\"></td><td>$color_w</td>";
+ $difference_percent=0;
+ $difference=($store_planogram_colors[$row["id"]][$color_w] ?? 0)-($values_in_color[$row["id"]]["quantity"][$color_w] ?? 0);
+ if($store_planogram_colors[$row["id"]][$color_w] ?? 0)
+ $difference_percent=100-round(100*$difference/$store_planogram_colors[$row["id"]][$color_w]);
+
+
+ if(!empty($difference_percent)) $difference_percent="$difference_percent%";
+ else $difference_percent="";
+
+
+
+ echo'<td class="bg-default tdcntr">';
+ if(!empty($store_planogram_colors[$row["id"]][$color_w]) and !empty($difference_percent)) echo $store_planogram_colors[$row["id"]][$color_w];
+
+ echo'</td>
+<td class="tdcntr bg-';
+ if($difference>0) echo'danger2';elseif($difference<0) echo'success';else echo'default';
+ echo'">';
+
+ if(!empty($difference)) echo $difference;
+
+ echo'</td><td class="tdcntr bg-default">'.$difference_percent.'</td>';
+ echo'</tr>';
+
+
+
+
+ }
+
+
+
+ echo"</tbody></table></td></tr>";
+
+ }
+
+ }
+
+ }
+
+
+
+
+
+ }
+ echo'</tbody></table>
+
+
+<button type=submit name=edits value=1 class="btn btn-success btn-lg m-2">сохранить</button>
+
+</form></div>';
+
+ /*
+
+ $data=$db::getRows("SELECT id, name FROM products_1c WHERE tip='products_group'");
+ foreach($data as $row) $products_group[$row["id"]]=$row["name"];
+
+
+
+
+ echo"<h2>Сопутка</h2><table class=\"table table-hover\"><thead></thead><tbody>";
+ $data=$db::getRows("SELECT p.id, p.name, p.parent_id FROM products_class as cl, products_1c as p WHERE
+ p.parent_id=cl.category_id AND cl.tip='related' AND p.view='1' order by p.parent_id, p.name ASC");
+
+ foreach($data as $row) {
+ if(empty($inGroup[$row["parent_id"]])){
+
+ $inGroup[$row["parent_id"]]=$row["parent_id"];
+ echo"<tr onclick=\"$('.p".$row["parent_id"]."').toggle();\"><td>
+ <span class=\"bg-green fs-4 p-2 w-100 d-block\">+".$products_group[$row["parent_id"]]."</span></td></tr> ";
+
+ } else {
+
+ echo"<tr class=\"p".$row["parent_id"]."\" style=\"display:none;\"><td> ".$row["provider_id"]." ".$row["name"]."</td></tr> ";
+
+
+ }
+ }
+
+ echo"</tbody></table>";
+ */
+ /*
+
+ .zak tbody tr:hover:not(.no-hover) td{background:#cdcdcd}
+ .zak> thead> tr>th, .zak tr.zg th{font-size:0.7rem;min-width:30px;max-width:40px;text-align:center; font-weight:normal;overflow:hidden}
+ .zak> thead> tr>th b,.zak> thead> tr>td b{font-weight:normal;}
+ .zak> :not(caption)>*>* { padding: 0.05rem; background-color: 1px; box-shadow: none;}
+ .zak td.fs-5{text-align:left;padding:0.3rem 1rem;}
+ .zak { border-collapse: collapse; border-spacing: 0; overflow: hidden;}
+ .zak th, .zak td { border: 1px solid #e6e6e6; padding: 0.1rem; vertical-align: middle; position: relative;}
+
+
+ table.zak thead th,table.zak tr.zg th th,table.zak tr.zg td td { vertical-align: bottom; line-height: normal;}
+ table.zak thead th{margin:0 0.5rem;}
+ table.zak thead b, table.zak tbody b { writing-mode: vertical-rl; transform: scale(-1);}
+ table.zak tr.zg th b, table.zak tr.zg td b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:0.6rem;}
+ .app-content .side-app { padding: 25px 0.5rem 0 0.5rem;}
+ .zak tbody tr td.td_product,.zak td.td_product {text-align:right;}
+ .zak td.td_product:hover {background:#fff;}
+
+ */
+global $_CONFIG;
+
+ $_CONFIG["jscss"] = '<style>.t tbody tr td{padding:0;}
+.t tbody tr td input.form-control{padding:0;margin:0 2px;text-align:center;font-weight:bold;}
+
+.table tbody tr td{padding:0;}
+
+.input-sm{width:60px;text-align:center; margin:0 0.6rem 0 0.6rem;background:#e6e6e6; border-color:#fff; padding:2px; }
+input[type="numeric"].poln,.poln{font-weight:bolder; width:70px; font-size:1.3rem; background:lime; color:#000; border:0;padding:1px; text-align:center;}
+.cssLime{background:#caefca;padding:0.4rem;}
+.dinlineblock{display:inline-block; float:left; margin:0.3rem; padding:0.4rem;}
+table td.tdcntr{text-align:center; font-size:1.3rem;}
+.tablecolors tr:hover td,.trhover:hover {background:#cecece;}
+
+.tablecolors tr th {text-align:center;}
+.tablecolors tr th b{font-weight:normal;}
+
+.tablecolors tbody{border-bottom:1px #cdcdcd solid; }
+.tablecolors {margin:0.5rem 0 0 2rem; float:right;}
+table.tablecolors td.zg b { writing-mode: vertical-rl; transform: scale(-1); font-weight:normal; font-size:1rem;}
+
+select.sel{width:90px;font-size:0.8rem; padding:0px;}
+textarea.comment{width:220px; border:0px; background:#e6e6e6;}
+
+.bg-danger2{background:#ffd1d1;}
+
+table tbody td small{color:#787878; text-align:center; font-size:0.7rem; margin:0 0.4rem;}
+</style>
+
+<script>
+const param6x = $(\'meta[name=csrf-param]\').attr(\'content\');
+const token6x = $(\'meta[name=csrf-token]\').attr(\'content\');
+
+
+$quantity=htmlentities($_REQUEST["quantity"]);
+
+
+function storeProductsFactEdit(product_id,color){
+
+var quantity=$(\'#color_quantity_\'+product_id+\'_\'+color+\'\').val();
+
+ $.ajax({
+ url: \'/shipment/store-products-fact-edit/\',
+ method: \'post\',
+ dataType: \'html\',
+ data: {store_id: \''.$store_id.'\', date_id: \''.$date_id.'\', quantity: quantity, product_id: product_id, color: color, [param6x]: token6x},
+ success: function(data) {
+ $(\'#editDiv\').html(data);
+ }});
+}
+
+
+function up(e) {
+ if (e.value.indexOf(".") != \'-1\') {
+ e.value=e.value.substring(0, e.value.indexOf(".") + 3);
+ }
+}
+</script>';
+
+ include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
+}
+
+//include"templates/bottom.php";
+
+
+
+
--- /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");
+
+error_reporting(E_ALL ^ E_NOTICE);
+
+$date_14day=date("Y-m-d",time()-86400*7);
+$date2=date("Y-m-d",time());
+
+$where=""; $get="";
+if(!empty($_REQUEST["date1"])) {$date_14day=htmlentities($_REQUEST["date1"]); $where .=" AND date>='$date_14day'"; $get .="&date1=$date_14day"; }
+if(!empty($_REQUEST["date2"])) {$date2=htmlentities($_REQUEST["date2"]); $where .=" AND date<='$date2'"; $get .="&date2=$date2";}
+
+
+echo'<form method=post>
+<input type="hidden" name="_csrf" value="' . Yii::$app->request->getCsrfToken() . '" />
+<table><td><input type=date name=date1 value="'.$date_14day.'" class="form-control"></td>
+<td><input type=date name=date2 value="'.$date2.'" class="form-control"> </td>
+<td><button class="btn btn-success" value="1" name=show>сохранить</button></td></table></form>';
+
+
+$stores=$db::mapping("SELECT id, name FROM products_1c WHERE tip='city_store'");
+
+
+$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt, w.store_id, prices.price
+FROM write_offs as w, write_offs_products as p , products_1c as products, prices
+WHERE p.write_offs_id=w.id AND products.id=p.product_id AND products.id=prices.product_id AND w.type='Брак' AND w.date>=? AND w.date<=? group BY w.store_id, p.product_id order by p.product_id, cnt DESC",[$date_14day,$date2]);
+
+foreach($data as $row) {
+ $write[$row["product_id"]][$row["store_id"]] =$row["cnt"];
+ $write_all[$row["store_id"]] +=$row["cnt"];
+ $all +=$row["cnt"];
+
+
+ $write_price_all[$row["store_id"]] +=$row["cnt"]*$row["price"];
+ $all_price +=$row["cnt"]*$row["price"];
+}
+
+
+echo" Данные из 1c c $date_14day по $date2
+ <h3>% списания от общего списания по магазинам</h3>
+
+ Списнаия на сумму $all_price=
+ <table class=\"table table-border\"><tbody>";
+foreach($stores as $storeId =>$store) {
+
+ $percent_all=round(100*($write_all[$storeId]/($all + 0.0001)));
+ $percantArr[$storeId]=$percent_all;
+ $percentp_all=round(100*($write_price_all[$storeId]/($all_price + 0.0001)));
+ $percantArrPrice[$storeId]=$percentp_all;
+
+}
+
+arsort($percantArr);
+foreach($percantArr as $storeId =>$percent_all) {
+ if($percent_all>0) echo"<tr><td> ".$stores[$storeId]." </td><td>$percent_all%</td><td>".$write_price_all[$storeId]."</td><td>".$percantArrPrice[$storeId]."%</td></tr>";
+
+}
+
+echo"</tbody></table>";
+
+$data=$db::getRows("SELECT p.product_id, products.name, sum(p.quantity) as cnt
+FROM write_offs as w, write_offs_products as p , products_1c as products
+WHERE p.write_offs_id=w.id AND products.id=p.product_id AND w.type='Брак' AND w.date>=? AND w.date<=? group BY p.product_id order by cnt DESC",[$date_14day,$date2]);
+echo" <h3>Списания по магазинам</h3><table class=\"table table-border\">";
+foreach($data as $row) {
+
+ echo"<tr><td><span class=\"btn btn-info btn-sm me-2\" onclick=\"$('.p".$row["product_id"]."').toggle()\">+</span>".$row["name"]."</td><td>".$row["cnt"]."</td></tr> ";
+
+ foreach($write[$row["product_id"]] ?? [] as $storeId => $cnt) {
+
+
+ $percent=round( ($cnt/$row["cnt"])*100 );
+
+ echo"<tr style=\"display:none;\" class=\"p".$row["product_id"]."\"><td>$cnt <b>$percent%</b></td><td>".$stores[$storeId]."</td></tr>";
+
+
+ }
+
+}
+echo"</table>";
+
+
+
+
+
+include_once dirname(__DIR__, 2) . '/templates/bottom_light.php';
\ No newline at end of file