diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/ADJ_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/ADJ_SERVICE.cs index 450d0719..21ff965b 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/ADJ_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Bases/ADJ_SERVICE.cs @@ -178,7 +178,7 @@ public class ADJ_SERVICE : BASE_SERVICE /// [HttpPost] [DisableRequestSizeLimit] - public async Task CheckImport(List p_list) + public async Task CheckImport(List p_list) { if (p_list.Count == 0) { @@ -283,8 +283,7 @@ public class ADJ_SERVICE : BASE_SERVICE } if (errorList.Count > 0) { - return new JsonResult(new { Code = ApplicationConsts.ImportFailCode, fileName = await ExportErrorReportAsync(errorList) }); - + return await ExportErrorReportAsync(errorList) ; } List ls = new List(); if (flag == 1) @@ -333,7 +332,7 @@ public class ADJ_SERVICE : BASE_SERVICE ls = inner.ToList(); } - return new JsonResult(new { Code = 200, data =ls }); ; + return "OK" ; } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_BA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_BA_SERVICE.cs index 5b26539f..a0f52559 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_BA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_BA_SERVICE.cs @@ -1,4 +1,5 @@ +using DocumentFormat.OpenXml.Drawing.Charts; using DocumentFormat.OpenXml.Spreadsheet; using EFCore.BulkExtensions; using Microsoft.AspNetCore.Authorization; @@ -41,7 +42,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ private readonly INormalEfCoreRepository _priceRepository; - + private readonly ADJ_SERVICE _adjservice; public BBAC_BA_SERVICE(IExcelImportAppService excelImportService, @@ -59,8 +60,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ INV_MNG invMng, TaskJobService service, BaseDomainService baseservice, - INormalEfCoreRepository priceRepository - + INormalEfCoreRepository priceRepository, + ADJ_SERVICE adjservice + ) : base( excelImportService, @@ -79,6 +81,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ baseservice) { _priceRepository = priceRepository; + _adjservice = adjservice; } @@ -347,10 +350,16 @@ namespace Win.Sfs.SettleAccount.Entities.BQ /// /// /// - public virtual async Task> ReissueInvoiceList(List p_list) + public virtual async Task ReissueInvoiceList(List p_list) { - var invBilllist = new List(); + var result =await _adjservice.CheckImport(p_list); + if(result != "OK") + { + return new JsonResult(new { Code = 400, Message = "请下载错误模版", fileName =result }); + } + + var invBilllist = new List(); var adjlist=ObjectMapper.Map, List>(p_list); if (adjlist == null && adjlist.Count==0) { @@ -372,82 +381,206 @@ namespace Win.Sfs.SettleAccount.Entities.BQ throw new UserFriendlyException($"选择发票:{invbillnum}对应的可结算单不在请检查!"); } version = settle.Version; - if (inv != null) + if (inv != null) + { + if (inv.InvoiceState == InvoiceBillState.报废) { - if (inv.InvoiceState == InvoiceBillState.报废) + throw new UserFriendlyException($"选择发票:{invbillnum}状态为报废状态不能重开!"); + } + if (inv.State == SettleBillState.商务已审核 || inv.State == SettleBillState.已开票) + { + throw new UserFriendlyException($"选择发票:{invbillnum}状态在财务审核后可以报废重开,之前请退回重开!"); + } + + var bbaclist = await _bbacMng.GetContainsAsync(inv.InvbillNum);//结算分组对应结算零件 + //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 + if (adjlist != null && adjlist.Count() > 0) + { + foreach (var itm in adjlist) { - throw new UserFriendlyException($"选择发票:{invbillnum}状态为报废状态不能重开!"); + bbaclist.Add(new BBAC_CAN_SA_DETAIL( + guid: itm.Id, + keyCode: itm.KeyCode, + version: itm.Version, + billNum: itm.InvGroupNum, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + category: itm.BusinessType, + isReturn: itm.Qty > 0 ? false : true, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: itm.InvGroupNum, + contactid: itm.Extend1,//生产号 + invbillnum: string.Empty, + partcode: itm.PartCode + )); } - if (inv.State == SettleBillState.商务已审核 || inv.State == SettleBillState.已开票) + } + var entitys = bbaclist;//合并库存调整单和就发票可结算明细数据 + var gNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); + var priceList = _priceRepository.ToList();//价格单 + + var dto1s = ObjectMapper.Map, List>(entitys); + var q = from d in dto1s + join p in priceList on d.LU equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == inv.Site//客户零件号 + select new TEMP_CAN_SA_DETAIL + { + Id = d.Id, + SettleBillNum = d.SettleBillNum, + Site = d.Site, + Version = d.Version, + Price = p.Price, + BillNum = d.BillNum, + SettleDate = d.SettleDate, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + MaterialDesc = d.MaterialDesc, + PN = d.PN, + Qty = d.Qty, + GroupNum = d.GroupNum, + Amt = Math.Round(d.Qty * p.Price, 2), + ContractDocID = d.ContractDocID, + BeginDate = p.BeginTime, + EndDate = p.EndTime, + PartCode = d.PartCode + + }; + var dtos = q.ToList(); + if (dtos != null && dtos.Count > 0) + { + if (invbillnum.Substring(0, 3) == "INV")//一次开票重开 { - throw new UserFriendlyException($"选择发票:{invbillnum}状态在财务审核后可以报废重开,之前请退回重开!"); + var entities = await ReissueFirstInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + var ls = ObjectMapper.Map, List>(entities); + invBilllist.AddRange(ls); + } - - var bbaclist = await _bbacMng.GetContainsAsync(inv.InvbillNum);//结算分组对应结算零件 - //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 - if (adjlist != null && adjlist.Count() > 0) + else//二次开票 { - foreach (var itm in adjlist) - { - bbaclist.Add(new BBAC_CAN_SA_DETAIL( - guid: itm.Id, - keyCode: itm.KeyCode, - version: itm.Version, - billNum: itm.InvGroupNum, - settleBillNum: itm.SettleBillNum, - lU: itm.LU, - pN: itm.PN, - site: itm.Site, - qty: itm.Qty, - price: itm.Price, - category: itm.BusinessType, - isReturn: itm.Qty > 0 ? false : true, - settleDate: itm.SettleDate, - groupNum: itm.GroupNum, - invGroupNum: itm.InvGroupNum, - contactid: itm.Extend1,//生产号 - invbillnum: string.Empty, - partcode: itm.PartCode - )); - } + var entities = await ReissueSecInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + var ls = ObjectMapper.Map, List>(entities); + invBilllist.AddRange(ls); + } - var entitys = bbaclist;//合并库存调整单和就发票可结算明细数据 - var gNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); - var priceList = _priceRepository.ToList();//价格单 - //var errorList = await CheckInvoiceGenerationRules(entitys, priceList, inv.BusinessType); - //if (errorList.Count() > 0) - //{ - // return await ExportErrorReportAsync(errorList); - //} - var dto1s = ObjectMapper.Map, List>(entitys); - var q = from d in dto1s - join p in priceList on d.LU equals p.LU - where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == inv.Site//客户零件号 - select new TEMP_CAN_SA_DETAIL - { - Id = d.Id, - SettleBillNum = d.SettleBillNum, - Site = d.Site, - Version = d.Version, - Price = p.Price, - BillNum = d.BillNum, - SettleDate = d.SettleDate, - InvGroupNum = d.InvGroupNum, - LU = d.LU, - MaterialDesc = d.MaterialDesc, - PN = d.PN, - Qty = d.Qty, - GroupNum = d.GroupNum, - Amt = Math.Round(d.Qty * p.Price, 2), - ContractDocID = d.ContractDocID, - BeginDate = p.BeginTime, - EndDate = p.EndTime, - PartCode = d.PartCode - }; - var dtos = q.ToList(); - if (dtos != null && dtos.Count > 0) + } + else + { + throw new UserFriendlyException($"不存发票号为:{invbillnum}发票"); + } + } + var invlist=invBilllist.OrderBy(p => p.PartCode).ToList(); + return new JsonResult(new { Code = 200, Data= invlist }); + + } + + [HttpPost] + [UnitOfWork(false)] + /// + /// 发票重开列表 + /// + /// + /// + public virtual async Task ReissueInvoiceListExt(List p_list) + { + + var invBilllist = new List(); + var adjlist = ObjectMapper.Map, List>(p_list); + if (adjlist == null && adjlist.Count == 0) + { + throw new UserFriendlyException($"调整表无数据!"); + } + var first = p_list.FirstOrDefault(); + var invbillnum = first.InvBillNum; + //var mappingList = await GetMapGroupAsync(invbillnum);//发票对应结算分组 + //if (mappingList != null && mappingList.Count() > 0) + //{ + var version = int.Parse(DateTime.Now.ToString("yyyymm")); + //var gList = mappingList.Select(p => p.SettleGroupNum).ToList();//获取发票所有结算分组 + var inv = await GetInvoiceGroupByInvBillNum(invbillnum); + + var settle = await _bbacMng.GetMainAsync(inv.InvGroupNum); + + if (settle == null) + { + throw new UserFriendlyException($"选择发票:{invbillnum}对应的可结算单不在请检查!"); + } + version = settle.Version; + if (inv != null) + { + if (inv.InvoiceState == InvoiceBillState.报废) + { + throw new UserFriendlyException($"选择发票:{invbillnum}状态为报废状态不能重开!"); + } + if (inv.State == SettleBillState.商务已审核 || inv.State == SettleBillState.已开票) + { + throw new UserFriendlyException($"选择发票:{invbillnum}状态在财务审核后可以报废重开,之前请退回重开!"); + } + var bbaclist = await _bbacMng.GetContainsAsync(inv.InvbillNum);//结算分组对应结算零件 //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 + if (adjlist != null && adjlist.Count() > 0) + { + foreach (var itm in adjlist) { + bbaclist.Add(new BBAC_CAN_SA_DETAIL( + guid: itm.Id, + keyCode: itm.KeyCode, + version: itm.Version, + billNum: itm.InvGroupNum, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + category: itm.BusinessType, + isReturn: itm.Qty > 0 ? false : true, + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: itm.InvGroupNum, + contactid: itm.Extend1,//生产号 + invbillnum: string.Empty, + partcode: itm.PartCode + )); + } + } + var entitys = bbaclist;//合并库存调整单和就发票可结算明细数据 + var gNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); + var priceList = _priceRepository.ToList();//价格单 + + var dto1s = ObjectMapper.Map, List>(entitys); + var q = from d in dto1s + join p in priceList on d.LU equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == inv.Site//客户零件号 + select new TEMP_CAN_SA_DETAIL + { + Id = d.Id, + SettleBillNum = d.SettleBillNum, + Site = d.Site, + Version = d.Version, + Price = p.Price, + BillNum = d.BillNum, + SettleDate = d.SettleDate, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + MaterialDesc = d.MaterialDesc, + PN = d.PN, + Qty = d.Qty, + GroupNum = d.GroupNum, + Amt = Math.Round(d.Qty * p.Price, 2), + ContractDocID = d.ContractDocID, + BeginDate = p.BeginTime, + EndDate = p.EndTime, + PartCode = d.PartCode + + }; + var dtos = q.ToList(); + if (dtos != null && dtos.Count > 0) + { if (invbillnum.Substring(0, 3) == "INV")//一次开票重开 { var entities = await ReissueFirstInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); @@ -458,20 +591,20 @@ namespace Win.Sfs.SettleAccount.Entities.BQ var invlist = ls.Select(p => p.InvbillNum).Distinct(); foreach (var itm in invlist) { - var invBill = new INVOICE_REPEAT_DTO(); - var invls= ls.Where(p => p.InvbillNum == itm).ToList(); - var entitylist = entities.Where(p => p.InvbillNum == itm).ToList(); - var tax = inv.Tax;//税率 - var amt = entitylist.Sum(p => p.Amt);//税前 - var taxamt = amt + Math.Round(amt * tax, 2);//税后 - var realamt = Math.Round(amt*tax,2);//税额 - invBill.Amt = amt; - invBill.TaxAmt = taxamt; - invBill.Tax = tax; - invBill.BusinessType = inv.BusinessType; - invBill.DETAIL =invls ; - invBill.RealAmt = realamt; - invBilllist.Add(invBill); + var invBill = new INVOICE_REPEAT_DTO(); + var invls = ls.Where(p => p.InvbillNum == itm).ToList(); + var entitylist = entities.Where(p => p.InvbillNum == itm).ToList(); + var tax = inv.Tax;//税率 + var amt = entitylist.Sum(p => p.Amt);//税前 + var taxamt = amt + Math.Round(amt * tax, 2);//税后 + var realamt = Math.Round(amt * tax, 2);//税额 + invBill.Amt = amt; + invBill.TaxAmt = taxamt; + invBill.Tax = tax; + invBill.BusinessType = inv.BusinessType; + invBill.DETAIL = invls; + invBill.RealAmt = realamt; + invBilllist.Add(invBill); } } } @@ -499,22 +632,32 @@ namespace Win.Sfs.SettleAccount.Entities.BQ invBilllist.Add(invBill); } } - } - } - else - { - throw new UserFriendlyException($"不存发票号为:{invbillnum}发票"); } + } + else + { + throw new UserFriendlyException($"不存发票号为:{invbillnum}发票"); + } //} //else //{ // throw new UserFriendlyException($"不存发票号:{p_invbillnum}对应的结算分组号"); //} - return invBilllist; - + return new JsonResult(new { Code = 200, Data = invBilllist }); + + + } + + + + + + + + } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_BA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_BA_SERVICE.cs index b187badb..70bd41bb 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_BA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/HBPO_BA_SERVICE.cs @@ -10,6 +10,7 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Services; +using Volo.Abp.Uow; using Win.Abp.Snowflakes; using Win.Sfs.BaseData.ImportExcelCommon; using Win.Sfs.SettleAccount.Bases; @@ -29,20 +30,22 @@ namespace Win.Sfs.SettleAccount.Entities.BQ [Route("api/settleaccount/[controller]/[action]")] public class HBPO_BA_SERVICE : BA_SERVICE { - + private readonly INormalEfCoreRepository _priceRepository; + private readonly ADJ_SERVICE _adjservice; public HBPO_BA_SERVICE(IExcelImportAppService excelImportService, ISnowflakeIdGenerator snowflakeIdGenerator, ICommonManager commonManager, INormalEfCoreRepository pubRepository, INormalEfCoreRepository repository, INormalEfCoreRepository wRepository, INormalEfCoreRepository sRepository, INormalEfCoreRepository mRepository, INormalEfCoreRepository adjRepository, BBAC_CAN_SA_MNG bbacMng, HBPO_CAN_SA_MNG hbpoMng, PUB_CAN_SA_MNG pubMng, INV_MNG invMng, TaskJobService service, BaseDomainService baseservice, - INormalEfCoreRepository priceRepository - + INormalEfCoreRepository priceRepository, + ADJ_SERVICE adjservice ) : base(excelImportService, snowflakeIdGenerator, commonManager, repository, wRepository, sRepository, mRepository, adjRepository, bbacMng, hbpoMng, pubMng, invMng, service,baseservice) { _priceRepository= priceRepository; + _adjservice = adjservice; } @@ -296,6 +299,150 @@ namespace Win.Sfs.SettleAccount.Entities.BQ } + //[HttpPost] + //[UnitOfWork(false)] + ///// + ///// 发票重开列表 + ///// + ///// + ///// + //public virtual async Task ReissueInvoiceList(List p_list) + //{ + + // var result = await _adjservice.CheckImport(p_list); + // if (result != "OK") + // { + // return new JsonResult(new { Code = 400, Message = "请下载错误模版", fileName = result }); + // } + + // var invBilllist = new List(); + // var adjlist = ObjectMapper.Map, List>(p_list); + // if (adjlist == null && adjlist.Count == 0) + // { + // throw new UserFriendlyException($"调整表无数据!"); + // } + // var first = p_list.FirstOrDefault(); + // var invbillnum = first.InvBillNum; + // //var mappingList = await GetMapGroupAsync(invbillnum);//发票对应结算分组 + // //if (mappingList != null && mappingList.Count() > 0) + // //{ + // var version = int.Parse(DateTime.Now.ToString("yyyymm")); + // //var gList = mappingList.Select(p => p.SettleGroupNum).ToList();//获取发票所有结算分组 + // var inv = await GetInvoiceGroupByInvBillNum(invbillnum); + + // var settle = await _bbacMng.GetMainAsync(inv.InvGroupNum); + + // if (settle == null) + // { + // throw new UserFriendlyException($"选择发票:{invbillnum}对应的可结算单不在请检查!"); + // } + // version = settle.Version; + // if (inv != null) + // { + // if (inv.InvoiceState == InvoiceBillState.报废) + // { + // throw new UserFriendlyException($"选择发票:{invbillnum}状态为报废状态不能重开!"); + // } + // if (inv.State == SettleBillState.商务已审核 || inv.State == SettleBillState.已开票) + // { + // throw new UserFriendlyException($"选择发票:{invbillnum}状态在财务审核后可以报废重开,之前请退回重开!"); + // } + + // var bbaclist = await _bbacMng.GetContainsAsync(inv.InvbillNum);//结算分组对应结算零件 + // //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 + // if (adjlist != null && adjlist.Count() > 0) + // { + // foreach (var itm in adjlist) + // { + // bbaclist.Add(new BBAC_CAN_SA_DETAIL( + // guid: itm.Id, + // keyCode: itm.KeyCode, + // version: itm.Version, + // billNum: itm.InvGroupNum, + // settleBillNum: itm.SettleBillNum, + // lU: itm.LU, + // pN: itm.PN, + // site: itm.Site, + // qty: itm.Qty, + // price: itm.Price, + // category: itm.BusinessType, + // isReturn: itm.Qty > 0 ? false : true, + // settleDate: itm.SettleDate, + // groupNum: itm.GroupNum, + // invGroupNum: itm.InvGroupNum, + // contactid: itm.Extend1,//生产号 + // invbillnum: string.Empty, + // partcode: itm.PartCode + // )); + // } + // } + // var entitys = bbaclist;//合并库存调整单和就发票可结算明细数据 + // var gNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); + // var priceList = _priceRepository.ToList();//价格单 + + // var dto1s = ObjectMapper.Map, List>(entitys); + // var q = from d in dto1s + // join p in priceList on d.LU equals p.LU + // where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == inv.Site//客户零件号 + // select new TEMP_CAN_SA_DETAIL + // { + // Id = d.Id, + // SettleBillNum = d.SettleBillNum, + // Site = d.Site, + // Version = d.Version, + // Price = p.Price, + // BillNum = d.BillNum, + // SettleDate = d.SettleDate, + // InvGroupNum = d.InvGroupNum, + // LU = d.LU, + // MaterialDesc = d.MaterialDesc, + // PN = d.PN, + // Qty = d.Qty, + // GroupNum = d.GroupNum, + // Amt = Math.Round(d.Qty * p.Price, 2), + // ContractDocID = d.ContractDocID, + // BeginDate = p.BeginTime, + // EndDate = p.EndTime, + // PartCode = d.PartCode + + // }; + // var dtos = q.ToList(); + // if (dtos != null && dtos.Count > 0) + // { + // if (invbillnum.Substring(0, 3) == "INV")//一次开票重开 + // { + // var entities = await ReissueFirstInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + // var ls = ObjectMapper.Map, List>(entities); + // invBilllist.AddRange(ls); + + // } + // else//二次开票 + // { + // var entities = await ReissueSecInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + // var ls = ObjectMapper.Map, List>(entities); + // invBilllist.AddRange(ls); + + // } + + // } + // else + // { + // throw new UserFriendlyException($"不存发票号为:{invbillnum}发票"); + // } + // } + // var invlist = invBilllist.OrderBy(p => p.PartCode); + // return new JsonResult(new { Code = 200, Data = invlist }); + + //} + + + + + + + + + @@ -304,8 +451,204 @@ namespace Win.Sfs.SettleAccount.Entities.BQ /// /// /// - public virtual async Task> ReissueInvoiceList(List p_list) + public virtual async Task ReissueInvoiceList(List p_list) { + + var result = await _adjservice.CheckImport(p_list); + if (result != "OK") + { + return new JsonResult(new { Code = 400, Message = "请下载错误模版", fileName = result }); + } + + + + var invBilllist = new List(); + + var adjlist = ObjectMapper.Map, List>(p_list); + if (adjlist == null && adjlist.Count == 0) + { + throw new UserFriendlyException($"调整表无数据!"); + } + var first = p_list.FirstOrDefault(); + var invbillnum = first.InvBillNum; + + //var mappingList = await GetMapGroupAsync(invbillnum);//发票对应结算分组 + //if (mappingList != null && mappingList.Count() > 0) + //{ + var version = int.Parse(DateTime.Now.ToString("yyyymm")); + //var gList = mappingList.Select(p => p.SettleGroupNum).ToList();//获取发票所有结算分组 + var inv = await GetInvoiceGroupByInvBillNum(invbillnum); + + var settle = await _hbpoMng.GetMainAsync(inv.InvGroupNum); + + if (settle == null) + { + throw new UserFriendlyException($"选择发票:{invbillnum}对应的可结算单不在请检查!", "400"); + } + version = settle.Version; + if (inv != null) + { + if (inv.InvoiceState == InvoiceBillState.报废) + { + throw new UserFriendlyException($"选择发票:{invbillnum}状态为报废状态不能重开!", "400"); + } + if (inv.State == SettleBillState.商务已审核 || inv.State == SettleBillState.已开票) + { + throw new UserFriendlyException($"选择发票:{invbillnum}状态在财务审核后可以报废重开,之前请退回重开!", "400"); + } + + var bbaclist = await _hbpoMng.GetContainsAsync(inv.InvbillNum);//结算分组对应结算零件 + //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 + if (adjlist != null && adjlist.Count() > 0) + { + foreach (var itm in adjlist) + { + bbaclist.Add(new HBPO_CAN_SA_DETAIL( + guid: itm.Id, + keyCode: itm.KeyCode, + version: itm.Version, + billNum: itm.InvGroupNum, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + businessType: itm.BusinessType, + + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: itm.InvGroupNum, + + invbillnum: string.Empty, + partcode: itm.PartCode + )); + } + } + var entitys = bbaclist;//合并库存调整单和就发票可结算明细数据 + var gNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); + + var priceList = _priceRepository.ToList();//价格单 + //var errorList = await CheckInvoiceGenerationRules(entitys, priceList, inv.BusinessType); + //if (errorList.Count() > 0) + //{ + // return await ExportErrorReportAsync(errorList); + //} + var dto1s = ObjectMapper.Map, List>(entitys); + var q = from d in dto1s + join p in priceList on d.PartCode equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == inv.Site//客户零件号 + select new TEMP_CAN_SA_DETAIL + { + Id = d.Id, + SettleBillNum = d.SettleBillNum, + Site = d.Site, + Version = d.Version, + Price = p.Price, + BillNum = d.BillNum, + SettleDate = d.SettleDate, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + MaterialDesc = d.MaterialDesc, + PN = d.PN, + Qty = d.Qty, + GroupNum = d.GroupNum, + Amt = Math.Round(d.Qty * p.Price, 2), + ContractDocID = "N", + BeginDate = p.BeginTime, + EndDate = p.EndTime, + PartCode = d.PartCode + + }; + var dtos = q.ToList(); + if (dtos != null && dtos.Count > 0) + { + if (invbillnum.Substring(0, 3) == "INV")//一次开票重开 + { + var entities = await ReissueFirstInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + var ls = ObjectMapper.Map, List>(entities); + + invBilllist.AddRange(ls); + //var invlist = ls.Select(p => p.InvbillNum).Distinct(); + //foreach (var itm in invlist) + //{ + // var invBill = new INVOICE_REPEAT_DTO(); + // var invls = ls.Where(p => p.InvbillNum == itm).ToList(); + // var entitylist = entities.Where(p => p.InvbillNum == itm).ToList(); + // var tax = inv.Tax;//税率 + // var amt = entitylist.Sum(p => p.Amt);//税前 + // var taxamt = amt + Math.Round(amt * tax, 2);//税后 + // var realamt = Math.Round(amt * tax, 2);//税额 + // invBill.Amt = amt; + // invBill.TaxAmt = taxamt; + // invBill.Tax = tax; + // invBill.BusinessType = inv.BusinessType; + // invBill.DETAIL = invls; + // invBill.RealAmt = realamt; + // invBilllist.Add(invBill); + //} + } + else//二次开票 + { + var entities = await ReissueSecInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + var ls = ObjectMapper.Map, List>(entities); + invBilllist.AddRange(ls); + + //var invlist = ls.Select(p => p.InvbillNum).Distinct(); + //foreach (var itm in invlist) + //{ + // var invBill = new INVOICE_REPEAT_DTO(); + // var invls = ls.Where(p => p.InvbillNum == itm).ToList(); + // var entitylist = entities.Where(p => p.InvbillNum == itm).ToList(); + // var tax = inv.Tax;//税率 + // var amt = entitylist.Sum(p => p.Amt);//税前 + // var taxamt = amt + Math.Round(amt * tax, 2);//税后 + // var realamt = Math.Round(amt * tax, 2);//税额 + // invBill.Amt = amt; + // invBill.TaxAmt = taxamt; + // invBill.Tax = tax; + // invBill.BusinessType = inv.BusinessType; + // invBill.DETAIL = invls; + // invBill.RealAmt = realamt; + // invBilllist.Add(invBill); + //} + + } + } + } + else + { + throw new UserFriendlyException($"不存发票号为:{invbillnum}发票", "400"); + } + var invlist = invBilllist.OrderBy(p => p.PartCode).ToList(); + //} + //else + //{ + // throw new UserFriendlyException($"不存发票号:{invbillnum}对应的结算分组号"); + //} + + return new JsonResult(new { Code = 200, Message = "生成成功", Data= invBilllist }); + + + } + + + [HttpPost] + /// 发票重开列表 + /// + /// + /// + public virtual async Task ReissueInvoiceListExt(List p_list) + { + + var result = await _adjservice.CheckImport(p_list); + if (result != "OK") + { + return new JsonResult(new { Code = 400, Message = "请下载错误模版", fileName = result }); + } + + + var invBilllist = new List(); var adjlist = ObjectMapper.Map, List>(p_list); @@ -465,7 +808,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ //{ // throw new UserFriendlyException($"不存发票号:{invbillnum}对应的结算分组号"); //} - return invBilllist; + + return new JsonResult(new { Code = 200, Message = "生成成功", Data = invBilllist }); + } @@ -474,6 +819,9 @@ namespace Win.Sfs.SettleAccount.Entities.BQ + + + } } diff --git a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_BA_SERVICE.cs b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_BA_SERVICE.cs index c78ee245..b2b84e85 100644 --- a/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_BA_SERVICE.cs +++ b/code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/PUB_BA_SERVICE.cs @@ -33,19 +33,21 @@ namespace Win.Sfs.SettleAccount.Entities.BQ private readonly INormalEfCoreRepository _priceRepository; private readonly INormalEfCoreRepository _pricebjRepository; + private readonly ADJ_SERVICE _adjservice; public PUB_BA_SERVICE(IExcelImportAppService excelImportService, ISnowflakeIdGenerator snowflakeIdGenerator, ICommonManager commonManager, INormalEfCoreRepository pubRepository, INormalEfCoreRepository repository, INormalEfCoreRepository wRepository, INormalEfCoreRepository sRepository, INormalEfCoreRepository mRepository, INormalEfCoreRepository adjRepository, BBAC_CAN_SA_MNG bbacMng, HBPO_CAN_SA_MNG hbpoMng, PUB_CAN_SA_MNG pubMng, INV_MNG invMng, TaskJobService service, BaseDomainService baseservice, INormalEfCoreRepository priceRepository, - INormalEfCoreRepository pricebjRepository - + INormalEfCoreRepository pricebjRepository, + ADJ_SERVICE adjservice ) : base(excelImportService, snowflakeIdGenerator, commonManager, repository, wRepository, sRepository, mRepository, adjRepository, bbacMng, hbpoMng, pubMng, invMng, service,baseservice) { _priceRepository = priceRepository; _pricebjRepository = pricebjRepository; + _adjservice= adjservice; } @@ -331,15 +333,19 @@ namespace Win.Sfs.SettleAccount.Entities.BQ /// /// /// - public virtual async Task> ReissueInvoiceList(List p_list) + public virtual async Task ReissueInvoiceListExt(List p_list) { + + var result = await _adjservice.CheckImport(p_list); + if (result != "OK") + { + return new JsonResult(new { Code = 400, Message = "请下载错误模版", fileName = result }); + } + var first = p_list.FirstOrDefault(); var invbillnum = first.InvBillNum; - var invBilllist = new List(); - - List ls = new List(); var adjlist = ObjectMapper.Map, List>(p_list); if (adjlist == null && adjlist.Count == 0) @@ -371,9 +377,8 @@ namespace Win.Sfs.SettleAccount.Entities.BQ { throw new UserFriendlyException($"选择发票:{invbillnum}状态在财务审核后可以报废重开,之前请退回重开!", "400"); } - var bbaclist = await _pubMng.GetContainsAsync(inv.InvbillNum);//结算分组对应结算零件 - //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 + //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 if (adjlist != null && adjlist.Count() > 0) { foreach (var itm in adjlist) @@ -499,13 +504,190 @@ namespace Win.Sfs.SettleAccount.Entities.BQ //{ // throw new UserFriendlyException($"不存发票号:{invbillnum}对应的结算分组号"); //} - return invBilllist; + return new JsonResult(new { Code = 200, Message = "生成成功", Data = invBilllist }); } + [HttpPost] + public virtual async Task ReissueInvoiceList(List p_list) + { + + + var result = await _adjservice.CheckImport(p_list); + if (result != "OK") + { + return new JsonResult(new { Code = 400, Message = "请下载错误模版", fileName = result }); + } + + var first = p_list.FirstOrDefault(); + var invbillnum = first.InvBillNum; + var invBilllist = new List(); + List ls = new List(); + var adjlist = ObjectMapper.Map, List>(p_list); + if (adjlist == null && adjlist.Count == 0) + { + throw new UserFriendlyException($"调整表无数据!", "400"); + } + + //var mappingList = await GetMapGroupAsync(invbillnum);//发票对应结算分组 + //if (mappingList != null && mappingList.Count() > 0) + //{ + var version = int.Parse(DateTime.Now.ToString("yyyymm")); + //var gList = mappingList.Select(p => p.SettleGroupNum).ToList();//获取发票所有结算分组 + var inv = await GetInvoiceGroupByInvBillNum(invbillnum); + + var settle = await _pubMng.GetMainAsync(inv.InvGroupNum); + if (settle == null) + { + throw new UserFriendlyException($"选择发票:{invbillnum}对应的可结算单不在请检查!", "400"); + } + version = settle.Version; + if (inv != null) + { + if (inv.InvoiceState == InvoiceBillState.报废) + { + throw new UserFriendlyException($"选择发票:{invbillnum}状态为报废状态不能重开!", "400"); + } + if (inv.State == SettleBillState.商务已审核 || inv.State == SettleBillState.已开票) + { + throw new UserFriendlyException($"选择发票:{invbillnum}状态在财务审核后可以报废重开,之前请退回重开!", "400"); + } + var bbaclist = await _pubMng.GetContainsAsync(inv.InvbillNum);//结算分组对应结算零件 + //var adjlist = await _adjRepository.Where(p => p.OldInvBillNum == inv.InvbillNum).ToListAsync();//调整表明细 + if (adjlist != null && adjlist.Count() > 0) + { + foreach (var itm in adjlist) + { + bbaclist.Add(new PUB_CAN_SA_DETAIL( + guid: itm.Id, + keyCode: itm.KeyCode, + version: itm.Version, + billNum: itm.InvGroupNum, + settleBillNum: itm.SettleBillNum, + lU: itm.LU, + pN: itm.PN, + site: itm.Site, + qty: itm.Qty, + price: itm.Price, + businessType: itm.BusinessType, + + settleDate: itm.SettleDate, + groupNum: itm.GroupNum, + invGroupNum: itm.InvGroupNum, + invbillnum: string.Empty, + partcode: itm.PartCode, + pobillnum: string.Empty + )); + } + } + var entitys = bbaclist;//合并库存调整单和就发票可结算明细数据 + var gNumList = entitys.Select(p => p.GroupNum).Distinct().ToList(); + + var priceList = _priceRepository.ToList();//价格单 + //var errorList = await CheckInvoiceGenerationRules(entitys, priceList, inv.BusinessType); + //if (errorList.Count() > 0) + //{ + // return await ExportErrorReportAsync(errorList); + //} + var dto1s = ObjectMapper.Map, List>(entitys); + var q = from d in dto1s + join p in priceList on d.PartCode equals p.LU + where d.SettleDate >= p.BeginTime && d.SettleDate <= p.EndTime && p.IsCancel == false && p.ClientCode == inv.Site//客户零件号 + select new TEMP_CAN_SA_DETAIL + { + Id = d.Id, + SettleBillNum = d.SettleBillNum, + Site = d.Site, + Version = d.Version, + Price = p.Price, + BillNum = d.BillNum, + SettleDate = d.SettleDate, + InvGroupNum = d.InvGroupNum, + LU = d.LU, + MaterialDesc = d.MaterialDesc, + PN = d.PN, + Qty = d.Qty, + GroupNum = d.GroupNum, + Amt = Math.Round(d.Qty * p.Price, 2), + ContractDocID = "N", + BeginDate = p.BeginTime, + EndDate = p.EndTime, + PartCode = d.PartCode + + }; + var dtos = q.ToList(); + if (dtos != null && dtos.Count > 0) + { + if (invbillnum.Substring(0, 3) == "INV")//一次开票重开 + { + var entities = await ReissueFirstInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + + ls = ObjectMapper.Map, List>(entities); + + invBilllist.AddRange(ls.ToList()); + + + //var invlist = ls.Select(p => p.InvbillNum).Distinct(); + //foreach (var itm in invlist) + //{ + // var invBill = new INVOICE_REPEAT_DTO(); + // var invls = ls.Where(p => p.InvbillNum == itm).ToList(); + // var entitylist = entities.Where(p => p.InvbillNum == itm).ToList(); + // var tax = inv.Tax;//税率 + // var amt = entitylist.Sum(p => p.Amt);//税前 + // var taxamt = amt + Math.Round(amt * tax, 2);//税后 + // var realamt = Math.Round(amt * tax, 2);//税额 + // invBill.Amt = amt; + // invBill.TaxAmt = taxamt; + // invBill.Tax = tax; + // invBill.BusinessType = inv.BusinessType; + // invBill.DETAIL = invls; + // invBill.RealAmt = realamt; + // invBilllist.Add(invBill); + //} + } + else//二次开票 + { + var entities = await ReissueSecInvoiceExtend(bbaclist, adjlist, dtos, version, invbillnum); + ls = ObjectMapper.Map, List>(entities); + //var invlist = ls.Select(p => p.InvbillNum).Distinct(); + //foreach (var itm in invlist) + //{ + // var invBill = new INVOICE_REPEAT_DTO(); + // var invls = ls.Where(p => p.InvbillNum == itm).ToList(); + // var entitylist = entities.Where(p => p.InvbillNum == itm).ToList(); + // var tax = inv.Tax;//税率 + // var amt = entitylist.Sum(p => p.Amt);//税前 + // var taxamt = amt + Math.Round(amt * tax, 2);//税后 + // var realamt = Math.Round(amt * tax, 2);//税额 + // invBill.Amt = amt; + // invBill.TaxAmt = taxamt; + // invBill.Tax = tax; + // invBill.BusinessType = inv.BusinessType; + // invBill.DETAIL = invls; + // invBill.RealAmt = realamt; + // invBilllist.Add(invBill); + //} + invBilllist.AddRange(ls.ToList()); + + } + } + } + else + { + throw new UserFriendlyException($"不存发票号为:{invbillnum}发票", "400"); + } + //} + //else + //{ + // throw new UserFriendlyException($"不存发票号:{invbillnum}对应的结算分组号"); + //} + return new JsonResult(new { Code = 200, Message = "生成成功", Data = invBilllist }); + + }