use Exception;
use Yii;
+use yii\db\Expression;
use yii\helpers\Url;
use yii\web\Controller;
use yii\web\NotFoundHttpException;
CityStore,
Files,
MatrixType,
- StoreType};
+ StoreType,
+ WriteOffsErp};
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
--- /dev/null
+<?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');
+ }
+ }
+}
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',
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С",
use yii\widgets\ActiveForm;
use yii_app\records\BouquetComposition;
use yii_app\records\MatrixType;
+use yii_app\records\WriteOffsErp;
/** @var yii\web\View $this */
<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">
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>