]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-243 Действия по замене (II этап)
authormarina <m.zozirova@gmail.com>
Tue, 3 Dec 2024 08:10:25 +0000 (11:10 +0300)
committermarina <m.zozirova@gmail.com>
Tue, 3 Dec 2024 08:10:25 +0000 (11:10 +0300)
erp24/controllers/ReplacementInvoiceController.php [new file with mode: 0644]
erp24/controllers/ShiftTransferController.php
erp24/records/EqualizationRemains.php
erp24/records/ReplacementInvoice.php
erp24/records/ReplacementInvoiceProducts.php
erp24/views/replacement-invoice/index.php [new file with mode: 0644]
erp24/views/replacement-invoice/view.php [new file with mode: 0644]
erp24/views/shift-transfer/_replacement.php

diff --git a/erp24/controllers/ReplacementInvoiceController.php b/erp24/controllers/ReplacementInvoiceController.php
new file mode 100644 (file)
index 0000000..79411bc
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+
+namespace app\controllers;
+
+use Yii;
+use yii\data\ActiveDataProvider;
+use yii\web\Controller;
+use yii\web\NotFoundHttpException;
+use yii_app\records\ReplacementInvoice;
+use yii_app\records\ReplacementInvoiceProducts;
+
+/**
+ * ReplacementInvoiceController реализует действия для модели ReplacementInvoice.
+ */
+class ReplacementInvoiceController extends Controller
+{
+    /**
+     * Displays a list of all ReplacementInvoice records.
+     *
+     * @return mixed
+     */
+    public function actionIndex()
+    {
+        $dataProvider = new ActiveDataProvider([
+            'query' => ReplacementInvoice::find(),
+            'pagination' => [
+                'pageSize' => 20,
+            ],
+        ]);
+
+        return $this->render('index', [
+            'dataProvider' => $dataProvider,
+        ]);
+    }
+
+    /**
+     * Displays a detailed view of a single ReplacementInvoice record.
+     *
+     * @param int $id
+     * @return mixed
+     * @throws NotFoundHttpException
+     */
+    public function actionView($id)
+    {
+        $model = $this->findModel($id);
+
+        $products =  new ActiveDataProvider([
+            'query' => ReplacementInvoiceProducts::find()
+                ->andWhere(['replacement_invoice_id' => $model->guid])
+        ]);
+
+        return $this->render('view', [
+            'model' => $model,
+            'products' =>$products
+        ]);
+    }
+
+    /**
+     * Finds the ReplacementInvoice model based on its primary key value.
+     * If the model is not found, a 404 HTTP exception will be thrown.
+     *
+     * @param int $id
+     * @return ReplacementInvoice
+     * @throws NotFoundHttpException
+     */
+    protected function findModel($id)
+    {
+        if (($model = ReplacementInvoice::findOne($id)) !== null) {
+            return $model;
+        }
+
+        throw new NotFoundHttpException('The requested page does not exist.');
+    }
+}
index 28b844e37989043c0552b9349f674b23f3194103..b0d57047776064929b951dc76f60cda192e846fd 100644 (file)
@@ -24,6 +24,7 @@ use yii_app\records\SelfCostProduct;
 use yii_app\records\Shift;
 use yii_app\records\ShiftRemains;
 use yii_app\records\ShiftTransfer;
+use yii_app\records\StoreBalance;
 use yii_app\services\TaskService;
 
 class ShiftTransferController extends Controller
@@ -173,9 +174,13 @@ class ShiftTransferController extends Controller
                 $model->updateAttributes(['date_end' => date('Y-m-d H:i:s')]);
                 $model->updateAttributes(['status_id' => ShiftTransfer::STATUS_ID_ACCEPTED]);
                 ShiftRemains::updateAll(['type' => ShiftRemains::ARCHIVE_RECORD], ['shift_transfer_id' => $id]);
+                ReplacementInvoice::setData($model);
+                StoreBalance::setData($model);
             } elseif ($action === 'save') {
                 $model->updateAttributes(['status_id' => ShiftTransfer::STATUS_ID_READY_TO_ACCEPT]);
                 EqualizationRemains::updateData(Yii::$app->request->post()['ShiftTransfer']['equalizationRemains'], $id);
+            } elseif ($action === 'rejection') {
+                $model->updateAttributes(['status_id' => ShiftTransfer::STATUS_ID_TRANSFER_ACTIONS]);
             }
         }
 
