use yii\base\Action;
use yii\data\ActiveDataProvider;
use yii\data\ArrayDataProvider;
+use yii\db\Expression;
use yii_app\records\Products1c;
use yii_app\records\Products1cNomenclature;
use yii_app\records\ProductsClass;
{
public function run()
{
+ $storeId = Yii::$app->request->post('store', 'dbd70103-2c7b-11e9-9b87-c85b76f0e893');
+ $isValid = Yii::$app->request->post('is_valid');
+ $productId = Yii::$app->request->post('product_id');
+
$subQuery = Products1c::find()
->alias('p1n')
->leftJoin('products_class pc', 'p1n.id = pc.category_id')
])
->select('p1n.id');
- $storeId = Yii::$app->request->post('store', 'dbd70103-2c7b-11e9-9b87-c85b76f0e893');
- $isValid = Yii::$app->request->post('is_valid');
$innerQuery = Products1c::find()
->alias('p1n')
->leftJoin('prices p', 'p.product_id = p1n.id')
->leftJoin('matrix_erp_property_dynamic mep', 'mep.product_id = p1n.id AND mep.active = 1')
- ->leftJoin('marketplace_priority mp', 'mp.guid::text = mep.product_id')
- ->leftJoin(['mp_check' => new \yii\db\Expression("
+ ->leftJoin('marketplace_priority mp', 'mp.guid::text = p1n.id::text')
+ ->leftJoin(['mp_check' => new Expression("
LATERAL (
SELECT
- bool_or(COALESCE(b.quantity, 0) < (j.value::numeric * mp.reminder_koef)) AS has_insufficient_quantity,
+ bool_or(COALESCE(b.quantity, 0) < (j.value::numeric * COALESCE(mp.reminder_koef, 1))) AS has_insufficient_quantity,
string_agg(
format(
'Недостаточно товара %s (нужно ≥ %s, на складе %s)',
prod.name,
- (j.value::numeric * mp.reminder_koef),
+ (j.value::numeric * COALESCE(mp.reminder_koef, 1)),
COALESCE(b.quantity::text, '0')
),
E'\n'
- ) FILTER (WHERE COALESCE(b.quantity, 0) < (j.value::numeric * mp.reminder_koef)) AS insuff_reason
+ ) FILTER (WHERE COALESCE(b.quantity, 0) < (j.value::numeric * COALESCE(mp.reminder_koef, 1))) AS insuff_reason
FROM jsonb_each(
- replace(trim(both '\"' from mep.value), '\"\"', '\"')::jsonb
+ CASE
+ WHEN mep.value = '' THEN '{}'
+ ELSE replace(trim(both '\"' from mep.value), '\"\"', '\"')
+ END::jsonb
) AS j(key, value)
LEFT JOIN balances b ON b.product_id::text = j.key AND b.store_id = :storeId
LEFT JOIN products_1c prod ON prod.id::text = j.key
new \yii\db\Expression("
(
'Коэффициент: ' || COALESCE(mp.reminder_koef::text, '-') || E'\n' ||
- COALESCE(
- concat_ws(
- E'\n',
- CASE WHEN mep.id IS NULL THEN 'Не имеет состава букета' ELSE NULL END,
- CASE WHEN p.price IS NULL THEN 'Нет имеет цены' ELSE NULL END
- ),
- ''
+ concat_ws(
+ E'\n',
+ CASE WHEN mep.id IS NULL THEN 'Не имеет состава букета' ELSE NULL END,
+ CASE WHEN p.price IS NULL THEN 'Нет имеет цены' ELSE NULL END,
+ CASE WHEN mp_check.has_insufficient_quantity THEN mp_check.insuff_reason ELSE NULL END
)
- ||
- CASE WHEN mp_check.has_insufficient_quantity THEN
- E'\n' || mp_check.insuff_reason
- ELSE ''
- END
) AS reason
"),
new \yii\db\Expression("
"),
])
->where(['in', 'parent_id', $subQuery])
+ ->andFilterWhere(['p1n.id' => $productId])
->params([':storeId' => $storeId]);
$products = (new \yii\db\Query())
'dataProvider' => $dataProvider,
'isValid' => $isValid,
'storeId' => $storeId,
+ 'productId' => $productId,
]);
}
namespace yii_app\commands;
use yii\console\Controller;
+use yii\db\Exception;
use yii\helpers\ArrayHelper;
use yii\helpers\Json;
use yii_app\records\MatrixErp;
if ($matrixErpPropertyDynamic1) {
$matrixErpPropertyDynamic1->date_end = date("Y-m-d H:i:s");
$matrixErpPropertyDynamic1->active = 0;
- $matrixErpPropertyDynamic1->save();
- if ($matrixErpPropertyDynamic1->getErrors()) {
- var_dump($matrixErpPropertyDynamic1->getErrors());
+ if (!$matrixErpPropertyDynamic1->save()) {
+ $errors = $matrixErpPropertyDynamic1->getErrors();
+ $errorText = '';
+ foreach ($errors as $attribute => $msgs) {
+ foreach ($msgs as $msg) {
+ $errorText .= "$attribute: $msg\n";
+ }
+ }
+ throw new \Exception("MatrixErpPropertyDynamic update error:\n" . $errorText);
}
}
$matrixErpPropertyDynamic2 = new MatrixErpPropertyDynamic;
$matrixErpPropertyDynamic2->date_from = date("Y-m-d H:i:s");
$matrixErpPropertyDynamic2->date_end = '2100-01-01 00:00:00';
$matrixErpPropertyDynamic2->active = 1;
- $matrixErpPropertyDynamic2->save();
- if ($matrixErpPropertyDynamic2->getErrors()) {
- var_dump($matrixErpPropertyDynamic2->getErrors());
+ if (!$matrixErpPropertyDynamic2->save()) {
+ $errors = $matrixErpPropertyDynamic2->getErrors();
+ $errorText = '';
+ foreach ($errors as $attribute => $msgs) {
+ foreach ($msgs as $msg) {
+ $errorText .= "$attribute: $msg\n";
+ }
+ }
+ throw new \Exception("MatrixErpPropertyDynamic create error:\n" . $errorText);
}
+
$matrixErp->$field = $product->$field;
- $matrixErp->save();
- if ($matrixErp->getErrors()) {
- var_dump($matrixErp->getErrors());
+ if (!$matrixErp->save()) {
+ $errors = $matrixErp->getErrors();
+ $errorText = '';
+ foreach ($errors as $attribute => $msgs) {
+ foreach ($msgs as $msg) {
+ $errorText .= "$attribute: $msg\n";
+ }
+ }
+ throw new \Exception("MatrixErp update error:\n" . $errorText);
}
}
}
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii_app\records\CityStore;
+use yii_app\services\MarketplaceService;
/* @var $this yii\web\View */
/* @var $dataProvider yii\data\ActiveDataProvider */
/* @var $storeId string GUID магазина по дефолту Аэродромная */
/* @var $isValid bool Флаг на активности на МП */
+/* @var $productId string GUID букета */
$this->title = 'Отчет продуктов по активности на МП';
$this->params['breadcrumbs'][] = $this->title;
],
]) ?>
</div>
+ <div class="col-md">
+ <?= Select2::widget([
+ 'name' => 'product_id',
+ 'value' => $productId,
+ 'data' => ArrayHelper::map(MarketplaceService::getMarketplaceProducts(), 'id', 'name'),
+ 'options' => [
+ 'placeholder' => 'Букет',
+ ],
+ 'pluginOptions' => [
+ 'allowClear' => true,
+ ],
+ ]) ?>
+ </div>
<div class="col-md">
<?= Select2::widget([
'name' => 'is_valid',