public bool VerificaSeEseguibile(DateTime ultimaEsecuzione, DateTime dataAttuale, WeekDay giornoInizioSett, ref string firmaEsecuzione) { if (IsEveryFewUnitEnabled == true) { if (everyFewUnit > 0) { firmaEsecuzione += "ogniTotUnità;" + unit.ToString() + ";"; return(VSE_Algo(unit, ultimaEsecuzione, dataAttuale, giornoInizioSett, everyFewUnit, ref firmaEsecuzione)); } else { Log.main.Add(new Mess(LogType.Warn, Log.main.warnUserText, "IsEveryFewUnitEnabled è a true ma everyFewUnit è a 0")); } } if (IsOnOffUnitSeriesEnabled == true) { if (IsEveryFewUnitEnabled == true) { Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, "Sia IsOnOffUnitSeriesEnabled che IsEveryFewUnitEnabled sono a true")); } else if (OnOffUnitSeries == null || OnOffUnitSeries.Count == 0) { Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, "IsOnOffUnitSeriesEnabled a true ma OnOffUnitSeries a null o con 0 elementi")); } firmaEsecuzione += "SerieOnOffDiUnità;" + unit.ToString() + ";"; if (ultimaEsecuzione == DateTime.MinValue) { indiceUltimaEsecAggiornato = 0; nrUnitàUltimaEsecAggiornato = 1; return(true); } else { int UnitàPerProssimaEsec = VSE_NrUnitàPerProssimaEsecuzione(); return(VSE_Algo(unit, ultimaEsecuzione, dataAttuale, giornoInizioSett, UnitàPerProssimaEsec, ref firmaEsecuzione)); } } if (IsEveryFewUnitEnabled == false && IsOnOffUnitSeriesEnabled == false) { Log.main.Add(new Mess(LogType.ERR, Log.main.errUserText, "Sia IsEveryFewUnitEnabled che IsOnOffUnitSeriesEnabled sono a false")); return(false); } return(false); }
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); }