<commit_before>﻿using CQRS.Queries;
using Serilog;
using SO115App.API.Models.Classi.Soccorso.Eventi.Segnalazioni;
using SO115App.Models.Servizi.Infrastruttura.GestioneSoccorso;
using SO115App.Models.Servizi.Infrastruttura.GestioneSoccorso.GestioneTipologie;
using SO115App.Models.Servizi.Infrastruttura.GestioneUtenti;
using SO115App.Models.Servizi.Infrastruttura.SistemiEsterni.Distaccamenti;
using SO115App.Persistence.File.CSVManagement;
using SO115App.Persistence.File.PDFManagement;
using SO115App.Persistence.File.PDFManagement.TemplateModelForms;
using System.IO;
using System.Linq;

namespace SO115App.Models.Servizi.CQRS.Queries.GestioneFile.DettaglioRichiesta
{
    public class DettaglioRichiestaPathQueryHandler : IQueryHandler<DettaglioRichiestaPathQuery, DettaglioRichiestaPathResult>
    {
        private readonly IGetTipologieByCodice _getTipologie;
        private readonly IGetRichiesta _getRichiesta;
        private readonly IGetUtenteById _getUtente;
        private readonly IGetSedi _getSedi;
        private readonly IPDFTemplateManager<DettaglioChiamataModelForm> _PDFdettChiamataManager;
        private readonly IPDFTemplateManager<DettaglioInterventoModelForm> _PDFdettInterventoManager;
        private readonly ICSVTemplateManager<DettaglioChiamataModelForm> _CSVdettChiamataManager;
        private readonly ICSVTemplateManager<DettaglioInterventoModelForm> _CSVdettInterventoManager;

        public DettaglioRichiestaPathQueryHandler(IGetRichiesta getRichiesta,
            IGetTipologieByCodice getTipologie,
            IGetUtenteById getUtente,
            IGetSedi getSedi,
            IPDFTemplateManager<DettaglioChiamataModelForm> dettChiamataManager,
            IPDFTemplateManager<DettaglioInterventoModelForm> dettInterventoManager,
            ICSVTemplateManager<DettaglioChiamataModelForm> CSVdettChiamataManager,
            ICSVTemplateManager<DettaglioInterventoModelForm> CSVdettInterventoManager)
        {
            _getUtente = getUtente;
            _getTipologie = getTipologie;
            _getRichiesta = getRichiesta;
            _getSedi = getSedi;
            _PDFdettChiamataManager = dettChiamataManager;
            _PDFdettInterventoManager = dettInterventoManager;
            _CSVdettChiamataManager = CSVdettChiamataManager;
            _CSVdettInterventoManager = CSVdettInterventoManager;
        }

