]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
ERP-302 Редактирование букета
authormarina <m.zozirova@gmail.com>
Mon, 10 Feb 2025 11:31:47 +0000 (14:31 +0300)
committermarina <m.zozirova@gmail.com>
Mon, 10 Feb 2025 11:31:47 +0000 (14:31 +0300)
erp24/composer.json
erp24/controllers/BouquetController.php
erp24/migrations/m250210_112755_add_new_column_on_store_type.php [new file with mode: 0644]
erp24/records/BouquetComposition.php
erp24/records/StoreType.php
erp24/views/bouquet/view.php

index ec2445cc15904742c448d2f728edca1e42877719..b408c64ed29f47cd222d4f652cb1f58c989daa59 100644 (file)
@@ -38,7 +38,7 @@
         "enqueue/amqp-lib": "^0.10.19",
         "vlucas/phpdotenv": "^5.6",
         "softark/yii2-dual-listbox": "^1.0",
-        "kartik-v/yii2-widget-depdrop": "dev-master"
+        "kartik-v/yii2-widget-depdrop": "dev-master",
     },
     "require-dev": {
         "yiisoft/yii2-debug": "~2.1.0",
index a0b6d35e91dbed0b0d4d67c716c794c49fe2b038..32b2dfb0e219999eb6c9a7157af5689f2c2dc37a 100644 (file)
@@ -7,10 +7,13 @@ use Yii;
 use yii\helpers\ArrayHelper;
 use yii\web\Controller;
 use yii\web\NotFoundHttpException;
+use yii\web\UploadedFile;
 use yii_app\records\BouquetComposition;
 use yii_app\records\BouquetCompositionProducts;
+use yii_app\records\CityStore;
 use yii_app\records\Products1c;
 use yii_app\records\Products1cNomenclature;
+use yii_app\records\StoreType;
 
 /**
  * Контроллер для управления букетами и их составами.
@@ -24,7 +27,11 @@ class BouquetController extends Controller
 
     public function actionView()
     {
-        return $this->render('view');
+        $storesTypeList =  ArrayHelper::map(StoreType::find()->all(), 'id', 'name');
+        $storesList = ArrayHelper::map(CityStore::findAll(['visible' => CityStore::IS_VISIBLE]), 'id', 'name');
+        return $this->render('view', [
+            'storesList' => $storesList
+        ]);
     }
 
     public function actionUpdate($id)
@@ -34,13 +41,6 @@ class BouquetController extends Controller
         if (!$model) {
             throw new NotFoundHttpException('Букет не найден.');
         }
-//
-//        if (Yii::$app->request->isPost) {
-//            echo '<pre>';
-//            var_dump(Yii::$app->request->post());
-//            echo '</pre>';
-//           die();
-//        }
 
         if (Yii::$app->request->isPost) {
             try {
@@ -94,30 +94,20 @@ class BouquetController extends Controller
             'availableItems' => $availableItems,
         ]);
     }
-    public function actionUploadPhoto() {
-        $model = new \yii\base\DynamicModel(['images']);
+    public function actionUpload()
+    {
+        $model = new BouquetComposition();
 
         if (Yii::$app->request->isPost) {
-            $files = UploadedFile::getInstances($model, 'images');
-            $savedFiles = [];
-
-            foreach ($files as $file) {
-                $filePath = 'uploads/' . $file->baseName . '.' . $file->extension;
-                if ($file->saveAs($filePath)) {
-                    $savedFiles[] = $filePath;
-                }
+            $model->photo_id = UploadedFile::getInstance($model, 'photo_id');
+            if ($model->validate() && $model->upload()) {
+                // Логика для сохранения
             }
-
-            // Переадресуем обратно, передавая список загруженных файлов
-            return $this->render('upload', [
-                'initialPreview' => $savedFiles
-            ]);
         }
 
-        return $this->render('upload', [
-            'initialPreview' => []
-        ]);
+        return $this->render('upload', ['model' => $model]);
     }
+
     public function actionGetList()
     {
         \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
diff --git a/erp24/migrations/m250210_112755_add_new_column_on_store_type.php b/erp24/migrations/m250210_112755_add_new_column_on_store_type.php
new file mode 100644 (file)
index 0000000..ce9a860
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+use yii\db\Migration;
+
+/**
+ * Class m250210_112755_add_new_column_on_store_type
+ */
+class m250210_112755_add_new_column_on_store_type extends Migration
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function safeUp()
+    {
+        $this->addColumn('store_type', 'sequence_number', $this->integer()->comment('Порядковый номер'));
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function safeDown()
+    {
+        $this->dropColumn('store_type', 'sequence_number');
+    }
+}
index ec122b94eaa08617663793f3719b773f009f04a8..c791c6ee1ea3a90bb6ae9cf6be58c6bd9ba644c2 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+
 namespace yii_app\records;
 
 use Yii;
@@ -53,8 +54,12 @@ class BouquetComposition extends ActiveRecord
     {
         return [
             [['name'], 'required'],
-            [['matrix_type_id', 'photo_id', 'video_id', 'created_by', 'updated_by'], 'integer'],
+            [['matrix_type_id', 'video_id', 'created_by', 'updated_by'], 'integer'],
             [['created_at', 'updated_at'], 'safe'],
+
+            [['photo_id'], 'file', 'extensions' => 'jpg, jpeg, png, gif'],
+
+
             [['guid', 'name'], 'string', 'max' => 255],
         ];
     }
index 36af210d0057be4dc0e7260e898b4e7cb24d7364..52a21a1b2953dc3d2755ca2d14fe29471e47fb3a 100644 (file)
@@ -16,6 +16,7 @@ use yii\db\Expression;
  * @property string $created_at
  * @property int|null $updated_by
  * @property string|null $updated_at
+ * @property int $sequence_number
  */
 class StoreType extends \yii\db\ActiveRecord
 {
@@ -51,7 +52,7 @@ class StoreType extends \yii\db\ActiveRecord
     {
         return [
             [['name'], 'required'],
-            [['created_by', 'updated_by'], 'integer'],
+            [['created_by', 'updated_by', 'sequence_number'], 'integer'],
             [['created_at', 'updated_at'], 'safe'],
             [['name'], 'string', 'max' => 255],
         ];
@@ -69,6 +70,7 @@ class StoreType extends \yii\db\ActiveRecord
             'created_at' => 'Дата создания',
             'updated_by' => 'ИД редактировавшего',
             'updated_at' => 'Дата обновления',
+            'sequence_number' => 'Порядковый номер',
         ];
     }
 }
