/// <summary> /// 获取本次摊销日期 /// </summary> /// <param name="interval">间隔类型</param> /// <param name="the">日期</param> /// <returns>这次摊销日期</returns> private static DateTime ThisAmortizationDate(AmortizeInterval interval, DateTime the) { switch (interval) { case AmortizeInterval.EveryDay: case AmortizeInterval.SameDayOfWeek: return(the); case AmortizeInterval.SameDayOfYear: if (the.Month == 2 && the.Day == 29) { return(the.AddDays(1)); } return(the); case AmortizeInterval.SameDayOfMonth: return(the.Day > 28 ? the.AddDays(1 - the.Day).AddMonths(1) : the); case AmortizeInterval.LastDayOfWeek: return(the.DayOfWeek == DayOfWeek.Sunday ? the : the.AddDays(7 - (int)the.DayOfWeek)); case AmortizeInterval.LastDayOfMonth: return(AccountantHelper.LastDayOfMonth(the.Year, the.Month)); case AmortizeInterval.LastDayOfYear: return(new DateTime(the.Year + 1, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddDays(-1)); default: throw new ArgumentException("间隔类型未知", nameof(interval)); } }
/// <summary> /// 获取下一个摊销日期 /// </summary> /// <param name="interval">间隔类型</param> /// <param name="last">上一次摊销日期</param> /// <returns>下一个摊销日期</returns> private static DateTime NextAmortizationDate(AmortizeInterval interval, DateTime last) { switch (interval) { case AmortizeInterval.EveryDay: return(last.AddDays(1)); case AmortizeInterval.SameDayOfWeek: return(last.AddDays(7)); case AmortizeInterval.LastDayOfWeek: return(last.DayOfWeek == DayOfWeek.Sunday ? last.AddDays(7) : last.AddDays(14 - (int)last.DayOfWeek)); case AmortizeInterval.SameDayOfMonth: return(last.AddMonths(1)); case AmortizeInterval.LastDayOfMonth: return(AccountantHelper.LastDayOfMonth(last.Year, last.Month + 1)); case AmortizeInterval.SameDayOfYear: return(last.AddYears(1)); case AmortizeInterval.LastDayOfYear: return(new DateTime(last.Year + 2, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddDays(-1)); default: throw new ArgumentException("间隔类型未知", nameof(interval)); } }
public void AmortStoreTest(string dt, AmortizeInterval type) { var amort1 = AmortDataProvider.Create(dt, type); foreach (var item in amort1.Schedule) { item.Value = 0; } m_Adapter.Upsert(amort1); Assert.NotNull(amort1.ID); var amort2 = m_Adapter.SelectAmortizations(DistributedQueryUnconstrained.Instance).Single(); Assert.Equal(amort1, amort2, new AmortEqualityComparer()); var amort3 = m_Adapter.SelectAmortization(amort1.ID.Value); Assert.Equal(amort1, amort3, new AmortEqualityComparer()); Assert.True(m_Adapter.DeleteAmortization(amort1.ID.Value)); Assert.False(m_Adapter.DeleteAmortization(amort1.ID.Value)); Assert.False(m_Adapter.SelectAmortizations(DistributedQueryUnconstrained.Instance).Any()); }
public virtual void AmortTest(string dt, AmortizeInterval type) { var amort1 = AmortDataProvider.Create(dt, type); var amort2 = Serializer.ParseAmort(Serializer.PresentAmort(amort1)); Assert.Equal(amort1, amort2, new AmortEqualityComparer()); }
public static Amortization Create(string dt, AmortizeInterval type) => new Amortization { ID = Guid.Parse("9F4FDBA8-94BD-45C2-AF53-36BCFFB591FF"), Name = "nm", User = "******", Date = dt.ToDateTime(), Interval = type, TotalDays = 1233, Remark = " t 't\"-.\" %@!@#$%^&*( ", Value = 33344, Template = new Voucher { Date = dt.ToDateTime(), Remark = " t 't\"-.\" %@!@#$%^&*( ", Type = VoucherType.AnnualCarry, Details = new List <VoucherDetail> { new VoucherDetail { User = "******", Currency = "EUR", Title = 5555, Fund = -5, Remark = " 7' 46r0*\" &)%\" *%)^ Q23'4", }, }, }, Schedule = new List <AmortItem> { new AmortItem { Amount = 123, Value = 666, Remark = "\\\t@#$%^&*(%" }, new AmortItem { Amount = 974, Value = 2342, Remark = "*(%" }, }, };
/// <summary> /// 获取本次摊销日期 /// </summary> /// <param name="interval">间隔类型</param> /// <param name="the">日期</param> /// <returns>这次摊销日期</returns> private static DateTime ThisAmortizationDate(AmortizeInterval interval, DateTime the) => interval switch {
public override void AmortTest(string dt, AmortizeInterval type) => base.AmortTest(dt, type);