mirror of
https://github.com/stokebob/bnhtrade.git
synced 2026-03-19 14:37:16 +00:00
bug fix and imporovements to HMRC exchange rate update
This commit is contained in:
@@ -268,45 +268,6 @@ namespace bnhtrade.Core.Logic.Account
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private DateTime GetHmrcMaxPeriodAvaible()
|
|
||||||
{
|
|
||||||
// HMRC monthly exchange rates are published on the penultimate Thursday of the month before
|
|
||||||
// For some leeeeeeeeway we'll use the penultimate Friday
|
|
||||||
|
|
||||||
// find penultimate Friday for current month
|
|
||||||
var ukTimeNow = new Logic.Utilities.DateTime().ConvertUtcToUk(DateTime.UtcNow);
|
|
||||||
var monthDayCount = DateTime.DaysInMonth(ukTimeNow.Year, ukTimeNow.Month);
|
|
||||||
var thisMonthPenultimateFriday = DateTime.SpecifyKind(new DateTime(ukTimeNow.Year, ukTimeNow.Month, monthDayCount), DateTimeKind.Unspecified);
|
|
||||||
int count = 0;
|
|
||||||
int fridayCount = 0;
|
|
||||||
while (count != 15)
|
|
||||||
{
|
|
||||||
if (thisMonthPenultimateFriday.DayOfWeek == DayOfWeek.Friday)
|
|
||||||
{
|
|
||||||
fridayCount++;
|
|
||||||
if (fridayCount == 2)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
thisMonthPenultimateFriday = thisMonthPenultimateFriday.AddDays(-1);
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (count == 15)
|
|
||||||
{
|
|
||||||
throw new Exception("Something went wrong here ErrorID:ef7f5d8f-0f7b-4014-aa65-421ecd5d7367");
|
|
||||||
}
|
|
||||||
|
|
||||||
var mostRecentPeriodAvaible = DateTime.SpecifyKind(new DateTime(ukTimeNow.Year, ukTimeNow.Month, 1), DateTimeKind.Unspecified); ;
|
|
||||||
if (ukTimeNow >= thisMonthPenultimateFriday)
|
|
||||||
{
|
|
||||||
mostRecentPeriodAvaible = mostRecentPeriodAvaible.AddMonths(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mostRecentPeriodAvaible;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UpdateHmrcExchageRates()
|
public void UpdateHmrcExchageRates()
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
@@ -381,16 +342,48 @@ namespace bnhtrade.Core.Logic.Account
|
|||||||
}
|
}
|
||||||
|
|
||||||
// check if retrival from hmrc is required
|
// check if retrival from hmrc is required
|
||||||
var hmrcMaxMonthAvaible = GetHmrcMaxPeriodAvaible();
|
// find penultimate Friday for current month
|
||||||
if (hmrcMonthToRetrive.Year == hmrcMaxMonthAvaible.Year && hmrcMonthToRetrive.Month > hmrcMaxMonthAvaible.Month)
|
var ukTimeNow = new Logic.Utilities.DateTime().ConvertUtcToUk(DateTime.UtcNow);
|
||||||
|
var monthDayCount = DateTime.DaysInMonth(ukTimeNow.Year, ukTimeNow.Month);
|
||||||
|
var thisMonthPenultimateFriday = DateTime.SpecifyKind(new DateTime(ukTimeNow.Year, ukTimeNow.Month, monthDayCount), DateTimeKind.Unspecified);
|
||||||
|
int dayCount = 0;
|
||||||
|
int fridayCount = 0;
|
||||||
|
while (dayCount < 15)
|
||||||
|
{
|
||||||
|
if (thisMonthPenultimateFriday.DayOfWeek == DayOfWeek.Friday)
|
||||||
|
{
|
||||||
|
fridayCount++;
|
||||||
|
if (fridayCount == 2)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
thisMonthPenultimateFriday = thisMonthPenultimateFriday.AddDays(-1);
|
||||||
|
dayCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dayCount == 15)
|
||||||
|
{
|
||||||
|
throw new Exception("Something went wrong here ErrorID:ef7f5d8f-0f7b-4014-aa65-421ecd5d7367");
|
||||||
|
}
|
||||||
|
|
||||||
|
var mostRecentPeriodAvaible = DateTime.SpecifyKind(new DateTime(ukTimeNow.Year, ukTimeNow.Month, 1), DateTimeKind.Unspecified); ;
|
||||||
|
if (ukTimeNow >= thisMonthPenultimateFriday)
|
||||||
|
{
|
||||||
|
mostRecentPeriodAvaible = mostRecentPeriodAvaible.AddMonths(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hmrcMonthToRetrive.Year >= mostRecentPeriodAvaible.Year && hmrcMonthToRetrive.Month > mostRecentPeriodAvaible.Month)
|
||||||
{
|
{
|
||||||
// nothing to retrive
|
// nothing to retrive
|
||||||
_log.LogInformation("Exchange rates curretly up to date, exiting.");
|
int days = (thisMonthPenultimateFriday - DateTime.UtcNow).Days;
|
||||||
|
_log.LogInformation($"Exchange rates up to date, next HMRC update in {days} days for {hmrcMonthToRetrive.ToString("MMM yyyy")}.");
|
||||||
|
_log.LogInformation($"Stopping update database HMRC exchange rates.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// get info from hmrc and insert data in db
|
// get info from hmrc and insert data in db
|
||||||
while (hmrcMonthToRetrive <= hmrcMaxMonthAvaible)
|
while (hmrcMonthToRetrive <= mostRecentPeriodAvaible)
|
||||||
{
|
{
|
||||||
count = 0;
|
count = 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user