public void Constructor3Default() { var item = new TimeSpanItem(new DateTime(2000, 1, 1, 1, 1, 0), new DateTime(2000, 1, 1, 1, 2, 0)); Assert.IsTrue(MathExtensions.AlmostEquals(item.AmountOf(TimeSpanUnit.Second), 60)); Assert.AreEqual(item.Amount, 60); }
public void Constructor1Hour() { var item = new TimeSpanItem(12, TimeSpanUnit.Hour); Assert.AreEqual(item.Span, new TimeSpan(12, 0, 0)); Assert.IsTrue(MathExtensions.AlmostEquals(item.AmountOf(TimeSpanUnit.Day), 0.5m)); }
public void Constructor1Minute() { var item = new TimeSpanItem(150, TimeSpanUnit.Minute); Assert.AreEqual(item.Span, new TimeSpan(2, 30, 0)); Assert.IsTrue(MathExtensions.AlmostEquals(item.AmountOf(TimeSpanUnit.Hour), 2.5m)); }
public async Task <int> AddTimeSpanItemAsync(TimeSpanItem timeSpanItem) { _manualResetEvent.WaitOne(); try { TimeSpanItemContext timeSpanItemContext = new TimeSpanItemContext(); timeSpanItem = (await timeSpanItemContext.AddAsync(timeSpanItem)).Entity; await timeSpanItemContext.SaveChangesAsync(); _manualResetEvent.Set(); return(timeSpanItem.Id); } catch (Exception e) { if (_exceptionLogItemContext != null) { await AddExceptionLogItem(new ExceptionLogItem() { TimeStamp = DateTime.Now, Message = e.Message, Source = e.Source, StackTrace = e.StackTrace }); } _manualResetEvent.Set(); return(int.MinValue); } }
public void Constructor2Minute() { var item = new TimeSpanItem(new TimeSpan(0, 1, 0), null, TimeSpanUnit.Minute); Assert.IsTrue(MathExtensions.AlmostEquals(item.AmountOf(TimeSpanUnit.Second), 60)); Assert.IsTrue(MathExtensions.AlmostEquals(item.AmountOf(TimeSpanUnit.Minute), 1)); Assert.AreEqual(item.Amount, 1); }
public static TimeSpan ValidateEndTime(TimeSpanItem timeSpanItem, List <TimeSpanItem> timeSpanItems) { if (timeSpanItem.End < timeSpanItem.Start) { return(timeSpanItem.Start); } else { var collisioningTimeSpanItem = timeSpanItems.Where(x => x.Id != timeSpanItem.Id && timeSpanItem.End >= x.Start && timeSpanItem.End <= x.End).Select(x => x).FirstOrDefault(); return(collisioningTimeSpanItem != null?collisioningTimeSpanItem.Start.Subtract(TimeSpan.FromMinutes(1)) > TimeSpan.Zero ? collisioningTimeSpanItem.Start.Subtract(TimeSpan.FromMinutes(1)) : timeSpanItem.Start.Add(TimeSpan.FromMinutes(1)) : TimeSpan.Zero); } }
public void RateCommon() { var _12min = new TimeSpanItem(new TimeSpan(0, 0, 12, 0), null, TimeSpanUnit.Minute, Rounding.AwayFromZero); Assert.IsTrue(MathExtensions.AlmostEquals(_12min.AmountOf(TimeSpanUnit.FiveMinutes), 2)); var _12min30sec = new TimeSpanItem(new TimeSpan(0, 0, 12, 30), null, TimeSpanUnit.Minute, Rounding.AwayFromZero); Assert.IsTrue(MathExtensions.AlmostEquals(_12min30sec.AmountOf(TimeSpanUnit.FiveMinutes), 3)); var _13min = new TimeSpanItem(new TimeSpan(0, 0, 13, 0), null, TimeSpanUnit.Minute, Rounding.AwayFromZero); Assert.IsTrue(MathExtensions.AlmostEquals(_13min.AmountOf(TimeSpanUnit.FiveMinutes), 3)); }
public void Constructor2TimeItemWithAmount() { var NumberOfSlots = 15; var TimeItem = new TimeSpanItem(NumberOfSlots, TimeSpanUnit.FiveMinutes); var PricePerSlot = new UnitPrice(2, 20, CurrencyUnit.EUR, TimeSpanUnit.FiveMinutes); var PriceOf15Slots = new ItemPrice(PricePerSlot, TimeItem); Assert.AreEqual(PriceOf15Slots.CurrencyUnit, CurrencyUnit.EUR); Assert.AreEqual(PriceOf15Slots.CurrencyRate, 1); Assert.AreEqual(PriceOf15Slots.MeasureUnit, TimeSpanUnit.FiveMinutes); Assert.AreEqual(PriceOf15Slots.Amount, 15); Assert.AreEqual(PriceOf15Slots.MeasureRate, 15); Assert.AreEqual(PriceOf15Slots.ExclVAT, 30); Assert.AreEqual(PriceOf15Slots.VAT, 6); }
public void CloneAndEquals() { var unitPrice = new UnitPrice(1, 10, CurrencyUnit.EUR, TimeSpanUnit.Day); var measureItem = new TimeSpanItem(3, TimeSpanUnit.Day); var currencyItem = new CurrencyItem(CurrencyUnit.GBP, CurrencyUnit.EUR, 0.9m) { Stamp = DateTime.Now }; var p = new ItemPrice(unitPrice, measureItem, currencyItem) { Description = "abc" }; Assert.AreEqual(p, p.Clone()); }
public void Constructor2TimeItemWithTimeSpanDifferentMeasureUnits() { var span = new TimeSpan(1, 12, 0); var TimeItem = new TimeSpanItem(span, null, TimeSpanUnit.Minute, Rounding.Up); var PricePerSlot = new UnitPrice(2, 20, CurrencyUnit.EUR, TimeSpanUnit.FiveMinutes); var PriceOf15Slots = new ItemPrice(PricePerSlot, TimeItem); Assert.AreEqual(PriceOf15Slots.CurrencyUnit, CurrencyUnit.EUR); Assert.AreEqual(PriceOf15Slots.CurrencyRate, 1); Assert.AreEqual(PriceOf15Slots.MeasureUnit, TimeSpanUnit.Minute); Assert.AreEqual(PriceOf15Slots.Amount, 72); Assert.AreEqual(PriceOf15Slots.MeasureRate, 15); Assert.AreEqual(PriceOf15Slots.ExclVAT, 30); Assert.AreEqual(PriceOf15Slots.VAT, 6); }
public void Constructor2TimeItemWithTimeSpanDifferentMeasureUnitsWithCurrencyItem() { var span = new TimeSpan(1, 12, 0); var TimeItem = new TimeSpanItem(span, null, TimeSpanUnit.Minute, Rounding.Up); var GbpToEuroRate = new CurrencyItem(CurrencyUnit.GBP, CurrencyUnit.EUR, 0.9m); var PricePerSlot = new UnitPrice(2, 20, CurrencyUnit.EUR, TimeSpanUnit.FiveMinutes); var PriceOf15Slots = new ItemPrice(PricePerSlot, TimeItem, GbpToEuroRate); Assert.AreEqual(PriceOf15Slots.CurrencyUnit, CurrencyUnit.GBP); Assert.AreEqual(PriceOf15Slots.CurrencyRate, 0.9m); Assert.AreEqual(PriceOf15Slots.MeasureUnit, TimeSpanUnit.Minute); Assert.AreEqual(PriceOf15Slots.Amount, 72); Assert.AreEqual(PriceOf15Slots.MeasureRate, 15); Assert.AreEqual(PriceOf15Slots.ExclVAT, 27); Assert.AreEqual(PriceOf15Slots.VAT, 5.4m); }
public void Constructor2TimeItemStartEndDifferentMeasureUnits() { var start = new DateTime(2019, 4, 4, 12, 0, 0); var end = new DateTime(2019, 4, 4, 13, 12, 0); var TimeItem = new TimeSpanItem(start, end, TimeSpanUnit.Minute, Rounding.Up); var PricePerSlot = new UnitPrice(2, 20, CurrencyUnit.EUR, TimeSpanUnit.FiveMinutes); var PriceOf15Slots = new ItemPrice(PricePerSlot, TimeItem); Assert.AreEqual(PriceOf15Slots.CurrencyUnit, CurrencyUnit.EUR); Assert.AreEqual(PriceOf15Slots.CurrencyRate, 1); Assert.AreEqual(PriceOf15Slots.MeasureUnit, TimeSpanUnit.Minute); Assert.AreEqual(PriceOf15Slots.Amount, 72); Assert.AreEqual(PriceOf15Slots.MeasureRate, 15); Assert.AreEqual(PriceOf15Slots.ExclVAT, 30); Assert.AreEqual(PriceOf15Slots.VAT, 6); }
public void Constructor2TimeItemWithAmountWithCurrencyItem() { var NumberOfSlots = 15; var TimeItem = new TimeSpanItem(NumberOfSlots, TimeSpanUnit.FiveMinutes); var PricePerSlot = new UnitPrice(2, 20, CurrencyUnit.EUR, TimeSpanUnit.FiveMinutes); var GbpToEuroRate = new CurrencyItem(CurrencyUnit.GBP, CurrencyUnit.EUR, 0.9m); var PriceOf15Slots = new ItemPrice(PricePerSlot, TimeItem, GbpToEuroRate); Assert.AreEqual(PriceOf15Slots.CurrencyUnit, CurrencyUnit.GBP); Assert.AreEqual(PriceOf15Slots.CurrencyRate, 0.9m); Assert.AreEqual(PriceOf15Slots.MeasureUnit, TimeSpanUnit.FiveMinutes); Assert.AreEqual(PriceOf15Slots.Amount, 15); Assert.AreEqual(PriceOf15Slots.MeasureRate, 15); Assert.AreEqual(PriceOf15Slots.ExclVAT, 27); Assert.AreEqual(PriceOf15Slots.VAT, 5.4m); }
public void Constructor2TimeItemStartEndWithCurrencyItem() { var start = new DateTime(2019, 4, 4, 12, 0, 0); var end = new DateTime(2019, 4, 4, 13, 12, 0); var TimeItem = new TimeSpanItem(start, end, TimeSpanUnit.FiveMinutes, Rounding.Up); var GbpToEuroRate = new CurrencyItem(CurrencyUnit.GBP, CurrencyUnit.EUR, 0.9m); var PricePerSlot = new UnitPrice(2, 20, CurrencyUnit.EUR, TimeSpanUnit.FiveMinutes); var PriceOf15Slots = new ItemPrice(PricePerSlot, TimeItem, GbpToEuroRate); Assert.AreEqual(PriceOf15Slots.CurrencyUnit, CurrencyUnit.GBP); Assert.AreEqual(PriceOf15Slots.CurrencyRate, 0.9m); Assert.AreEqual(PriceOf15Slots.MeasureUnit, TimeSpanUnit.FiveMinutes); Assert.AreEqual(PriceOf15Slots.Amount, 14.4m); Assert.AreEqual(PriceOf15Slots.MeasureRate, 15); Assert.AreEqual(PriceOf15Slots.ExclVAT, 27); Assert.AreEqual(PriceOf15Slots.VAT, 5.4m); }
public async Task UpdateTimeSpanItemAsync(TimeSpanItem timeSpanItem, bool remote = false) { _manualResetEvent.WaitOne(); if (timeSpanItem == null) { return; } try { TimeSpanItemContext timeSpanItemContext = new TimeSpanItemContext(); timeSpanItemContext.Entry(timeSpanItem).State = EntityState.Modified; if (remote) { var queriedTimespanItem = await timeSpanItemContext.TimeSpanItems.Where(x => x.Id == timeSpanItem.Id).Select(x => x).FirstOrDefaultAsync(); if (queriedTimespanItem != null) { await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { queriedTimespanItem.End = timeSpanItem.End; queriedTimespanItem.Occupancy = timeSpanItem.Occupancy; queriedTimespanItem.Start = timeSpanItem.Start; queriedTimespanItem.TimeStamp = timeSpanItem.TimeStamp; }); timeSpanItemContext.Update(queriedTimespanItem); } } else { timeSpanItemContext.Update(timeSpanItem); } await timeSpanItemContext.SaveChangesAsync(); } catch (Exception e) { if (_exceptionLogItemContext != null) { await AddExceptionLogItem(new ExceptionLogItem() { TimeStamp = DateTime.Now, Message = e.Message, Source = e.Source, StackTrace = e.StackTrace }); } } _manualResetEvent.Set(); }
public void RateToEven() { var _12minToEven1 = new TimeSpanItem(new TimeSpan(0, 0, 12, 0), null, TimeSpanUnit.Minute, Rounding.HalfToEven); Assert.IsTrue(MathExtensions.AlmostEquals(_12minToEven1.AmountOf(TimeSpanUnit.FiveMinutes), 2)); var _12minToEven2 = new TimeSpanItem(new TimeSpan(0, 0, 12, 30), null, TimeSpanUnit.Minute, Rounding.HalfToEven); Assert.IsTrue(MathExtensions.AlmostEquals(_12minToEven2.AmountOf(TimeSpanUnit.FiveMinutes), 2)); var _12minToEven3 = new TimeSpanItem(new TimeSpan(0, 0, 13, 0), null, TimeSpanUnit.Minute, Rounding.HalfToEven); Assert.IsTrue(MathExtensions.AlmostEquals(_12minToEven3.AmountOf(TimeSpanUnit.FiveMinutes), 3)); var _12minToEven4 = new TimeSpanItem(new TimeSpan(0, 0, 17, 30), null, TimeSpanUnit.Minute, Rounding.HalfToEven); Assert.IsTrue(MathExtensions.AlmostEquals(_12minToEven4.AmountOf(TimeSpanUnit.FiveMinutes), 4)); }
public void ToPrice() { var a = new Accounting() { Description = "xyz" }; var unitPrice = new UnitPrice(1, 20, CurrencyUnit.EUR, TimeSpanUnit.Day); var measureItem = new TimeSpanItem(2, TimeSpanUnit.Day); var ip = new ItemPrice(unitPrice, measureItem) { Description = "abc", Accounting = a }; var p = new Price(2, 20, CurrencyUnit.EUR) { Description = "abc", Accounting = a }; Assert.AreEqual(p, ip.AsPrice()); }
public async Task RemoveTimeSpanItemAsync(TimeSpanItem timeSpanItem) { _manualResetEvent.WaitOne(); try { TimeSpanItemContext timeSpanItemContext = new TimeSpanItemContext(); timeSpanItemContext.Remove(timeSpanItem); await timeSpanItemContext.SaveChangesAsync(); } catch (Exception e) { if (_exceptionLogItemContext != null) { await AddExceptionLogItem(new ExceptionLogItem() { TimeStamp = DateTime.Now, Message = e.Message, Source = e.Source, StackTrace = e.StackTrace }); } } _manualResetEvent.Set(); }
private PriceList GetFee() { var list = new PriceList(); var date = Start; while (date < End) { var next = date.AddDays(1); var time = new TimeSpanItem(date, DateTimeExtensions.Min(next, End), TimeSpanUnit.TenMinutes, Rounding.Up); var price = new ItemPrice(FeeParams.UnitFee, time); list.Add(Price.Min(price, FeeParams.DailyFee).AppendToDescription($"Parking time {date} to {next.AddMinutes(-1)}")); date = next; } var total = list.Sum(); total.Description = $"Total fee for parking time {Start} to {End}"; list.Add(total); return(list); }
public void ToPriceWithCurrencyItem() { var a = new Accounting() { Description = "xyz" }; var unitPrice = new UnitPrice(1, 20, CurrencyUnit.EUR, TimeSpanUnit.Day); var measureItem = new TimeSpanItem(2, TimeSpanUnit.Day); var currencyItem = new CurrencyItem(CurrencyUnit.GBP, CurrencyUnit.EUR, 0.9m) { Stamp = DateTime.Now }; var ip = new ItemPrice(unitPrice, measureItem, currencyItem) { Description = "abc", Accounting = a }; var p = new Price(1.8m, 20, CurrencyUnit.GBP) { Description = "abc", Accounting = a }; Assert.AreEqual(p, ip.AsPrice()); }
public static TimeSpan ValidateStartTime(TimeSpanItem timeSpanItem, List <TimeSpanItem> timeSpanItems) { var collisioningTimeSpanItem = timeSpanItems.Where(x => x.Id != timeSpanItem.Id && timeSpanItem.Start >= x.Start && timeSpanItem.Start <= x.End).Select(x => x).FirstOrDefault(); return(collisioningTimeSpanItem != null?collisioningTimeSpanItem.End.Add(TimeSpan.FromMinutes(1)) : TimeSpan.Zero); }
public void CloneAndEquals() { var item = new TimeSpanItem(new DateTime(2000, 1, 1, 1, 1, 0), new DateTime(2000, 1, 1, 1, 2, 0), TimeSpanUnit.Minute); Assert.AreEqual(item, item.Clone()); }
public void RateNone() { var _12min = new TimeSpanItem(new TimeSpan(0, 0, 12, 0), null, TimeSpanUnit.Minute); Assert.IsTrue(MathExtensions.AlmostEquals(_12min.AmountOf(TimeSpanUnit.FiveMinutes), 2.4m)); }
public void RateExactCommon() { var _10min = new TimeSpanItem(new TimeSpan(0, 0, 10, 0), null, TimeSpanUnit.Minute, Rounding.AwayFromZero); Assert.IsTrue(MathExtensions.AlmostEquals(_10min.AmountOf(TimeSpanUnit.FiveMinutes), 2)); }