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
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
-<?
+<?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),
.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>
//<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\">
- unif_fields_show($forma, $table_sql) ;
+ unif_fields_show($forma, $table_sql) ;
$idname=$forma["id"]["name"];
}
-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);
/////////
$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;
$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;
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>
$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=""; }
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"]} ";
}
}
-/*end optgroup*/
-
-
-
-
-
+/*end optgroup*/
+
+
+
+
+
/*multy-select*/
if($pole_arr["type"]=="multiple") {
$item[$name]=explode(",",$item[$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*/
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"]);
-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"];
);
+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);
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";
include"templates/top.php";
-construct_modul_form_azea($modul);
+construct_modul_form_azea($modul);
* @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
* @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}
*/
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],
];
'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);
+ }
}
--- /dev/null
+<?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>
+