2017-09-27 4 views
0

J'ai trouvé une réponse à cette question en fonction des trimestres, mais je dois l'étendre à d'autres périodes de facturation. J'ai tourné en rond et ne peux pas trouver un moyen de sortir!Trouver la fin de la période de facturation en cours

J'écris une application de console C# fonctionnant avec Dynamics 365 (en ligne) mais je suppose que c'est plus une question de maths.

J'ai une société dont le jour de renouvellement est défini dans le futur, par ex. 01/02/2018 (1er février).

La période de facturation d'une nouvelle commande peut être mensuelle, trimestrielle, semestrielle ou annuelle. Je dois calculer la date de fin de la période de facturation en cours à partir de la date de renouvellement.

Voici ce que j'ai jusqu'à présent

DateTime contractRenewal = new DateTime(2018, 02, 01); 
int MonthsInBillPeriod = getBillingPeriod() //returns 1 for monthly, 3 for quarterly etc. 
int currQuarter = (DateTime.Now.Month - contractRenewal.Month)/MonthsInBillPeriod + 1; 
int month = currQuarter * MonthsInBillPeriod + contractRenewal.Month; 
while (month > 12) 
    month = month - MonthsInBillPeriod; 
renewal = new DateTime(DateTime.Now.AddMonths(month).Year, month, 1).AddDays(-1); //should return 30/09/2017 for monthly. 31/10/2017 for quarterly. 31/01/2018 for biannual and annual given contractRenewal date 

Répondre

1

est-il pas assez pour vous de gérer mois en tant que tels, sans tenir compte des quarts? Comme ceci:

DateTime tmpRenewal = contractRenewal; 
while(tmpRenewal > DateTime.Now) 
{ 
    tmpRenewal = tmpRenewal.AddMonths(-MonthsInBillPeriod); 
} 

// need to go one period forward, to the future from Now (as we are in the past right now) 
DateTime renewal = tmpRenewal.AddMonths(MonthsInBillPeriod).AddDays(-1); 
+0

Merci, cela a simplement réglé le problème et l'a résolu! –