Browse Source

更新代码

master
学 赵 1 year ago
parent
commit
5f46c42938
  1. 9
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_PD_SERVICE.cs
  2. 180
      code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/PendingDeductionService.cs
  3. 16
      code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs
  4. 4
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Bases/EntityBase.cs
  5. 9
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/BBAC_SE_EDI.cs
  6. 1
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_NOT_SA_MNG.cs
  7. 1
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/HBPO_NOT_SA_MNG.cs
  8. 15
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs
  9. 4
      code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs
  10. 12
      code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Code/CodeSettingRepository.cs
  11. 1
      code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/PendingDeduction/PendingDeductionDapperRepository.cs

9
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/BBAC_PD_SERVICE.cs

@ -20,6 +20,7 @@ using Win.Sfs.SettleAccount.Entities.BQ.Syncs;
using Win.Sfs.SettleAccount.Entities.BQ.Vmi; using Win.Sfs.SettleAccount.Entities.BQ.Vmi;
using Win.Sfs.Shared.RepositoryBase; using Win.Sfs.Shared.RepositoryBase;
using Win.Sfs.SettleAccount.Entities.TaskJobs; using Win.Sfs.SettleAccount.Entities.TaskJobs;
using Volo.Abp.Uow;
namespace Win.Sfs.SettleAccount.Entities.BQ namespace Win.Sfs.SettleAccount.Entities.BQ
{ {
@ -47,20 +48,14 @@ namespace Win.Sfs.SettleAccount.Entities.BQ
public override async Task<string> ApprovalPassed(List<string> p_list) public override async Task<string> ApprovalPassed(List<string> p_list)
{ {
var detailist = _detailRepository.Where(p => p_list.Contains(p.BillNum)).ToList(); var detailist = _detailRepository.Where(p => p_list.Contains(p.BillNum)).ToList();
List<CustomCondition> customConditionList = new List<CustomCondition>(); List<CustomCondition> customConditionList = new List<CustomCondition>();
customConditionList.Add(new CustomCondition() { Name = "BillNumList", Value =string.Join(",",p_list) }); customConditionList.Add(new CustomCondition() { Name = "BillNumList", Value =string.Join(",",p_list) });
customConditionList.Add(new CustomCondition() { Name = "Type", Value = EnumBusinessType.JisBBAC.ToString() }); customConditionList.Add(new CustomCondition() { Name = "Type", Value = EnumBusinessType.JisBBAC.ToString() });
customConditionList.Add(new CustomCondition() { Name = "IsOut", Value ="out"});
var _taskid = await _service.ExportEnqueueAsync("BBAC待扣减任务", ExportExtentsion.Excel, DateTime.Now.ToString("yyyyMM"), string.Empty, CurrentUser, typeof(PendingDeductionService), customConditionList, (rs) => var _taskid = await _service.ExportEnqueueAsync("BBAC待扣减任务", ExportExtentsion.Excel, DateTime.Now.ToString("yyyyMM"), string.Empty, CurrentUser, typeof(PendingDeductionService), customConditionList, (rs) =>
{ {
}); });
return _taskid; return _taskid;
} }
} }
} }

180
code/src/Modules/SettleAccount/src/SettleAccount.Application/Entities/BQ/Syncs/PendingDeductionService.cs

