Exemplo n.º 1
0
 public StmtVoucherDetailQuery(IQueryCompounded <IVoucherQueryAtom> v, IQueryCompounded <IDetailQueryAtom> d)
 {
     VoucherQuery     = v;
     DetailEmitFilter = new StmtEmit {
         DetailFilter = d
     };
 }
Exemplo n.º 2
0
    /// <inheritdoc />
    protected override async IAsyncEnumerable <string> ExecuteUnregister(
        IQueryCompounded <IDistributedQueryAtom> distQuery, DateFilter rng,
        IQueryCompounded <IVoucherQueryAtom> query, Session session)
    {
        await foreach (var a in Sort(session.Accountant.SelectAmortizationsAsync(distQuery)))
        {
            foreach (var item in a.Schedule.Where(item => item.Date.Within(rng)))
            {
                if (query != null)
                {
                    if (item.VoucherID == null)
                    {
                        continue;
                    }

                    var voucher = await session.Accountant.SelectVoucherAsync(item.VoucherID);

                    if (voucher != null)
                    {
                        if (!MatchHelper.IsMatch(query, voucher.IsMatch))
                        {
                            continue;
                        }
                    }
                }

                item.VoucherID = null;
            }

            yield return(await ListAmort(a, session));

            await session.Accountant.UpsertAsync(a);
        }
    }
        /// <inheritdoc />
        protected override IQueryResult ExecuteResetSoft(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                         DateFilter rng)
        {
            var cnt = 0L;

            foreach (var a in Accountant.SelectAmortizations(distQuery))
            {
                if (a.Schedule == null)
                {
                    continue;
                }

                var flag = false;
                foreach (var item in a.Schedule.Where(item => item.Date.Within(rng))
                         .Where(item => item.VoucherID != null)
                         .Where(item => Accountant.SelectVoucher(item.VoucherID) == null))
                {
                    item.VoucherID = null;
                    cnt++;
                    flag = true;
                }

                if (flag)
                {
                    Accountant.Upsert(a);
                }
            }

            return(new NumberAffected(cnt));
        }
        /// <inheritdoc />
        protected override IQueryResult ExecuteCheck(IQueryCompounded <IDistributedQueryAtom> distQuery, DateFilter rng,
                                                     IEntitiesSerializer serializer)
        {
            var sb = new StringBuilder();

            foreach (var a in Sort(Accountant.SelectAmortizations(distQuery)))
            {
                var sbi = new StringBuilder();
                foreach (var item in Accountant.Update(a, rng, false, true))
                {
                    sbi.AppendLine(ListAmortItem(item));
                }

                if (sbi.Length != 0)
                {
                    sb.AppendLine(ListAmort(a, serializer, null, false));
                    sb.AppendLine(sbi.ToString());
                }

                Accountant.Upsert(a);
            }

            if (sb.Length > 0)
            {
                return(new DirtyText(sb.ToString()));
            }

            return(new PlainSucceed());
        }
Exemplo n.º 5
0
 public IEnumerable <Amortization> SelectAmortizations(IQueryCompounded <IDistributedQueryAtom> filter)
 {
     foreach (var amort in m_Db.SelectAmortizations(filter))
     {
         AmortAccountant.InternalRegular(amort);
         yield return(amort);
     }
 }
Exemplo n.º 6
0
 /// <inheritdoc />
 protected override async IAsyncEnumerable <string> ExecuteList(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                                DateTime?dt,
                                                                bool showSchedule, Session session)
 {
     await foreach (var a in Sort(session.Accountant.SelectAssetsAsync(distQuery)))
     {
         yield return(await ListAsset(a, session, dt, showSchedule));
     }
 }
Exemplo n.º 7
0
 protected override IQueryResult ExecuteResetHard(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                  IQueryCompounded <IVoucherQueryAtom> query) => new NumberAffected(
     Accountant.SelectAssets(distQuery)
     .Sum(
         a => Accountant.DeleteVouchers(
             new IntersectQueries <IVoucherQueryAtom>(
                 query ?? VoucherQueryUnconstrained.Instance,
                 ParsingF.VoucherQuery(
                     $"{{ T{a.DepreciationTitle.AsTitle()} {a.StringID.Quotation('\'')} Depreciation }} + {{ T{a.DevaluationTitle.AsTitle()} {a.StringID.Quotation('\'')} Devalue }}")))));
