2024-05-19 13:06:17 +02:00
< ? php
2024-05-20 22:57:08 +02:00
use Illuminate\Support\Facades\DB ;
2024-05-20 01:23:47 +02:00
use App\Article ;
2024-05-22 14:29:58 +02:00
use Codexshaper\WooCommerce\Facades\Order ;
2024-05-20 01:23:47 +02:00
use Codexshaper\WooCommerce\Facades\Product ;
use Codexshaper\WooCommerce\Facades\Variation ;
2024-05-19 13:06:17 +02:00
function showarray ( $array )
{
echo '<pre>' . json_encode ( $array , JSON_PRETTY_PRINT ) . '</pre>' ;
};
2024-05-21 01:18:26 +02:00
function getarraystr ( $array )
{
return '<pre>' . json_encode ( $array , JSON_PRETTY_PRINT ) . '</pre>' ;
};
2024-05-19 13:06:17 +02:00
function isKeyPresent ( $array , $key )
{
foreach ( $array as $item ) {
if ( isset ( $item -> key ) && $item -> key === $key ) {
return true ;
}
}
return false ;
}
function getValueByKey ( $array , $key )
{
foreach ( $array as $item ) {
if ( isset ( $item -> key ) && $item -> key === $key ) {
return $item -> value ;
}
}
return null ; // If key is not found
}
// Funzione per aggiornare il valore di un certo key in un array di oggetti
2024-05-20 01:23:47 +02:00
function updateValueByKey ( & $array , $key , $newValue )
{
2024-05-19 13:11:57 +02:00
foreach ( $array as & $item ) {
2024-05-19 16:31:05 +02:00
if ( is_object ( $item ) && property_exists ( $item , 'key' ) && $item -> key === $key ) {
2024-05-19 13:11:57 +02:00
$item -> value = $newValue ;
2024-05-19 16:31:05 +02:00
return ; // Se trova il key, termina il loop
2024-05-19 13:11:57 +02:00
}
}
2024-05-19 16:27:15 +02:00
2024-05-19 16:31:05 +02:00
// Se il key non esiste nell'array, aggiungi il nuovo key-value pair
$newItem = new stdClass ();
$newItem -> key = $key ;
$newItem -> value = $newValue ;
$array [] = $newItem ; // Aggiungi il nuovo elemento all'array
2024-05-19 13:11:57 +02:00
}
2024-05-20 01:23:47 +02:00
function updateValueByKeyArr ( & $array , $key , $newValue )
{
2024-05-19 13:06:17 +02:00
foreach ( $array as & $item ) {
if ( $item [ 'key' ] === $key ) {
$item [ 'value' ] = $newValue ;
break ; // Se trova il key, termina il loop
}
}
2024-05-19 16:27:15 +02:00
$array [ $key ] = $newValue ;
2024-05-19 13:06:17 +02:00
}
2024-05-20 01:23:47 +02:00
function setPreOrderByIdArticolo ( $idarticolo , $aggiornapreordine , $debug )
{
return setPreOrder ( $idarticolo , $aggiornapreordine , $debug );
}
function setPreOrder ( $sku , $aggiornapreordine , $debug )
{
try {
// Aggiorna Preorder
$product = Product :: where ( 'sku' , $sku ) -> first ();
// get the article by product
// $article = Article::where('IdArticolo', $idarticolo)->first();
// showarray($article);
2024-05-20 08:38:48 +02:00
if ( $debug ) {
echo " Product: " . $sku ;
2024-05-20 01:23:47 +02:00
showarray ( $product );
2024-05-20 08:38:48 +02:00
}
2024-05-20 22:57:08 +02:00
2024-05-20 01:23:47 +02:00
$campoPreOrder = '_wpro_variable_is_preorder' ;
if ( $product ) {
$titolo = $product [ 'name' ];
if ( $debug )
2024-05-21 01:24:02 +02:00
echo " Prodotto trovato: " . $titolo . " StockQty = " . $product [ 'stock_quantity' ] . " <br> " ;
2024-05-20 01:23:47 +02:00
$preorder = false ;
if ( isKeyPresent ( $product [ 'meta_data' ], $campoPreOrder )) {
$preorder = getValueByKey ( $product [ 'meta_data' ], $campoPreOrder );
}
if ( $debug ) {
if ( $preorder ) {
if ( $preorder === 'true' ) {
echo " <span class='badge badge-success' style='color: green;'>PREORDER SI !</span>: " . $preorder ;
} else {
echo " <span class='badge badge-success' style='color: green;'>PREORDER:</span>: " . $preorder ;
}
} else {
echo " <span style='color: red;'>preorder non presente !</span>: " ;
}
echo " <br> " ;
}
if ( $aggiornapreordine === '1' ) {
$data = [];
$datenow = date ( 'Y-m-d' );
$idprodotto = $product [ 'parent_id' ];
if ( $idprodotto > 0 ) {
if ( $debug )
echo " Variazioni: " . $product [ 'parent_id' ] . " <br> " ;
$variations = Variation :: all ( $product [ 'parent_id' ]);
if ( $debug )
showarray ( $variations );
for ( $i = 0 ; $i < count ( $variations ); $i ++ ) {
$variation = $variations [ $i ];
if ( $variation -> id == $product [ 'id' ]) {
// convert object into array
$data = json_decode ( json_encode ( $variation ), true );
break ;
}
}
$data [ 'stock_quantity' ] = '1000' ;
if ( $debug ) {
echo " Data: " ;
showarray ( $data );
}
$agg = true ;
$data [ 'meta_data' ] = $product [ 'meta_data' ];
if ( $agg ) {
updateValueByKey ( $data [ 'meta_data' ], $campoPreOrder , 'yes' );
updateValueByKey ( $data [ 'meta_data' ], '_is_pre_order' , 'yes' );
updateValueByKey ( $data [ 'meta_data' ], '_pre_order_date' , $datenow );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_date_label_variable' , '' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_no_date_label_variable' , '' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_manage_price_variable' , '' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_price_variable' , '' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_label_variable' , 'Pre Ordinalo!' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_price_type_variable' , 'manual' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_amount_price_variable' , 'fixed' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_date_variable' , '' );
updateValueByKey ( $data [ 'meta_data' ], '_wpro_time_variable' , '' );
updateValueByKey ( $data [ 'meta_data' ], '_rank_math_gtin_code' , '' );
}
if ( $debug ) {
echo " <br>Dati da Salvare: " ;
showarray ( $data );
}
$variation = Variation :: update ( $idprodotto , $product [ 'id' ], $data );
2024-05-20 22:57:08 +02:00
2024-05-20 01:23:47 +02:00
if ( $variation ) {
if ( $debug )
echo " Aggiornato Preorder: [ParentId= " . $idprodotto . '] ProdId= ' . $product [ 'id' ] . ' ' . $variation [ 'name' ] . " <br> " ;
}
}
}
} else {
if ( $debug )
echo " Il prodotto non esiste " ;
}
} catch ( Exception $e ) {
echo " Errore: " . $e -> getMessage ();
}
}
2024-05-21 00:33:50 +02:00
function isArticleInPrevendita ( $id )
2024-05-20 22:57:08 +02:00
{
2024-05-21 00:33:50 +02:00
return loadArticleByIdArticle ( $id , true );
2024-05-20 22:57:08 +02:00
}
2024-05-20 23:46:21 +02:00
2024-05-21 00:33:50 +02:00
function loadArticleByIdArticle ( $id , $checkprevendita = false )
2024-05-20 23:46:21 +02:00
{
try {
2024-05-21 00:23:34 +02:00
$articles = Article :: join ( DB :: raw ( '(SELECT IdArticolo, MAX(DataOra) AS data FROM T_WEB_Articoli GROUP BY IdArticolo) b' ), function ( $join ) {
2024-05-20 23:46:21 +02:00
$join -> on ( 'T_WEB_Articoli.IdArticolo' , '=' , 'b.IdArticolo' )
2024-05-21 00:23:34 +02:00
-> on ( 'T_WEB_Articoli.DataOra' , '=' , 'b.data' );
2024-05-20 23:46:21 +02:00
})
2024-05-21 00:23:34 +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' );
2024-05-20 23:46:21 +02:00
})
2024-05-21 00:33:50 +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-21 00:23:34 +02:00
})
2024-05-21 00:33:50 +02:00
-> where ( 'T_WEB_Articoli.IdArticolo' , $id )
-> get ();
2024-05-21 00:44:43 +02:00
if ( $checkprevendita ) {
foreach ( $articles as $article ) {
$qtaneg = $article -> QtaDisponibile < 0 ;
$inprevendita = false ;
if ( $article ) {
$inprevendita = $qtaneg
&& ( $article -> DescrizioneStatoProdotto === 'In prevendita' );
}
if ( $inprevendita ) {
return true ;
2024-05-21 00:33:50 +02:00
}
}
2024-05-21 00:44:43 +02:00
return false ;
}
2024-05-20 23:46:21 +02:00
2024-05-21 01:13:48 +02:00
$ris = 'Articles:' . PHP_EOL ;
2024-05-21 01:18:26 +02:00
$ris .= getarraystr ( $articles ); // Converte solo i dati specificati in JSON
2024-06-13 08:57:58 +02:00
2024-05-21 01:11:16 +02:00
$product = Product :: where ( 'sku' , $id ) -> first ();
2024-06-13 08:57:58 +02:00
$ris .= 'Product:' . PHP_EOL ;
2024-05-21 01:18:26 +02:00
$ris .= getarraystr ( $product );
2024-05-21 01:11:16 +02:00
2024-06-13 08:57:58 +02:00
return $ris ;
2024-05-20 23:51:58 +02:00
} catch ( \Exception $e ) {
2024-05-20 23:46:45 +02:00
return " Errore: " . $e -> getMessage ();
2024-05-20 23:46:21 +02:00
}
}
2024-05-21 00:44:43 +02:00
2024-05-22 14:29:58 +02:00
function showOrdini ()
{
2024-06-13 08:58:34 +02:00
$str = " Ordine: aaa " ;
2024-06-13 08:57:58 +02:00
return $str ;
2024-06-13 08:59:39 +02:00
/*
2024-06-13 08:57:58 +02:00
$orders = Order :: orderBy ( 'DataOra' , 'desc' ) -> take ( 5 ) -> get ();
2024-05-22 14:29:58 +02:00
$str = " " ;
2024-06-13 08:57:58 +02:00
try {
// Show the fields of the orders
foreach ( $orders as $order ) {
$str .= " Ordine: " ;
$str .= getvalstr ( " Id " , $order -> id );
$str .= getvalstr ( " DataOra " , $order -> DataOra );
$str .= getvalstr ( " Totale " , $order -> Totale );
}
} catch ( \Exception $e ) {
return " Errore: " . $e -> getMessage ();
2024-05-22 14:29:58 +02:00
}
2024-06-13 08:59:39 +02:00
return $str ; */
2024-05-22 14:29:58 +02:00
}
2024-05-21 00:44:43 +02:00
function libriInPrevendita ()
{
2024-05-21 01:03:36 +02:00
try {
$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-21 00:44:43 +02:00
})
2024-05-21 01:03:36 +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' );
})
-> 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-21 00:48:38 +02:00
2024-05-21 01:03:36 +02:00
-> where ( 'DescrizioneStatoProdotto' , 'In prevendita' )
-> where ( DB :: raw ( 'CONVERT(INT, QtaDisponibile)' ), '<' , 0 )
-> where ( 'DescrizioneFormato' , 'brossura' )
-> where ( 'DescrizioneTipologia' , 'Libri' )
-> orderBy ( 'DataPubblicazione' , 'desc' )
-> get ();
$sep = ' | ' ;
2024-05-21 00:44:43 +02:00
2024-05-21 01:03:36 +02:00
$ind = 1 ;
foreach ( $articles as $article ) {
// $titolo = rtrim(str_ireplace('USATO', '', $article->Titolo));
2024-05-21 00:44:43 +02:00
2024-05-21 01:03:36 +02:00
$mydatestr = $article -> DataPubblicazione ;
2024-05-21 00:44:43 +02:00
2024-05-21 01:03:36 +02:00
$sku = $article -> IdArticolo ;
2024-05-21 00:44:43 +02:00
2024-05-21 01:03:36 +02:00
// echo '[' . $ind . ']' . $sep . $mydatestr . $sep . $article->IdArticolo . $sep . $article->Titolo . $sep . $article->DescrizioneStatoProdotto . $sep . $article->DescrizioneFormato . ' [Quantita = ' . $article->QtaDisponibile . ']';
echo '[' . $ind . ']' . $sep . '<a href="' . $article -> permalink . '" target="_blank">' . $article -> IdArticolo . '</a>' . $sep . $article -> Titolo . $sep . ' Data Pubblicazione:' . date ( 'd-m-Y' , strtotime ( $article -> DataPubblicazione )) . $sep . $article -> DescrizioneStatoProdotto . ' (' . $article -> DescrizioneFormato . ') [Quantita = ' . $article -> QtaDisponibile . ']' ;
$prodotto = Product :: where ( 'sku' , $sku ) -> first ();
if ( $prodotto ) {
2024-05-21 00:44:43 +02:00
2024-05-21 01:03:36 +02:00
if ( isset ( $prodotto [ '_wpro_variable_is_preorder' ])) {
echo '<br><span style="color:red">PREORDINE: ' . $prodotto [ '_wpro_variable_is_preorder' ] . '</span>' ;
}
if ( isset ( $prodotto [ '_wpro_label_variable' ])) {
echo 'Etichetta: ' . $prodotto [ '_wpro_label_variable' ];
}
if ( isset ( $prodotto [ '_wpro_date_variable' ])) {
echo 'Data Preordine: ' . $prodotto [ '_wpro_date_variable' ];
}
echo '<br>' ;
2024-05-21 00:44:43 +02:00
}
2024-05-21 01:03:36 +02:00
$ind ++ ;
}
} catch ( Exception $e ) {
echo $e -> getMessage ();
2024-05-21 00:44:43 +02:00
}
2024-05-21 00:48:38 +02:00
return true ;
2024-05-21 00:44:43 +02:00
}