@ -8,123 +8,62 @@ using System.Threading.Tasks;
using EFCore.BulkExtensions; using EFCore.BulkExtensions;
using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Syntax;
using Nito.AsyncEx; using Nito.AsyncEx;
using NPOI.SS.Formula.Functions;
using SettleAccount.Bases; using SettleAccount.Bases;
using SettleAccount.Domain.BQ; using SettleAccount.Domain.BQ;
using TaskJob.EventArgs; using TaskJob.EventArgs;
using TaskJob.Interfaces; using TaskJob.Interfaces;
using Volo.Abp.Application.Services;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.Uow;
using Win.Sfs.SettleAccount.Constant; using Win.Sfs.SettleAccount.Constant;
using Win.Sfs.SettleAccount.Entities.BQ.Vmi; using Win.Sfs.SettleAccount.Entities.BQ.Vmi;
using Win.Sfs.SettleAccount.Entities.CodeSettings; using Win.Sfs.SettleAccount.Entities.CodeSettings;
using Win.Sfs.Shared.RepositoryBase; using Win.Sfs.Shared.RepositoryBase;
namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs; namespace Win.Sfs.SettleAccount.Entities.BQ.Syncs;
public class PendingDeductionService : ITransientDependency, IExportJob public class PendingDeductionService : ApplicationService, ITransientDependency, IExportJob
{ {
protected readonly VmiAppService _vimservice;
protected readonly INormalEfCoreRepository<BBAC_SEC_DETAIL, Guid> _bbacSecRepository; protected readonly SettleAccountDbContext _dbcontext;
protected readonly INormalEfCoreRepository<HBPO_SEC_DETAIL, Guid> _hbpoSecRepository;
protected readonly INormalEfCoreRepository<PUB_SEC_DETAIL, Guid> _pubSecRepository;
protected readonly INormalEfCoreRepository<BBAC_PD_DETAIL, Guid> _bbacRepository;
protected readonly INormalEfCoreRepository<HBPO_PD_DETAIL, Guid> _hbpoRepository;
protected readonly INormalEfCoreRepository<PUB_PD_DETAIL, Guid> _pubRepository;
protected readonly INormalEfCoreRepository<CodeSetting, Guid> _codesetRepository;
protected readonly INormalEfCoreRepository<VmiLog, Guid> _vmiRepository;
public PendingDeductionService( public PendingDeductionService(
INormalEfCoreRepository<BBAC_SEC_DETAIL, Guid> bbacSecRepository, SettleAccountDbContext dbcontext
INormalEfCoreRepository<HBPO_SEC_DETAIL, Guid> hbpoSecRepository,
INormalEfCoreRepository<PUB_SEC_DETAIL, Guid> pubSecRepository,
INormalEfCoreRepository<BBAC_PD_DETAIL, Guid> bbacRepository,
INormalEfCoreRepository<HBPO_PD_DETAIL, Guid> hbpoRepository,
INormalEfCoreRepository<PUB_PD_DETAIL, Guid> pubRepository,
INormalEfCoreRepository<CodeSetting, Guid> codesetRepository,
INormalEfCoreRepository<VmiLog, Guid> vmiRepository,
VmiAppService vimservice
) )
{ {
_hbpoRepository = hbpoRepository; _dbcontext = dbcontext;
_bbacRepository= bbacRepository;
_pubRepository= pubRepository;
_bbacSecRepository = bbacSecRepository;
_hbpoSecRepository= hbpoSecRepository;
_pubSecRepository= pubSecRepository;
_vimservice =vimservice;
_codesetRepository = codesetRepository;
_vmiRepository = vmiRepository;
} }
public string ExportFile(Guid id, List<string> exportName, List<CustomCondition> property) public string ExportFile(Guid id, List<string> exportName, List<CustomCondition> property)
{ {
var billList = property.Where(p => p.Name == "BillNumList").FirstOrDefault().Value; var billList = property.Where(p => p.Name == "BillNumList").FirstOrDefault().Value;
var type = property.Where(p => p.Name == "Type").FirstOrDefault().Value; var type = property.Where(p => p.Name == "Type").FirstOrDefault().Value;
var isout = property.Where(p => p.Name == "IsOut").FirstOrDefault().Value;
var list = billList.Split(","); var list = billList.Split(",");
var projectList = _codesetRepository.Where(p => p.Project == "库位"); var projectList = _dbcontext.Set<CodeSetting>().Where(p => p.Project == "库位");
if (type == "JisBBAC") if (type == "JisBBAC")
{ {
var jisdetail = _bbacRepository.Where(p => list.Contains(p.BillNum) && p.BusinessType == EnumBusinessType.JisBBAC);//jis var jisdetail = _dbcontext.Set<BBAC_PD_DETAIL>().Where(p => list.Contains(p.BillNum) && p.BusinessType == EnumBusinessType.JisBBAC);//jis
Sync(jisdetail.ToList()); Sync(jisdetail.ToList(),isout=="out"?true:false);
var mdetail = _bbacRepository.Where(p => list.Contains(p.BillNum) && p.BusinessType == EnumBusinessType.MaiDanJianBBAC);//买单件 var mdetail = _dbcontext.Set<BBAC_PD_DETAIL>().Where(p => list.Contains(p.BillNum) && p.BusinessType == EnumBusinessType.MaiDanJianBBAC);//买单件
Sync(mdetail.ToList()); Sync(mdetail.ToList(), isout == "out" ? true : false);
} }
else if (type == "JisHBPO") else if (type == "JisHBPO")
{ {
var detailist = _hbpoRepository.Where(p => list.Contains(p.BillNum) && p.BusinessType== EnumBusinessType.JisHBPO).ToList(); var detailist = _dbcontext.Set<HBPO_PD_DETAIL>().Where(p => list.Contains(p.BillNum) && p.BusinessType== EnumBusinessType.JisHBPO).ToList();
Sync(detailist); Sync(detailist, isout == "out" ? true : false);
var mdetail = _bbacRepository.Where(p => list.Contains(p.BillNum) && p.BusinessType == EnumBusinessType.MaiDanJianHBPO);//买单件 var mdetail = _dbcontext.Set<HBPO_PD_DETAIL>().Where(p => list.Contains(p.BillNum) && p.BusinessType == EnumBusinessType.MaiDanJianHBPO);//买单件
Sync(mdetail.ToList()); Sync(mdetail.ToList(),isout == "out" ? true : false);
} }
else else
{ {
var detailist = _hbpoRepository.Where(p => list.Contains(p.BillNum)).ToList(); var detailist = _dbcontext.Set<PUB_PD_DETAIL>().Where(p => list.Contains(p.BillNum)).ToList();
Sync(detailist); Sync(detailist, isout == "out" ? true : false);
////switch (type)
////{
//// case "ZhiGongJianBBAC":
//// if (detailist != null && detailist.Count > 0)
//// {
//// }
//// break;
//// case "ZhiGongJianHBPO":
//// if (detailist != null && detailist.Count > 0)
//// {
//// }
//// break;
//// case "MaiDanJianBBAC":
//// if (detailist != null && detailist.Count > 0)
//// {
//// }
//// break;
//// case "MaiDanJianHBPO":
//// if (detailist != null && detailist.Count > 0)
//// {
//// }
//// break;
//// case "BeiJian":
//// if (detailist != null && detailist.Count > 0)
//// {
//// }
//// break;
//// case "YinDuJian":
//// if (detailist != null && detailist.Count > 0)
//// {
//// }
//// break;
////}
//if (detailist != null && detailist.Count > 0)
//{
// foreach (var itm in detailist)
// {
// }
//}
} }
return id.ToString(); return id.ToString();
} }
@ -144,42 +83,91 @@ public class PendingDeductionService : ITransientDependency, IExportJob
return pageCount; return pageCount;
} }
public void Sync<T>(List<T> p_ls) where T : PD_BASE,new() public void Sync<T>(List<T> p_ls,bool flag=true) where T : PD_BASE,new()
{ {
var query = from itm in p_ls var query = from itm in p_ls
select new select new VmiLog()
{ {
BillTime = DateTime.Now, BillTime = DateTime.Now,
ChangedTime = DateTime.Now, ChangedTime = DateTime.Now,
Qty = itm.Qty, Qty = itm.Qty,
DeliverTime = itm.CreationTime, RealPartCode=itm.RELU,
RealCode=itm.RELU,
LogType = Entities.BQ.Vmi.VmiLogType.Type200, LogType = Entities.BQ.Vmi.VmiLogType.Type200,
ChangedQty = itm.Qty, ChangedQty =(flag==true)? -itm.Qty:itm.Qty,
ChangedType = VmiType.Out, ChangedType = VmiType.Out,
//SubBillType = EnumDeliverSubBillType.小件BBAC, //SubBillType = EnumDeliverSubBillType.小件BBAC,
//BillType = EnumDeliverBjBmpBillType.JIS件, //BillType = EnumDeliverBjBmpBillType.JIS件,
PartCode = itm.LU, CustPartCode = itm.LU,
SettlementVinCode = itm.PN, SettlementVinCode = itm.PN,
PartCode2 = itm.LU,
CustomerPartCode = string.IsNullOrEmpty(itm.Extend4) ? string.Empty : itm.Extend4,
VinCode = itm.PN, VinCode = itm.PN,
OrderNum = itm.GroupNum, OrderNum = itm.GroupNum,
ErpToLoc = itm.Extend2, ErpToLoc = string.IsNullOrEmpty(itm.Extend2)?string.Empty:itm.Extend2,
}; };
var ls = query.ToList(); var ls = query.ToList();
var _first= p_ls.FirstOrDefault();
using (var transaction =_dbcontext.Database.BeginTransaction())
{
try
{
// 执行批量数据操作
if (ls != null && ls.Count > 0) if (ls != null && ls.Count > 0)
{ {
var count = CalculatePageCount(ls.Count, 2000); var count = CalculatePageCount(ls.Count, 2000);
for (int pagenumber = 0; pagenumber < count; pagenumber++) for (int pagenumber = 0; pagenumber < count; pagenumber++)
{ {
ls = GetPagedData(ls, pagenumber, 2000); ls = GetPagedData(ls, pagenumber, 2000);
_vmiRepository.DbContext.BulkInsert(ls); foreach (var item in ls)
{
item.SetId(GuidGenerator.Create());
}
_dbcontext.BulkInsert(ls);
Task.Delay(500); Task.Delay(500);
} }
} }
// 提交事务
transaction.Commit();
}
catch (Exception)
{
// 回滚事务
transaction.Rollback();
throw;
}
}
;
} }

