public StmtVoucherDetailQuery(IQueryCompounded <IVoucherQueryAtom> v, IQueryCompounded <IDetailQueryAtom> d) { VoucherQuery = v; DetailEmitFilter = new StmtEmit { DetailFilter = d }; }
/// <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()); }
public IEnumerable <Amortization> SelectAmortizations(IQueryCompounded <IDistributedQueryAtom> filter) { foreach (var amort in m_Db.SelectAmortizations(filter)) { AmortAccountant.InternalRegular(amort); yield return(amort); } }
/// <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)); } }
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 }}")))));
/// <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())); }
/// <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))); }
/// <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();
public IEnumerable <Voucher> RegisterVouchers(Asset asset, DateFilter rng, IQueryCompounded <IVoucherQueryAtom> query) => m_AssetAccountant.RegisterVouchers(asset, rng, query);
public long DeleteAssets(IQueryCompounded <IDistributedQueryAtom> filter) => m_Db.DeleteAssets(filter);
public IEnumerable <Asset> SelectAssets(IQueryCompounded <IDistributedQueryAtom> filter) => m_Db.SelectAssets(filter).Select(AssetAccountant.InternalRegular);
public long DeleteVouchers(IQueryCompounded <IVoucherQueryAtom> query) => m_Db.DeleteVouchers(query);
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); } } }
/// <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;
/// <inheritdoc /> protected override IAsyncEnumerable <string> ExecuteQuery(IQueryCompounded <IDistributedQueryAtom> distQuery, Session session) => session.Serializer.PresentAmorts(Sort(session.Accountant.SelectAmortizationsAsync(distQuery)));
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));
public IEnumerable <Voucher> RegisterVouchers(Amortization amort, DateFilter rng, IQueryCompounded <IVoucherQueryAtom> query) => m_AmortAccountant.RegisterVouchers(amort, rng, query);