public override IModel CreateModel(SqlDataReader dr) { BusinessInvoice businessinvoice = new BusinessInvoice(); int indexBusinessInvoiceId = dr.GetOrdinal("BusinessInvoiceId"); businessinvoice.BusinessInvoiceId = Convert.ToInt32(dr[indexBusinessInvoiceId]); int indexInvoiceId = dr.GetOrdinal("InvoiceId"); if (dr["InvoiceId"] != DBNull.Value) { businessinvoice.InvoiceId = Convert.ToInt32(dr[indexInvoiceId]); } int indexRefInvoiceId = dr.GetOrdinal("RefInvoiceId"); if (dr["RefInvoiceId"] != DBNull.Value) { businessinvoice.RefInvoiceId = Convert.ToInt32(dr[indexRefInvoiceId]); } int indexContractId = dr.GetOrdinal("ContractId"); if (dr["ContractId"] != DBNull.Value) { businessinvoice.ContractId = Convert.ToInt32(dr[indexContractId]); } int indexSubContractId = dr.GetOrdinal("SubContractId"); if (dr["SubContractId"] != DBNull.Value) { businessinvoice.SubContractId = Convert.ToInt32(dr[indexSubContractId]); } int indexAssetId = dr.GetOrdinal("AssetId"); if (dr["AssetId"] != DBNull.Value) { businessinvoice.AssetId = Convert.ToInt32(dr[indexAssetId]); } int indexIntegerAmount = dr.GetOrdinal("IntegerAmount"); if (dr["IntegerAmount"] != DBNull.Value) { businessinvoice.IntegerAmount = Convert.ToDecimal(dr[indexIntegerAmount]); } int indexNetAmount = dr.GetOrdinal("NetAmount"); if (dr["NetAmount"] != DBNull.Value) { businessinvoice.NetAmount = Convert.ToDecimal(dr[indexNetAmount]); } int indexUnitPrice = dr.GetOrdinal("UnitPrice"); if (dr["UnitPrice"] != DBNull.Value) { businessinvoice.UnitPrice = Convert.ToDecimal(dr[indexUnitPrice]); } int indexMUId = dr.GetOrdinal("MUId"); if (dr["MUId"] != DBNull.Value) { businessinvoice.MUId = Convert.ToInt32(dr[indexMUId]); } int indexMarginRatio = dr.GetOrdinal("MarginRatio"); if (dr["MarginRatio"] != DBNull.Value) { businessinvoice.MarginRatio = Convert.ToDecimal(dr[indexMarginRatio]); } int indexVATRatio = dr.GetOrdinal("VATRatio"); if (dr["VATRatio"] != DBNull.Value) { businessinvoice.VATRatio = Convert.ToDecimal(dr[indexVATRatio]); } int indexVATBala = dr.GetOrdinal("VATBala"); if (dr["VATBala"] != DBNull.Value) { businessinvoice.VATBala = Convert.ToDecimal(dr[indexVATBala]); } return businessinvoice; }
public ResultModel Load(UserModel user, int refInvoiceId) { ResultModel result = new ResultModel(); try { string cmdText = string.Format("select * from dbo.Inv_BusinessInvoice where RefInvoiceId ={0}", refInvoiceId); DataTable dt = SqlHelper.ExecuteDataTable(ConnectString, cmdText, null, CommandType.Text); List<BusinessInvoice> businessInvoices = new List<BusinessInvoice>(); foreach (DataRow dr in dt.Rows) { BusinessInvoice businessinvoice = new BusinessInvoice(); businessinvoice.BusinessInvoiceId = Convert.ToInt32(dr["BusinessInvoiceId"]); if (dr["InvoiceId"] != DBNull.Value) { businessinvoice.InvoiceId = Convert.ToInt32(dr["InvoiceId"]); } if (dr["RefInvoiceId"] != DBNull.Value) { businessinvoice.RefInvoiceId = Convert.ToInt32(dr["RefInvoiceId"]); } if (dr["ContractId"] != DBNull.Value) { businessinvoice.ContractId = Convert.ToInt32(dr["ContractId"]); } if (dr["SubContractId"] != DBNull.Value) { businessinvoice.SubContractId = Convert.ToInt32(dr["SubContractId"]); } if (dr["AssetId"] != DBNull.Value) { businessinvoice.AssetId = Convert.ToInt32(dr["AssetId"]); } if (dr["IntegerAmount"] != DBNull.Value) { businessinvoice.IntegerAmount = Convert.ToDecimal(dr["IntegerAmount"]); } if (dr["NetAmount"] != DBNull.Value) { businessinvoice.NetAmount = Convert.ToDecimal(dr["NetAmount"]); } if (dr["UnitPrice"] != DBNull.Value) { businessinvoice.UnitPrice = Convert.ToDecimal(dr["UnitPrice"]); } if (dr["MUId"] != DBNull.Value) { businessinvoice.MUId = Convert.ToInt32(dr["MUId"]); } if (dr["MarginRatio"] != DBNull.Value) { businessinvoice.MarginRatio = Convert.ToDecimal(dr["MarginRatio"]); } if (dr["VATRatio"] != DBNull.Value) { businessinvoice.VATRatio = Convert.ToDecimal(dr["VATRatio"]); } if (dr["VATBala"] != DBNull.Value) { businessinvoice.VATBala = Convert.ToDecimal(dr["VATBala"]); } businessInvoices.Add(businessinvoice); } result.AffectCount = dt.Rows.Count; result.Message = "获取列表成功"; result.ResultStatus = 0; result.ReturnValue = businessInvoices; } catch (Exception ex) { result.Message = ex.Message; } return result; }
public ResultModel CreateReplaceFinal(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice invoiceBusiness, List<BusinessInvoiceDetail> details) { ResultModel result = new ResultModel(); StockLogDAL stockLogDAL = new StockLogDAL(); foreach (BusinessInvoiceDetail detail in details) { result = stockLogDAL.Get(user, detail.StockLogId); if (result.ResultStatus != 0) return result; StockLog stockLog = result.ReturnValue as StockLog; if (stockLog == null || stockLog.StockLogId <= 0) { result.ResultStatus = -1; result.Message = "当前合约不存在该笔库存"; return result; } detail.IntegerAmount = stockLog.GrossAmount; } decimal sumNetAmount = details.Sum(temp => temp.NetAmount); if (sumNetAmount != invoiceBusiness.NetAmount) { result.ResultStatus = -1; result.Message = "明细净重之和与总净重不相等"; return result; } decimal sumBala = details.Sum(temp => temp.Bala); if (sumBala != invoice.InvoiceBala) { result.ResultStatus = -1; result.Message = "明细金额之和与总金额不相等"; return result; } decimal sumUnitBala = Math.Round(details.Sum(temp => temp.UnitPrice * temp.NetAmount),2,MidpointRounding.AwayFromZero); decimal avgPrice = Math.Round(sumUnitBala / sumNetAmount, 4, MidpointRounding.AwayFromZero); invoiceBusiness.UnitPrice = avgPrice; invoiceBusiness.IntegerAmount = details.Sum(temp => temp.IntegerAmount); result = this.CreateBusinessInvoice(user, invoice, invoiceBusiness, details, InvoiceTypeEnum.ReplaceFinalInvoice); return result; }
public ResultModel CreateSuppleFinal(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice invoiceBusiness, List<BusinessInvoiceDetail> details) { return this.CreateBusinessInvoice(user, invoice, invoiceBusiness, details, InvoiceTypeEnum.SuppleFinalInvoice); }
public ResultModel CreateDirect(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice invoiceBusiness, List<BusinessInvoiceDetail> details) { ResultModel result = new ResultModel(); ContractSubDAL subDAL = new ContractSubDAL(); result = subDAL.Get(user, invoiceBusiness.SubContractId); if(result.ResultStatus!=0) return result; ContractSub sub = result.ReturnValue as ContractSub; if (sub == null || sub.SubId <= 0) { result.ResultStatus = -1; result.Message = "子合约不存在"; return result; } StockLogDAL stockLogDAL = new StockLogDAL(); //明细表数据:毛重、金额计算 foreach (BusinessInvoiceDetail detail in details) { detail.Bala = Math.Round(detail.NetAmount * detail.UnitPrice, 2, MidpointRounding.AwayFromZero); if (sub.TradeBorder == (int)TradeBorderEnum.内贸) { //内贸毛重==净重 detail.IntegerAmount = detail.NetAmount; } else { //整笔开票情况下,外贸毛重等于库存流水毛重;分笔开票情况下,等于净重。 result = stockLogDAL.Get(user, detail.StockLogId); if (result.ResultStatus != 0) return result; StockLog stockLog = result.ReturnValue as StockLog; if (stockLog == null || stockLog.StockLogId <= 0) { result.ResultStatus = -1; result.Message = "当前合约不存在该笔库存"; return result; } if (stockLog.NetAmount == detail.NetAmount) { detail.IntegerAmount = stockLog.GrossAmount; } else { detail.IntegerAmount = detail.NetAmount; } } } //主表数据:毛重、净重、均价、总额计算 decimal sumGrossAmount = details.Sum(temp => temp.IntegerAmount); invoiceBusiness.IntegerAmount = sumGrossAmount; decimal sumNetAmount = details.Sum(temp => temp.NetAmount); if (sumNetAmount != invoiceBusiness.NetAmount) { result.ResultStatus = -1; result.Message = "明细净重之和与总净重不相等"; return result; } decimal sumBala = details.Sum(temp => temp.Bala); if (Math.Abs(sumBala - invoice.InvoiceBala) >= 1) { result.ResultStatus = -1; result.Message = "明细金额之和与总金额不相等"; return result; } decimal avgPrice = Math.Round(sumBala / sumNetAmount, 4, MidpointRounding.AwayFromZero); if (avgPrice != invoiceBusiness.UnitPrice) { result.ResultStatus = -1; result.Message = "计算均价错误"; return result; } //验证是否已开临票 //result = this.businessinvoiceDAL.LoadBySubId(user, invoiceBusiness.SubContractId, InvoiceTypeEnum.ProvisionalInvoice); //if (result.ResultStatus != 0) // return result; //List<Model.BusinessInvoice> proInvoices = result.ReturnValue as List<Model.BusinessInvoice>; //if (proInvoices == null) //{ // result.ResultStatus = -1; // result.Message = "验证是否拥有临票失败"; // return result; //} //if (proInvoices.Count > 0) //{ // result.ResultStatus = -1; // result.Message = "当前合约已拥有临票,直接终票失败"; // return result; //} result = this.CreateBusinessInvoice(user, invoice, invoiceBusiness, details, InvoiceTypeEnum.DirectFinalInvoice); return result; }
public ResultModel CreateProvisional(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice invoiceBusiness, List<BusinessInvoiceDetail> details) { ResultModel result = new ResultModel(); StockLogDAL stockLogDAL = new StockLogDAL(); foreach (BusinessInvoiceDetail detail in details) { detail.UnitPrice = invoiceBusiness.UnitPrice; result = stockLogDAL.Get(user, detail.StockLogId); if (result.ResultStatus != 0) return result; StockLog stockLog = result.ReturnValue as StockLog; if (stockLog == null || stockLog.StockLogId <= 0) { result.ResultStatus = -1; result.Message = "当前合约不存在该笔库存"; return result; } detail.IntegerAmount = stockLog.GrossAmount; } invoiceBusiness.IntegerAmount = details.Sum(temp => temp.IntegerAmount); //验证是否已开直接终票 result = this.businessinvoiceDAL.LoadBySubId(user, invoiceBusiness.SubContractId, InvoiceTypeEnum.DirectFinalInvoice); if (result.ResultStatus != 0) return result; List<BusinessInvoice> dirInvoices = result.ReturnValue as List<BusinessInvoice>; if (dirInvoices == null) { result.ResultStatus = -1; result.Message = "验证是否拥有直接终票失败"; return result; } if (dirInvoices.Count > 0) { result.ResultStatus = -1; result.Message = "当前合约已拥有直接终票,临票失败"; return result; } result = this.CreateBusinessInvoice(user, invoice, invoiceBusiness, details, InvoiceTypeEnum.ProvisionalInvoice); return result; }
public ResultModel CreateBusinessInvoice(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice invoiceBusiness, List<BusinessInvoiceDetail> details, InvoiceTypeEnum invoiceType) { ResultModel result = new ResultModel(); try { BusinessInvoiceDAL businessInvoiceDAL = new BusinessInvoiceDAL(); InvoiceDAL invoiceDAL = new InvoiceDAL(); BusinessInvoiceDetailDAL detailDAL = new BusinessInvoiceDetailDAL(); ContractSubDAL subDAL = new ContractSubDAL(); StockReceiptDetailDAL stockReceiptDetailDAL = new StockReceiptDetailDAL(); SubDetailDAL subDetailDAL = new SubDetailDAL(); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) { //验证子合约 result = subDAL.Get(user, invoiceBusiness.SubContractId); if (result.ResultStatus != 0) return result; ContractSub sub = result.ReturnValue as ContractSub; if (sub == null || sub.SubId <= 0) { result.ResultStatus = -1; result.Message = "子合约不存在"; return result; } if (sub.SubStatus != StatusEnum.已生效) { result.ResultStatus = -1; result.Message = "子合约非已生效状态,不能新增临票"; return result; } //获取子合约明细 result = subDetailDAL.GetDetailBySubId(user, sub.SubId); if (result.ResultStatus != 0) return result; SubDetail subDetail = result.ReturnValue as SubDetail; if (subDetail == null || subDetail.SubDetailId <= 0) { result.ResultStatus = -1; result.Message = "子合约明细获取失败"; return result; } //获取子合约下所有 result = this.businessinvoiceDAL.LoadBySubId(user, invoiceBusiness.SubContractId, invoiceType); if (result.ResultStatus != 0) return result; List<BusinessInvoice> bis = result.ReturnValue as List<BusinessInvoice>; decimal sumNetAmount = bis.Sum(temp => temp.NetAmount); decimal maxNetAmount = sub.SignAmount * (1 + subDetail.MoreOrLess); //if (maxNetAmount < sumNetAmount + invoiceBusiness.NetAmount) //{ // result.ResultStatus = -1; // result.Message = "开票重量超额"; // return result; //} //新增发票主表 int invoiceId = 0; invoice.InvoiceType = (int)invoiceType; invoice.InvoiceStatus = StatusEnum.已录入; Corporation outCorp = UserProvider.Corporations.FirstOrDefault(temp => temp.CorpId == invoice.OutCorpId); if (outCorp == null || outCorp.CorpId <= 0) { result.ResultStatus = -1; result.Message = "开票公司信息错误"; return result; } invoice.OutCorpName = outCorp.CorpName; Corporation inCorp = UserProvider.Corporations.FirstOrDefault(temp => temp.CorpId == invoice.InCorpId); if (inCorp == null || inCorp.CorpId <= 0) { result.ResultStatus = -1; result.Message = "收票公司信息错误"; return result; } invoice.InCorpName = inCorp.CorpName; result = invoiceDAL.Insert(user, invoice); if (result.ResultStatus != 0) return result; if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out invoiceId)) { result.ResultStatus = -1; result.Message = "发票添加失败"; return result; } //新增业务发票表 int businessInvoiceId = 0; invoiceBusiness.InvoiceId = invoiceId; result = businessInvoiceDAL.Insert(user, invoiceBusiness); if (result.ResultStatus != 0) return result; if (result.ReturnValue == null || !int.TryParse(result.ReturnValue.ToString(), out businessInvoiceId)) { result.ResultStatus = -1; result.Message = "新增发票失败"; return result; } //新增业务发票明细 StockLogDAL stockLogDAL = new StockLogDAL(); StockDAL stockDAL = new StockDAL(); foreach (BusinessInvoiceDetail detail in details) { if (detail.NetAmount != 0 && detail.StockId > 0) { //验证库存 result = stockDAL.Get(user, detail.StockId); if (result.ResultStatus != 0) return result; Stock stock = result.ReturnValue as Stock; if (stock == null || stock.StockId <= 0) { result.ResultStatus = -1; result.Message = "发票库存获取失败"; return result; } //验证库存流水 result = stockLogDAL.Get(user, detail.StockLogId); if (result.ResultStatus != 0) return result; StockLog stockLog = result.ReturnValue as StockLog; if (stockLog == null || stockLog.StockLogId <= 0) { result.ResultStatus = -1; result.Message = "新增发票流水获取失败"; return result; } //基本验证 if (stockLog.StockId != stock.StockId) { result.ResultStatus = -1; result.Message = "库存与库存流水不匹配"; return result; } //验证流水合约与发票合约是否相同 if (stockLog.SubContractId != invoiceBusiness.SubContractId) { result.ResultStatus = -1; result.Message = "合约与库存流水不匹配"; return result; } detail.DetailStatus = StatusEnum.已生效; detail.InvoiceId = invoiceId; detail.BusinessInvoiceId = businessInvoiceId; detail.StockId = stockLog.StockId; detail.StockLogId = stockLog.StockLogId; if (invoice.InvoiceType == (int)InvoiceTypeEnum.SuppleFinalInvoice) { //获取当前流水回执信息 result = stockReceiptDetailDAL.LoadByStockLogId(user, stockLog.StockLogId); List<StockReceiptDetail> stockReceiptDetails = result.ReturnValue as List<StockReceiptDetail>; if (stockReceiptDetails == null) { result.ResultStatus = -1; result.Message = "当前流水未回执,不能补零"; return result; } decimal sumQtyMiss = stockReceiptDetails.Sum(temp => temp.QtyMiss); detail.IntegerAmount = sumQtyMiss; detail.NetAmount = sumQtyMiss; } //else //{ // detail.IntegerAmount = stockLog.GrossAmount; // detail.NetAmount = stockLog.NetAmount; //} result = detailDAL.Insert(user, detail); if (result.ResultStatus != 0) return result; } } invoice.InvoiceId = invoiceId; if (result.ResultStatus == 0) result.ReturnValue = invoice; scope.Complete(); } } catch (Exception ex) { result.ResultStatus = -1; result.Message = ex.Message; } return result; }
public ResultModel UpdateSuppleFinal(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice replaceBusiness, List<BusinessInvoiceDetail> details) { return this.UpdateBusinessInvoice(user, invoice, replaceBusiness, details); }
public ResultModel UpdateProvisional(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice provisionalInvoice, List<BusinessInvoiceDetail> details) { ResultModel result = new ResultModel(); StockLogDAL stockLogDAL = new StockLogDAL(); foreach (BusinessInvoiceDetail detail in details) { detail.UnitPrice = provisionalInvoice.UnitPrice; result = stockLogDAL.Get(user, detail.StockLogId); if (result.ResultStatus != 0) return result; StockLog stockLog = result.ReturnValue as StockLog; if (stockLog == null || stockLog.StockLogId <= 0) { result.ResultStatus = -1; result.Message = "当前合约不存在该笔库存"; return result; } detail.IntegerAmount = stockLog.GrossAmount; } provisionalInvoice.IntegerAmount = details.Sum(temp => temp.IntegerAmount); result = this.UpdateBusinessInvoice(user, invoice, provisionalInvoice, details); return result; }
public ResultModel UpdateDirect(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice invoiceBusiness, List<BusinessInvoiceDetail> details) { ResultModel result = new ResultModel(); ContractSubDAL subDAL = new ContractSubDAL(); result = subDAL.Get(user, invoiceBusiness.SubContractId); if (result.ResultStatus != 0) return result; ContractSub sub = result.ReturnValue as ContractSub; if (sub == null || sub.SubId <= 0) { result.ResultStatus = -1; result.Message = "子合约不存在"; return result; } StockLogDAL stockLogDAL = new StockLogDAL(); //明细表数据:毛重、金额计算 foreach (BusinessInvoiceDetail detail in details) { detail.Bala = Math.Round(detail.NetAmount * detail.UnitPrice, 2, MidpointRounding.AwayFromZero); if (sub.TradeBorder == (int)TradeBorderEnum.内贸) { //内贸毛重==净重 detail.IntegerAmount = detail.NetAmount; } else { //整笔开票情况下,外贸毛重等于库存流水毛重;分笔开票情况下,等于净重。 result = stockLogDAL.Get(user, detail.StockLogId); if (result.ResultStatus != 0) return result; StockLog stockLog = result.ReturnValue as StockLog; if (stockLog == null || stockLog.StockLogId <= 0) { result.ResultStatus = -1; result.Message = "当前合约不存在该笔库存"; return result; } if (stockLog.NetAmount == detail.NetAmount) { detail.IntegerAmount = stockLog.GrossAmount; } else { detail.IntegerAmount = detail.NetAmount; } } } //主表数据:毛重、净重、均价、总额计算 decimal sumGrossAmount = details.Sum(temp => temp.IntegerAmount); invoiceBusiness.IntegerAmount = sumGrossAmount; decimal sumNetAmount = details.Sum(temp => temp.NetAmount); if (sumNetAmount != invoiceBusiness.NetAmount) { result.ResultStatus = -1; result.Message = "明细净重之和与总净重不相等"; return result; } decimal sumBala = details.Sum(temp => temp.Bala); if (Math.Abs(sumBala - invoice.InvoiceBala) >=1) { result.ResultStatus = -1; result.Message = "明细金额之和与总金额不相等"; return result; } decimal avgPrice = Math.Round(sumBala / sumNetAmount, 4, MidpointRounding.AwayFromZero); if (avgPrice != invoiceBusiness.UnitPrice) { result.ResultStatus = -1; result.Message = "计算均价错误"; return result; } return this.UpdateBusinessInvoice(user, invoice, invoiceBusiness, details); //ResultModel result = new ResultModel(); //try //{ // DAL.BusinessInvoiceDAL businessInvoiceDAL = new BusinessInvoiceDAL(); // NFMT.Operate.DAL.InvoiceDAL invoiceDAL = new Operate.DAL.InvoiceDAL(); // DAL.BusinessInvoiceDetailDAL detailDAL = new BusinessInvoiceDetailDAL(); // using (System.Transactions.TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) // { // //验证发票 // if (invoiceBusiness.BusinessInvoiceId <= 0) // { // result.Message = "直发票不存在"; // return result; // } // result = businessinvoiceDAL.Get(user, invoiceBusiness.BusinessInvoiceId); // if (result.ResultStatus != 0) // return result; // NFMT.Invoice.Model.BusinessInvoice resultBusinessInvoice = result.ReturnValue as NFMT.Invoice.Model.BusinessInvoice; // if (resultBusinessInvoice == null || resultBusinessInvoice.BusinessInvoiceId <= 0) // { // result.ResultStatus = -1; // result.Message = "发票不存在"; // return result; // } // //更新发票 // resultBusinessInvoice.IntegerAmount = invoiceBusiness.IntegerAmount; // resultBusinessInvoice.NetAmount = invoiceBusiness.NetAmount; // resultBusinessInvoice.VATRatio = invoiceBusiness.VATRatio; // resultBusinessInvoice.VATBala = invoiceBusiness.VATBala; // resultBusinessInvoice.UnitPrice = invoiceBusiness.UnitPrice; // resultBusinessInvoice.Status = StatusEnum.已录入; // result = businessinvoiceDAL.Update(user, resultBusinessInvoice); // if (result.ResultStatus != 0) // return result; // //获取发票主表 // result = invoiceDAL.Get(user, resultBusinessInvoice.InvoiceId); // if (result.ResultStatus != 0) // return result; // NFMT.Operate.Model.Invoice resultInvoice = result.ReturnValue as NFMT.Operate.Model.Invoice; // if (resultInvoice == null || resultInvoice.InvoiceId <= 0) // { // result.ResultStatus = -1; // result.Message = "发票不存在"; // return result; // } // //更新发票 // resultInvoice.InvoiceDate = invoice.InvoiceDate; // resultInvoice.InvoiceName = invoice.InvoiceName; // resultInvoice.InvoiceBala = invoice.InvoiceBala; // resultInvoice.OutCorpId = invoice.OutCorpId; // resultInvoice.InCorpId = invoice.InCorpId; // resultInvoice.Memo = invoice.Memo; // result = invoiceDAL.Update(user, resultInvoice); // if (result.ResultStatus != 0) // return result; // //获取发票明细 // result = detailDAL.Load(user, resultBusinessInvoice.BusinessInvoiceId); // if (result.ResultStatus != 0) // return result; // List<Model.BusinessInvoiceDetail> resultDetails = result.ReturnValue as List<Model.BusinessInvoiceDetail>; // if (resultDetails == null) // { // result.ResultStatus = -1; // result.Message = "获取发票明细失败"; // return result; // } // //作废发票明细 // foreach (Model.BusinessInvoiceDetail detail in resultDetails) // { // if (detail.DetailStatus == StatusEnum.已生效) // detail.DetailStatus = StatusEnum.已录入; // result = detailDAL.Invalid(user, detail); // if (result.ResultStatus != 0) // return result; // } // //新增发票明细 // foreach (Model.BusinessInvoiceDetail detail in details) // { // if (detail.NetAmount > 0 && detail.Bala > 0 && detail.StockId > 0) // { // detail.DetailStatus = StatusEnum.已生效; // detail.InvoiceId = invoice.InvoiceId; // detail.BusinessInvoiceId = invoiceBusiness.BusinessInvoiceId; // result = detailDAL.Insert(user, detail); // if (result.ResultStatus != 0) // return result; // } // } // scope.Complete(); // } //} //catch (Exception ex) //{ // result.ResultStatus = -1; // result.Message = ex.Message; //} //return result; }
public ResultModel UpdateBusinessInvoice(UserModel user, Operate.Model.Invoice invoice, BusinessInvoice invoiceBusiness, List<BusinessInvoiceDetail> details) { ResultModel result = new ResultModel(); try { BusinessInvoiceDAL businessInvoiceDAL = new BusinessInvoiceDAL(); InvoiceDAL invoiceDAL = new InvoiceDAL(); BusinessInvoiceDetailDAL detailDAL = new BusinessInvoiceDetailDAL(); StockReceiptDetailDAL stockReceiptDetailDAL = new StockReceiptDetailDAL(); using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required)) { //验证发票 if (invoiceBusiness.BusinessInvoiceId <= 0) { result.Message = "发票不存在"; return result; } result = businessinvoiceDAL.Get(user, invoiceBusiness.BusinessInvoiceId); if (result.ResultStatus != 0) return result; BusinessInvoice resultBusinessInvoice = result.ReturnValue as BusinessInvoice; if (resultBusinessInvoice == null || resultBusinessInvoice.BusinessInvoiceId <= 0) { result.ResultStatus = -1; result.Message = "发票不存在"; return result; } //更新发票 resultBusinessInvoice.IntegerAmount = invoiceBusiness.IntegerAmount; resultBusinessInvoice.NetAmount = invoiceBusiness.NetAmount; resultBusinessInvoice.VATRatio = invoiceBusiness.VATRatio; resultBusinessInvoice.VATBala = invoiceBusiness.VATBala; resultBusinessInvoice.UnitPrice = invoiceBusiness.UnitPrice; resultBusinessInvoice.Status = StatusEnum.已录入; result = businessinvoiceDAL.Update(user, resultBusinessInvoice); if (result.ResultStatus != 0) return result; //获取发票主表 result = invoiceDAL.Get(user, resultBusinessInvoice.InvoiceId); if (result.ResultStatus != 0) return result; Operate.Model.Invoice resultInvoice = result.ReturnValue as Operate.Model.Invoice; if (resultInvoice == null || resultInvoice.InvoiceId <= 0) { result.ResultStatus = -1; result.Message = "发票不存在"; return result; } //更新发票 resultInvoice.InvoiceDate = invoice.InvoiceDate; resultInvoice.InvoiceName = invoice.InvoiceName; resultInvoice.InvoiceBala = invoice.InvoiceBala; resultInvoice.OutCorpId = invoice.OutCorpId; resultInvoice.InCorpId = invoice.InCorpId; resultInvoice.Memo = invoice.Memo; result = invoiceDAL.Update(user, resultInvoice); if (result.ResultStatus != 0) return result; //获取发票明细 result = detailDAL.Load(user, resultBusinessInvoice.BusinessInvoiceId); if (result.ResultStatus != 0) return result; List<BusinessInvoiceDetail> resultDetails = result.ReturnValue as List<BusinessInvoiceDetail>; if (resultDetails == null) { result.ResultStatus = -1; result.Message = "获取发票明细失败"; return result; } //作废发票明细 foreach (BusinessInvoiceDetail detail in resultDetails) { if (detail.DetailStatus == StatusEnum.已生效) detail.DetailStatus = StatusEnum.已录入; result = detailDAL.Invalid(user, detail); if (result.ResultStatus != 0) return result; } //新增发票明细 StockLogDAL stockLogDAL = new StockLogDAL(); StockDAL stockDAL = new StockDAL(); foreach (BusinessInvoiceDetail detail in details) { if (detail.NetAmount != 0 && detail.StockId > 0) { //验证库存 result = stockDAL.Get(user, detail.StockId); if (result.ResultStatus != 0) return result; Stock stock = result.ReturnValue as Stock; if (stock == null || stock.StockId <= 0) { result.ResultStatus = -1; result.Message = "发票库存获取失败"; return result; } //验证库存流水 result = stockLogDAL.Get(user, detail.StockLogId); if (result.ResultStatus != 0) return result; StockLog stockLog = result.ReturnValue as StockLog; if (stockLog == null || stockLog.StockLogId <= 0) { result.ResultStatus = -1; result.Message = "新增发票流水获取失败"; return result; } //基本验证 if (stockLog.StockId != stock.StockId) { result.ResultStatus = -1; result.Message = "库存与库存流水不匹配"; return result; } //验证流水合约与发票合约是否相同 if (stockLog.SubContractId != resultBusinessInvoice.SubContractId) { result.ResultStatus = -1; result.Message = "合约与库存流水不匹配"; return result; } detail.DetailStatus = StatusEnum.已生效; detail.InvoiceId = resultInvoice.InvoiceId; detail.BusinessInvoiceId = resultBusinessInvoice.BusinessInvoiceId; detail.StockId = stockLog.StockId; detail.StockLogId = stockLog.StockLogId; if (resultInvoice.InvoiceType == (int)InvoiceTypeEnum.SuppleFinalInvoice) { //获取当前流水回执信息 result = stockReceiptDetailDAL.LoadByStockLogId(user, stockLog.StockLogId); List<StockReceiptDetail> stockReceiptDetails = result.ReturnValue as List<StockReceiptDetail>; if (stockReceiptDetails == null) { result.ResultStatus = -1; result.Message = "当前流水未回执,不能补零"; return result; } decimal sumQtyMiss = stockReceiptDetails.Sum(temp => temp.QtyMiss); detail.IntegerAmount = sumQtyMiss; detail.NetAmount = sumQtyMiss; } else { detail.IntegerAmount = stockLog.GrossAmount; detail.NetAmount = stockLog.NetAmount; } result = detailDAL.Insert(user, detail); if (result.ResultStatus != 0) return result; } } if (result.ResultStatus == 0) result.ReturnValue = resultInvoice; scope.Complete(); } } catch (Exception ex) { result.ResultStatus = -1; result.Message = ex.Message; } return result; }