16
code/src/Modules/SettleAccount/src/SettleAccount.Application/SettleAccountApplicationModule.cs

@ -102,22 +102,6 @@ namespace Win.Sfs.SettleAccount
}; return accesor; }; return accesor;
}); });
//context.Services.AddTransient(implementationFactory =>
//{
// Func<string, IExportJob> accesor = key =>
// {
// if (key.Equals(typeof(PendingDeductionService).FullName))
// {
// return implementationFactory.GetService<PendingDeductionService>();
// }
// else
// {
// throw new ArgumentException($"Not Support key:{key}");
// }
// };
// return accesor;
//});
} }
private static void ConfigureJson(ServiceConfigurationContext context) private static void ConfigureJson(ServiceConfigurationContext context)

4
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Bases/EntityBase.cs

@ -407,10 +407,6 @@ namespace SettleAccount.Bases
protected SA_CAN_BASE() { } protected SA_CAN_BASE() { }
public SA_CAN_BASE(Guid id) : base(id) { Id = id; } public SA_CAN_BASE(Guid id) : base(id) { Id = id; }
/// <summary> /// <summary>
/// 期间 /// 期间
/// </summary> /// </summary>

9
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/BBAC_SE_EDI.cs

@ -38,10 +38,12 @@ public class BBAC_SE_EDI:FullAuditedAggregateRoot<Guid>
[Display(Name = "工厂")] [Display(Name = "工厂")]
public string Site { get; set; } public string Site { get; set; }
[Display(Name = "生产码类型")]
public string Extend1 { set; get; } public string Extend1 { set; get; }
public string Extend2 { set; get; } public string Extend2 { set; get; }
[Display(Name = "生产码序列号")]
public string Extend3 { set; get; } public string Extend3 { set; get; }
[Display(Name ="车型")]
public string Extend4 { set; get; } public string Extend4 { set; get; }
/// <summary> /// <summary>
@ -50,6 +52,11 @@ public class BBAC_SE_EDI:FullAuditedAggregateRoot<Guid>
[Display(Name = "是否有发运数据")] [Display(Name = "是否有发运数据")]
public bool IsHaveSeData { get; set; } public bool IsHaveSeData { get; set; }
[Display(Name ="生产线")]
public string LineStationCode { set; get; }
public BBAC_SE_EDI() public BBAC_SE_EDI()
{ } { }
public BBAC_SE_EDI(Guid guid, string keyCode, string version, string lU, string pN, string seqNumber, string assemblyCode, string injectionCode, decimal qty, DateTime beginDate public BBAC_SE_EDI(Guid guid, string keyCode, string version, string lU, string pN, string seqNumber, string assemblyCode, string injectionCode, decimal qty, DateTime beginDate

1
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/BBAC_NOT_SA_MNG.cs

@ -94,6 +94,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
invbillnum: string.Empty, invbillnum: string.Empty,
partcode:itm.PartCode partcode:itm.PartCode
); );
_detailEntity.RealPartCode = itm.RealPartCode;
_entityList.Add(_detailEntity); _entityList.Add(_detailEntity);
} }
await _repository.DbContext.BulkDeleteAsync(p_list); await _repository.DbContext.BulkDeleteAsync(p_list);

