private GalvanicaConsuntivoModel CreaGalvanicaConsuntivo(GalvanicaDS.RW_GALV_CONSUNTIVORow m, GalvanicaDS ds)
        {
            GalvanicaConsuntivoModel model = new GalvanicaConsuntivoModel();

            model.Barre        = (int)m.BARRE;
            model.FineTurno    = m.FINE_TURNO;
            model.InizioTurno  = m.INIZIO_TURNO;
            model.IdConsuntivo = (int)m.IDCONSUNTIVO;
            model.UIDUSER      = m.UIDUSER;
            model.Durata       = DateTimeHelper.CalcolaDurata(m.INIZIO_TURNO, m.FINE_TURNO);

            model.Fermi       = new List <FermoModel>();
            model.FermoTotale = new TimeSpan();
            foreach (GalvanicaDS.RW_GALV_FERMIRow f in ds.RW_GALV_FERMI.Where(x => x.IDCONSUNTIVO == m.IDCONSUNTIVO))
            {
                FermoModel fm = new FermoModel()
                {
                    Durata       = f.DURATA,
                    IdConsuntivo = (int)f.IDCONSUNTIVO,
                    IdFermo      = (int)f.IDFERMO,
                    Motivo       = f.MOTIVO,
                    Ora          = f.ORA,
                    Tipo         = f.TIPO
                };
                TimeSpan ts = DateTimeHelper.ConvertiTimespan(f.DURATA);
                model.FermoTotale = model.FermoTotale.Add(ts);
                model.Fermi.Add(fm);
            }
            model.DurataEffettiva = model.Durata.Subtract(model.FermoTotale);
            model.BarreHH         = Math.Round((decimal)(model.Barre / model.DurataEffettiva.TotalHours), 1);
            model.MinBarre        = Math.Round((decimal)(model.DurataEffettiva.TotalMinutes / model.Barre), 1);

            return(model);
        }
        public List <GalvanicaConsuntivoModel> EstraiConsutivoUltimoPeriodo(int NumeroGiorni)
        {
            List <GalvanicaConsuntivoModel> consuntivo = new List <GalvanicaConsuntivoModel>();

            GalvanicaDS ds = new GalvanicaDS();

            using (GalvanicaBusiness bGalvanica = new GalvanicaBusiness())
            {
                bGalvanica.FillRW_GALV_CONSUNTIVO(ds);
                bGalvanica.FillRW_GALV_FERMI(ds);
            }
            DateTime fine   = DateTime.Now;
            DateTime inizio = fine.AddDays(NumeroGiorni * -1);

            foreach (GalvanicaDS.RW_GALV_CONSUNTIVORow m in ds.RW_GALV_CONSUNTIVO.Where(X => X.INIZIO_TURNO >= inizio && X.INIZIO_TURNO <= fine).OrderByDescending(X => X.INIZIO_TURNO))
            {
                GalvanicaConsuntivoModel model = CreaGalvanicaConsuntivo(m, ds);
                consuntivo.Add(model);
            }
            return(consuntivo);
        }
        public GalvanicaReportModel EstraiConsutivo(DateTime dataInizio, DateTime dataFine)
        {
            List <GalvanicaConsuntivoModel> consuntivo = new List <GalvanicaConsuntivoModel>();

            GalvanicaDS ds = new GalvanicaDS();

            using (GalvanicaBusiness bGalvanica = new GalvanicaBusiness())
            {
                bGalvanica.FillRW_GALV_CONSUNTIVO(ds);
                bGalvanica.FillRW_GALV_FERMI(ds);
            }

            List <GalvanicaDS.RW_GALV_CONSUNTIVORow> elementiTrovati = ds.RW_GALV_CONSUNTIVO.Where(X => X.INIZIO_TURNO >= dataInizio && X.INIZIO_TURNO < dataFine).ToList();

            int      barreTotali  = 0;
            TimeSpan durataTotale = new TimeSpan();
            TimeSpan fermoTotale  = new TimeSpan();

            foreach (GalvanicaDS.RW_GALV_CONSUNTIVORow m in elementiTrovati)
            {
                GalvanicaConsuntivoModel model = CreaGalvanicaConsuntivo(m, ds);
                consuntivo.Add(model);
                barreTotali += model.Barre;
                durataTotale = durataTotale.Add(model.Durata);
                fermoTotale  = fermoTotale.Add(model.FermoTotale);
            }
            GalvanicaReportModel report = new GalvanicaReportModel();

            report.Consuntivo      = consuntivo;
            report.BarreTotali     = barreTotali;
            report.FermoTotale     = fermoTotale;
            report.TempoTotale     = durataTotale;
            report.DurataEffettiva = report.TempoTotale.Subtract(report.FermoTotale);
            report.BarreHH         = report.DurataEffettiva.TotalHours == 0 ? 0 : Math.Round((decimal)(report.BarreTotali / report.DurataEffettiva.TotalHours), 1);
            report.MinBarre        = report.BarreTotali == 0 ? 0 : Math.Round((decimal)(report.DurataEffettiva.TotalMinutes / report.BarreTotali), 1);
            return(report);
        }