public ResultModel Create(UserModel user, NFMT.DoPrice.Model.Interest interest, List<NFMT.DoPrice.Model.InterestDetail> details, bool isSubmitAudit) { ResultModel result = new ResultModel(); try { DAL.InterestDetailDAL detailDAL = new InterestDetailDAL(); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) { if (details == null || details.Count == 0) { result.ResultStatus = -1; result.Message = "请添加利息信息"; return result; } //本金计息方式下,计算当前结息成本 if (interest.InterestStyle == (int)NFMT.DoPrice.InterestStyleEnum.本金计息) { decimal curCapital = details.Where(temp=> temp.InterestType != (int)NFMT.DoPrice.InterestTypeEnum.差额计息).Sum(temp => temp.StockBala); interest.CurCapital = Math.Round(curCapital,2,MidpointRounding.AwayFromZero); decimal sumCapital =details.Sum(temp=>temp.StockBala); if(sumCapital != interest.PayCapital) { result.Message="结算总金额必须等于预付本金"; result.ResultStatus=-1; return result; } } decimal sumInterestBala = details.Sum(temp => temp.InterestBala); if (sumInterestBala != interest.InterestBala) { result.Message = "利息明细之和必须等于利息总额"; result.ResultStatus = -1; return result; } interest.InterestStatus = StatusEnum.已录入; result = this.interestDAL.Insert(user, interest); if (result.ResultStatus != 0) return result; int interestId = 0; if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out interestId) || interestId <= 0) { result.ResultStatus = -1; result.Message = "利息新增失败"; return result; } foreach (NFMT.DoPrice.Model.InterestDetail detail in details) { detail.InterestId = interestId; detail.DetailStatus = StatusEnum.已生效; detail.SubContractId = interest.SubContractId; detail.ContractId = interest.ContractId; detail.InterestPrice = interest.InterestPrice; detail.PricingUnit = interest.PricingUnit; detail.Premium = interest.Premium; detail.OtherPrice = interest.OtherPrice; if (detail.InterestType != (int)InterestTypeEnum.差额计息) { if (interest.InterestStyle == (int)InterestStyleEnum.本金计息) detail.InterestType = (int)InterestTypeEnum.本金计息; else detail.InterestType = (int)InterestTypeEnum.货值计息; } result = detailDAL.Insert(user, detail); if (result.ResultStatus != 0) return result; } if (isSubmitAudit) { interest.InterestId = interestId; NFMT.WorkFlow.AutoSubmit submit = new WorkFlow.AutoSubmit(); NFMT.WorkFlow.ITaskProvider taskProvider = new NFMT.DoPrice.TaskProvider.InterestTaskProvider(); result = submit.Submit(user, interest, taskProvider, WorkFlow.MasterEnum.利息结算审核); if (result.ResultStatus != 0) return result; } scope.Complete(); } } catch (Exception ex) { result.Message = ex.Message; } finally { if (result.ResultStatus != 0) this.Log.ErrorFormat("{0} {1},序号:{2}", user.EmpName, result.Message, result.ReturnValue); else if (this.Log.IsInfoEnabled) this.Log.InfoFormat("{0} {1},序号:{2}", user.EmpName, result.Message, result.ReturnValue); } return result; }
public ResultModel Create(UserModel user, Model.Document doc, List<Model.DocumentStock> docStocks, bool isSubmitAudit) { ResultModel result = new ResultModel(); try { //新增制单主表 //新增制单库存明细表 //新增制单发票明细表 //新增发票 //提交审核 DAL.DocumentOrderDAL orderDAL = new DocumentOrderDAL(); DAL.DocumentOrderStockDAL orderStockDAL = new DocumentOrderStockDAL(); DAL.DocumentOrderInvoiceDAL orderInvoiceDAL = new DocumentOrderInvoiceDAL(); DAL.DocumentStockDAL docStockDAL = new DocumentStockDAL(); DAL.DocumentInvoiceDAL docInvoiceDAL = new DocumentInvoiceDAL(); Invoice.DAL.BusinessInvoiceDAL invoiceDAL = new Invoice.DAL.BusinessInvoiceDAL(); using (System.Transactions.TransactionScope scope = new TransactionScope()) { if (doc == null || doc.OrderId <= 0) { result.ResultStatus = -1; result.Message = "制单信息错误"; return result; } if (docStocks == null || docStocks.Count == 0) { result.ResultStatus = -1; result.Message = "未选择任何制单库存"; return result; } //获取指令 result = orderDAL.Get(user, doc.OrderId); if (result.ResultStatus != 0) return result; Model.DocumentOrder order = result.ReturnValue as Model.DocumentOrder; if (order == null || order.OrderId <= 0) { result.ResultStatus = -1; result.Message = "制单指令不存在"; return result; } //判断指令状态 if (order.OrderStatus != StatusEnum.已生效) { result.ResultStatus = -1; result.Message = "制单指令非已生效状态,不能进行制单"; return result; } //新增制单 //doc.AcceptanceDate = DefaultValue.DefaultTime; //doc.PresentDate = DefaultValue.DefaultTime; doc.DocEmpId = user.EmpId; doc.DocumentStatus = DocumentStatusEnum.已录入; result = this.documentDAL.Insert(user, doc); if (result.ResultStatus != 0) return result; int documentId = 0; if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out documentId) || documentId <= 0) { result.ResultStatus = -1; result.Message = "制单新增失败"; return result; } doc.DocumentId = documentId; //获取当前指令所有库存明细 result = orderStockDAL.Load(user, order.OrderId); if (result.ResultStatus != 0) return result; List<Model.DocumentOrderStock> orderStocks = result.ReturnValue as List<Model.DocumentOrderStock>; if (orderStocks == null || orderStocks.Count == 0) { result.ResultStatus = -1; result.Message = "制单指令库存明细获取失败"; return result; } //明细新增 foreach (Model.DocumentStock docStock in docStocks) { //验证选择明细是否在指令中 Model.DocumentOrderStock orderStock = orderStocks.FirstOrDefault(temp => temp.DetailId == docStock.DetailId); if (orderStock == null || orderStock.DetailId<=0) { result.ResultStatus = -1; result.Message = "制单指令库存不存在"; return result; } //新增制单库存明细 Model.DocumentStock addDocStock = new DocumentStock(); addDocStock.DetailStatus = StatusEnum.已生效; addDocStock.DocumentId = documentId; addDocStock.OrderId = order.OrderId; addDocStock.OrderStockDetailId = orderStock.DetailId; addDocStock.RefNo = orderStock.RefNo; addDocStock.StockId = orderStock.StockId; addDocStock.StockNameId = orderStock.StockNameId; result = docStockDAL.Insert(user, addDocStock); if (result.ResultStatus != 0) return result; int docStockDetailId = 0; if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out docStockDetailId) || docStockDetailId <= 0) { result.ResultStatus = -1; result.Message = "制单库存明细新增失败"; return result; } addDocStock.DetailId = docStockDetailId; //获取指令发票明细 result = orderInvoiceDAL.GetByStockDetailId(user,orderStock.DetailId); if (result.ResultStatus != 0) return result; Model.DocumentOrderInvoice orderInvoice = result.ReturnValue as Model.DocumentOrderInvoice; if (orderInvoice == null || orderInvoice.DetailId <= 0) { result.ResultStatus = -1; result.Message = "制单指令发票明细不存在"; return result; } Model.DocumentInvoice docInvoice = new DocumentInvoice(); docInvoice.DetailStatus = StatusEnum.已生效; docInvoice.DocumentId = doc.DocumentId; docInvoice.InvoiceNo = orderInvoice.InvoiceNo; docInvoice.InvoiceBala =orderInvoice.InvoiceBala; docInvoice.OrderId = order.OrderId; docInvoice.OrderInvoiceDetailId = orderInvoice.DetailId; docInvoice.StockDetailId = addDocStock.DetailId; result = docInvoiceDAL.Insert(user, docInvoice); if (result.ResultStatus != 0) return result; } if (isSubmitAudit) { NFMT.WorkFlow.AutoSubmit submit = new WorkFlow.AutoSubmit(); NFMT.WorkFlow.ITaskProvider taskProvider = new TaskProvider.DocumentTaskProvider(); result = submit.Submit(user, doc, taskProvider, WorkFlow.MasterEnum.制单审核); if (result.ResultStatus != 0) return result; } if (result.ResultStatus == 0) result.ReturnValue = doc; scope.Complete(); } } catch (Exception ex) { result.ResultStatus = -1; result.Message = ex.Message; } return result; }
public ResultModel Create(UserModel user, NFMT.DoPrice.Model.PriceConfirm priceConfirm, List<NFMT.DoPrice.Model.PriceConfirmDetail> details,bool isSubmitAudit) { ResultModel result = new ResultModel(); try { using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) { result = priceconfirmDAL.Insert(user, priceConfirm); if (result.ResultStatus != 0) return result; int priceConfirmId = (int)result.ReturnValue; if (details != null && details.Any()) { DAL.PriceConfirmDetailDAL priceConfirmDetailDAL = new PriceConfirmDetailDAL(); foreach (NFMT.DoPrice.Model.PriceConfirmDetail detail in details) { detail.PriceConfirmId = priceConfirmId; result = priceConfirmDetailDAL.Insert(user, detail); if (result.ResultStatus != 0) return result; } } if (isSubmitAudit) { priceConfirm.PriceConfirmId = priceConfirmId; NFMT.WorkFlow.AutoSubmit submit = new WorkFlow.AutoSubmit(); NFMT.WorkFlow.ITaskProvider taskProvider = new NFMT.DoPrice.TaskProvider.PriceConfirmTaskProvider(); result = submit.Submit(user, priceConfirm, taskProvider, WorkFlow.MasterEnum.价格确认单审核); if (result.ResultStatus != 0) return result; } scope.Complete(); } } catch (Exception ex) { result.Message = ex.Message; result.ResultStatus = -1; } finally { if (result.ResultStatus != 0) this.Log.ErrorFormat("{0} {1},序号:{2}", user.EmpName, result.Message, result.ReturnValue); else if (this.Log.IsInfoEnabled) this.Log.InfoFormat("{0} {1},序号:{2}", user.EmpName, result.Message, result.ReturnValue); } return result; }
public ResultModel CreateReplaceOrder(UserModel user, Model.DocumentOrder order, List<NFMT.Document.Model.OrderReplaceStock> stockInvoices, NFMT.Document.Model.DocumentOrderDetail detail, bool isSubmitAudit) { ResultModel result = new ResultModel(); try { DAL.DocumentOrderDetailDAL orderDetailDAL = new DocumentOrderDetailDAL(); DAL.DocumentOrderStockDAL orderStockDAL = new DocumentOrderStockDAL(); DAL.DocumentOrderInvoiceDAL orderInvoiceDAL = new DocumentOrderInvoiceDAL(); NFMT.WareHouse.DAL.StockDAL stockDAL = new WareHouse.DAL.StockDAL(); NFMT.WareHouse.DAL.StockNameDAL stockNameDAL = new WareHouse.DAL.StockNameDAL(); NFMT.Contract.DAL.ContractSubDAL subDAL = new Contract.DAL.ContractSubDAL(); NFMT.Contract.DAL.ContractDAL contractDAL = new Contract.DAL.ContractDAL(); NFMT.Contract.DAL.ContractCorporationDetailDAL corpDetailDAL = new Contract.DAL.ContractCorporationDetailDAL(); using (System.Transactions.TransactionScope scope = new TransactionScope()) { if (order == null) { result.Message = "制单指令不包含任何数据"; result.ResultStatus = -1; return result; } //验证临票指令 result = this.documentorderDAL.Get(user, order.CommercialId); if (result.ResultStatus != 0) return result; Model.DocumentOrder commercialOrder = result.ReturnValue as Model.DocumentOrder; if (commercialOrder == null || commercialOrder.OrderId <= 0) { result.Message = "临票制单指令不存在"; result.ResultStatus = -1; return result; } if (commercialOrder.OrderStatus != StatusEnum.已生效) { result.Message = "临票制单指令状态不正确,不能替临"; result.ResultStatus = -1; return result; } //验证合约 result = contractDAL.Get(user, order.ContractId); if (result.ResultStatus != 0) return result; NFMT.Contract.Model.Contract contract = result.ReturnValue as NFMT.Contract.Model.Contract; if (contract == null || contract.ContractId <= 0) { result.Message = "合约不存在"; result.ResultStatus = -1; return result; } //验证子合约 result = subDAL.Get(user, order.SubId); if (result.ResultStatus != 0) return result; NFMT.Contract.Model.ContractSub sub = result.ReturnValue as NFMT.Contract.Model.ContractSub; if (sub == null || sub.SubId <= 0) { result.Message = "子合约不存在"; result.ResultStatus = -1; return result; } if (sub.SubStatus != StatusEnum.已生效) { result.Message = "子合约非已生效状态,不能进行制单指令新增"; result.ResultStatus = -1; return result; } if (sub.ContractId != order.ContractId) { result.Message = "子合约归属主合约与制单指令主合约不一致"; result.ResultStatus = -1; return result; } result = corpDetailDAL.LoadCorpListByContractId(user, sub.ContractId, true); if (result.ResultStatus != 0) return result; List<NFMT.Contract.Model.ContractCorporationDetail> corps = result.ReturnValue as List<NFMT.Contract.Model.ContractCorporationDetail>; if (corps == null || corps.Count == 0) { result.Message = "合约我方抬头获取失败"; result.ResultStatus = -1; return result; } int orderId = 0; //制单指令主表数据初始化 //付款方式默认为LC order.PaymentStyle = 19; //卖方默认为合约我方抬头默认公司 order.SellerCorp = corps[0].CorpId; ////临票制单或直接终票制单,临终发票差额为0 //order.InvGap = 0; //LC未加入时LC序号为0 order.LCId = 0; order.ApplyEmpId = user.EmpId; //新增主表 order.OrderStatus = StatusEnum.已录入; result = this.documentorderDAL.Insert(user, order); if (result.ResultStatus != 0) return result; if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out orderId) || orderId <= 0) { result.Message = "制单指令新增失败"; result.ResultStatus = -1; return result; } order.OrderId = orderId; //新增明细表 detail.OrderId = orderId; detail.DetailStatus = StatusEnum.已生效; result = orderDetailDAL.Insert(user, detail); if (result.ResultStatus != 0) return result; //临票指令类型,区分是否分配库存 OrderTypeEnum orderType = (OrderTypeEnum)commercialOrder.OrderType; //新增库存明细与发票明细 foreach (Model.OrderReplaceStock stockInvoice in stockInvoices) { //添加库存明细 Model.DocumentOrderStock orderStock = new DocumentOrderStock(); orderStock.DetailStatus = StatusEnum.已生效; orderStock.OrderId = orderId; orderStock.ApplyAmount = stockInvoice.ApplyWeight; orderStock.ComDetailId = stockInvoice.DetailId; //验证临票库存明细是否存在 result = orderStockDAL.Get(user,stockInvoice.DetailId); if (result.ResultStatus != 0) return result; Model.DocumentOrderStock commercialOrderStock = result.ReturnValue as Model.DocumentOrderStock; if (commercialOrderStock == null || commercialOrderStock.DetailId <= 0) { result.Message = "替换的库存明细不存在"; result.ResultStatus = -1; return result; } if (commercialOrderStock.DetailStatus != StatusEnum.已生效) { result.Message = "替换的库存状态不正确"; result.ResultStatus = -1; return result; } int orderStockId = 0; orderStock.StockId = commercialOrderStock.StockId; orderStock.StockNameId = commercialOrderStock.StockNameId; orderStock.RefNo = commercialOrderStock.RefNo; result = orderStockDAL.Insert(user, orderStock); if (result.ResultStatus != 0) return result; if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out orderStockId) || orderStockId <= 0) { result.Message = "制单指令库存明细新增失败"; result.ResultStatus = -1; return result; } //添加发票明细 Model.DocumentOrderInvoice orderInvoice = new DocumentOrderInvoice(); orderInvoice.DetailStatus = StatusEnum.已生效; orderInvoice.InvoiceBala = stockInvoice.InvoiceBala; orderInvoice.InvoiceNo = stockInvoice.InvoiceNo; orderInvoice.OrderId = orderId; orderInvoice.StockDetailId = orderStockId; result = orderInvoiceDAL.Insert(user, orderInvoice); if (result.ResultStatus != 0) return result; } if (isSubmitAudit) { NFMT.WorkFlow.AutoSubmit submit = new WorkFlow.AutoSubmit(); NFMT.WorkFlow.ITaskProvider taskProvider = new TaskProvider.OrderTaskProvider(); result = submit.Submit(user, order, taskProvider, WorkFlow.MasterEnum.制单指令审核); if (result.ResultStatus != 0) return result; } if (result.ResultStatus == 0) result.ReturnValue = order; scope.Complete(); } } catch (Exception ex) { result.ResultStatus = -1; result.Message = ex.Message; } return result; }
public ResultModel CreateSIApply(UserModel user, NFMT.Operate.Model.Apply apply, List<Model.InvoiceApplySIDetail> details, bool isSubmitAudit) { ResultModel result = new ResultModel(); try { using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) { NFMT.Operate.DAL.ApplyDAL applyDAL = new NFMT.Operate.DAL.ApplyDAL(); result = applyDAL.Insert(user, apply); if (result.ResultStatus != 0) return result; int applyId = (int)result.ReturnValue; decimal totalBala = 0; NFMT.Operate.DAL.InvoiceDAL invoiceDAL = new Operate.DAL.InvoiceDAL(); foreach (Model.InvoiceApplySIDetail detail in details) { result = invoiceDAL.Get(user, detail.InvoiceId); if (result.ResultStatus != 0) return result; NFMT.Operate.Model.Invoice invoice = result.ReturnValue as NFMT.Operate.Model.Invoice; totalBala += invoice.InvoiceBala; } result = invoiceapplyDAL.Insert(user, new Model.InvoiceApply() { ApplyId = applyId, TotalBala = totalBala }); if (result.ResultStatus != 0) return result; int invoiceApplyId = (int)result.ReturnValue; DAL.InvoiceApplySIDetailDAL invoiceApplySIDetailDAL = new InvoiceApplySIDetailDAL(); foreach (Model.InvoiceApplySIDetail detail in details) { detail.InvoiceApplyId = invoiceApplyId; detail.ApplyId = applyId; result = invoiceApplySIDetailDAL.Insert(user, detail); if (result.ResultStatus != 0) return result; } if (isSubmitAudit) { apply.ApplyId = applyId; NFMT.WorkFlow.AutoSubmit submit = new WorkFlow.AutoSubmit(); NFMT.WorkFlow.ITaskProvider taskProvider = new NFMT.Invoice.TaskProvider.InvoiceApplyTaskProvider(); result = submit.Submit(user, apply, taskProvider, WorkFlow.MasterEnum.发票申请审核); if (result.ResultStatus != 0) return result; } scope.Complete(); } } catch (Exception ex) { result.ResultStatus = -1; result.Message = ex.Message; } finally { if (result.ResultStatus != 0) this.Log.ErrorFormat("{0} {1},序号:{2}", user.EmpName, result.Message, result.ReturnValue); else if (this.Log.IsInfoEnabled) this.Log.InfoFormat("{0} {1},序号:{2}", user.EmpName, result.Message, result.ReturnValue); } return result; }