This commit is contained in:
paoloar77
2024-12-18 09:28:40 +01:00
parent 7a64b527b3
commit ba80a79557
5 changed files with 222 additions and 4 deletions

View File

@@ -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 {