index a98ac8491b20ebf2afc6582136cecedcd5db2b30..9dc55b1d8bd889fc099a36e838b5227ba7c1508a 100644 (file)
@@ -9,6 +9,7 @@ use yii\helpers\Html;
 use yii\helpers\Url;
 use yii\widgets\ActiveForm;
 use yii\widgets\DetailView;
+use yii_app\records\BouquetComposition;
 use yii_app\records\MatrixType;
 
 /** @var yii\web\View $this */
@@ -21,14 +22,25 @@ $this->title = 'Три гладиолуса';
 $this->params['breadcrumbs'][] = ['label' => 'Букеты', 'url' => ['index']];
 $this->params['breadcrumbs'][] = $this->title;
 ?>
+<?php
+$this->registerCss("
+             .file-caption {
+                    max-width: 62% !important; 
+                }
+            ");
+?>
 <div class="bouquet-view border-bottom-4 p-4">
+    <?php $form = ActiveForm::begin([
+        'options' => ['enctype' => 'multipart/form-data'], // Это необходимо для загрузки файлов
+    ]);
+    ?>
     <div class="row d-flex border-bottom justify-content-between align-items-center py-4">
         <div class="col-md-8 d-flex align-items-center">
             <h3 class="ms-3 mb-0"><?= Html::encode("Состав букета: ") ?></h3>
             <h2 class="ms-2 mb-0"><strong><?= Html::encode($this->title) ?></strong></h2>
         </div>
 
-        <div class="col-md-4 d-flex align-items-center">
+        <div class="col-md-3 d-flex align-items-center">
             <div class="me-3 text-end">
                 <?= Html::label('Тип матрицы', null, ['class' => 'h5 mb-0']) ?>
                 <br>
@@ -40,9 +52,9 @@ $this->params['breadcrumbs'][] = $this->title;
         </div>
     </div>
     <div class="row">
-        <div class="col-md-5">
-            <div class="row mb-2">
-                <div class="col-md-4 text-center font-weight-bold">Название</div>
+        <div class="col-md-4">
+            <div class="row mb-2 pt-3">
+                <div class="col-md-4 fw-bold ps-5">Название</div>
                 <div class="col-md-2 text-center font-weight-bold">Кол-во</div>
                 <div class="col-md-1 text-center font-weight-bold">% списания</div>
                 <div class="col-md-2 text-center font-weight-bold">мрж-ть</div>
@@ -50,9 +62,9 @@ $this->params['breadcrumbs'][] = $this->title;
                 <div class="col-md-2 text-center font-weight-bold">ср.шт. в сборке</div>
             </div>
 
-            <div class="list-container p-3 bg-white border rounded shadow-sm">
+            <div class="row p-3 bg-white border rounded shadow-sm">
                 <div class="row">
-                    <div class="col-md-4 text-center">Гладиолусы краш</div>
+                    <div class="col-md-4">Гладиолусы краш</div>
                     <div class="col-md-2 text-center">3.0</div>
                     <div class="col-md-1 text-center">10%</div>
                     <div class="col-md-2 text-center">30%</div>
@@ -60,99 +72,158 @@ $this->params['breadcrumbs'][] = $this->title;
                     <div class="col-md-2 text-center">3.2%</div>
                 </div>
             </div>
+            <div class="row pt-3">
+                <div class="col-md-8"></div>
+                <div class="col-md-4">
+                    <?= Html::submitButton('Редактировать', ['class' => 'btn btn-warning w-100']) ?>
+                </div>
+            </div>
         </div>
-        <div class="site-index">
-            <h1>Загрузите файлы</h1>
+        <div class="col-md-5">
+            <div class="row w-100 w-md-75 w-lg-50">
+                <?php $model = new BouquetComposition(); ?>
+                <div class="row mb-2"><?= Html::label("Фото", null, ['class' => 'text-center font-weight-bold pt-5 h5']) ?></div>
+                <?= $form->field($model, 'photo_id[]')->widget(FileInput::class, [
+                    'options' => [
+                        'id' => 'bouquet-file-upload',
+                        'multiple' => true,  // Поддержка выбора нескольких файлов
+                    ],
+                    'language' => 'ru',
+                    'pluginOptions' => [
+                        'showPreview' => true,
+                        'showUpload' => false,
+                        'showCancel' => false,
+                        'mainClass' => 'input-group-lg',
+                        'initialPreview' => [],  // Задайте начальный список для предварительного просмотра (если есть)
+                        'maxFileSize' => 2800,  // Максимальный размер файла (в килобайтах)
+                        'dropZoneTitle' => 'Выберите файл',  // Текст на зоне для перетаскивания
+                        'browseOnZoneClick' => true,  // Разрешить клик по зоне перетаскивания
+                        'fileActionSettings' => [
+                            'showZoom' => false,  // Убираем иконку для увеличения
+                        ],
+                    ],
+                ])->label(false) ?>
+            </div>
+            <div class="row">
+                <div class="col-md-6 w-100 w-md-75 w-lg-50">
+                    <div class="row mb-2"><?= Html::label("Презентация", null, ['class' => 'text-center font-weight-bold pt-5 h5']) ?></div>
+                    <?= $form->field($model, 'photo_id[]')->widget(FileInput::class, [
+                        'options' => [
+                            'id' => 'video-file-upload',
+                            'multiple' => false,  // Поддержка выбора нескольких файлов
+                        ],
+                        'language' => 'ru',
+                        'pluginOptions' => [
+                            'showPreview' => true,
+                            'showUpload' => false,
+                            'showCancel' => false,
+                            'mainClass' => 'input-group-lg',
+                            'initialPreview' => [],  // Задайте начальный список для предварительного просмотра (если есть)
+                            'maxFileSize' => 2800,  // Максимальный размер файла (в килобайтах)
+                            'dropZoneTitle' => 'Выберите файл',  // Текст на зоне для перетаскивания
+                            'browseOnZoneClick' => true,  // Разрешить клик по зоне перетаскивания
+                            'fileActionSettings' => [
+                                'showZoom' => false,  // Убираем иконку для увеличения
+                            ],
+                        ],
+                    ])->label(false) ?>
+                </div>
+                <div class="col-md-6 w-100 w-md-75 w-lg-50">
+                    <div class="row mb-2"><?= Html::label("Процесс сборки", null, ['class' => 'text-center font-weight-bold pt-5 h5']) ?></div>
+                    <?= $form->field($model, 'photo_id[]')->widget(FileInput::class, [
+                        'options' => [
+                            'id' => 'presentation-file-upload',
+                            'multiple' => false,  // Поддержка выбора нескольких файлов
+                        ],
+                        'language' => 'ru',
+                        'pluginOptions' => [
+                            'showPreview' => true,
+                            'showUpload' => false,
+                            'showCancel' => false,
+                            'mainClass' => 'input-group-lg',
+                            'initialPreview' => [],  // Задайте начальный список для предварительного просмотра (если есть)
+                            'maxFileSize' => 2800,  // Максимальный размер файла (в килобайтах)
+                            'dropZoneTitle' => 'Выберите файл',  // Текст на зоне для перетаскивания
+                            'browseOnZoneClick' => true,  // Разрешить клик по зоне перетаскивания
+                            'fileActionSettings' => [
+                                'showZoom' => false,  // Убираем иконку для увеличения
+                            ],
+                        ],
+                    ])->label(false) ?>
+                </div>
+            </div>
 
-            <?php
-            // Использование виджета
-            echo FileUploadWidget::widget([
-                'containerId' => 'file-upload-widget',  // Можно указать свой id
-                'inputId' => 'file-upload',  // Можно указать свой id для input
-            ]);
-            ?>
         </div>
 
-
-
         <div class="col-md-3">
-            инпут поля
+            <div class="row mb-2"><?= Html::label("Прогноз продаж", null, ['class' => 'text-center font-weight-bold pt-5 h5']) ?></div>
+            <div class="row">
+                <div class="col-md-5">
+                    <div class="col-md-3"><?= Html::label("Год", null, ['class' => 'font-weight-bold pt-3 h6']) ?></div>
+                    <div class="col-md-9"> <?= Html::dropDownList("year", null, [2024 => 2024, 2025 => 2025], ['class' => 'form-control']) ?></div>
+                </div>
+                <div class="col-md-7">
+                    <div class="col-md-3"><?= Html::label("Месяц", null, ['class' => 'font-weight-bold pt-3 h6']) ?></div>
+                    <div class="col-md-9"> <?= Html::dropDownList("month", null, \yii_app\helpers\DateHelper::MONTH_NUMBER_NAMES, ['class' => 'form-control']) ?></div>
+                </div>
+            </div>
+            <div class="row">
+                <?= Html::label("Оффлайн магазины", null, ['class' => 'text-center font-weight-bold pt-4 h6']) ?>
+            </div>
+            <div class="row">
+                <div class="container border p-3" style="max-height: 200px; background-color: white; overflow: auto;">
+                    <div class="row align-items-center mb-2">
+                        <div class="col-md-8">
+                            <label class="col-form-label">Поле 1:</label>
+                        </div>
+                        <div class="col-md-4">
+                            <input type="number" class="form-control" placeholder="Введите значение">
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <?= Html::label("Интернет магазины", null, ['class' => 'text-center font-weight-bold pt-3 h6']) ?>
+            </div>
+            <div class="row">
+                <div class="container border p-3" style="max-height: 200px;background-color: white; overflow: auto;">
+                    <div class="row align-items-center mb-2">
+                        <?php foreach ($storesList as $store) {
+                            echo '<div class="col-md-8">
+                                    <label class="col-form-label">'.$store.':</label>
+                                </div>
+                                <div class="col-md-4">
+                                    <input type="number" class="form-control" placeholder="Введите значение">
+                                </div>';
+                        } ?>
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <?= Html::label("Маркетплейсы", null, ['class' => 'text-center font-weight-bold pt-3 h6']) ?>
+            </div>
+            <div class="row">
+                <div class="container border p-3" style="max-height: 200px; background-color: white; overflow: auto;">
+                    <div class="row align-items-center mb-2">
+                        <?php foreach ($storesList as $store) {
+                            echo '<div class="col-md-8">
+                                    <label class="col-form-label">'.$store.':</label>
+                                </div>
+                                <div class="col-md-4">
+                                    <input type="number" class="form-control" placeholder="Введите значение">
+                                </div>';
+                        } ?>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-md-10"></div>
+        <div class="col-md-2">
+            <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success w-100']) ?>
         </div>
-        <!--        <div class="col-md-8">-->
-        <!--            <div class="row">-->
-        <!--                <div class="col-md-4">-->
-        <!--                    <div class="row">-->
-        <!--                    --><?php //= Html::label('Фото', null, ['class' => 'h4']) ?>
-        <!--                    --><?php //= FileInput::widget([
-        //                        'name' => 'attachment_4',
-        //                        'disabled' => true
-        //                    ]); ?>
-        <!--                    </div>-->
-        <!--                    <div class="row">-->
-        <!--                        --><?php //= Html::label('Видео', null, ['class' => 'h4']) ?>
-        <!--                        --><?php //= FileInput::widget([
-        //                            'name' => 'attachment_4',
-        //                            'disabled' => true
-        //                        ]); ?>
-        <!--                    </div>-->
-        <!--                </div>-->
-        <!--<!--                <div class="col-md-7">-->-->
-        <!--<!--                    <div class="row border-bottom">-->-->
-        <!--<!--                        <div class="col-md-5">-->-->
-        <!--<!--                            -->--><?php ////= Html::label('Тип матрицы', null, ['class' => 'h4']) ?>
-        <!--<!--                            <br>-->-->
-        <!--<!--                            <a href="-->-->
-        <?php ////= Url::to('/matrix-type') ?><!--<!--" class="text-decoration-none" target="_blank">Редактировать</a>-->
-        -->
-        <!--<!--                        </div>-->-->
-        <!--<!--                        <div class="col-md-7 pt-2 mb-2">-->-->
-        <!--<!--                            -->
-        --><?php ////= Html::dropDownList('matrix_type_id', null, ArrayHelper::map(MatrixType::find()->all(), 'id', 'name'), ['class' => 'form-control', 'prompt' => 'Тип матрицы']) ?>
-        <!--<!--                        </div>-->-->
-        <!--<!--                    </div>-->-->
-        <!--<!--                    <div class="row">-->-->
-        <!--<!--                        -->
-        --><?php ////= Html::label('Прогноз продаж (мес.)', null, ['class' => 'h5 text-center pt-5']) ?>
-        <!--<!--                    </div>-->-->
-        <!--<!--                    <div class="row pt-2">-->-->
-        <!--<!--                        <div class="col-md-4">-->-->
-        <!--<!--                            -->--><?php ////= Html::label('Маркетплейсы', null, ['class' => 'h5 pt-2']) ?>
-        <!--<!--                        </div>-->-->
-        <!--<!--                        <div class="col-md-8">-->-->
-        <!--<!--                            -->
-        --><?php ////= Html::input('number', 'marketplace', null, ['class' => 'form-control']) ?>
-        <!--<!--                        </div>-->-->
-        <!--<!--                    </div>-->-->
-        <!--<!--                    <div class="row pt-2">-->-->
-        <!--<!--                        <div class="col-md-4">-->-->
-        <!--<!--                            -->
-        --><?php ////= Html::label('Интернет магазин', null, ['class' => 'h5 pt-2']) ?>
-        <!--<!--                        </div>-->-->
-        <!--<!--                        <div class="col-md-8">-->-->
-        <!--<!--                            -->
-        --><?php ////= Html::input('number', 'online_stores', null, ['class' => 'form-control']) ?>
-        <!--<!--                        </div>-->-->
-        <!--<!--                    </div>-->-->
-        <!--<!--                    <div class="row">-->-->
-        <!--<!--                        -->
-        --><?php ////= Html::label('Оффлайн магазины', null, ['class' => 'h5 text-center pt-5']) ?>
-        <!--<!--                    </div>-->-->
-        <!--<!--                    <div class="row">-->-->
-        <!--<!--                        -->
-        --><?php ////foreach (\yii_app\records\StoreType::find()->all() as $number => $store) { ?>
-        <!--<!--                            <div class="col-md-3 pt-1 d-flex align-items-center">-->-->
-        <!--<!--                                <span class="offline-stores me-3">-->-->
-        <?php ////= Html::encode($store->name) ?><!--<!--</span>--> -->
-        <!--<!--                            </div>-->-->
-        <!--<!--                            <div class="col-md-9 pt-1 d-flex align-items-center">-->-->
-        <!--<!--                                -->
-        --><?php ////= Html::input('number', "offline-store-$store->id", null, ['class' => 'form-control']) ?>
-        <!--<!--                            </div>-->-->
-        <!--<!--                        -->--><?php ////} ?>
-        <!--<!--                    </div>-->-->
-        <!--<!--                </div>-->-->
-        <!--            </div>-->
-        <!--        </div>-->
     </div>
+    <?php ActiveForm::end(); ?>
 </div>