From: marina Date: Thu, 5 Dec 2024 14:08:56 +0000 (+0300) Subject: ERP-259 Доработка второго шага передачи смен X-Git-Tag: 1.7~187^2~12 X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=61d0c659e89e9403f9999772e57fcb6e3289ccb1;p=erp24_rep%2Fyii-erp24%2F.git ERP-259 Доработка второго шага передачи смен --- diff --git a/erp24/controllers/ShiftTransferController.php b/erp24/controllers/ShiftTransferController.php index 36362a9c..cb8ed07f 100644 --- a/erp24/controllers/ShiftTransferController.php +++ b/erp24/controllers/ShiftTransferController.php @@ -102,6 +102,9 @@ class ShiftTransferController extends Controller } } + + EqualizationRemains::setData($shiftTransfer); + if ($shiftTransfer->validate()) { $shiftTransfer->goods_transfer_summ = array_sum(ArrayHelper::getColumn($shiftTransfer->shiftRemains, 'remains_summ')); $shiftTransfer->goods_transfer_count = array_sum(ArrayHelper::getColumn($shiftTransfer->shiftRemains, 'remains_count')); diff --git a/erp24/records/EqualizationRemains.php b/erp24/records/EqualizationRemains.php index 90cd3c32..2bf72474 100644 --- a/erp24/records/EqualizationRemains.php +++ b/erp24/records/EqualizationRemains.php @@ -95,7 +95,8 @@ class EqualizationRemains extends \yii\db\ActiveRecord ]; } - public static function updateData($equalizationRemains, int $shift_id) { + public static function updateData($equalizationRemains, int $shift_id) + { self::deleteAll(['shift_id' => $shift_id]); if (!is_array($equalizationRemains) || empty($equalizationRemains)) { @@ -118,12 +119,59 @@ class EqualizationRemains extends \yii\db\ActiveRecord 'balance_self_cost' => $er['balance_self_cost'], ]); - if ($equalizationRemain->validate()) + if ($equalizationRemain->validate()) { $equalizationRemain->save(); - else {var_dump($equalizationRemain->errors);die();} + } else { + var_dump($equalizationRemain->errors); + die(); + } } } + public static function setData($shiftTransfer) + { + $plus = ShiftRemains::find() + ->andWhere(['shift_transfer_id' => $shiftTransfer->id]) + ->andWhere(['!=', 'fact_and_1c_diff', 0]) + ->andWhere(['>', 'fact_and_1c_diff', 0]); + + $minus = ShiftRemains::find() + ->andWhere(['shift_transfer_id' => $shiftTransfer->id]) + ->andWhere(['!=', 'fact_and_1c_diff', 0]) + ->andWhere(['<', 'fact_and_1c_diff', 0]) + ->all(); + + foreach ($minus as $m) { + $replacement = Product1cReplacement::find() + ->andWhere(['guid' => $m->product_guid]) + ->select('guid_replacement') + ->scalar(); + $p = $plus->andWhere(['product_guid' => $replacement])->one(); + + $model = new EqualizationRemains(); + $model->setAttributes([ + 'shift_id' => $shiftTransfer->id, + 'product_id' => $m->product_guid, + 'product_count' => $m->fact_and_1c_diff, + 'product_price' => $m->retail_price, + 'product_self_cost' => $m->self_cost, + 'product_replacement_id' => $p->product_guid, + 'product_replacement_count' => $m->fact_and_1c_diff, + 'product_replacement_price' => $p->retail_price, + 'product_replacement_self_cost' => $p->self_cost, + 'balance' => $m->fact_and_1c_diff * ($p->retail_price - $m->retail_price), + 'balance_self_cost' => $m->fact_and_1c_diff * ($p->self_cost - $m->self_cost) + ]); + if ($model->validate()) { + $model->save(); + } elseif ($model->getErrors()) { + var_dump($model->errors); + die(); + } + } + + } + /** * @return \yii\db\ActiveQuery */ diff --git a/erp24/views/shift-transfer/_replacement.php b/erp24/views/shift-transfer/_replacement.php index 03a51117..77382a2d 100644 --- a/erp24/views/shift-transfer/_replacement.php +++ b/erp24/views/shift-transfer/_replacement.php @@ -20,126 +20,126 @@ $this->registerJsFile('/js/shift-transfer/replacement.js', ['position' => \yii\w $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) { - echo $form->field($shiftTransfer, 'equalizationRemains')->widget(MultipleInput::class, [ - 'min' => 0, - 'max' => 100, - 'columns' => [ - [ - 'name' => 'product_id', - 'title' => 'Заменяемый товар', - 'type' => Select2::class, - 'options' => [ - 'data' => array_merge( - ['text' => 'Выберите товар'], - $products - ), - 'pluginOptions' => [ - 'allowClear' => true, - ], - 'pluginEvents' => [ - 'change' => new \yii\web\JsExpression('function() { setProductData.call(this); }'), - ], - ], - 'value' => function ($model) { - return $model->product->id ?? ''; - }, - ], - [ - 'name' => 'product_price', - 'type' => BaseColumn::TYPE_TEXT_INPUT, - 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], - 'title' => 'Цена товара', - 'value' => function ($data) { - return $data['product_price'] ?? ''; - }, - ], - [ - 'name' => 'product_self_cost', - 'type' => BaseColumn::TYPE_TEXT_INPUT, - 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], - 'title' => 'Себестоимость товара', - 'value' => function ($data) { - return $data['product_self_cost'] ?? ''; - }, - ], - [ - 'name' => 'product_replacement_id', - 'title' => 'Замещающий товар', - 'type' => Select2::class, - 'options' => [ - 'data' => [], - 'options' => [ - 'placeholder' => 'Выберите товар', - 'class' => 'form-control', - ], - 'pluginOptions' => [ - 'allowClear' => true, - ], - 'pluginEvents' => [ - 'select2:select' => new \yii\web\JsExpression('function() { - setReplacementPriceData.call(this); - }'), - ], - ], - 'value' => function ($model) { - return $model->productReplacement->name ?? ''; - }, - ], - [ - 'name' => 'product_replacement_price', - 'type' => BaseColumn::TYPE_TEXT_INPUT, - 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], - 'title' => 'Цена замещающего товара', - 'value' => function ($data) { - return $data['product_replacement_price'] ?? ''; - }, - ], - [ - 'name' => 'product_replacement_self_cost', - 'type' => BaseColumn::TYPE_TEXT_INPUT, - 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], - 'title' => 'Себестоимость замещаемого товара', - 'value' => function ($data) { - return $data['product_replacement_self_cost'] ?? ''; - }, - ], - [ - 'name' => 'product_replacement_count', - 'type' => BaseColumn::TYPE_TEXT_INPUT, - 'options' => ['type' => 'number', 'step' => 1,], - 'title' => 'Количество', - 'value' => function ($data) { - return $data['product_replacement_count'] ?? ''; - } - ], - [ - 'name' => 'balance', - 'title' => 'Баланс', - 'type' => BaseColumn::TYPE_TEXT_INPUT, - 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], - 'value' => function ($data) { - return $data['balance'] ?? ''; - }, - ], - [ - 'name' => 'balance_self_cost', - 'title' => 'Разница в сумме (Себестоиомость)', - 'type' => BaseColumn::TYPE_TEXT_INPUT, - 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], - 'value' => function ($data) { - return $data['balance_self_cost'] ?? ''; - }, - ], - ], - 'addButtonPosition' => MultipleInput::POS_FOOTER, - 'addButtonOptions' => [ - 'class' => 'btn btn-success visible', - ], - 'removeButtonOptions' => [ - 'class' => 'btn btn-danger visible', - ], - 'iconSource' => 'fa', - ])->label('Таблица возможных замен'); +// echo $form->field($shiftTransfer, 'equalizationRemains')->widget(MultipleInput::class, [ +// 'min' => 0, +// 'max' => 100, +// 'columns' => [ +// [ +// 'name' => 'product_id', +// 'title' => 'Заменяемый товар', +// 'type' => Select2::class, +// 'options' => [ +// 'data' => array_merge( +// ['text' => 'Выберите товар'], +// $products +// ), +// 'pluginOptions' => [ +// 'allowClear' => true, +// ], +// 'pluginEvents' => [ +// 'change' => new \yii\web\JsExpression('function() { setProductData.call(this); }'), +// ], +// ], +// 'value' => function ($model) { +// return $model->product->id ?? ''; +// }, +// ], +// [ +// 'name' => 'product_price', +// 'type' => BaseColumn::TYPE_TEXT_INPUT, +// 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], +// 'title' => 'Цена товара', +// 'value' => function ($data) { +// return $data['product_price'] ?? ''; +// }, +// ], +// [ +// 'name' => 'product_self_cost', +// 'type' => BaseColumn::TYPE_TEXT_INPUT, +// 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], +// 'title' => 'Себестоимость товара', +// 'value' => function ($data) { +// return $data['product_self_cost'] ?? ''; +// }, +// ], +// [ +// 'name' => 'product_replacement_id', +// 'title' => 'Замещающий товар', +// 'type' => Select2::class, +// 'options' => [ +// 'data' => [], +// 'options' => [ +// 'placeholder' => 'Выберите товар', +// 'class' => 'form-control', +// ], +// 'pluginOptions' => [ +// 'allowClear' => true, +// ], +// 'pluginEvents' => [ +// 'select2:select' => new \yii\web\JsExpression('function() { +// setReplacementPriceData.call(this); +// }'), +// ], +// ], +// 'value' => function ($model) { +// return $model->productReplacement->name ?? ''; +// }, +// ], +// [ +// 'name' => 'product_replacement_price', +// 'type' => BaseColumn::TYPE_TEXT_INPUT, +// 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], +// 'title' => 'Цена замещающего товара', +// 'value' => function ($data) { +// return $data['product_replacement_price'] ?? ''; +// }, +// ], +// [ +// 'name' => 'product_replacement_self_cost', +// 'type' => BaseColumn::TYPE_TEXT_INPUT, +// 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], +// 'title' => 'Себестоимость замещаемого товара', +// 'value' => function ($data) { +// return $data['product_replacement_self_cost'] ?? ''; +// }, +// ], +// [ +// 'name' => 'product_replacement_count', +// 'type' => BaseColumn::TYPE_TEXT_INPUT, +// 'options' => ['type' => 'number', 'step' => 1,], +// 'title' => 'Количество', +// 'value' => function ($data) { +// return $data['product_replacement_count'] ?? ''; +// } +// ], +// [ +// 'name' => 'balance', +// 'title' => 'Баланс', +// 'type' => BaseColumn::TYPE_TEXT_INPUT, +// 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], +// 'value' => function ($data) { +// return $data['balance'] ?? ''; +// }, +// ], +// [ +// 'name' => 'balance_self_cost', +// 'title' => 'Разница в сумме (Себестоиомость)', +// 'type' => BaseColumn::TYPE_TEXT_INPUT, +// 'options' => ['type' => 'number', 'step' => 0.01, 'readonly' => true,], +// 'value' => function ($data) { +// return $data['balance_self_cost'] ?? ''; +// }, +// ], +// ], +// 'addButtonPosition' => MultipleInput::POS_FOOTER, +// 'addButtonOptions' => [ +// 'class' => 'btn btn-success visible', +// ], +// 'removeButtonOptions' => [ +// 'class' => 'btn btn-danger visible', +// ], +// 'iconSource' => 'fa', +// ])->label('Таблица возможных замен'); echo $btn = Html::submitButton('Сохранить', [ 'class' => 'btn btn-primary float-right',