1
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/HBPO_NOT_SA_MNG.cs

@ -98,6 +98,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
invbillnum: string.Empty, invbillnum: string.Empty,
partcode:itm.PartCode partcode:itm.PartCode
); );
_detailEntity.RealPartCode = itm.RealPartCode;
_entityList.Add(_detailEntity); _entityList.Add(_detailEntity);
} }
await _notRepository.DbContext.BulkDeleteAsync(p_list); await _notRepository.DbContext.BulkDeleteAsync(p_list);

15
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/INV_MNG.cs

@ -551,7 +551,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
);//厂内实际零件号 );//厂内实际零件号
detail.RELU = itm.RealPartCode;//厂内替换零件号 detail.RELU = string.IsNullOrEmpty(itm.RealPartCode) ? itm.PartCode : itm.RealPartCode;//厂内替换零件号
detail.Extend2 = itm.ErpLoc;//ERP库位 detail.Extend2 = itm.ErpLoc;//ERP库位
bbacDetail.Add(detail); bbacDetail.Add(detail);
} }
@ -700,7 +700,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
); );
entity.RELU = itm.RealPartCode;//厂内替换零件号 entity.RELU = string.IsNullOrEmpty(itm.RealPartCode) ? itm.PartCode : itm.RealPartCode;//厂内替换零件号
entity.Extend2 = itm.ErpLoc;//ERP库位 entity.Extend2 = itm.ErpLoc;//ERP库位
bbacDetail.Add(entity bbacDetail.Add(entity
@ -852,7 +852,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
); );
entity.RELU = itm.RealPartCode;//厂内替换零件号 entity.RELU =string.IsNullOrEmpty(itm.RealPartCode)?itm.PartCode:itm.RealPartCode;//厂内替换零件号
entity.Extend2 = itm.ErpLoc;//ERP库位 entity.Extend2 = itm.ErpLoc;//ERP库位
bbacDetail.Add(entity bbacDetail.Add(entity
); );
@ -1449,16 +1449,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
if (salist.Count > 0) if (salist.Count > 0)
{ {
//foreach (var itm in invoiceMap)//分组影响和
//{
// var key = itm.Key;//发票票号
// var ls = itm.Value;//结算分组号列表
// string str = $" EXEC [p_Invoice_generation_change] @invbillnum = {"'" + key + "'"},@groupNum = {"'" + string.Join(",", ls) + "'"},@businessType = NULL";
// await _repository.DbContext.Database.ExecuteSqlRawAsync(str);
//}
await _repository.DbContext.BulkUpdateAsync(salist,new BulkConfig() { BatchSize=10000 }); await _repository.DbContext.BulkUpdateAsync(salist,new BulkConfig() { BatchSize=10000 });
} }

