2024-05-07 12:17:25 +02:00
< ? php
namespace App\Console\Commands ;
use Carbon\Carbon ;
use Codexshaper\WooCommerce\Facades\Product ;
use Illuminate\Console\Command ;
use App\Setting ;
use App\Article ;
2024-05-14 17:54:41 +02:00
use App\Mylog ;
2024-05-07 12:17:25 +02:00
use Codexshaper\WooCommerce\Models\Product as ModelsProduct ;
use Codexshaper\WooCommerce\Facades\Variation ;
use Codexshaper\WooCommerce\Facades\Category ;
use Illuminate\Support\Facades\DB ;
2024-06-17 14:41:58 +02:00
use App\Services\ProductLogger ;
2024-05-07 12:17:25 +02:00
class ProductUpdateGm extends Command
{
/**
* The name and signature of the console command .
*
* @ var string
*/
protected $signature = 'product:gmupdate' ;
/**
* The console command description .
*
* @ var string
*/
protected $description = 'Aggiorna prodotti da GM' ;
/**
* Create a new command instance .
*
* @ return void
*/
public function __construct ()
{
parent :: __construct ();
}
/**
* Execute the console command .
*
* @ return int
*/
public function handle ()
{
2024-06-19 17:57:01 +02:00
try {
set_time_limit ( 0 );
ini_set ( " memory_limit " , " 512M " );
$settingora = Setting :: where ( 'key' , 'update_products' ) -> first ();
2024-06-19 18:40:07 +02:00
$productLogger = new ProductLogger ( $settingora , 'updateproducts' );
2024-06-19 18:54:22 +02:00
$productLogger -> addLog ( 'inserted' , 'PRODOTTI INSERITI' . " \n <br> " );
$productLogger -> addLog ( 'not_inserted' , 'EVENTUALI PRODOTTI NON INSERITI' . " \n <br> " );
$productLogger -> addLog ( 'updated' , 'PRODOTTI AGGIORNATI' . " \n <br> " );
$productLogger -> addLog ( 'server_issues' , 'PRODOTTI NON INSERITI PER PROBLEMI SERVER' . " \n <br> " );
$productLogger -> addLog ( 'pre_order' , 'PRODOTTI IN PREVENDITA' . " \n <br> " );
2024-06-19 17:57:01 +02:00
echo " SettingOra: " . $settingora ;
$fromtime = str_replace ( '-' , '' , $settingora -> value );
2024-05-07 12:17:25 +02:00
2024-06-19 17:57:01 +02:00
$articles = Article :: join ( DB :: raw ( '(SELECT IdArticolo, MAX(DataOra) AS data FROM T_WEB_Articoli GROUP BY IdArticolo) b' ), function ( $join ) {
$join -> on ( 'T_WEB_Articoli.IdArticolo' , '=' , 'b.IdArticolo' )
-> on ( 'T_WEB_Articoli.DataOra' , '=' , 'b.data' );
2024-05-14 18:10:44 +02:00
})
2024-06-19 17:57:01 +02:00
-> leftJoin ( DB :: raw ( '(SELECT e.IdStatoProdotto, e.Descrizione as DescrizioneStatoProdotto FROM T_WEB_StatiProdotto e JOIN (SELECT IdStatoProdotto, MAX(DataOra) as data1 from T_WEB_StatiProdotto GROUP BY IdStatoProdotto) c ON e.IdStatoProdotto = c.IdStatoProdotto AND e.DataOra = c.data1 ) f' ), function ( $join ) {
$join -> on ( 'T_WEB_Articoli.IdStatoProdotto' , '=' , 'f.IdStatoProdotto' );
})
-> leftJoin ( DB :: raw ( '(SELECT g.IdTipologia, g.Descrizione as DescrizioneTipologia FROM T_WEB_Tipologie g JOIN (SELECT IdTipologia, MAX(DataOra) as data1 from T_WEB_Tipologie GROUP BY IdTipologia) h ON g.IdTipologia = h.IdTipologia AND g.DataOra = h.data1 ) i' ), function ( $join ) {
$join -> on ( 'T_WEB_Articoli.IdTipologia' , '=' , 'i.IdTipologia' );
})
-> leftJoin ( DB :: raw ( '(SELECT l.IdTipoFormato, l.Descrizione as DescrizioneFormato FROM T_WEB_TipiFormato l JOIN (SELECT IdTipoFormato, MAX(DataOra) as data1 from T_WEB_TipiFormato GROUP BY IdTipoFormato) m ON l.IdTipoFormato = m.IdTipoFormato AND l.DataOra = m.data1 ) n' ), function ( $join ) {
$join -> on ( 'T_WEB_Articoli.IdTipoFormato' , '=' , 'n.IdTipoFormato' );
})
/*
2024-05-07 12:17:25 +02:00
-> leftJoin ( DB :: raw ( '(SELECT o.Codice, o.QtaDisponibile FROM T_WEB_Disponibile o JOIN (SELECT Codice, MAX(DataOra) as data1 from T_WEB_Disponibile GROUP BY Codice) p ON o.Codice = p.Codice AND o.DataOra = p.data1 ) q' ), function ( $join ) {
$join -> on ( 'T_WEB_Articoli.IdArticolo' , '=' , 'q.Codice' );
})
*/
2024-06-19 17:57:01 +02:00
//->where('T_WEB_Articoli.DataOra','>',$settingora->value)
-> where ( 'data' , '>=' , $fromtime )
-> where ( function ( $query ) {
$query -> where ( 'DescrizioneStatoProdotto' , 'In commercio' )
-> orWhere ( 'DescrizioneStatoProdotto' , 'In prevendita' )
-> orWhere ( 'DescrizioneStatoProdotto' , 'Prossima uscita' );
})
//->where('DescrizioneTipologia','Video Streaming')
-> orderBy ( 'Titolo' )
-> get ();
2024-05-14 18:10:44 +02:00
2024-06-19 17:57:01 +02:00
foreach ( $articles as $article ) {
2024-06-19 19:02:51 +02:00
setProductFromGM ( $article , false , $productLogger );
2024-06-19 17:57:01 +02:00
}
2024-06-19 18:40:07 +02:00
$productLogger -> setLogandSendEmail ( 'Aggiornamento Prodotti' );
2024-05-20 01:23:47 +02:00
2024-06-19 17:59:31 +02:00
echo " ************** Finito ************** " ;
2024-06-19 17:57:01 +02:00
} catch ( \Exception $e ) {
echo $e -> getMessage ();
if ( $productLogger ) {
$productLogger -> addLog ( 'Error' , $e -> getMessage ());
2024-06-19 18:40:07 +02:00
$productLogger -> setLogandSendEmail ( 'Aggiornamento Prodotti' );
2024-06-19 17:57:01 +02:00
}
}
2024-05-07 12:17:25 +02:00
}
}