diff --git a/app/Http/Controllers/ArticleController.php b/app/Http/Controllers/ArticleController.php index 36ff0058..baa04557 100755 --- a/app/Http/Controllers/ArticleController.php +++ b/app/Http/Controllers/ArticleController.php @@ -250,6 +250,82 @@ class ArticleController extends Controller return $articoliVenduti; + } + private function queryArticlesFatturati() + { + try { + ini_set("memory_limit", "512M"); + + $articoliVenduti = 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'); + }) + ->leftJoin(DB::raw('(SELECT CodArticolo, SUM(Qta) as totVen FROM T_WEB_ArticoliFatturati GROUP BY CodArticolo) o'), function ($join) { + $join->on('T_WEB_Articoli.IdArticolo', '=', 'o.CodArticolo'); + }) + ->leftJoin(DB::raw('(SELECT CodArticoloGM, SUM(Qta) as venduti3mesi, RANK() OVER (ORDER BY SUM(Qta) DESC) as rank3M + FROM T_WEB_ArticoliFatturati + WHERE DataOra >= DATEADD(MONTH, -3, GETDATE()) + GROUP BY CodArticolo) p'), function ($join) { + $join->on('T_WEB_Articoli.IdArticolo', '=', 'p.CodArticolo'); + }) + ->leftJoin(DB::raw('(SELECT CodArticolo, SUM(Qta) as venduti6mesi, RANK() OVER (ORDER BY SUM(Qta) DESC) as rank6M + FROM T_WEB_ArticoliFatturati + WHERE DataOra >= DATEADD(MONTH, -6, GETDATE()) + GROUP BY CodArticolo) q'), function ($join) { + $join->on('T_WEB_Articoli.IdArticolo', '=', 'q.CodArticolo'); + }) + ->leftJoin(DB::raw('(SELECT CodArticolo, SUM(Qta) as venduti1anno, RANK() OVER (ORDER BY SUM(Qta) DESC) as rank1Y + FROM T_WEB_ArticoliFatturati + WHERE DataOra >= DATEADD(MONTH, -12, GETDATE()) + GROUP BY CodArticolo) r'), function ($join) { + $join->on('T_WEB_Articoli.IdArticolo', '=', 'r.CodArticolo'); + }) + ->leftJoin(DB::raw('(SELECT CodArticolo, MAX(DataOra) as ultimoOrdine + FROM T_WEB_ArticoliFatturati + GROUP BY CodArticolo) s'), function ($join) { + $join->on('T_WEB_Articoli.IdArticolo', '=', 's.CodArticolo'); + }) + ->select( + 'T_WEB_Articoli.*', + 'f.DescrizioneStatoProdotto', + 'i.DescrizioneTipologia', + 'n.DescrizioneFormato', + DB::raw('COALESCE(o.totVen, 0) as totVen'), + DB::raw('COALESCE(p.venduti3mesi, 0) as venduti3mesi'), + DB::raw('COALESCE(p.rank3M, 0) as rank3M'), + DB::raw('COALESCE(q.venduti6mesi, 0) as venduti6mesi'), + DB::raw('COALESCE(q.rank6M, 0) as rank6M'), + DB::raw('COALESCE(r.venduti1anno, 0) as venduti1anno'), + DB::raw('COALESCE(r.rank1Y, 0) as rank1Y'), + DB::raw('s.ultimoOrdine') + ) + ->where('DescrizioneStatoProdotto', 'In commercio') + ->where('DescrizioneTipologia', 'Libri') + //->orderBy('rank1Y', 'asc') + ->orderBy('totVen', 'desc') + ->get(); + + if ($articoliVenduti->isEmpty()) { + return response()->json(['message' => 'Nessun articolo fatturato trovato.'], 404); + } + + } catch (\Exception $e) { + // Registrazione dell'errore + return response()->json(['error' => 'Si รจ verificato un errore durante il recupero dei dati: ' . $e->getMessage()], 500); + } + + return $articoliVenduti; + } public function showArticlesSales(Request $request) @@ -266,6 +342,20 @@ class ArticleController extends Controller } } + public function showArticlesFatturati(Request $request) + { + try { + + $articoliVenduti = $this->queryArticlesFatturati(); + + return view('export_articles_fatturati', ['articoliVenduti' => $articoliVenduti]); + + } catch (\Exception $e) { + // Potresti considerare di registrare l'errore per debugging + return new Response('Error exporting articles: ' . $e->getMessage(), 500); + + } + } public function showArticoliByDataStart($data_start) { try { @@ -384,11 +474,14 @@ class ArticleController extends Controller } } - public function exportArticlesSalesByJSON(Request $request): Response + public function exportArticlesSalesByJSON_Base($cosa, Request $request): Response { try { - // Recupera gli articoli venduti - $articoliVenduti = $this->queryArticlesSales(); + if ($cosa === 'fatturati') { + $articoliVenduti = $this->queryArticlesFatturati(); + } else { + $articoliVenduti = $this->queryArticlesSales(); + } // Mappa i risultati nella struttura JSON desiderata $result = $articoliVenduti->map(function ($articoloVenduto) { @@ -423,6 +516,16 @@ class ArticleController extends Controller } } + public function exportArticlesSalesByJSON(Request $request): Response + { + return $this->exportArticlesSalesByJSON_Base('', $request); + } + + public function exportArticlesFatturatiByJSON(Request $request): Response + { + return $this->exportArticlesSalesByJSON_Base('fatturati', $request); + } + public function test(Request $request) { try { diff --git a/resources/views/export_articles_fatturati.blade.php b/resources/views/export_articles_fatturati.blade.php new file mode 100644 index 00000000..07951ebd --- /dev/null +++ b/resources/views/export_articles_fatturati.blade.php @@ -0,0 +1,111 @@ + + + +
+ + +| Id Articolo | +Titolo | +Data Pubbl | +ISBN | +Pagine | +Misure | +Rank 3 M | +Rank 6 M | +Rank 1 Y | +Ult Ordi | +Tot Venduti | +Ult 3 Mese | +Ult 6 Mesi | +Ult Anno | + +
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Nessun articolo fatturato trovato. | +|||||||||||||
| @if (isset($articolo->IdArticolo)) + {{ $articolo->IdArticolo }} + @endif + | + + +@if (isset($articolo->Titolo)){{ $articolo->Titolo }}@endif | + +@if (isset($articolo->DataPubblicazione)){{ \Carbon\Carbon::parse($articolo->DataPubblicazione)->format('d/m/Y') }}@endif + | + + +@if (isset($articolo->Ean13)){{ $articolo->Ean13 }}@endif | + +@if (isset($articolo->Pagine)){{ $articolo->Pagine }}@endif | +@if (isset($articolo->misure)){{ $articolo->misure }}@endif | + +@if (isset($articolo->rank3M)) + {{ $articolo->rank3M }} + @endif + | +@if (isset($articolo->rank6M)) + {{ $articolo->rank6M }} + @endif + | + +@if (isset($articolo->rank1Y)) + {{ $articolo->rank1Y }} + @endif + | + +@if (isset($articolo->ultimoOrdine)){{ \Carbon\Carbon::parse($articolo->ultimoOrdine)->format('d/m/Y') }}@endif + | + + +@if (isset($articolo->totVen)) + + {{ $articolo->totVen }} + @endif + | + +@if (isset($articolo->venduti3mesi)) + {{ $articolo->venduti3mesi }} + @endif + | +@if (isset($articolo->venduti6mesi)) + {{ $articolo->venduti6mesi }} + @endif + | @if (isset($articolo->venduti1anno)) + {{ $articolo->venduti1anno }} + @endif + | +