diff --git a/app/CustomFuncPao.php b/app/CustomFuncPao.php index 60037d49..daaff653 100644 --- a/app/CustomFuncPao.php +++ b/app/CustomFuncPao.php @@ -970,89 +970,190 @@ function findInsideProduct(array $prodotto, string $miocampo): ?string return null; } -function getRigaArticoloByArt($article, $ind, $sep) +class ArticleFormatter { + private const QTA_MINIMA_PER_PREVENDITA = 5; // Assuming this was defined elsewhere + private const CAMPO_PREORDINE = 'preorder'; // Assuming this was defined elsewhere - try { - $str = ""; + public static function getArticleRow($article, $index, $separator) + { + try { + $product = self::getProduct($article->IdArticolo); + $stockInfo = self::getStockInfo($product); + $preorderInfo = self::getPreorderInfo($product); - $mydatestr = $article->DataPubblicazione; - - $sku = $article->IdArticolo; - - $prodotto = Product::where('sku', $sku)->first(); - - $permalink = ""; - - $qtyinstock = ''; - $colore = 'black'; - $prezzo = ''; - - if ($prodotto) { - try { - $qtyinstock = intval($prodotto['stock_quantity']); - $prezzo = $prodotto['sale_price']; - if (!$prezzo) { - $prezzo = $prodotto['price']; - } - - if ($qtyinstock <= 0) { - $colore = 'red'; - } else { - $colore = 'green'; - } - - $permalink = $prodotto['permalink']; - } catch (\Exception $e) { - // ... - } + return self::formatArticleRow( + $article, + $index, + $separator, + $product, + $stockInfo, + $preorderInfo + ); + } catch (\Exception $e) { + return "Errore getRigaArticoloByArt: " . $e->getMessage(); } - - if ($prodotto) { - - $preorder = findInsideProduct($prodotto, CAMPO_PREORDINE); - $preorder_attivato = $preorder === 'yes'; - } - - // echo '[' . $ind . ']' . $sep . $mydatestr . $sep . $article->IdArticolo . $sep . $article->Titolo . $sep . $article->DescrizioneStatoProdotto . $sep . $article->DescrizioneFormato . ' [Quantita = ' . $article->QtaDisponibile . ']'; - $myview = '[' . $ind . ']' . $sep . - '' . $article->IdArticolo . '' . $sep . - ' ' . $article->Titolo . '' . $sep . - ' Pubb:' . formatDateToItalian($article->DataPubblicazione) . $sep . - $article->DescrizioneCollana . $sep . - $article->DescrizioneStatoProdotto . ' (' . $article->DescrizioneFormato . ')' . $sep . - '[Qta = ' . $article->QtaDisponibile . ']' . $sep . - ' [' . showprice($prezzo) . ' ]' . $sep . - '[In Stock = ' . $qtyinstock . ']' . $sep; - - if (!$preorder_attivato || $qtyinstock < QTA_MINIMA_PER_PREVENDITA) { - $myview .= 'Imposta in PRE-ORDINE!' . $sep; - } else { - $myview .= 'Impostalo Non Disponibile' . $sep; - } - $myview .= 'Aggiorna Data Pubb' . $sep; - - $str .= $myview; - - if ($prodotto) { - - $datepreorder = findInsideProduct($prodotto, '_ywpo_for_sale_date'); - - if ($preorder_attivato) { - $str .= ' PREORDINE ATTIVO! '; - if ($datepreorder) { - $str .= ' Data PreOrdine: ' . $datepreorder . ''; - } - } - $str .= '
'; - } - } catch (\Exception $e) { - return "Errore getRigaArticoloByArt: " . $e->getMessage(); } - return $str; + private static function getProduct($sku) + { + return Product::where('sku', $sku)->first(); + } + + private static function getStockInfo($product) + { + if (!$product) { + return [ + 'quantity' => 0, + 'price' => '', + 'color' => 'black', + 'permalink' => '' + ]; + } + + $quantity = intval($product['stock_quantity']); + $price = $product['sale_price'] ?: $product['price']; + + return [ + 'quantity' => $quantity, + 'price' => $price, + 'color' => $quantity <= 0 ? 'red' : 'green', + 'permalink' => $product['permalink'] + ]; + } + + private static function getPreorderInfo($product) + { + if (!$product) { + return ['active' => false, 'date' => null]; + } + + return [ + 'active' => self::findInsideProduct($product, self::CAMPO_PREORDINE) === 'yes', + 'date' => self::findInsideProduct($product, '_ywpo_for_sale_date') + ]; + } + + private static function formatArticleRow($article, $index, $separator, $product, $stockInfo, $preorderInfo) + { + $elements = [ + self::formatIndexAndId($index, $article, $separator), + self::formatTitleLink($article, $stockInfo, $separator), + self::formatPublicationInfo($article, $separator), + self::formatStockInfo($article, $stockInfo, $separator), + self::formatPreorderActions($article, $preorderInfo, $stockInfo, $separator), + self::formatUpdateDateLink($article, $separator) + ]; + + $output = implode('', $elements); + + if ($product && $preorderInfo['active']) { + $output .= self::formatPreorderStatus($preorderInfo['date']); + } + + return $output . '
'; + } + + private static function formatIndexAndId($index, $article, $separator) + { + return sprintf( + '[%d]%s%s%s', + $index, + $separator, + $article->permalink, + $article->IdArticolo, + $article->IdArticolo, + $separator + ); + } + + private static function formatTitleLink($article, $stockInfo, $separator) + { + return sprintf( + ' %s%s', + $stockInfo['permalink'], + $stockInfo['color'], + $article->Titolo, + $separator + ); + } + + private static function formatPublicationInfo($article, $separator) + { + return sprintf( + 'Pubb:%s%s%s%s%s (%s)%s', + formatDateToItalian($article->DataPubblicazione), + $separator, + $article->DescrizioneCollana, + $separator, + $article->DescrizioneStatoProdotto, + $article->DescrizioneFormato, + $separator + ); + } + + private static function formatStockInfo($article, $stockInfo, $separator) + { + return sprintf( + '[Qta = %s]%s[%s]%s[In Stock = %s]%s', + $article->QtaDisponibile, + $separator, + showprice($stockInfo['price']), + $separator, + $stockInfo['color'], + $stockInfo['quantity'], + $separator + ); + } + + private static function formatPreorderActions($article, $preorderInfo, $stockInfo, $separator) + { + $baseUrl = $article->permalink . '/apimacro/public/aggiornapreorder/' . $article->IdArticolo; + + if (!$preorderInfo['active'] || $stockInfo['quantity'] < self::QTA_MINIMA_PER_PREVENDITA) { + return sprintf( + 'Imposta in PRE-ORDINE!%s', + $baseUrl, + $separator + ); + } + + return sprintf( + 'Impostalo Non Disponibile%s', + $baseUrl, + $separator + ); + } + + private static function formatUpdateDateLink($article, $separator) + { + return sprintf( + 'Aggiorna Data Pubb%s', + $article->permalink, + $article->IdArticolo, + $separator + ); + } + + private static function formatPreorderStatus($preorderDate) + { + $status = ' PREORDINE ATTIVO!'; + if ($preorderDate) { + $status .= sprintf(' Data PreOrdine: %s', $preorderDate); + } + return $status; + } + + private static function findInsideProduct($product, $field) + { + // Implementation needed - this was referenced but not shown in original code + return $product[$field] ?? null; + } } +function getRigaArticoloByArt($article, $index, $separator) { + return ArticleFormatter::getArticleRow($article, $index, $separator); +} function showCartolibri() { @@ -1077,6 +1178,7 @@ function showCartolibri() } } + function showRiviste() { $articles = getArticoliRiviste();