private bool IsTimeToUpdate(UpdateDataType type) { _updateIntervals.TryGetValue(type, out var interval); if (interval < 1) { return(false); } _previousUpdates.TryGetValue(type, out var prevUpdate); return(prevUpdate != DateTime.MinValue && (DateTime.UtcNow - prevUpdate).TotalMilliseconds >= interval); }
public DataUpdatedArgs(UpdateDataType input) : this() { foreach (string key in input.Keys) { if (!Values.ContainsKey(key)) { Values.Add(key, new Dictionary <string, string>()); } foreach (KeyValuePair <string, string> entry in input[key]) { Values[key].Add(entry.Key, entry.Value); } } }
public UpdateTablesResult UpdateTables(BillingCategory categories, UpdateDataType types = UpdateDataType.DataClean | UpdateDataType.Data) { DateTime startedAt = DateTime.Now; DateTime period = startedAt.FirstOfMonth(); //First, update tables UpdateResult updateResult = Provider.Billing.Process.Update(new UpdateCommand { BillingTypes = categories, UpdateTypes = types, Period = period, ClientID = 0 }); var holidays = Utility.GetHolidays(period, period.AddMonths(1)); var isFirstBusinessDay = Utility.IsFirstBusinessDay(startedAt, holidays); FinalizeResult finalizeResult; //the daily update DOES produce correct data //however, if a change was made since the update, it needs to be caught if (isFirstBusinessDay) { finalizeResult = Finalize(period.AddMonths(-1)); } else { finalizeResult = null; } var result = new UpdateTablesResult(startedAt) { Now = startedAt, Period = period, IsFirstBusinessDay = isFirstBusinessDay, FinalizeResult = finalizeResult, UpdateResult = updateResult }; return(result); }