public Periodicity(PeriodicUnit unit, bool isEveryFewUnitEnabled = false, UInt16 everyFewUnit = 1, bool isOnOffUnitSeriesEnabled = false, OnOffSeries onOffUnitSeries = null) { //BindingList(Of Tuple(Of UInt16, UInt16)) = Nothing) 'Non effettuo la verifica diei valori di ogniTotUnità e serieOnOffDiUnità this.Unit = unit; this.IsEveryFewUnitEnabled = isEveryFewUnitEnabled; this.EveryFewUnit = everyFewUnit; this.IsOnOffUnitSeriesEnabled = isOnOffUnitSeriesEnabled; this.OnOffUnitSeries = onOffUnitSeries == null ? new OnOffSeries() : onOffUnitSeries; indiceUltimaEsec = -1; nrUnitàUltimaEsec = 0; }
private bool VSE_Algo(PeriodicUnit unita, DateTime ultimaEsecuzione, DateTime dataAttuale, WeekDay giornoInizioSett, int NrUnitàProssimaEsec, ref string firmaEsecuzione) { if (ultimaEsecuzione == DateTime.MinValue) { return(true); } //ATTENZIONE da qui in poi il Return True deve stare solo alla fine DateTime dataMinProssEsecuzione = DateTime.MinValue; switch (unita) { case PeriodicUnit.Daily: dataMinProssEsecuzione = new DateTime(ultimaEsecuzione.Year, ultimaEsecuzione.Month, ultimaEsecuzione.Day).AddDays(NrUnitàProssimaEsec); //la parte time deve essere 00:00:00.000 if (dataAttuale < dataMinProssEsecuzione) { return(false); } break; case PeriodicUnit.Weekly: int giorniPerInizioSettPross = (int)giornoInizioSett - (int)ultimaEsecuzione.DayOfWeek; if (giorniPerInizioSettPross < 1) { giorniPerInizioSettPross += 7; } //If giorniPerInizioSettPross < 0 Then // giorniPerInizioSettPross = Math.Abs(giorniPerInizioSettPross) //ElseIf giorniPerInizioSettPross = 0 Then // giorniPerInizioSettPross = 7 //End If int giorniMancanti = giorniPerInizioSettPross + (7 * (NrUnitàProssimaEsec - 1)); //(ogniTotUnità - 1) poichè addizionando giorniPerInizioSettPross già salto di una settimana dataMinProssEsecuzione = new DateTime(ultimaEsecuzione.Year, ultimaEsecuzione.Month, ultimaEsecuzione.Day).AddDays(giorniMancanti); //la parte time deve essere 00:00:00.000 if (dataAttuale < dataMinProssEsecuzione) { return(false); } break; case PeriodicUnit.Monthly: int meseProssimo = ultimaEsecuzione.Month + NrUnitàProssimaEsec; int annoProssimo = ultimaEsecuzione.Year; while (meseProssimo > 12) { meseProssimo -= 12; annoProssimo += 1; } dataMinProssEsecuzione = new DateTime(annoProssimo, meseProssimo, 1); //la parte time deve essere 00:00:00.000 if (dataAttuale < dataMinProssEsecuzione) { return(false); } break; case PeriodicUnit.Yearly: dataMinProssEsecuzione = new DateTime(ultimaEsecuzione.Year + NrUnitàProssimaEsec, 1, 1); //la parte time deve essere 00:00:00.000 if (dataAttuale < dataMinProssEsecuzione) { return(false); } break; default: Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, "Valore disatteso per unità:<" + unita.ToString() + ">")); break; } firmaEsecuzione += "data:" + dataMinProssEsecuzione + "|"; return(true); }