/// <summary> /// 生成记账凭证、插入数据库并注册 /// </summary> /// <param name="item">计算表条目</param> /// <param name="isCollapsed">是否压缩</param> /// <param name="template">记账凭证模板</param> /// <returns>是否成功</returns> private bool GenerateVoucher(AmortItem item, bool isCollapsed, Voucher template) { var lst = template.Details.Select( detail => new VoucherDetail { User = detail.User, Currency = detail.Currency, Title = detail.Title, SubTitle = detail.SubTitle, Content = detail.Content, Fund = detail.Remark == AmortItem.IgnoranceMark ? detail.Fund : item.Amount * detail.Fund, Remark = item.Remark }) .ToList(); var voucher = new Voucher { Date = isCollapsed ? null : item.Date, Type = template.Type, Remark = template.Remark ?? "automatically generated", Details = lst }; var res = Db.Upsert(voucher); item.VoucherID = voucher.ID; return(res); }
/// <summary> /// 显示摊销计算表条目 /// </summary> /// <param name="amortItem">摊销计算表条目</param> /// <returns>格式化的信息</returns> private static string ListAmortItem(AmortItem amortItem) => string.Format( " {0:yyyMMdd} AMO:{1} ={3} ({2})", amortItem.Date, amortItem.Amount.AsCurrency() .CPadLeft(13), amortItem.VoucherID, amortItem.Value.AsCurrency() .CPadLeft(13));
private static JObject PresentJson(AmortItem item) => new JObject { { "date", item.Date?.ToString("yyyy-MM-dd") }, { "voucherId", item.VoucherID }, { "amount", item.Amount }, { "value", item.Value }, { "remark", item.Remark } };
/// <summary> /// 根据摊销计算表条目更新账面 /// </summary> /// <param name="item">计算表条目</param> /// <param name="isCollapsed">是否压缩</param> /// <param name="editOnly">是否只允许更新</param> /// <param name="template">记账凭证模板</param> /// <returns>是否成功</returns> private bool UpdateVoucher(AmortItem item, bool isCollapsed, bool editOnly, Voucher template) { if (item.VoucherID == null) { return(!editOnly && GenerateVoucher(item, isCollapsed, template)); } var voucher = Db.SelectVoucher(item.VoucherID); if (voucher == null) { return(!editOnly && GenerateVoucher(item, isCollapsed, template)); } if (voucher.Date != (isCollapsed ? null : item.Date) && !editOnly) { return(false); } var modified = false; if (voucher.Type != template.Type) { modified = true; voucher.Type = template.Type; } if (template.Details.Count != voucher.Details.Count) { return(!editOnly && GenerateVoucher(item, isCollapsed, template)); } foreach (var d in template.Details) { if (d.Remark == Amortization.IgnoranceMark) { continue; } UpdateDetail(d, voucher, out var sucess, out var mo, editOnly); if (!sucess) { return(false); } modified |= mo; } if (modified) { Db.Upsert(voucher); } return(true); }