コード例 #1
0
        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);
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
 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);
     }
 }
コード例 #7
0
        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));
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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());
        }
コード例 #10
0
        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);
        }
コード例 #11
0
        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);
        }
コード例 #12
0
        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);
        }
コード例 #13
0
        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);
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        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();
        }
コード例 #16
0
        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));
        }
コード例 #17
0
        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());
        }
コード例 #18
0
 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();
 }
コード例 #19
0
        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);
        }
コード例 #20
0
        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());
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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());
        }
コード例 #23
0
        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));
        }
コード例 #24
0
        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));
        }