continue;
}
+ $existingRecords = [];
+ $records = Autoplannogramma::find()
+ ->where([
+ 'month' => $month,
+ 'year' => $year,
+ 'store_id' => $store->id,
+ ])
+ ->andWhere(['week' => array_unique(array_column($forecast, 'week'))])
+ ->all();
+
+ foreach ($records as $record) {
+ $existingRecords[$record->week . '_' . $record->product_id] = $record;
+ }
+
foreach ($forecast as $item) {
- $model = new Autoplannogramma();
- $model->month = $month;
- $model->year = $year;
- $model->week = $item['week'];
- $model->product_id = $item['product_id'];
- $model->store_id = $item['store_id'];
+ $key = $item['week'] . '_' . $item['product_id'];
+ $model = $existingRecords[$key] ?? null;
+
+ if (!$model) {
+ $model = new Autoplannogramma();
+ $model->month = $month;
+ $model->year = $year;
+ $model->week = $item['week'];
+ $model->product_id = $item['product_id'];
+ $model->store_id = $item['store_id'];
+ $model->is_archive = false;
+ $model->capacity_type = 1;
+ }
+
$model->quantity = $item['forecast_week_pieces'];
$model->quantity_forecast = $item['forecast_week_pieces'];
- $model->is_archive = false;
- $model->capacity_type = 1;
if (!$model->save()) {
$errors = [];