]> gitweb.erp-flowers.ru Git - yii-erp24/.git/commitdiff
add /shipment/add
authorAlexander Smirnov <fredeom@mail.ru>
Tue, 5 Mar 2024 16:08:30 +0000 (19:08 +0300)
committerAlexander Smirnov <fredeom@mail.ru>
Tue, 5 Mar 2024 16:08:30 +0000 (19:08 +0300)
erp24/actions/shipment/AddAction.php
erp24/controllers/ShipmentController.php
erp24/inc/uni2.php
erp24/modul/shipment/add.php
erp24/records/StoreOrders.php
erp24/views/shipment/add.php [new file with mode: 0644]

index 784a75c3a457f9dba198c1b0c21ad9d68328369f..7dbf9c049e2066857e725b4b0c125ab12a5e7960 100644 (file)
@@ -2,11 +2,34 @@
 
 namespace yii_app\actions\shipment;
 
+use Yii;
 use yii\base\Action;
+use yii\helpers\ArrayHelper;
+use yii_app\records\ShipmentProviders;
+use yii_app\records\StoreOrders;
+use yii_app\records\UniversalCatalogItem;
 
 class AddAction extends Action
 {
-    public function run() {
-        return $this->controller->render('add');
+    public function run($id) {
+        $model = StoreOrders::find()->where(['id' => $id])->one();
+        /** @var $model StoreOrders */
+
+        if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) {
+            $model->setProviders();
+            if ($model->validate()) {
+                $model->save();
+            }
+        }
+
+        $cities = ArrayHelper::map(UniversalCatalogItem::find()
+            ->where(['catalog_alias' => 'cities'])
+            ->orderBy(['name' => SORT_ASC])->all(),'id', 'name');
+        $statuses = ArrayHelper::map(UniversalCatalogItem::find()
+            ->where(['catalog_alias' => 'shipment'])
+            ->orderBy(['name' => SORT_ASC])->all(),'guid', 'name');
+        $providers = ArrayHelper::map(ShipmentProviders::find()->all(),'id', 'name');
+        return $this->controller->render('add',
+            compact('model', 'cities', 'statuses', 'providers'));
     }
 }
