/// <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);
        }
示例#2
0
 /// <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);
        }