        public DettaglioRichiestaPathResult Handle(DettaglioRichiestaPathQuery query)
        {
            MemoryStream stream;

            Log.Error($"Dettaglio QH - 1 **************** INIZIO ************************");
            var richiesta = _getRichiesta.GetByCodice(query.CodiceRichiesta) ?? _getRichiesta.GetByCodiceRichiesta(query.CodiceRichiesta);
            var operatore = _getUtente.GetUtenteByCodice(query.IdOperatore);
            var sede = _getSedi.GetInfoSede(query.IdSede.First());

            var chiamata = new DettaglioChiamata()
            {
                Civ_Km = richiesta.Localita.Civico,
                Comune = richiesta.Localita.Citta,
                Prov = richiesta.Localita.Provincia,
                DataOraChiamata = richiesta.ListaEventi.OfType<Telefonata>().First().Istante,
                NumeroChiamata = richiesta.Codice,
                Tipologia = string.Concat(_getTipologie.Get(richiesta.Tipologie.Select(c => c.Codice).ToList()).Select(t => $"{t.Descrizione}, ")).TrimEnd(',', ' '),
                Richiedente = richiesta.Richiedente.Nominativo,
                RichiedenteTelefono = richiesta.Richiedente.Telefono,
                Dettaglio = richiesta.DettaglioTipologia?.Descrizione,
                NoteChiamata = richiesta.NotePubbliche,
                Interno = richiesta.Localita.Interno,
                Palazzo = richiesta.Localita.Palazzo,
                Operatore = $"{operatore.Nome} {operatore.Cognome}",
                Piano = richiesta.Localita.Piano,
                Scala = richiesta.Localita.Scala,
                TitoloDistaccamento = sede.Result.Descrizione
            };

            Log.Error($"Dettaglio QH - 1 **************** CHIAMATA ************************");
            if (string.IsNullOrEmpty(richiesta.CodRichiesta)) // CHIAMATA
            {
                var filename = "dettaglio_chiamata_" + query.CodiceRichiesta + ".pdf";

                var form = new DettaglioChiamataModelForm()
                {
                    Chiamata = chiamata
                };

                if (query.ContentType == "application/pdf")
                    stream = _PDFdettChiamataManager.GenerateAndDownload(form, filename, "DettagliChiamate");
                else
                    stream = _CSVdettChiamataManager.GenerateAndDownload(form, filename, "DettagliChiamate");
            }
            else // INTERVENTO
            {
                var filename = "dettaglio_intervento_" + query.CodiceRichiesta + ".pdf";

                var form = new DettaglioInterventoModelForm()
                {
                    Chiamata = chiamata,
                    lstPartenze = richiesta.lstPartenze?.SelectMany(partenza => partenza.Squadre.Select(squadra => new DettaglioPartenza()
                    {
                        SiglaMezzo = partenza.Mezzo.Descrizione,
                        TargaMezzo = partenza.Mezzo.Codice,
                        SiglaSquadra = squadra.Codice,
                        //SchedaCapoPartenza = squadra.Membri?.FirstOrDefault(c => c.CapoPartenza)?.Nominativo,
                        //OraAss = DateTime.Now
                    })).ToList()
                };

                Log.Error($"Dettaglio QH - 1 **************** CHIAMATA GenerateAndDownload ************************");

                if (query.ContentType == "application/pdf")
                    stream = _PDFdettInterventoManager.GenerateAndDownload(form, filename, "DettagliInterventi");
                else
                    stream = _CSVdettInterventoManager.GenerateAndDownload(form, filename, "DettagliInterventi");
            }

            return new DettaglioRichiestaPathResult()
            {
                Data = stream
            };
        }
    }
}<commit_msg>fix - mapping stampa intervento<commit_after>﻿using CQRS.Queries;
using Serilog;
using SO115App.API.Models.Classi.Soccorso.Eventi.Partenze;
using SO115App.API.Models.Classi.Soccorso.Eventi.Segnalazioni;
using SO115App.Models.Servizi.Infrastruttura.GestioneSoccorso;
using SO115App.Models.Servizi.Infrastruttura.GestioneSoccorso.GestioneTipologie;
using SO115App.Models.Servizi.Infrastruttura.GestioneUtenti;
using SO115App.Models.Servizi.Infrastruttura.SistemiEsterni.Distaccamenti;
using SO115App.Persistence.File.CSVManagement;
using SO115App.Persistence.File.PDFManagement;
using SO115App.Persistence.File.PDFManagement.TemplateModelForms;
using System.IO;
using System.Linq;

namespace SO115App.Models.Servizi.CQRS.Queries.GestioneFile.DettaglioRichiesta
{
    public class DettaglioRichiestaPathQueryHandler : IQueryHandler<DettaglioRichiestaPathQuery, DettaglioRichiestaPathResult>
    {
        private readonly IGetTipologieByCodice _getTipologie;
        private readonly IGetRichiesta _getRichiesta;
        private readonly IGetUtenteById _getUtente;
        private readonly IGetSedi _getSedi;
        private readonly IPDFTemplateManager<DettaglioChiamataModelForm> _PDFdettChiamataManager;
        private readonly IPDFTemplateManager<DettaglioInterventoModelForm> _PDFdettInterventoManager;
        private readonly ICSVTemplateManager<DettaglioChiamataModelForm> _CSVdettChiamataManager;
        private readonly ICSVTemplateManager<DettaglioInterventoModelForm> _CSVdettInterventoManager;

        public DettaglioRichiestaPathQueryHandler(IGetRichiesta getRichiesta,
            IGetTipologieByCodice getTipologie,
            IGetUtenteById getUtente,
            IGetSedi getSedi,
            IPDFTemplateManager<DettaglioChiamataModelForm> dettChiamataManager,
            IPDFTemplateManager<DettaglioInterventoModelForm> dettInterventoManager,
            ICSVTemplateManager<DettaglioChiamataModelForm> CSVdettChiamataManager,
            ICSVTemplateManager<DettaglioInterventoModelForm> CSVdettInterventoManager)
        {
            _getUtente = getUtente;
            _getTipologie = getTipologie;
            _getRichiesta = getRichiesta;
            _getSedi = getSedi;
            _PDFdettChiamataManager = dettChiamataManager;
            _PDFdettInterventoManager = dettInterventoManager;
            _CSVdettChiamataManager = CSVdettChiamataManager;
            _CSVdettInterventoManager = CSVdettInterventoManager;
        }

