public async Task AddCantiere(Cantiere cantiere)
 {
     _context.Add(cantiere);
     await _context.SaveChangesAsync();
 }
        public async Task AddIntervento(Intervento inputIntervento, Dictionary <Materiale, decimal> choosenMateriale,
                                        Dictionary <Operatore, double> operatoriCoinvolti, string description, string note, Cantiere cantiere, string data,
                                        decimal costoUrgenza, bool isUrgenza = false)
        {
            if (_context.Interventos.Contains(inputIntervento)) // if this intervento exists already
            {
                inputIntervento.CantieriId   = cantiere.Id;
                inputIntervento.Descrizione  = description;
                inputIntervento.IsUrgenza    = isUrgenza;
                inputIntervento.Data         = data == "--" ? new DateTime() : DateTime.Parse(data);
                inputIntervento.CostoUrgenza = costoUrgenza;
                inputIntervento.Note         = note;
                _context.Interventos.Update(inputIntervento);

                foreach (var operatore in operatoriCoinvolti)
                {
                    var existingInterventoOperatore =
                        _context.InterventoOperatores.FirstOrDefault(x => x.OperatoriId == operatore.Key.Id && x.InterventiId == inputIntervento.Id);
                    if (existingInterventoOperatore != null) // the operatore exists already
                    {
                        existingInterventoOperatore.OreSpese = Convert.ToDecimal(operatore.Value);
                        _context.Update(existingInterventoOperatore);
                    }
                    else
                    {
                        var interventoOperatore = new InterventoOperatore
                        {
                            OperatoriId  = operatore.Key.Id,
                            OreSpese     = Convert.ToDecimal(operatore.Value),
                            InterventiId = inputIntervento.Id
                        };

                        _context.Add(interventoOperatore);
                    }
                }

                var interventoMateriali = new List <InterventoMateriale>();
                foreach (var materiale in choosenMateriale)
                {
                    var existingMateriale = _context.InterventoMateriales.FirstOrDefault(x => x.MaterialeId == materiale.Key.Id && x.InterventiId == inputIntervento.Id);
                    if (existingMateriale != null) // the materiale exists already
                    {
                        existingMateriale.Quantita = materiale.Value;
                        _context.Update(existingMateriale);
                    }
                    else
                    {
                        var interventoMateriale = new InterventoMateriale
                        {
                            MaterialeId  = materiale.Key.Id,
                            Quantita     = materiale.Value,
                            InterventiId = inputIntervento.Id
                        };

                        _context.Add(interventoMateriale);
                    }
                }
            }
            else
            {
                var intervento = new Intervento
                {
                    CantieriId   = cantiere.Id,
                    Descrizione  = description,
                    IsUrgenza    = isUrgenza,
                    Data         = data == "--" ? new DateTime() : DateTime.Parse(data),
                    CostoUrgenza = costoUrgenza,
                    Note         = note
                };
                _context.Interventos.Add(intervento);
                _context.SaveChanges();

                var interventoOperatore = new List <InterventoOperatore>();
                foreach (var operatore in operatoriCoinvolti)
                {
                    interventoOperatore.Add(new InterventoOperatore
                    {
                        OperatoriId  = operatore.Key.Id,
                        OreSpese     = Convert.ToDecimal(operatore.Value),
                        InterventiId = intervento.Id
                    });
                }

                _context.AddRange(interventoOperatore);
                _context.SaveChanges();

                var interventoMateriali = new List <InterventoMateriale>();
                foreach (var materiale in choosenMateriale)
                {
                    interventoMateriali.Add(new InterventoMateriale
                    {
                        MaterialeId  = materiale.Key.Id,
                        Quantita     = materiale.Value,
                        InterventiId = intervento.Id
                    });
                }

                _context.AddRange(interventoMateriali);
                _context.SaveChanges();
            }

            await _context.SaveChangesAsync();
        }