I have the following code:
Example code, you should debug and follow the "lstItem" variable to understand its operation
using System;
using System.Collections.Generic;
using System.ComponentModel;
namespace TesteRotina
{
class Program
{
static void Main(string[] args)
{
List<Item> lstItem = new List<Item>
{
new Item
{
IdItem = 1,
NomeModificador = "ITEM 1",
DataUltimaMontagem = new DateTime(2015, 10, 18),
DiaMontagem = 18,
TipoPeriodicidade = (int) TipoPeriodicidadeEnum.Mensal
},
new Item
{
IdItem = 2,
NomeModificador = "ITEM 2",
DataUltimaMontagem = new DateTime(2015, 10, 31),
DiaMontagem = 31,
TipoPeriodicidade = (int) TipoPeriodicidadeEnum.Mensal
},
new Item
{
IdItem = 3,
NomeModificador = "ITEM 3",
DataUltimaMontagem = new DateTime(2015, 10, 29),
DiaMontagem = 29,
TipoPeriodicidade = (int) TipoPeriodicidadeEnum.Mensal
}
};
lstItem = FiltrarListaItem(lstItem);
}
private static List<Item> FiltrarListaItem(List<Item> lstItem)
{
List<Item> lstRetorno = new List<Item>();
foreach (var item in lstItem)
{
var dataUltimaMontagem = item.DataUltimaMontagem;
var diaMontagem = item.DiaMontagem;
var tipoPeriodicidade = item.TipoPeriodicidade;
switch (tipoPeriodicidade)
{
case (int)TipoPeriodicidadeEnum.Mensal:
dataUltimaMontagem = dataUltimaMontagem.AddMonths(1);
break;
case (int)TipoPeriodicidadeEnum.Bimestral:
dataUltimaMontagem = dataUltimaMontagem.AddMonths(2);
break;
case (int)TipoPeriodicidadeEnum.Trimestral:
dataUltimaMontagem = dataUltimaMontagem.AddMonths(3);
break;
case (int)TipoPeriodicidadeEnum.Semestral:
dataUltimaMontagem = dataUltimaMontagem.AddMonths(6);
break;
case (int)TipoPeriodicidadeEnum.Anual:
dataUltimaMontagem = dataUltimaMontagem.AddYears(1);
break;
}
if (dataUltimaMontagem.Day.Equals(DateTime.Now.Day) && dataUltimaMontagem.Month.Equals(DateTime.Now.Month))
lstRetorno.Add(item);
}
return lstItem;
}
}
public class Item
{
public int IdItem { get; set; }
public string NomeModificador { get; set; }
public int TipoPeriodicidade { get; set; }
public DateTime DataUltimaMontagem { get; set; }
public int DiaMontagem { get; set; }
}
public enum TipoPeriodicidadeEnum
{
[Description("Mensal")]
Mensal = 1,
[Description("Bimestral")]
Bimestral = 2,
[Description("Trimestral")]
Trimestral = 3,
[Description("Semestral")]
Semestral = 4,
[Description("Anual")]
Anual = 5
}
}
In the example, the FiltrarListaItem
method removes all items, which have DataMontagem + periodiciodade > DataAtual
. Home
Ex .:
DateInput = 19/10/2015 and Periodicity = Monthly. Home Date Added + Periodicity = 11/19/2015. This item would disregarded because the result is greater than the CurrentDate (11/18/2015).
This is a routine that will run every day of the year.
How do I make Mounting Day Items greater than the last day of the month considered and passed through the filter? Home Eg:
DiaMontagem = 31 and the month only goes until day 30.
DiaMontagem = 29, 30 or 31 and the month only goes up to 28, as is the case of February.