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\Log ;
use Illuminate\Support\Facades\Mail ;
use Illuminate\Support\Facades\DB ;
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-05-14 18:10:44 +02:00
$aggiornato = false ;
set_time_limit ( 0 );
ini_set ( " memory_limit " , " 512M " );
$ora_update = Carbon :: now ();
$settingora = Setting :: where ( 'key' , 'update_products' ) -> first ();
$fromtime = str_replace ( '-' , '' , $settingora -> value );
$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' );
})
-> 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-05-14 18:10:44 +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 ();
Log :: channel ( 'updateproducts' ) -> notice ( 'Inizio da ' . $settingora -> value . " \n " );
$loginizio = 'Inizio da ' . $settingora -> value . " \n " ;
$logfine = 'Fino a ' . $ora_update . " \n " ;
2024-05-14 23:45:21 +02:00
$log = ' PRODOTTI INSERITI' . " \n " ;
2024-05-14 18:10:44 +02:00
$log1 = 'EVENTUALI PRODOTTI NON INSERITI' . " \n " ;
$log2 = 'PRODOTTI AGGIORNATI' . " \n " ;
$log3 = 'PRODOTTI NON INSERITI PER PROBLEMI SERVER' . " \n " ;
foreach ( $articles as $article ) {
try {
$productsku = Product :: where ( 'sku' , $article -> IdArticolo ) -> first ();
//if(Gm_product::where('id_gm',$article->IdArticolo)->doesntExist())
if ( $productsku -> count () == 0 ) {
$titolo = null ;
$formato = null ;
$prodotti = null ;
$prodotti = new ModelsProduct ();
$titolo = $article -> Titolo ;
switch ( $article -> DescrizioneTipologia ) {
case 'Libri' :
$prodotti = $prodotti -> where ( 'name' , $titolo ) -> get ();
$id = 0 ;
if ( ! is_null ( $prodotti ) && $prodotti -> count () > 0 ) {
foreach ( $prodotti as $prodotto ) {
if ( strtolower ( $prodotto -> name ) === strtolower ( $titolo )) {
$found_key = array_search ( 'Autore libro' , array_column ( $prodotto -> attributes , 'name' ));
if ( array_diff ( $prodotto -> attributes [ $found_key ] -> options , $article -> authors ) === array_diff ( $article -> authors , $prodotto -> attributes [ $found_key ] -> options )) {
$id = $prodotto -> id ;
$variations = Variation :: all ( $prodotto -> id );
foreach ( $variations as $variation ) {
$found_key_version = array_search ( 'Versione' , array_column ( $variation -> attributes , 'name' ));
if ( $variation -> attributes [ $found_key_version ] -> option == 'Nuovo' ) {
$id = 0 ;
}
2024-05-07 12:17:25 +02:00
}
}
}
}
2024-05-14 18:10:44 +02:00
}
$data1 = [
'regular_price' => $article -> PrezzoIvato ,
'sku' => $article -> IdArticolo ,
'sale_price' => $article -> PrezzoIvatoScontatoCampagna ,
'date_on_sale_from' => $article -> DataInizioCampagna ,
'date_on_sale_to' => $article -> DataFineCampagna ,
'manage_stock' => true ,
'stock_quantity' => $article -> stock ,
'purchasable' => false ,
'attributes' => [
[
//'id' => 1,
'id' => 6 ,
'option' => 'Nuovo'
2024-05-07 12:17:25 +02:00
]
2024-05-14 18:10:44 +02:00
],
'meta_data' => [
[
'key' => 'ISBN' ,
'value' => $article -> Ean13
],
[
'key' => 'misure' ,
'value' => $article -> Misure
],
[
'key' => 'formato' ,
'value' => $article -> DescrizioneFormato
],
[
'key' => 'pagine' ,
'value' => $article -> Pagine
],
[
'key' => 'edizione' ,
'value' => $article -> Edizione
],
[
'key' => 'ristampa' ,
'value' => $article -> Ristampa
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
]
];
if ( $id == 0 ) {
$versione = 'Nuova versione' ;
$category = Category :: where ( 'name' , $article -> argomento );
if ( $category -> count () > 0 ) {
$categoria = $category -> first ();
$categoriaid = $categoria [ 'id' ];
} else {
$categoriaid = 0 ;
}
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'name' => $article -> Titolo ,
'type' => 'variable' ,
'short_description' => $article -> Sottotitolo ,
'categories' => [
[ 'id' => $categoriaid ]
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
],
'status' => 'draft' ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
//'description' => 'Simple product full description.',
//'short_description' => 'Simple product short description.',
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'attributes' => [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
[
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
[
//'id' => 5,
'id' => 7 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' =>
$article -> authors
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
],
[
//'id' => 2,
'id' => 8 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' => [
$article -> editore
2024-05-07 12:17:25 +02:00
]
],
2024-05-14 18:10:44 +02:00
[
//'id' => 7,
'id' => 9 ,
'visible' => true ,
'options' => [
$article -> DescrizioneTipologia
2024-05-07 12:17:25 +02:00
]
2024-05-14 18:10:44 +02:00
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'default_attributes' => [
[
//'id' => 1,
'id' => 6 ,
'option' => 'Nuovo'
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$product = Product :: create ( $data );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$idprodotto = $product [ 'id' ];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$variation = Variation :: create ( $idprodotto , $data1 );
//dd($variation);
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
} else {
$versione = " Aggiunta versione " ;
$product = Product :: find ( $id );
$old_attributes = $product [ 'attributes' ];
$attributes = [];
foreach ( $old_attributes as $old_attribute ) {
if ( $old_attribute -> id <> 6 ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$attributes [] = [
'id' => $old_attribute -> id ,
'variation' => $old_attribute -> variation ,
'visible' => $old_attribute -> visible ,
'options' => $old_attribute -> options
2024-05-07 12:17:25 +02:00
];
2024-05-14 18:10:44 +02:00
}
}
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$attributes [] = [
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
];
//dd($attributes);
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'attributes' => $attributes
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
Product :: update ( $id , $data );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$variation = Variation :: create ( $id , $data1 );
}
$log .= $article -> Titolo . ' - ' . $article -> DescrizioneTipologia . ' - ' . $article -> DescrizioneFormato . ' - ' . $versione . ' - ' . $variation [ 'permalink' ] . " \n " ;
$aggiornato = true ;
break ;
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
case 'E-book' :
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
if ( $article -> DescrizioneFormato === 'Epub' ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$titolo = rtrim ( str_ireplace ( 'EPUB' , '' , $article -> Titolo ));
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$formato = 'Epub' ;
} elseif ( $article -> DescrizioneFormato === 'Pdf' ) {
$titolo = rtrim ( str_ireplace ( 'PDF' , '' , $article -> Titolo ));
$formato = 'PDF' ;
} elseif ( $article -> DescrizioneFormato === 'Mobi' ) {
$titolo = rtrim ( str_ireplace ( 'MOBI' , '' , $article -> Titolo ));
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$formato = 'Mobi' ;
} else {
$log1 .= $article -> Titolo . ' - ' . $article -> DescrizioneTipologia . ' - ' . $article -> DescrizioneFormato . " \n " ;
$aggiornato = true ;
break ;
}
$titolo = rtrim ( $titolo );
$titolo = rtrim ( str_ireplace ( 'EBOOK' , '' , $titolo ));
$titolo = rtrim ( $titolo );
$titolo = rtrim ( str_ireplace ( '_' , '' , $titolo ));
$titolo = rtrim ( $titolo );
$titolo = rtrim ( $titolo , '-' );
$titolo = rtrim ( $titolo );
$titolo = rtrim ( $titolo , '_' );
$titolo = rtrim ( $titolo );
$prodotti = $prodotti -> where ( 'name' , $titolo ) -> get ();
$id = 0 ;
if ( ! is_null ( $prodotti ) && $prodotti -> count () > 0 ) {
foreach ( $prodotti as $prodotto ) {
if ( strtolower ( $prodotto -> name ) === strtolower ( $titolo )) {
$found_key = array_search ( 'Autore libro' , array_column ( $prodotto -> attributes , 'name' ));
if ( array_diff ( $prodotto -> attributes [ $found_key ] -> options , $article -> authors ) === array_diff ( $article -> authors , $prodotto -> attributes [ $found_key ] -> options )) {
$id = $prodotto -> id ;
$variations = Variation :: all ( $prodotto -> id );
foreach ( $variations as $variation ) {
$found_key_version = array_search ( 'Versione' , array_column ( $variation -> attributes , 'name' ));
if ( $variation -> attributes [ $found_key_version ] -> option == $formato ) {
$id = 0 ;
}
}
}
}
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
}
$data1 = [
'regular_price' => $article -> PrezzoIvato ,
'sku' => $article -> IdArticolo ,
'sale_price' => $article -> PrezzoIvatoScontatoCampagna ,
'date_on_sale_from' => $article -> DataInizioCampagna ,
'date_on_sale_to' => $article -> DataFineCampagna ,
//'manage_stock' => true,
//'stock_quantity' => $article->stock,
'purchasable' => 'false' ,
'attributes' => [
[
'id' => 6 ,
'option' => $formato
]
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
],
'meta_data' => [
[
'key' => 'ISBN' ,
'value' => $article -> Ean13
],
[
'key' => 'misure' ,
'value' => $article -> Misure
],
[
'key' => 'formato' ,
'value' => $article -> DescrizioneFormato
],
[
'key' => 'pagine' ,
'value' => $article -> Pagine
],
[
'key' => 'edizione' ,
'value' => $article -> Edizione
],
]
];
if ( $id == 0 ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$versione = 'Nuova versione' ;
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$category = Category :: where ( 'name' , $article -> argomento );
if ( $category -> count () > 0 ) {
$categoria = $category -> first ();
$categoriaid = $categoria [ 'id' ];
2024-05-07 12:17:25 +02:00
} else {
2024-05-14 18:10:44 +02:00
$categoriaid = 0 ;
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'name' => $titolo ,
'type' => 'variable' ,
'short_description' => $article -> Sottotitolo ,
'categories' => [
[ 'id' => $categoriaid ]
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
],
'status' => 'draft' ,
2024-05-07 12:17:25 +02:00
'attributes' => [
[
2024-05-14 18:10:44 +02:00
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
2024-05-07 12:17:25 +02:00
],
2024-05-14 18:10:44 +02:00
2024-05-07 12:17:25 +02:00
[
2024-05-14 18:10:44 +02:00
//'id' => 5,
'id' => 7 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' =>
$article -> authors
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
],
[
//'id' => 2,
'id' => 8 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' => [
$article -> editore
2024-05-07 12:17:25 +02:00
]
],
2024-05-14 18:10:44 +02:00
[
//'id' => 7,
'id' => 9 ,
'visible' => true ,
'options' => [
$article -> DescrizioneTipologia
2024-05-07 12:17:25 +02:00
]
2024-05-14 18:10:44 +02:00
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'default_attributes' => [
[
//'id' => 1,
'id' => 6 ,
'option' => 'Nuovo'
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$product = Product :: create ( $data );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$idprodotto = $product [ 'id' ];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$variation = Variation :: create ( $idprodotto , $data1 );
} else {
$versione = " Aggiunta versione " ;
$product = Product :: find ( $id );
$old_attributes = $product [ 'attributes' ];
$attributes = [];
foreach ( $old_attributes as $old_attribute ) {
if ( $old_attribute -> id <> 6 ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$attributes [] = [
'id' => $old_attribute -> id ,
'variation' => $old_attribute -> variation ,
'visible' => $old_attribute -> visible ,
'options' => $old_attribute -> options
];
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
}
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$attributes [] = [
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
];
//dd($attributes);
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'attributes' => $attributes
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
Product :: update ( $id , $data );
$variation = Variation :: create ( $id , $data1 );
}
$log .= $article -> Titolo . ' - ' . $article -> DescrizioneTipologia . ' - ' . $article -> DescrizioneFormato . ' - ' . $versione . ' - ' . $variation [ 'permalink' ] . " \n " ;
$aggiornato = true ;
break ;
case 'Dvd' :
$titolo = rtrim ( $article -> Titolo );
$titolo = rtrim ( str_ireplace ( 'DVD' , '' , $titolo ));
$titolo = rtrim ( $titolo );
$titolo = rtrim ( str_ireplace ( '_' , '' , $titolo ));
$titolo = rtrim ( $titolo );
$titolo = rtrim ( $titolo , '-' );
$titolo = rtrim ( $titolo );
$titolo = rtrim ( $titolo , '_' );
$titolo = rtrim ( $titolo );
$prodotti = $prodotti -> where ( 'name' , $titolo ) -> get ();
$id = 0 ;
if ( ! is_null ( $prodotti ) && $prodotti -> count () > 0 ) {
foreach ( $prodotti as $prodotto ) {
if ( strtolower ( $prodotto -> name ) === strtolower ( $titolo )) {
$found_key = array_search ( 'Autore libro' , array_column ( $prodotto -> attributes , 'name' ));
if ( array_diff ( $prodotto -> attributes [ $found_key ] -> options , $article -> authors ) === array_diff ( $article -> authors , $prodotto -> attributes [ $found_key ] -> options )) {
$id = $prodotto -> id ;
$variations = Variation :: all ( $prodotto -> id );
foreach ( $variations as $variation ) {
$found_key_version = array_search ( 'Versione' , array_column ( $variation -> attributes , 'name' ));
if ( $variation -> attributes [ $found_key_version ] -> option == 'DVD' ) {
$id = 0 ;
}
}
}
}
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
}
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$data1 = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'regular_price' => $article -> PrezzoIvato ,
'sku' => $article -> IdArticolo ,
'sale_price' => $article -> PrezzoIvatoScontatoCampagna ,
'date_on_sale_from' => $article -> DataInizioCampagna ,
'date_on_sale_to' => $article -> DataFineCampagna ,
'manage_stock' => true ,
'stock_quantity' => $article -> stock ,
'purchasable' => false ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'attributes' => [
[
'id' => 6 ,
'option' => 'DVD'
]
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
],
'meta_data' => [
[
'key' => 'ISBN' ,
'value' => $article -> Ean13
],
[
'key' => 'misure' ,
'value' => $article -> Misure
],
[
'key' => 'formato' ,
'value' => $article -> DescrizioneFormato
],
[
'key' => 'pagine' ,
'value' => $article -> Pagine
],
[
'key' => 'edizione' ,
'value' => $article -> Edizione
],
]
];
if ( $id == 0 ) {
$versione = 'Nuova versione' ;
$category = Category :: where ( 'name' , $article -> argomento );
if ( $category -> count () > 0 ) {
$categoria = $category -> first ();
$categoriaid = $categoria [ 'id' ];
} else {
$categoriaid = 0 ;
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'name' => $article -> Titolo ,
'type' => 'variable' ,
'short_description' => $article -> Sottotitolo ,
'categories' => [
[ 'id' => $categoriaid ]
],
'status' => 'draft' ,
//'description' => 'Simple product full description.',
//'short_description' => 'Simple product short description.',
2024-05-07 12:17:25 +02:00
'attributes' => [
[
2024-05-14 18:10:44 +02:00
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
2024-05-07 12:17:25 +02:00
],
2024-05-14 18:10:44 +02:00
2024-05-07 12:17:25 +02:00
[
2024-05-14 18:10:44 +02:00
//'id' => 5,
'id' => 7 ,
'visible' => true ,
'options' =>
$article -> authors
2024-05-07 12:17:25 +02:00
],
[
2024-05-14 18:10:44 +02:00
//'id' => 2,
'id' => 8 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' => [
$article -> editore
2024-05-07 12:17:25 +02:00
]
],
2024-05-14 18:10:44 +02:00
[
//'id' => 7,
'id' => 9 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' => [
$article -> DescrizioneTipologia
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
]
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'default_attributes' => [
[
//'id' => 1,
'id' => 6 ,
'option' => 'Nuovo'
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$product = Product :: create ( $data );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$idprodotto = $product [ 'id' ];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$variation = Variation :: create ( $idprodotto , $data1 );
} else {
$versione = " Aggiunta versione " ;
$product = Product :: find ( $id );
$old_attributes = $product [ 'attributes' ];
$attributes = [];
foreach ( $old_attributes as $old_attribute ) {
if ( $old_attribute -> id <> 6 ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$attributes [] = [
'id' => $old_attribute -> id ,
'variation' => $old_attribute -> variation ,
'visible' => $old_attribute -> visible ,
'options' => $old_attribute -> options
2024-05-07 12:17:25 +02:00
];
2024-05-14 18:10:44 +02:00
}
}
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$attributes [] = [
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
];
//dd($attributes);
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'attributes' => $attributes
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
Product :: update ( $id , $data );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$variation = Variation :: create ( $id , $data1 );
}
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$log .= $article -> Titolo . ' - ' . $article -> DescrizioneTipologia . ' - ' . $article -> DescrizioneFormato . ' - ' . $versione . ' - ' . $variation [ 'permalink' ] . " \n " ;
$aggiornato = true ;
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
break ;
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
case 'Video Streaming' :
case 'Video On Demand' :
if ( $article -> DescrizioneFormato === 'Streaming' ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$titolo = rtrim ( $article -> Titolo , 'STR' );
$titolo = rtrim ( str_ireplace ( 'streaming' , '' , $titolo ));
$formato = 'Streaming' ;
} elseif ( $article -> DescrizioneFormato === 'Download' ) {
$titolo = rtrim ( $article -> Titolo , 'VOD' );
$titolo = rtrim ( str_ireplace ( 'download' , '' , $titolo ));
$formato = 'Download' ;
} else {
$log1 .= $article -> Titolo . ' - ' . $article -> DescrizioneTipologia . ' - ' . $article -> DescrizioneFormato . " \n " ;
$aggiornato = true ;
break ;
}
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$titolo = rtrim ( $titolo );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$titolo = rtrim ( str_ireplace ( '_' , '' , $titolo ));
$titolo = rtrim ( $titolo );
$titolo = rtrim ( $titolo , '-' );
$titolo = rtrim ( $titolo );
$titolo = rtrim ( $titolo , '_' );
$titolo = rtrim ( $titolo );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$prodotti = $prodotti -> where ( 'name' , $titolo ) -> get ();
$id = 0 ;
if ( ! is_null ( $prodotti ) && $prodotti -> count () > 0 ) {
foreach ( $prodotti as $prodotto ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
if ( strtolower ( $prodotto -> name ) === strtolower ( $titolo )) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$found_key = array_search ( 'Autore libro' , array_column ( $prodotto -> attributes , 'name' ));
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
if ( array_diff ( $prodotto -> attributes [ $found_key ] -> options , $article -> authors ) === array_diff ( $article -> authors , $prodotto -> attributes [ $found_key ] -> options )) {
$id = $prodotto -> id ;
$variations = Variation :: all ( $prodotto -> id );
foreach ( $variations as $variation ) {
$found_key_version = array_search ( 'Versione' , array_column ( $variation -> attributes , 'name' ));
if ( $variation -> attributes [ $found_key_version ] -> option == $formato ) {
$id = 0 ;
}
}
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
}
}
}
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$data1 = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'regular_price' => $article -> PrezzoIvato ,
'sku' => $article -> IdArticolo ,
'sale_price' => $article -> PrezzoIvatoScontatoCampagna ,
'date_on_sale_from' => $article -> DataInizioCampagna ,
'date_on_sale_to' => $article -> DataFineCampagna ,
//'manage_stock' => true,
//'stock_quantity' => $article->stock,
'purchasable' => false ,
'attributes' => [
[
'id' => 6 ,
'option' => $formato
]
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
],
'meta_data' => [
[
'key' => 'ISBN' ,
'value' => $article -> Ean13
],
[
'key' => 'misure' ,
'value' => $article -> Misure
],
[
'key' => 'formato' ,
'value' => $article -> DescrizioneFormato
],
[
'key' => 'pagine' ,
'value' => $article -> Pagine
],
[
'key' => 'edizione' ,
'value' => $article -> Edizione
],
]
];
if ( $id == 0 ) {
$versione = 'Nuova versione' ;
$category = Category :: where ( 'name' , $article -> argomento );
if ( $category -> count () > 0 ) {
$categoria = $category -> first ();
$categoriaid = $categoria [ 'id' ];
} else {
$categoriaid = 0 ;
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'name' => $titolo ,
'type' => 'variable' ,
'short_description' => $article -> Sottotitolo ,
'categories' => [
[ 'id' => $categoriaid ]
],
'status' => 'draft' ,
2024-05-07 12:17:25 +02:00
'attributes' => [
[
2024-05-14 18:10:44 +02:00
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
2024-05-07 12:17:25 +02:00
],
2024-05-14 18:10:44 +02:00
2024-05-07 12:17:25 +02:00
[
2024-05-14 18:10:44 +02:00
//'id' => 5,
'id' => 7 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' =>
$article -> authors
2024-05-07 12:17:25 +02:00
],
2024-05-14 18:10:44 +02:00
[
//'id' => 2,
'id' => 8 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' => [
$article -> editore
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
]
],
[
//'id' => 7,
'id' => 9 ,
'visible' => true ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'options' => [
$article -> DescrizioneTipologia
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
]
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'default_attributes' => [
[
//'id' => 1,
'id' => 6 ,
'option' => 'Nuovo'
]
],
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$product = Product :: create ( $data );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$idprodotto = $product [ 'id' ];
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$variation = Variation :: create ( $idprodotto , $data1 );
} else {
$versione = " Aggiunta versione " ;
$product = Product :: find ( $id );
$old_attributes = $product [ 'attributes' ];
$attributes = [];
foreach ( $old_attributes as $old_attribute ) {
if ( $old_attribute -> id <> 6 ) {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$attributes [] = [
'id' => $old_attribute -> id ,
'variation' => $old_attribute -> variation ,
'visible' => $old_attribute -> visible ,
'options' => $old_attribute -> options
2024-05-07 12:17:25 +02:00
];
2024-05-14 18:10:44 +02:00
}
2024-05-07 12:17:25 +02:00
}
2024-05-14 18:10:44 +02:00
$attributes [] = [
//'id' => 1,
'id' => 6 ,
'position' => 0 ,
'visible' => true ,
'variation' => true ,
'options' => [
'Nuovo' ,
'Usato' ,
'PDF' ,
'Epub' ,
'Mobi' ,
'DVD' ,
'Streaming' ,
'Download'
]
];
//dd($attributes);
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$data = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'attributes' => $attributes
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
Product :: update ( $id , $data );
$variation = Variation :: create ( $id , $data1 );
}
$log .= $article -> Titolo . ' - ' . $article -> DescrizioneTipologia . ' - ' . $article -> DescrizioneFormato . ' - ' . $versione . ' - ' . $variation [ 'permalink' ] . " \n " ;
$aggiornato = true ;
break ;
}
} else {
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$data1 = [
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
'regular_price' => $article -> PrezzoIvato ,
'sale_price' => $article -> PrezzoIvatoScontatoCampagna ,
'date_on_sale_from' => $article -> DataInizioCampagna ,
'date_on_sale_to' => $article -> DataFineCampagna ,
'stock_quantity' => $article -> stock ,
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
];
$idprodotto = $productsku [ 'parent_id' ];
if ( $idprodotto > 0 ) {
$variation = Variation :: update ( $idprodotto , $productsku [ 'id' ], $data1 );
2024-05-07 12:17:25 +02:00
2024-05-14 18:10:44 +02:00
$log2 .= $article -> Titolo . ' - ' . $article -> DescrizioneTipologia . ' - ' . $article -> DescrizioneFormato . ' - Articolo aggiornato - ' . $variation [ 'permalink' ] . " \n " ;
$aggiornato = true ;
2024-05-07 12:17:25 +02:00
}
}
2024-05-14 18:10:44 +02:00
} catch ( \Exception $e ) {
$log3 .= $article -> IdArticolo . ' - ' . $article -> Titolo . " \n " ;
}
}
$settingora -> value = $ora_update ;
$settingora -> save ();
if ( $aggiornato ) {
Log :: channel ( 'updateproducts' ) -> notice ( $log . $log2 . $log1 . $log3 );
Log :: channel ( 'updateproducts' ) -> notice ( 'Fino a ' . $ora_update . " \n " );
Mail :: raw ( $loginizio . $log . $log2 . $log1 . $log3 . $logfine , function ( $message ) {
2024-05-16 19:27:26 +02:00
$message -> to ( Mylog :: getEmail ());
2024-05-14 18:10:44 +02:00
$message -> subject ( Mylog :: getSubjectEmail ( " Inserim. nuovi prodotti " ));
});
}
2024-05-07 12:17:25 +02:00
}
}