\ No newline at end of file
index 182cbbbbc41994463a3d032a318553fef5f3eb35..1419c53e2b452db846fcd458738f82d92069f146 100644 (file)
@@ -6,7 +6,11 @@ use yii\web\Controller;
 
 class ShipmentController extends Controller
 {
-    public function actionIndex() {
-        return $this->render('index');
+    public function actions() {
+        return [
+            'add' => \yii_app\actions\shipment\AddAction::class,
+        ];
     }
+
+    public function actionIndex() { return $this->render('index'); }
 }
\ No newline at end of file
index 2bcdd0431d471c45a757867142ca2ff3d92318f8..34fc1e2b134d93ecdcde7044bdb8a2d3e1d569bc 100644 (file)
@@ -1,4 +1,7 @@
-<?
+<?php
+
+//error_reporting(E_ALL ^ E_NOTICE);
+
 $_CONFIG["entity_arr"]=array(
     "lead"=>array("name"=>"Сделки/заказы", "table"=>"orders_amo"),
     "client"=>array("name"=>"Клиент", "table"=>"contacts","type_id"=>0),
@@ -175,7 +178,7 @@ $r .='</tbody>
 .dd-handle, .dd-content {display: block; margin: 0px 0;padding: 1px 0px; }
 </style>*/
 $fields_table_edit ="
-<form method=post role=\"form\" enctype=\"multipart/form-data\" class=\"form-horizontal\" action=\"/$modul/$act/\" autocomplete=\"off\">
+<form method=post role=\"form\" enctype=\"multipart/form-data\" class=\"form-horizontal\" autocomplete=\"off\">
 <div class=\"table-responsive\">
 $r</div>
 
@@ -221,7 +224,7 @@ $r .=' </tbody></table>';
  //<script type=\"text/javascript\">$(document).ready(function($){ $('.dd').nestable({});});</script>
  //<div id=\"list-2\" class=\"nested-list dd with-margins custom-drag-button\">$r</div>
 $fields_edit ="
-<form method=post role=\"form\" enctype=\"multipart/form-data\" class=\"form-horizontal\" action=\"/$modul/$act/\" autocomplete=\"off\">
+<form method=post role=\"form\" enctype=\"multipart/form-data\" class=\"form-horizontal\" autocomplete=\"off\">
 <div class=\"row\"><div class=\"col-12 m-10\">$r</div>
 <div class=\"col-12\">
 
@@ -278,7 +281,7 @@ if(!empty($act)) $action .="$act/";
 
 
 
- unif_fields_show($forma, $table_sql) ;        
+ unif_fields_show($forma, $table_sql) ;
 
        
 $idname=$forma["id"]["name"];  
@@ -453,7 +456,7 @@ $form_field_uni[$row["name_eng"]]=$arr_2;
 }
        
        
-construct_form_submit_uni($forma, $table_sql,$modul_uni,$form_field_hide_array);               
+construct_form_submit_uni($forma, $table_sql,$modul_uni,$form_field_hide_array);
        
 /////////      
        
@@ -599,7 +602,7 @@ $p=0;
 $sql="";
 $param2=array();
 $param2['id2']=$id;
-foreach($sql_upvalue as $nm => $vl) {
+foreach($sql_upvalue ?? [] as $nm => $vl) {
  if($p>0) $sql .=",";    
 $sql .=" `$nm` = :$nm"; 
 $param2[$nm]=$vl;
@@ -807,14 +810,14 @@ elseif(empty($forma[$name]["mysql_table"])) {     $sql1 .=",$name";  $sql2 .=", '$va
        
 $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($_POST[$name]);
+if(isset($_POST[$name])) {
+$val= htmlentities(is_array($_POST[$name]) ? $_POST[$name][0] : $_POST[$name]);
 //echo"<br> $name value=$val ";
         
         
 if($forma[$name]["tip"]=="array") {     
-$val=implode(",",htmlentities($_POST[$name])); 
-$massiv=[];    
+$val=implode(",",$_POST[$name]);
+$massiv=[];
 if($forma[$name]["type"]=="radio" or $forma[$name]["type"]=="html") {  
 foreach($_POST[$name] as $key6 => $valon) {
 if($valon=="on") $massiv[]=$key6;      
@@ -1206,7 +1209,8 @@ if(!empty($mess))  mess($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\" action=\"$action\">";
+<form method=post role=\"form\" class=\"form-horizontal was-validated\" id=\"erpform\" autocomplete=\"off\" enctype=\"multipart/form-data\" >";
+echo "<input type=\"hidden\" name=\"_csrf\" value=\"" . Yii::$app->request->getCsrfToken() . "\" />";
 //<input name=go value=\"".htmlentities($_REQUEST["go"])."\" type=hidden>
 
        
@@ -1216,7 +1220,7 @@ if(!empty($group_menu)) {
 $group=get_sql_array("uni_status", "id", "name", " WHERE type='".$modul."_group' order by posit DESC");        
 $i=0;
 $group_menu ='<div class="row">';
-foreach($group as $gr_id => $nameg){
+foreach($group ?? [] as $gr_id => $nameg){
 if($i==0) { $script="<span class=\"f_group og_\" onclick=\"$('.fdiv').show();$('.f_group').removeClass('f_act');$(this).addClass('f_act');\">все</span>
 <span class=\"f_group og_m\" onclick=\"$('.fdiv').hide(); $('.f_m').show();$('.f_group').removeClass('f_act');$(this).addClass('f_act');\">Основные</span> ";
                   $script2="$('.f_0').show();";  }  else { $script=""; $script2="";    }
@@ -1233,7 +1237,7 @@ echo $group_menu;
 
 if(!empty($forma["save"])) {$save=$forma["save"]; unset($forma["save"]); }
        
-foreach($form_field_uni as $name => $pole_arr2) {      
+foreach($form_field_uni ?? [] as $name => $pole_arr2) {
 $forma[$name]=$pole_arr2;      
 //echo" +++++ {$name} {$pole_arr2["value"]} "; 
 }
@@ -1767,12 +1771,12 @@ optgroup[label] {
 
        
  }
-/*end optgroup*/               
-       
-       
-       
-       
-       
+/*end optgroup*/
+
+
+
+
+
 /*multy-select*/       
 if($pole_arr["type"]=="multiple")  { 
 $item[$name]=explode(",",$item[$name]);
@@ -1796,16 +1800,16 @@ echo" id=crm$name>";
        
 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(in_array($vid,$forma[$name]["value"])) echo" selected";                                                                                                             
+if(in_array($vid,$item[$name])) echo" selected";
+if(is_array($forma[$name]["value"]) && in_array($vid,$forma[$name]["value"])) echo" selected";
 echo">$namev</option>";   }
-}                                                               
+}
 echo"</select></div></div>";   
        
 }
-/*end multy-select*/           
-       
-       
+/*end multy-select*/
+
+
        
        
 /*radio*/              
@@ -2241,9 +2245,9 @@ return $item;
 
 
 function construct_modul_form_azea($modul)   {
-global $modul,$db,$h1,$group_menu,$uni_fields, $_CONFIG,$forma_sql_table;
+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) {      
+foreach ($data as $row) {
 
 $image_config=json_decode($row["image_config"], true,JSON_UNESCAPED_UNICODE);     
 $ext_1=explode(",",$image_config["ext"]);
@@ -2265,7 +2269,7 @@ if(!empty($uni_fields)) $uni_fields=$modul;
 
 
 
-construct_form_azea($forma,$modul,$h1,"2",$uni_fields); 
+construct_form_azea($forma,$modul,$h1,"2",$uni_fields);
 
 if(!empty($_CONFIG["bottom_content"])) echo $_CONFIG["bottom_content"];
        
@@ -2792,6 +2796,9 @@ $spiski_arr=array(
  
  );
 
+if (!isset($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);
index ee1216208f156fc8898297051b3b73a13856b5c2..55682afc5abdab7474df17208d6dbcbf69b64cc5 100644 (file)
@@ -7,6 +7,9 @@ include_once("inc/uni.php");
 include_once("inc/uni2.php");
 
 global $h1,$group_menu,$uni_fields, $forma_sql_table;
+
+error_reporting(E_ALL ^ E_NOTICE);
+
 $h1="Добавить "; $group_menu=0; $uni_fields=0;
 $modul="shipment";
 $forma_sql_table="store_orders";
@@ -25,7 +28,7 @@ $_SESSION["default"][$modul]["cat_id"]=$catid;
 
 include"templates/top.php";
 
-construct_modul_form_azea($modul); 
+construct_modul_form_azea($modul);
 
 
 
index 17c996fb572ccfae11822b505b2d27d02cd6376c..746f90d17f0bc14088e0be73d12f2c4ecb790d7e 100755 (executable)
@@ -16,7 +16,7 @@ use Yii;
  * @property string $division_date дата деления
  * @property int $division_hours
  * @property string $delivery_date_fact Дата прихода товара на склад 
- * @property int $price_logistic
+ * @ property int $price_logistic
  * @property string $comments
  * @property int $admin_id
  * @property string $date_add
@@ -25,9 +25,12 @@ use Yii;
  * @property string $status_logi
  * @property string $date_update Дата и врепмя обновления информации в таблице храннеия data
  * @property string $update_html HTML блок расчета по формулам
+ * @property int city_id
  */
 class StoreOrders extends \yii\db\ActiveRecord
 {
+    public $providers;
+
     /**
      * {@inheritdoc}
      */
@@ -42,9 +45,9 @@ class StoreOrders extends \yii\db\ActiveRecord
     public function rules()
     {
         return [
-            [['name', 'parent_id', 'date_start', 'date_end', 'delivery_date', 'division_date', 'division_hours', 'delivery_date_fact', 'price_logistic', 'comments', 'admin_id', 'date_add', 'providers_arr', 'status_logi', 'date_update', 'update_html'], 'required'],
-            [['parent_id', 'division_hours', 'price_logistic', 'admin_id', 'status'], 'integer'],
-            [['date_start', 'date_end', 'delivery_date', 'division_date', 'delivery_date_fact', 'date_add', 'date_update'], 'safe'],
+            [['name', 'parent_id', 'date_start', 'date_end', 'delivery_date', 'division_date', 'division_hours', 'delivery_date_fact', /*'price_logistic',*/ 'comments', 'admin_id', 'date_add', 'providers_arr', 'status_logi', 'date_update', 'update_html'], 'required'],
+            [['parent_id', 'division_hours', /*'price_logistic',*/ 'admin_id', 'status'], 'integer'],
+            [['date_start', 'date_end', 'delivery_date', 'division_date', 'delivery_date_fact', 'date_add', 'date_update', 'city_id', 'providers'], 'safe'],
             [['comments', 'status_logi', 'update_html'], 'string'],
             [['name', 'providers_arr'], 'string', 'max' => 255],
         ];
@@ -76,4 +79,16 @@ class StoreOrders extends \yii\db\ActiveRecord
             'update_html' => 'Update Html',
         ];
     }
+
+    public function getCity() {
+        return $this->hasOne(CityStore::class, ['id' => 'city_id']);
+    }
+
+    public function getProviders() {
+        return explode(',', $this->providers_arr);
+    }
+
+    public function setProviders() {
+        $this->providers_arr = implode(',', $this->providers);
+    }
 }
diff --git a/erp24/views/shipment/add.php b/erp24/views/shipment/add.php
new file mode 100644 (file)
index 0000000..eb91af1
--- /dev/null
@@ -0,0 +1,132 @@
+<?php
+//chdir(__DIR__ . '/../../');
+//include 'modul/shipment/add.php';
+
+use yii\helpers\Html;
+use yii\widgets\ActiveForm;
+
+use kartik\select2\Select2;
+use dosamigos\datetimepicker\DateTimePicker;
+
+use yii_app\records\StoreOrders;
+use yii_app\helpers\PrintBlockHelper;
+
+/** @var $model StoreOrders */
+/** @var $cities array */
+/** @var $statuses array */
+/** @var $providers array */
+
+?>
+
+<div class="shipmentAdd m-5">
+    <h1><?= Html::a('Назад', '/shipment', ['class' => 'btn btn-primary btn-sm']) ?> <?= $model->name ?></h1>
+
+    <?php $form = ActiveForm::begin() ?>
+
+    <?php PrintBlockHelper::printBlock('Город', $form->field($model, 'city_id')->widget(Select2::class, [
+        'data' => $cities,
+        'language' => 'ru',
+        'options' => ['placeholder' => 'Город...'],
+        'pluginOptions' => [
+            'allowClear' => true,
+        ]
+    ])->label(false)) ?>
+
+    <div style="color:blue;">Устанавливайте город - к городу привязываются магазины. Статистика будет считаться ТОЛЬКО по тем магазинам которые назначены городу. Выбрали МСК - значит стастистика продаж и списаний будет считатся только по 2-м магазинам (на 31 января 24 г)</div>
+
+    <?php PrintBlockHelper::printBlock('*Название закупки', $form->field($model, 'name')->textInput()->label(false));?>
+
+    <?php PrintBlockHelper::printBlock('*Статус закупки', $form->field($model, 'status')->widget(Select2::class, [
+        'data' => $statuses,
+        'language' => 'ru',
+        'options' => ['placeholder' => 'Статус...'],
+        'pluginOptions' => [
+            'allowClear' => true,
+        ]
+    ])->label(false)) ?>
+
+    <?php PrintBlockHelper::printBlock('*Дата старта продаж date_start', $form->field($model, 'date_start')->widget(DateTimePicker::class, [
+        'language' => 'ru',
+        'template' => '{input}',
+        'clientOptions' => [
+            'autoclose' => true,
+            'format' => 'Y-m-d',
+            'todayBtn' => true
+        ],
+    ])->label(false));?>
+
+    <div style="color:red;">Не может быть больше текущего дня! От этой даты в назад прошлое считаем статистику для автозаказа - 7 дней. Продажи, средние продажи за 4 недели, списания. Внимательно устанавливайте дату - как правило это понедельник этой недели</div>
+
+    <?php PrintBlockHelper::printBlock('Дата поставки (деления)', $form->field($model, 'division_date')->widget(DateTimePicker::class, [
+        'language' => 'ru',
+        'template' => '{input}',
+        'clientOptions' => [
+            'autoclose' => true,
+            'format' => 'Y-m-d',
+            'todayBtn' => true
+        ],
+    ])->label(false));?>
+
+    <div style="color:red;">Дата деления участвует в фильтре выборки данных для расчета авто-деления по магазинам. Данные для деления основываются на этой ячейке и должны расчитываться либо в дату деления либо после. В статусе деление по магазинам не должно быть такого чтобы дата деления бала в будущем от текущей даты. От этой даты назад в прошлое расчитываются актуальные продажи и списания. </div>
+
+    <?php PrintBlockHelper::printBlock('*Поставщики', $form->field($model, 'providers')->widget(Select2::class, [
+        'data' => $providers,
+        'language' => 'ru',
+        'options' => ['placeholder' => 'Статус...'],
+        'pluginOptions' => [
+            'allowClear' => true,
+            'multiple' => true,
+        ]
+    ])->label(false)) ?>
+
+    <?php PrintBlockHelper::printBlock('Дата прихода машины в НН', $form->field($model, 'delivery_date_fact')->widget(DateTimePicker::class, [
+        'language' => 'ru',
+        'template' => '{input}',
+        'clientOptions' => [
+            'autoclose' => true,
+            'format' => 'Y-m-d',
+            'todayBtn' => true
+        ],
+    ])->label(false));?>
+
+    <?php PrintBlockHelper::printBlock('ID закупки родителя', $form->field($model, 'parent_id')->textInput()->label(false));?>
+
+    <?php PrintBlockHelper::printBlock('*Дата доставки', $form->field($model, 'delivery_date')->widget(DateTimePicker::class, [
+        'language' => 'ru',
+        'template' => '{input}',
+        'clientOptions' => [
+            'autoclose' => true,
+            'format' => 'Y-m-d',
+            'todayBtn' => true
+        ],
+    ])->label(false));?>
+
+    <div style="color:blue;">Информационная ячейка не влияет на статистику - дата ориентировочной (примерной) доставки в будущем</div>
+
+    <?php PrintBlockHelper::printBlock('Дата добавления', $form->field($model, 'date_add')->widget(DateTimePicker::class, [
+        'language' => 'ru',
+        'template' => '{input}',
+        'clientOptions' => [
+            'autoclose' => true,
+            'format' => 'Y-m-d',
+            'todayBtn' => true
+        ],
+    ])->label(false));?>
+
+    <div style="color:blue;">Информационная ячейка влияет на сортировку в общем списке закупок. Не участвует в формулах расчета данных для автозаказа.</div>
+
+    <?php PrintBlockHelper::printBlock('Комментарий', $form->field($model, 'comments')->textarea(['rows' => 6])->label(false));?>
+
+    <?php PrintBlockHelper::printBlock('Курс доллара в руб', $form->field($model, 'course_dollar')->textInput()->label(false));?>
+
+    <?php PrintBlockHelper::printBlock('Курс евро в рублях', $form->field($model, 'course_euro')->textInput()->label(false));?>
+
+    <?php PrintBlockHelper::printBlock('ID закупки связанной (от которой наслевадовались)', $form->field($model, 'related_order_id')->textInput()->label(false));?>
+
+    <div class="form-group">
+        <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success btn-lg'])?>
+    </div>
+
+    <?php ActiveForm::end() ?>
+</div>
+