index 90cd3c3251bac6407b6dae1ef6c1d220db7f5e6a..201827bc8180c8c880e41915ee2aca34dfc523ff 100644 (file)
@@ -67,6 +67,7 @@ class EqualizationRemains extends \yii\db\ActiveRecord
             [['product_count', 'product_price', 'product_self_cost', 'product_replacement_count', 'product_replacement_price', 'product_replacement_self_cost', 'balance', 'balance_self_cost'], 'required'],
             [['created_at', 'updated_at'], 'safe'],
             [['product_id', 'product_replacement_id'], 'string', 'max' => 255],
+            [[]]
         ];
     }
 
index dbbcb4307aee43e98162506452e23f66734f6ddc..8518f2adb024b505a37ca4cb6c8f7c6b791e2d93 100644 (file)
@@ -28,6 +28,8 @@ use Yii;
  */
 class ReplacementInvoice extends \yii\db\ActiveRecord
 {
+    public const ACTIVE = 1;
+    public const DELETE = 0;
     /**
      * {@inheritdoc}
      */
@@ -42,7 +44,7 @@ class ReplacementInvoice extends \yii\db\ActiveRecord
     public function rules()
     {
         return [
-            [['guid', 'created_admin_id', 'store_id', 'store_guid', 'number', 'date', 'created_at'], 'required'],
+            [['guid', 'created_admin_id', 'store_id', 'store_guid', 'date', 'created_at'], 'required'],
             [['status', 'created_admin_id', 'updated_admin_id', 'confirm_admin_id', 'store_id', 'active', 'deleted_admin_id'], 'default', 'value' => null],
             [['status', 'created_admin_id', 'updated_admin_id', 'confirm_admin_id', 'store_id', 'active', 'deleted_admin_id'], 'integer'],
             [['date', 'created_at', 'updated_at', 'deleted_at', 'send_at'], 'safe'],
@@ -52,6 +54,32 @@ class ReplacementInvoice extends \yii\db\ActiveRecord
         ];
     }
 
+    public static function setData($shiftTransfer)
+    {
+        $storeId = array_flip(CityStore::getAllActiveGuidId())[$shiftTransfer->store_guid];
+        $model = new self();
+        $model->setAttributes([
+            'guid' => GUID(),
+            'status' => 2,
+            'created_admin_id' => $shiftTransfer->end_shift_admin_id,
+            'updated_admin_id' => $shiftTransfer->start_shift_admin_id,
+            'confirm_admin_id' => $shiftTransfer->start_shift_admin_id,
+            'store_id' => $storeId,
+            'store_guid' => $shiftTransfer->store_guid,
+            'date' => $shiftTransfer->date,
+            'comment' => $shiftTransfer->comment,
+            'created_at' => $shiftTransfer->date_start,
+            'active' => self::ACTIVE,
+        ]);
+
+        if ($model->validate()) {
+            $model->save();
+            ReplacementInvoiceProducts::setData($model, $shiftTransfer);
+        } else {
+            var_dump($model->errors);
+        }
+    }
+
     /**
      * {@inheritdoc}
      */
@@ -59,27 +87,29 @@ class ReplacementInvoice extends \yii\db\ActiveRecord
     {
         return [
             'id' => 'ID',
-            'guid' => 'Guid',
-            'status' => 'Status',
-            'created_admin_id' => 'Created Admin ID',
-            'updated_admin_id' => 'Updated Admin ID',
-            'confirm_admin_id' => 'Confirm Admin ID',
-            'store_id' => 'Store ID',
-            'store_guid' => 'Store Guid',
-            'number' => 'Number',
-            'number_1c' => 'Number 1c',
-            'date' => 'Date',
-            'comment' => 'Comment',
-            'created_at' => 'Created At',
-            'updated_at' => 'Updated At',
-            'deleted_at' => 'Deleted At',
-            'send_at' => 'Send At',
-            'active' => 'Active',
-            'deleted_admin_id' => 'Deleted Admin ID',
+            'guid' => 'GUID',
+            'status' => 'Статус',
+            'created_admin_id' => 'ID администратора (создатель)',
+            'updated_admin_id' => 'ID администратора (редактировавший)',
+            'confirm_admin_id' => 'ID администратора (подтверждение)',
+            'store_id' => 'ID магазина',
+            'store_guid' => 'GUID магазина',
+            'number' => 'Номер',
+            'number_1c' => 'Номер 1C',
+            'date' => 'Дата',
+            'comment' => 'Комментарий',
+            'created_at' => 'Дата создания',
+            'updated_at' => 'Дата обновления',
+            'deleted_at' => 'Дата удаления',
+            'send_at' => 'Дата отправки',
+            'active' => 'Активность',
+            'deleted_admin_id' => 'ID администратора (удаливший)',
         ];
     }
 
-    public function getReplacementProducts() {
+
+    public function getReplacementProducts()
+    {
         return $this->hasMany(ReplacementInvoiceProducts::class, ['replacement_invoice_id' => 'id']);
     }
 }
index 6686fe3c17e1b3f2be2c5c32264a4f17d67f2e43..fb765eff9411ccc3956f6ba5534f7e2d8858f1ae 100644 (file)
@@ -29,6 +29,16 @@ use Yii;
  */
 class ReplacementInvoiceProducts extends \yii\db\ActiveRecord
 {
+
+    public const ACTIVE = 1;
+    public const DELETE = 0;
+
+    //Cписываемый товар (Товар замена)
+    public const EXPENDING = 1;
+    //Приходуемый товар (Товар, который надо заменить)
+    public const INCOMING = 2;
+
+
     /**
      * {@inheritdoc}
      */
@@ -37,6 +47,58 @@ class ReplacementInvoiceProducts extends \yii\db\ActiveRecord
         return 'replacement_invoice_products';
     }
 
+    public static function setData($replacementInvoice, $shiftTransfer)
+    {
+        $equalizationRemains = EqualizationRemains::findAll(['shift_id' => $shiftTransfer->id]);
+        foreach ($equalizationRemains as $equalizationRemain) {
+            $incoming = new self();
+            $incoming->setAttributes([
+                'replacement_invoice_id' => $replacementInvoice->guid,
+                'name' => $equalizationRemain->product->name,
+                'product_id' => $equalizationRemain->product_id,
+                'direction_id' => self::INCOMING,
+                'quantity' => $equalizationRemain->product_count,
+                'price' => $equalizationRemain->product_price,
+                'price_retail' => $equalizationRemain->product_price,
+                'price_self_cost' => $equalizationRemain->product_self_cost,
+                'summ' => $equalizationRemain->product_price * $equalizationRemain->product_count,
+                'summ_retail' => $equalizationRemain->product_price * $equalizationRemain->product_count,
+                'summ_self_cost' => $equalizationRemain->product_self_cost * $equalizationRemain->product_count,
+                'active_product' => self::ACTIVE,
+                'created_at' => $equalizationRemain->created_at,
+                'updated_at' => $equalizationRemain->updated_at,
+                'created_admin_id' => $equalizationRemain->created_by,
+                'updated_admin_id' => $equalizationRemain->updated_by,
+            ]);
+
+            $expending = new self();
+            $expending->setAttributes([
+                'replacement_invoice_id' => $replacementInvoice->guid,
+                'name' => $equalizationRemain->productReplacement->name,
+                'product_id' => $equalizationRemain->product_replacement_id,
+                'direction_id' => self::EXPENDING,
+                'quantity' => $equalizationRemain->product_replacement_count,
+                'price' => $equalizationRemain->product_replacement_price,
+                'price_retail' => $equalizationRemain->product_replacement_price,
+                'price_self_cost' => $equalizationRemain->product_replacement_self_cost,
+                'summ' => $equalizationRemain->product_replacement_price * $equalizationRemain->product_replacement_count,
+                'summ_retail' => $equalizationRemain->product_replacement_price * $equalizationRemain->product_replacement_count,
+                'summ_self_cost' => $equalizationRemain->product_replacement_self_cost * $equalizationRemain->product_replacement_count,
+                'active_product' => self::ACTIVE,
+                'created_at' => $equalizationRemain->created_at,
+                'updated_at' => $equalizationRemain->updated_at,
+                'created_admin_id' => $equalizationRemain->created_by,
+                'updated_admin_id' => $equalizationRemain->updated_by,
+            ]);
+
+            if ($expending->validate() && $incoming->validate()) {
+                $expending->save() && $incoming->save();
+            } else {
+                var_dump($expending->save() && $incoming->validate());
+            }
+        }
+    }
+
     /**
      * {@inheritdoc}
      */
diff --git a/erp24/views/replacement-invoice/index.php b/erp24/views/replacement-invoice/index.php
new file mode 100644 (file)
index 0000000..4cc0d77
--- /dev/null
@@ -0,0 +1,35 @@
+<?php
+
+use yii\helpers\Html;
+use yii\grid\GridView;
+
+/* @var $this yii\web\View */
+/* @var $dataProvider yii\data\ActiveDataProvider */
+
+$this->title = 'Замены документов';
+$this->params['breadcrumbs'][] = $this->title;
+?>
+<div class="replacement-invoice-index">
+
+    <h1><?= Html::encode($this->title) ?></h1>
+
+    <?= GridView::widget([
+        'dataProvider' => $dataProvider,
+        'columns' => [
+            ['class' => 'yii\grid\SerialColumn'],
+
+            'id',
+            'guid',
+            'store_id',
+            'number',
+            'date',
+            'status',
+            'active',
+            'created_at',
+            [
+                'class' => 'yii\grid\ActionColumn',
+                'template' => '{view}', // кнопка просмотра
+            ],
+        ],
+    ]); ?>
+</div>
diff --git a/erp24/views/replacement-invoice/view.php b/erp24/views/replacement-invoice/view.php
new file mode 100644 (file)
index 0000000..b3d9bbc
--- /dev/null
@@ -0,0 +1 @@
+<?php
index cafe8a430e7c8393804a2724d2a517ce250a7ee8..fdeb9fbee8c45d831a4438bea3d4bdd75a4c9ce9 100644 (file)
@@ -17,6 +17,11 @@ use yii\widgets\ActiveForm;
 
 $this->registerJsFile('/js/shift-transfer/replacement.js', ['position' => \yii\web\View::POS_END]);
 
+$usersOnStoreArray = \yii_app\records\Timetable::find()
+    ->andWhere(['store_id' => array_flip(\yii_app\records\CityStore::getAllActiveGuidId())[$shiftTransfer->store_guid]])
+    ->select(['admin_id'])
+    ->column();
+
 $form = \yii\widgets\ActiveForm::begin();
 if (in_array($shiftTransfer->status_id, [ShiftTransfer::STATUS_ID_TRANSFER_ACTIONS, ShiftTransfer::STATUS_ID_INPUT_FACT_REMAINS])
     && Yii::$app->user->id === $shiftTransfer->end_shift_admin_id) {
@@ -141,8 +146,8 @@ if (in_array($shiftTransfer->status_id, [ShiftTransfer::STATUS_ID_TRANSFER_ACTIO
         'iconSource' => 'fa',
     ])->label('Таблица возможных замен');
 
-   echo $btn = Html::submitButton('Сохранить', [
-       'class' => 'btn btn-primary float-right',
+    echo $btn = Html::submitButton('Сохранить', [
+        'class' => 'btn btn-primary float-right',
         'name' => 'action',
         'value' => 'save'
     ]);
@@ -222,7 +227,7 @@ if (in_array($shiftTransfer->status_id, [ShiftTransfer::STATUS_ID_TRANSFER_ACTIO
         'footerRowOptions' => ['class' => 'footer-row'],
     ]);
 
-    if (Yii::$app->user->id === $shiftTransfer->start_shift_admin_id && $shiftTransfer->status_id == ShiftTransfer::STATUS_ID_READY_TO_ACCEPT) {
+    if (in_array(Yii::$app->user->id, $usersOnStoreArray) && $shiftTransfer->status_id == ShiftTransfer::STATUS_ID_READY_TO_ACCEPT) {
         echo Html::submitButton('Принять', [
                 'class' => 'btn btn-primary float-right',
                 'name' => 'action',