        public DettaglioRichiestaPathResult Handle(DettaglioRichiestaPathQuery query)
        {
            MemoryStream stream;

            Log.Error($"Dettaglio QH - 1 **************** INIZIO ************************");
            var richiesta = _getRichiesta.GetByCodice(query.CodiceRichiesta) ?? _getRichiesta.GetByCodiceRichiesta(query.CodiceRichiesta);
            var operatore = _getUtente.GetUtenteByCodice(query.IdOperatore);
            var sede = _getSedi.GetInfoSede(query.IdSede.First());

            var chiamata = new DettaglioChiamata()
            {
                Civ_Km = richiesta.Localita.Civico,
                Comune = richiesta.Localita.Citta,
                Prov = richiesta.Localita.Provincia,
                DataOraChiamata = richiesta.ListaEventi.OfType<Telefonata>().First().Istante,
                NumeroChiamata = richiesta.Codice,
                Tipologia = string.Concat(_getTipologie.Get(richiesta.Tipologie.Select(c => c.Codice).ToList()).Select(t => $"{t.Descrizione}, ")).TrimEnd(',', ' '),
                Richiedente = richiesta.Richiedente.Nominativo,
                RichiedenteTelefono = richiesta.Richiedente.Telefono,
                Dettaglio = richiesta.DettaglioTipologia?.Descrizione,
                NoteChiamata = richiesta.NotePubbliche,
                Interno = richiesta.Localita.Interno,
                Palazzo = richiesta.Localita.Palazzo,
                Operatore = $"{operatore.Nome} {operatore.Cognome}",
                Piano = richiesta.Localita.Piano,
                Scala = richiesta.Localita.Scala,
                TitoloDistaccamento = sede.Result.Descrizione
            };

            Log.Error($"Dettaglio QH - 1 **************** CHIAMATA ************************");
            if (string.IsNullOrEmpty(richiesta.CodRichiesta)) // CHIAMATA
            {
                var filename = "dettaglio_chiamata_" + query.CodiceRichiesta + ".pdf";

                var form = new DettaglioChiamataModelForm()
                {
                    Chiamata = chiamata
                };

                if (query.ContentType == "application/pdf")
                    stream = _PDFdettChiamataManager.GenerateAndDownload(form, filename, "DettagliChiamate");
                else
                    stream = _CSVdettChiamataManager.GenerateAndDownload(form, filename, "DettagliChiamate");
            }
            else // INTERVENTO
            {
                var filename = "dettaglio_intervento_" + query.CodiceRichiesta + ".pdf";

                var form = new DettaglioInterventoModelForm()
                {
                    Chiamata = chiamata,
                    lstPartenze = richiesta.lstPartenze?.SelectMany(partenza => partenza.Squadre.Select(squadra => new DettaglioPartenza()
                    {
                        SiglaMezzo = partenza.Mezzo.Descrizione,
                        TargaMezzo = partenza.Mezzo.Codice,
                        SiglaSquadra = squadra.Codice,
                        SchedaCapoPartenza = squadra.Membri.Where(m => m.DescrizioneQualifica.ToUpper().Equals("TEAM_LEADER")).Select(m => m.Nominativo?.ToLower()).FirstOrDefault(),
                        OraAss = richiesta.Eventi.OfType<ComposizionePartenze>().First(p => p.CodicePartenza.Equals(partenza.Codice)).DataOraInserimento,
                    })).ToList()
                };

                Log.Error($"Dettaglio QH - 1 **************** CHIAMATA GenerateAndDownload ************************");

                if (query.ContentType == "application/pdf")
                    stream = _PDFdettInterventoManager.GenerateAndDownload(form, filename, "DettagliInterventi");
                else
                    stream = _CSVdettInterventoManager.GenerateAndDownload(form, filename, "DettagliInterventi");
            }

            return new DettaglioRichiestaPathResult()
            {
                Data = stream
            };
        }
    }
}
{'fraction_non_alphanumeric': 0.09379233405052195, 'fraction_numerical': 0.005020320344250538, 'mean_word_length': 2.5104895104895104, 'pattern_counts': {'":': 0, '<': 24, '<?xml version=': 0, '>': 36, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 10, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3116333', 'n_tokens_mistral': 3905, 'n_tokens_neox': 3718, 'n_words': 483}