4
code/src/Modules/SettleAccount/src/SettleAccount.Domain/Entities/BQ/Managers/PUB_NOT_SA_MNG.cs

@ -124,7 +124,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
partcode: itm.PartCode, partcode: itm.PartCode,
pobillnum:string.Empty pobillnum:string.Empty
); );
_detailEntity.RealPartCode = itm.RealPartCode;
_entityList.Add(_detailEntity); _entityList.Add(_detailEntity);
} }
await _repository.DbContext.BulkDeleteAsync(p_list); await _repository.DbContext.BulkDeleteAsync(p_list);
@ -164,7 +164,7 @@ namespace Win.Sfs.SettleAccount.Entities.BQ.Managers
partcode: itm.PartCode, partcode: itm.PartCode,
pobillnum: string.Empty pobillnum: string.Empty
); );
_detailEntity.RealPartCode =string.IsNullOrEmpty(itm.RealPartCode)?itm.PartCode:itm.RealPartCode;
_entityList.Add(_detailEntity); _entityList.Add(_detailEntity);
} }
// _repository.DbContext.Database.BeginTransaction(); // _repository.DbContext.Database.BeginTransaction();

12
code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/Code/CodeSettingRepository.cs

@ -1,4 +1,4 @@
using EFCore.BulkExtensions; using EFCore.BulkExtensions;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -13,7 +13,7 @@ using Win.Sfs.SettleAccount.Entities.Invoices;
namespace Win.Sfs.SettleAccount.Repository.Code namespace Win.Sfs.SettleAccount.Repository.Code
{ {
public class CodeSettingRepository: EfCoreRepository<SettleAccountDbContext, CodeSetting>, ITransientDependency public class CodeSettingRepository:EfCoreRepository<SettleAccountDbContext, CodeSetting>, ITransientDependency
{ {
public CodeSettingRepository(IDbContextProvider<SettleAccountDbContext> dbContextProvider) : base(dbContextProvider) public CodeSettingRepository(IDbContextProvider<SettleAccountDbContext> dbContextProvider) : base(dbContextProvider)
{ {
@ -35,6 +35,14 @@ namespace Win.Sfs.SettleAccount.Repository.Code
} }
return _list; return _list;
} }
} }
} }

1
code/src/Modules/SettleAccount/src/SettleAccount.EntityFrameworkCore/Repository/SettleAccountJob/PendingDeduction/PendingDeductionDapperRepository.cs

@ -439,6 +439,7 @@ namespace Win.Sfs.SettleAccount.Repository.SettleAccountJob.Report
/// <returns></returns> /// <returns></returns>
public virtual INVOICE_GRP GetInvoice(string inv_bill) public virtual INVOICE_GRP GetInvoice(string inv_bill)
{ {
return DbConnection.QueryFirst<INVOICE_GRP>(string.Format("select * from set_INVOICE_GRP where InvbillNum='{0}'",inv_bill)); return DbConnection.QueryFirst<INVOICE_GRP>(string.Format("select * from set_INVOICE_GRP where InvbillNum='{0}'",inv_bill));
} }

Loading…
Cancel
Save