--- /dev/null
+<?php
+
+include_once(dirname(__DIR__, 2) . "/startup.php");
+include_once(dirname(__DIR__, 2) . "/inc/db.php");
+
+echo "<h1>I W H</h1>";
+die;
+
+$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(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=$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"]]);
+
+ }
+
+
+ } 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"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=$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=$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;
+
+ }
+ }
+
+
+
+
+
+ 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"]!=$massi["quantity"])
+ {
+
+ $comment_id=(int)$_POST["comment_id"][$prod_id];
+ // echo" <br>".$log["NULL"]["quantity"]." new_valiue= ".$massi["quantity"]." comment_id=$comment_id ";
+ $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 ";
+
+ $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)) {
+ $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);
+
+
+ $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)) {
+ $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>';
+
+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 = $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 = $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 = $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=$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=$db::mapping("SELECT id, name FROM products_1c WHERE tip='products_group'");
+
+$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";
+
+
+