]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-302 Редактирование букета
authormarina <m.zozirova@gmail.com>
Tue, 25 Feb 2025 09:05:37 +0000 (12:05 +0300)
committermarina <m.zozirova@gmail.com>
Tue, 25 Feb 2025 09:05:37 +0000 (12:05 +0300)
erp24/controllers/BouquetController.php
erp24/migrations/m250225_081920_add_1c_columns.php [new file with mode: 0644]
erp24/records/BouquetComposition.php
erp24/records/WriteOffsErp.php
erp24/views/bouquet/_form.php
erp24/views/bouquet/_product_list.php

index 7a3d3b3b17d878ecb8ce2e40b9c488d0d29f9f04..1fc8e771033a2723e3effa9f455a976b4c8801c6 100644 (file)
@@ -4,6 +4,7 @@ namespace app\controllers;
 
 use Exception;
 use Yii;
+use yii\db\Expression;
 use yii\helpers\Url;
 use yii\web\Controller;
 use yii\web\NotFoundHttpException;
@@ -15,7 +16,8 @@ use yii_app\records\{BouquetComposition,
     CityStore,
     Files,
     MatrixType,
-    StoreType};
+    StoreType,
+    WriteOffsErp};
 
 class BouquetController extends Controller
 {
@@ -171,6 +173,20 @@ class BouquetController extends Controller
             'marketplace' => $marketplaceList,
         ];
     }
+    public function actionConfirm(int $id): \yii\web\Response
+    {
+        $model = BouquetComposition::findOne($id) ?? throw new NotFoundHttpException('Букет не найден');
 
+        $model->updateAttributes([
+            'status' => WriteOffsErp::STATUS_CONFIRM,
+            'date_confirm' => new Expression('NOW()'),
+            'admin_confirm' => Yii::$app->user->id,
+        ]);
 
+        if ($model->errors) {
+            Yii::$app->session->setFlash('error', 'Ошибка подтверждения букета: ' . implode(' ', $model->getErrors()));
+        }
+
+        return $this->redirect(Yii::$app->request->referrer);
+    }
 }
