コード例 #1
0
ファイル: Periodicity.cs プロジェクト: NickHola/Backupper
        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);
        }
コード例 #2
0
ファイル: Periodicity.cs プロジェクト: NickHola/Backupper
        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);
        }