public async Task <IActionResult> Edit(int id)
        {
            ViewData["Title"] = applicationPersister.GetTitoloApp();
            CostoServizioEditInputModel inputModel = await costiservizi.GetCostoServizioForEditingAsync(id);

            return(View(inputModel));
        }
        public async Task <IActionResult> Edit(CostoServizioEditInputModel inputModel)
        {
            if (ModelState.IsValid)
            {
                CostoServizioDetailViewModel costoservizio = await costiservizi.EditCostoServizioAsync(inputModel);

                TempData["ConfirmationMessage"] = "I dati sono stati aggiornati con successo";
                return(RedirectToAction(nameof(Detail), new { id = inputModel.Id }));
            }

            ViewData["Title"] = applicationPersister.GetTitoloApp();
            return(View(inputModel));
        }
        public async Task <CostoServizioEditInputModel> GetCostoServizioForEditingAsync(int id)
        {
            IQueryable <CostoServizioEditInputModel> queryLinq = dbContext.Costi
                                                                 .AsNoTracking()
                                                                 .Where(costo => costo.Id == id)
                                                                 .Select(costo => costo.ToCostoServizioEditInputModel());

            CostoServizioEditInputModel viewModel = await queryLinq.FirstOrDefaultAsync();

            if (viewModel == null)
            {
                logger.LogWarning("Costo del servizio {id} non trovato", id);
                throw new CostoServizioNotFoundException(id);
            }

            return(viewModel);
        }
        public async Task <CostoServizioDetailViewModel> EditCostoServizioAsync(CostoServizioEditInputModel inputModel)
        {
            Costo costo = await dbContext.Costi.FindAsync(inputModel.Id);

            if (costo == null)
            {
                logger.LogWarning("Costo del servizio {id} non trovato", inputModel.Id);
                throw new CostoServizioNotFoundException(inputModel.Id);
            }

            costo.ChangeTipoServizio(inputModel.TipoServizio);
            costo.ChangeCostoFisso(inputModel.CostoFisso);
            costo.ChangeCostoKm(inputModel.CostoKm);
            costo.ChangeSecondoTrasportato(inputModel.SecondoTrasportato);
            costo.ChangeFermoMacchina(inputModel.FermoMacchina);
            costo.ChangeAccompagnatore(inputModel.Accompagnatore);
            costo.ChangeScontoSoci(inputModel.ScontoSoci);

            await dbContext.SaveChangesAsync();

            return(costo.ToCostoServizioDetailViewModel());
        }