Exemplo n.º 8
0
    /// <inheritdoc />
    protected override async IAsyncEnumerable <string> ExecuteRecal(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                                    Session session)
    {
        await foreach (var a in Sort(session.Accountant.SelectAmortizationsAsync(distQuery)))
        {
            Accountant.Amortize(a);
            yield return(session.Serializer.PresentAmort(a));

            await session.Accountant.UpsertAsync(a);
        }
    }
        /// <summary>
        ///     执行列表表达式
        /// </summary>
        /// <param name="distQuery">分期检索式</param>
        /// <param name="dt">计算账面价值的时间</param>
        /// <param name="showSchedule">是否显示折旧计算表</param>
        /// <param name="serializer">表示器</param>
        /// <returns>执行结果</returns>
        protected override IQueryResult ExecuteList(IQueryCompounded <IDistributedQueryAtom> distQuery, DateTime?dt,
                                                    bool showSchedule, IEntitiesSerializer serializer)
        {
            var sb = new StringBuilder();

            foreach (var a in Sort(Accountant.SelectAmortizations(distQuery)))
            {
                sb.Append(ListAmort(a, serializer, dt, showSchedule));
            }

            return(new PlainText(sb.ToString()));
        }
Exemplo n.º 10
0
    /// <inheritdoc />
    protected override async IAsyncEnumerable <string> ExecuteResetSoft(
        IQueryCompounded <IDistributedQueryAtom> distQuery, DateFilter rng, Session session)
    {
        await foreach (var a in session.Accountant.SelectAmortizationsAsync(distQuery))
        {
            if (a.Schedule == null)
            {
                continue;
            }

            var flag = false;
            foreach (var item in a.Schedule.Where(item => item.Date.Within(rng))
                     .Where(static item => item.VoucherID != null))
        /// <inheritdoc />
        protected override IQueryResult ExecuteRecal(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                     IEntitiesSerializer serializer)
        {
            var lst = new List <Amortization>();

            foreach (var a in Sort(Accountant.SelectAmortizations(distQuery)))
            {
                Accountant.Amortize(a);
                Accountant.Upsert(a);
                lst.Add(a);
            }

            return(new DirtyText(serializer.PresentAmorts(lst)));
        }
Exemplo n.º 12
0
    /// <inheritdoc />
    protected override async IAsyncEnumerable <string> ExecuteRegister(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                                       DateFilter rng,
                                                                       IQueryCompounded <IVoucherQueryAtom> query, Session session)
    {
        await foreach (var a in Sort(session.Accountant.SelectAmortizationsAsync(distQuery)))
        {
            await foreach (var s in session.Serializer.PresentVouchers(
                               session.Accountant.RegisterVouchers(a, rng, query)))
            {
                yield return(s);
            }

            await session.Accountant.UpsertAsync(a);
        }
    }
        /// <inheritdoc />
        protected override IQueryResult ExecuteRegister(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                        DateFilter rng,
                                                        IQueryCompounded <IVoucherQueryAtom> query, IEntitiesSerializer serializer)
        {
            var sb = new StringBuilder();

            foreach (var a in Sort(Accountant.SelectAmortizations(distQuery)))
            {
                sb.Append(serializer.PresentVouchers(Accountant.RegisterVouchers(a, rng, query)));
                Accountant.Upsert(a);
            }

            if (sb.Length > 0)
            {
                return(new DirtyText(sb.ToString()));
            }

            return(new PlainSucceed());
        }
        /// <inheritdoc />
        protected override IQueryResult ExecuteUnregister(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                          DateFilter rng,
                                                          IQueryCompounded <IVoucherQueryAtom> query, IEntitiesSerializer serializer)
        {
            var sb = new StringBuilder();

            foreach (var a in Sort(Accountant.SelectAmortizations(distQuery)))
            {
                foreach (var item in a.Schedule.Where(item => item.Date.Within(rng)))
                {
                    if (query != null)
                    {
                        if (item.VoucherID == null)
                        {
                            continue;
                        }

                        var voucher = Accountant.SelectVoucher(item.VoucherID);
                        if (voucher != null)
                        {
                            if (!MatchHelper.IsMatch(query, voucher.IsMatch))
                            {
                                continue;
                            }
                        }
                    }

                    item.VoucherID = null;
                }

                sb.Append(ListAmort(a, serializer));
                Accountant.Upsert(a);
            }

            if (sb.Length > 0)
            {
                return(new DirtyText(sb.ToString()));
            }

            return(new PlainSucceed());
        }
        /// <inheritdoc />
        protected override IQueryResult ExecuteApply(IQueryCompounded <IDistributedQueryAtom> distQuery, DateFilter rng,
                                                     bool isCollapsed)
        {
            var sb = new StringBuilder();

            foreach (var a in Sort(Accountant.SelectAmortizations(distQuery)))
            {
                foreach (var item in Accountant.Update(a, rng, isCollapsed))
                {
                    sb.AppendLine(ListAmortItem(item));
                }

                Accountant.Upsert(a);
            }

            if (sb.Length > 0)
            {
                return(new DirtyText(sb.ToString()));
            }

            return(new PlainSucceed());
        }
 public static bool IsMatch(this Voucher voucher, IQueryCompounded <IVoucherQueryAtom> query)
 => IsMatch(query, q => IsMatch(voucher, q));
 /// <inheritdoc />
 protected override IQueryResult ExecuteResetHard(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                  IQueryCompounded <IVoucherQueryAtom> query) => throw new InvalidOperationException();
Exemplo n.º 18
0
 public IEnumerable <Voucher> RegisterVouchers(Asset asset, DateFilter rng,
                                               IQueryCompounded <IVoucherQueryAtom> query)
 => m_AssetAccountant.RegisterVouchers(asset, rng, query);
Exemplo n.º 19
0
 public long DeleteAssets(IQueryCompounded <IDistributedQueryAtom> filter)
 => m_Db.DeleteAssets(filter);
Exemplo n.º 20
0
 public IEnumerable <Asset> SelectAssets(IQueryCompounded <IDistributedQueryAtom> filter)
 => m_Db.SelectAssets(filter).Select(AssetAccountant.InternalRegular);
Exemplo n.º 21
0
 public long DeleteVouchers(IQueryCompounded <IVoucherQueryAtom> query)
 => m_Db.DeleteVouchers(query);
Exemplo n.º 22
0
 public IEnumerable <Voucher> SelectVouchers(IQueryCompounded <IVoucherQueryAtom> query)
 => m_Db.SelectVouchers(query);
        /// <summary>
        ///     找出未在资产计算表中注册的记账凭证,并尝试建立引用
        /// </summary>
        /// <param name="asset">资产</param>
        /// <param name="rng">日期过滤器</param>
        /// <param name="query">检索式</param>
        /// <returns>未注册的记账凭证</returns>
        public IEnumerable <Voucher> RegisterVouchers(Asset asset, DateFilter rng,
                                                      IQueryCompounded <IVoucherQueryAtom> query)
        {
            if (asset.Remark == Asset.IgnoranceMark)
            {
                yield break;
            }

            foreach (
                var voucher in
                Db.SelectVouchers(ParsingF.VoucherQuery(
                                      $"U{asset.User.AsUser()} T{asset.Title.AsTitle()} {asset.StringID.Quotation('\'')}"))
                .Where(v => v.IsMatch(query)))
            {
                if (voucher.Remark == Asset.IgnoranceMark)
                {
                    continue;
                }

                if (asset.Schedule.Any(item => item.VoucherID == voucher.ID))
                {
                    continue;
                }

                // ReSharper disable once PossibleInvalidOperationException
                var value =
                    voucher.Details.Single(d => d.Title == asset.Title && d.Content == asset.StringID).Fund.Value;

                if (value > 0)
                {
                    var lst = asset.Schedule.Where(item => item.Date.Within(rng))
                              .Where(
                        item =>
                        item is AcquisitionItem acq &&
                        (!voucher.Date.HasValue || acq.Date == voucher.Date) &&
                        (acq.OrigValue - value).IsZero())
                              .ToList();

                    if (lst.Count == 1)
                    {
                        lst[0].VoucherID = voucher.ID;
                    }
                    else
                    {
                        yield return(voucher);
                    }
                }
                else if (value < 0)
                {
                    var lst = asset.Schedule.Where(item => item.Date.Within(rng))
                              .Where(
                        item =>
                        item is DispositionItem &&
                        (!voucher.Date.HasValue || item.Date == voucher.Date))
                              .ToList();

                    if (lst.Count == 1)
                    {
                        lst[0].VoucherID = voucher.ID;
                    }
                    else
                    {
                        yield return(voucher);
                    }
                }
                else
                {
                    yield return(voucher);
                }
            }

            foreach (
                var voucher in
                Db.SelectVouchers(
                    ParsingF.VoucherQuery(
                        $"U{asset.User.AsUser()} T{asset.DepreciationTitle.AsTitle()} {asset.StringID.Quotation('\'')}"))
                )
            {
                if (voucher.Remark == Asset.IgnoranceMark)
                {
                    continue;
                }

                if (asset.Schedule.Any(item => item.VoucherID == voucher.ID))
                {
                    continue;
                }

                var lst = asset.Schedule.Where(
                    item =>
                    item is DepreciateItem &&
                    (!voucher.Date.HasValue || item.Date == voucher.Date))
                          .ToList();

                if (lst.Count == 1)
                {
                    lst[0].VoucherID = voucher.ID;
                }
                else
                {
                    yield return(voucher);
                }
            }

            foreach (
                var voucher in
                Db.SelectVouchers(
                    ParsingF.VoucherQuery(
                        $"U{asset.User.AsUser()} T{asset.DevaluationTitle.AsTitle()} {asset.StringID.Quotation('\'')}"))
                )
            {
                if (voucher.Remark == Asset.IgnoranceMark)
                {
                    continue;
                }

                if (asset.Schedule.Any(item => item.VoucherID == voucher.ID))
                {
                    continue;
                }

                var lst = asset.Schedule.Where(
                    item =>
                    item is DevalueItem &&
                    (!voucher.Date.HasValue || item.Date == voucher.Date))
                          .ToList();

                if (lst.Count == 1)
                {
                    lst[0].VoucherID = voucher.ID;
                }
                else
                {
                    yield return(voucher);
                }
            }
        }
Exemplo n.º 24
0
 /// <summary>
 ///     执行列表表达式
 /// </summary>
 /// <param name="distQuery">分期检索式</param>
 /// <param name="dt">计算账面价值的时间</param>
 /// <param name="showSchedule">是否显示折旧计算表</param>
 /// <param name="session">客户端会话</param>
 /// <returns>执行结果</returns>
 protected override IAsyncEnumerable <string> ExecuteList(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                          DateTime?dt, bool showSchedule, Session session)
 => Sort(session.Accountant.SelectAmortizationsAsync(distQuery))
 .SelectAwait(a => ListAmort(a, session, dt, showSchedule));
 /// <inheritdoc />
 protected override IQueryResult ExecuteQuery(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                              IEntitiesSerializer serializer)
 => new PlainText(serializer.PresentAmorts(Sort(Accountant.SelectAmortizations(distQuery))));
 /// <summary>
 ///     判断一般检索式是否成立
 /// </summary>
 /// <param name="query">检索式</param>
 /// <param name="atomPredictor">原子检索式成立条件</param>
 /// <returns>是否成立</returns>
 public static bool IsMatch <TAtom>(IQueryCompounded <TAtom> query, Func <TAtom, bool> atomPredictor)
     where TAtom : class => query?.Accept(new MatchHelperVisitor <TAtom>(atomPredictor)) ?? true;
Exemplo n.º 27
0
 /// <inheritdoc />
 protected override IAsyncEnumerable <string> ExecuteQuery(IQueryCompounded <IDistributedQueryAtom> distQuery,
                                                           Session session)
 => session.Serializer.PresentAmorts(Sort(session.Accountant.SelectAmortizationsAsync(distQuery)));
Exemplo n.º 28
0
 public long DeleteAmortizations(IQueryCompounded <IDistributedQueryAtom> filter)
 => m_Db.DeleteAmortizations(filter);
 public static bool IsMatch(this VoucherDetail voucherDetail, IQueryCompounded <IDetailQueryAtom> query)
 => IsMatch(query, q => IsMatch(voucherDetail, q.Filter, q.Dir));
Exemplo n.º 30
0
 public IEnumerable <Voucher> RegisterVouchers(Amortization amort, DateFilter rng,
                                               IQueryCompounded <IVoucherQueryAtom> query)
 => m_AmortAccountant.RegisterVouchers(amort, rng, query);