\ No newline at end of file
diff --git a/erp24/migrations/m250225_081920_add_1c_columns.php b/erp24/migrations/m250225_081920_add_1c_columns.php
new file mode 100644 (file)
index 0000000..ea49eda
--- /dev/null
@@ -0,0 +1,45 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m250225_081920_add_1c_columns
+ */
+class m250225_081920_add_1c_columns extends Migration
+{
+    public function safeUp()
+    {
+        $table = 'erp24.bouquet_composition';
+
+        if (!$this->db->schema->getTableSchema($table, true)->getColumn('date_confirm')) {
+            $this->addColumn($table, 'date_confirm', $this->dateTime());
+        }
+        if (!$this->db->schema->getTableSchema($table, true)->getColumn('date_1c_send')) {
+            $this->addColumn($table, 'date_1c_send', $this->dateTime());
+        }
+        if (!$this->db->schema->getTableSchema($table, true)->getColumn('admin_confirm')) {
+            $this->addColumn($table, 'admin_confirm', $this->integer());
+        }
+        if (!$this->db->schema->getTableSchema($table, true)->getColumn('status')) {
+            $this->addColumn($table, 'status', $this->integer());
+        }
+    }
+
+    public function safeDown()
+    {
+        $table = 'erp24.bouquet_composition';
+
+        if ($this->db->schema->getTableSchema($table, true)->getColumn('date_confirm')) {
+            $this->dropColumn($table, 'date_confirm');
+        }
+        if ($this->db->schema->getTableSchema($table, true)->getColumn('date_1c_send')) {
+            $this->dropColumn($table, 'date_1c_send');
+        }
+        if ($this->db->schema->getTableSchema($table, true)->getColumn('admin_confirm')) {
+            $this->dropColumn($table, 'admin_confirm');
+        }
+        if ($this->db->schema->getTableSchema($table, true)->getColumn('status')) {
+            $this->dropColumn($table, 'status');
+        }
+    }
+}
index fceb1aa30b428c9106698c16ea23b0635e3b3964..1987d9e0f0c0b7a150c193ccd8ee59d437c668ce 100644 (file)
@@ -79,10 +79,9 @@ class BouquetComposition extends ActiveRecord
     public function rules(): array
     {
         return [
-            [['matrix_type_id'], 'required', 'message' => 'Поле "Тип Матрицы" не может быть пустым'],
-            [['name'], 'required', 'message' => 'Поле "Название" не может быть пустым'],
-            [['created_by', 'updated_by'], 'integer', 'message' => '{attribute} должен быть целым числом'],
-            [['created_at', 'updated_at'], 'safe'],
+            [['name', 'matrix_type_id', 'status'], 'required', 'message' => 'Поле {attribute} не может быть пустым'],
+            [['created_by', 'updated_by', 'status', 'date_1c_send', 'date_confirm'], 'integer', 'message' => '{attribute} должен быть целым числом'],
+            [['created_at', 'updated_at', 'admin_confirm'], 'safe'],
             [['guid', 'name'], 'string', 'max' => 255, 'tooLong' => '{attribute} не должен превышать 255 символов'],
             [['photo_bouquet'], 'file',
                 'extensions' => 'jpg, jpeg, png, gif',
index 77b135ac88ac6a2b9c65cfb1f82ac26a7540ffb6..007aa41007d8173ce39308abc89015849b26295c 100644 (file)
@@ -123,7 +123,7 @@ class WriteOffsErp extends \yii\db\ActiveRecord
     const WRITE_OFFS_TYPE_DUE_TO_EQUIPMENT_FAILURE_BRAK = 'Брак из-за поломки оборудования';
     const WRITE_OFFS_TYPE_RESORTING_DOES_NOT_COUNT_TOWARDS_COST = 'Пересорт, не идет в затраты';
 
-    const STATUSES = [
+    public const STATUSES = [
         self::STATUS_CREATED => "Создан",
         self::STATUS_CONFIRM => "Одобрен",
         self::STATUS_SEND => "Отправлен в 1С",
index f047b175d255ab9b5aa7793e8a87b0d0add9aead..06bd9d96744d0d0cfee88e516aaa50500e2f2250 100644 (file)
@@ -8,6 +8,7 @@ use yii\helpers\Url;
 use yii\widgets\ActiveForm;
 use yii_app\records\BouquetComposition;
 use yii_app\records\MatrixType;
+use yii_app\records\WriteOffsErp;
 
 
 /** @var yii\web\View $this */
@@ -82,6 +83,23 @@ $form = ActiveForm::begin([
 
                 <a href="<?= Url::to('/matrix-type') ?>" class="text-decoration-none mt-1 text-center" target="_blank">Редактировать</a>
             </div>
+
+            <div class="d-flex flex-column ms-4">
+                <?php if ($model): ?>
+                    <span class="badge
+                    <?= match ($model->status) {
+                        WriteOffsErp::STATUS_CREATED => 'bg-info',
+                        WriteOffsErp::STATUS_CONFIRM,
+                        WriteOffsErp::STATUS_CREATED_1С => 'bg-success',
+                        WriteOffsErp::STATUS_SEND => 'bg-warning',
+                        WriteOffsErp::STATUS_DISABLE,
+                        WriteOffsErp::STATUS_ERROR_1С => 'bg-danger',
+                        default => 'bg-secondary',
+                    } ?> fs-5 text-white px-7 w-100 text-center">
+                    <?= Html::encode($model->status ? \yii_app\records\WriteOffsErp::STATUSES[$model->status] : null) ?>
+                </span>
+                <?php endif; ?>
+            </div>
         </div>
     </div>
     <div class="row">
index dd5c89d3901558229fc4bd8966f5fb713e1465b8..b0c3c511cbe0529304d8a724b63439dc0a984e7f 100644 (file)
@@ -13,6 +13,7 @@
     use yii\helpers\Url;
     use yii_app\records\BouquetComposition;
     use yii_app\records\BouquetCompositionProducts;
+    use yii_app\records\WriteOffsErp;
 
     foreach ($bouquetCompositionProducts as $product) { ?>
         <div class="d-flex border-bottom ms-1 py-2" style="gap: 0;">
             'class' => 'btn btn-warning btn-edit w-100' . ($model && !BouquetComposition::disabledButtons() ? '' : ' disabled')
         ]) ?>
     </div>
-</div>
\ No newline at end of file
+</div>
+<div class="row">
+    <?= Html::a('Подтвердить для отправки в 1С', Url::to(["/bouquet/confirm", "id" => $model->id]), [
+        'class' => 'btn btn-success btn-edit w-100 mt-4' .
+            (($model && !empty($model->getBouquetCompositionProducts()) && $model->status == WriteOffsErp::STATUS_CREATED) ? '' : ' disabled')
+    ]) ?>
+</div>