diff --git a/app/Console/Commands/ProductUpdateAllQta.php b/app/Console/Commands/ProductUpdateAllQta.php new file mode 100755 index 00000000..dbf667b4 --- /dev/null +++ b/app/Console/Commands/ProductUpdateAllQta.php @@ -0,0 +1,170 @@ +first(); + $fromtime = str_replace('-', '', $settingora->value); + + + $loginizio = 'Inizio da ' . $ora_update . "\n"; + + Log::channel('updateproductsqta')->notice($loginizio); + + /* $stocks = Stock::join(DB::raw('(SELECT Codice, MAX(DataOra) as data1 from T_WEB_Disponibile GROUP BY Codice ) b'), function($join) + { + $join->on('T_WEB_Disponibile.Codice', '=', 'b.Codice') + ->on('T_WEB_Disponibile.DataOra', '=', 'b.data1'); + } ) + ->where('data1','>=',$fromtime) + ->orderBy('DataOra') + ->get(); + */ + // Sottoquery per trovare l'ultima data/ora per ogni Codice a partire da $fromtime + $subQuery = Stock::select('Codice', DB::raw('MAX(DataOra) as max_data')) + ->where('DataOra', '>=', $fromtime) + ->groupBy('Codice'); + + // Aggiorna solo i record corrispondenti all'ultima data/ora per ogni Codice + $updatedRecords = Stock::joinSub($subQuery, 'latest', function ($join) { + $join->on('T_WEB_Disponibile.Codice', '=', 'latest.Codice') + ->on('T_WEB_Disponibile.DataOra', '=', 'latest.max_data'); + }) + ->where('T_WEB_Disponibile.DataOra', '>=', $fromtime) + ->get(); // Recupera i record da aggiornare + + $nrprodotti = $updatedRecords->count(); + + $log = ""; + + foreach ($updatedRecords as $stock) { + + try { + + $productsku = Product::where('sku', $stock->Codice)->first(); + + if ($productsku->count() > 0) { + $aggiorna = true; + + $inprevendita = isArticleInPrevendita($stock->Codice, false); + $inprevendita_qtaneg = isArticleInPrevendita($stock->Codice, true); + $qtyinstock = intval($productsku['stock_quantity']); + if (isset($productsku['name'])) { + $titolo = $productsku['name']; + } else { + $titolo = ''; + } + // Se il libro è ancora in Prevendita e la quantità è > MyConfig::$qtaMinima, allora non aggiornare la QTA + // deve rimanere a > MyConfig::$qtaMinima per poter vedere "In Preordine" + if ($inprevendita && $qtyinstock > MyConfig::$qtaInPrevendita) { + $aggiorna = false; + } + + if ($aggiorna) { + $data1 = [ + + 'stock_quantity' => $stock->QtaDisponibile, + + ]; + $idprodotto = $productsku['parent_id']; + if ($idprodotto > 0) { + $variation = Variation::update($idprodotto, $productsku['id'], $data1); + } else { + Product::update($productsku['id'], $data1); + } + + $log .= ' *** ' . $stock->Codice . ' ' . $titolo . ' QTA=' . $stock->QtaDisponibile . "\n"; + + if ($inprevendita_qtaneg && ($qtyinstock < MyConfig::$qtaMinima)) { + setPreOrder($stock->Codice, "1", false); + $log .= ' SETTATO IN PREVENDITA !
'; + } + + $aggiornato = true; + } + } + + if ($log) { + Log::channel('updateproductsqta')->notice($log); + $log = ""; + } + } catch (\Exception $e) { + + $log = "Errore: " . $e->getMessage() . "\n"; + Log::channel('updateproductsqta')->error($log); + $log = ""; + + } + } + $ora_fine = Carbon::now(); + + $lognrprodotti = ' Prodotti qta aggiornati di TUTTI ' . $nrprodotti . "\n"; + $logfine = 'Terminato il ' . $ora_fine . "\n"; + $settingora->value = $ora_update; + $settingora->save(); + + if ($aggiornato) { + Log::channel('updateproductsqta')->notice($lognrprodotti . $logfine); + Mail::raw($loginizio . $lognrprodotti . $logfine, function ($message) { + $message->to(Mylog::getEmail()); + $message->subject(Mylog::getSubjectEmail("Aggiornam. Qtà Prodotti:")); + }); + } + } +} diff --git a/app/Console/Commands/ProductUpdateQta.php b/app/Console/Commands/ProductUpdateQta.php index c3749bde..a3672128 100755 --- a/app/Console/Commands/ProductUpdateQta.php +++ b/app/Console/Commands/ProductUpdateQta.php @@ -79,7 +79,6 @@ class ProductUpdateQta extends Command $stocks = Stock::select('Codice', 'QtaDisponibile', DB::raw('MAX(DataOra) as data_recente')) ->where('DataOra', '>=', $fromtime) ->groupBy('Codice', 'QtaDisponibile') - ->orderBy('data_recente', 'asc') ->get(); $nrprodotti = $stocks->count();