Check if the previous day is a holiday and / or Sunday

6

I'm having trouble developing a date validation logic. The variable dataFecha is called with -1 day to already validate the previous day.

But when I test the validations, he did not subtract (-1) day in the variable, to validate the Saturday and / or before the holiday.

Validations

  • Validate if the previous day is not Sunday. If it is, pick up the Saturday.
  • Validate if the previous day is not a holiday. If so, pick of the day before the holiday. ¹If the day before the holiday is Sunday, the box of Saturday.
  • Code.

      //Verificar se houve fechamento para caixa no dia anterior e/ou se esta aberto.
      FechamentoCaixa objFec = new FechamentoCaixa();
      Feriados_Nacionais objFeriado = new Feriados_Nacionais();
      //Instancia a varíavel com -1 dia para validar o dia anterior
      dataFecha = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
    
      ////Verifica se o dia anterior é domingo. Caso for, irá verificar o caixa de sabado.
      if (Convert.ToDateTime(dataFecha).DayOfWeek == DayOfWeek.Sunday) {
       dataFecha = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
      }
      //Verifica se o dia anterior é feriado. Caso for, irá verificar o dia antes de ontem
      if (objFeriado.ConsultarFeriado(dataFecha) > 0) {
       dataFecha = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
       //Verifica se o dia anterior ao feriado é domingo. Caso for, irá verificar o de sabado.
       if (Convert.ToDateTime(dataFecha).DayOfWeek == DayOfWeek.Sunday) {
        dataFecha = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
       }
      }
    
        
    asked by anonymous 13.12.2017 / 12:43

    2 answers

    6

    You are not picking the closing date to subtract 1 day. It has to be cumulative. Note that I've simplified the code a lot.

    using System;
    
    public class Program {
        public static void Main() {
            var dataFechamento = DateTime.Now.AddDays(-1);
            dataFechamento = isSunday(dataFechamento);
            if (new Feriados_Nacionais().ConsultarFeriado(dataFecha) > 0) {
                dataFechamento = dataFechamento.AddDays(-1);
                dataFechamento = isSunday(dataFechamento);
            }
            Console.WriteLine(dataFechamento);
            DateTime isSunday(DateTime date) => date.DayOfWeek == DayOfWeek.Sunday ? date.AddDays(-1) : date;
        }
    }
    

    See running on .NET Fiddle . And no Coding Ground . Also I placed GitHub for future reference .

    To facilitate testing and not having created the holiday object I've switched to true in IDEs online , and I used a fixed date, but here's how your code should be.

    I think there are other problems in this code, including concept. Mostly not Feriados_Nacionais .

        
    13.12.2017 / 13:06
    2

    First I tried to use only the DateTime type in your algorithm. Another detail, the DateTime.Now returns the current day, so if it is Monday, the previous day is Sunday, to get the Saturday, you have to decrease two of DateTime.Now .

    //Verificar se houve fechamento para caixa no dia anterior e/ou se esta aberto.
      FechamentoCaixa objFec = new FechamentoCaixa();
      Feriados_Nacionais objFeriado = new Feriados_Nacionais();
      //Instancia a varíavel com -1 dia para validar o dia anterior
      DateTime dataFecha = DateTime.Now.AddDays(-1);
    
      ////Verifica se o dia anterior é domingo. Caso for, irá verificar o caixa de sabado.
      if (dataFecha.DayOfWeek == DayOfWeek.Sunday) {
       dataFecha = DateTime.Now.AddDays(-2); //retorna sábado
      }
      //Verifica se o dia anterior é feriado. Caso for, irá verificar o dia antes de ontem
      if (objFeriado.ConsultarFeriado(dataFecha.ToString("yyyy-MM-dd")) > 0) {
       dataFecha = DateTime.Now.AddDays(-1);
       //Verifica se o dia anterior ao feriado é domingo. Caso for, irá verificar o de sabado.
       if (dataFecha.DayOfWeek == DayOfWeek.Sunday) {
        dataFecha = DateTime.Now.AddDays(-2); //retorna sábado
       }
      }
    
        
    13.12.2017 / 13:02