/// <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));
            }
        }
Esempio n. 3
0
        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());
        }
Esempio n. 4
0
        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);