public async Task <IActionResult> Put([FromRoute] int id, [FromBody] UnitPaymentOrderViewModel vm) { identityService.Username = User.Claims.Single(p => p.Type.Equals("username")).Value; identityService.Token = Request.Headers["Authorization"].FirstOrDefault().Replace("Bearer ", ""); UnitPaymentOrder m = mapper.Map <UnitPaymentOrder>(vm); IValidateService validateService = (IValidateService)serviceProvider.GetService(typeof(IValidateService)); try { validateService.Validate(vm); int result = await facade.Update(id, m, identityService.Username); return(NoContent()); } catch (ServiceValidationExeption e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.BAD_REQUEST_STATUS_CODE, General.BAD_REQUEST_MESSAGE) .Fail(e); return(BadRequest(Result)); } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public SupplierDto(UnitPaymentOrder element) { int.TryParse(element.SupplierId, out var id); Id = id; Code = element.SupplierCode; Name = element.SupplierName; }
async Task <string> GenerateNo(UnitPaymentOrder model, bool isImport, int clientTimeZoneOffset) { string Year = model.Date.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("yy"); string Month = model.Date.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("MM"); string Supplier = isImport ? "NKI" : "NKL"; string TG = ""; if (model.DivisionName.ToUpper().Equals("GARMENT")) { TG = "G-"; } else if (model.DivisionName.ToUpper().Equals("UMUM") || model.DivisionName.ToUpper().Equals("SPINNING") || model.DivisionName.ToUpper().Equals("FINISHING & PRINTING") || model.DivisionName.ToUpper().Equals("UTILITY") || model.DivisionName.ToUpper().Equals("WEAVING")) { TG = "T-"; } string no = $"{Year}-{Month}-{TG}{Supplier}-"; int Padding = isImport ? 3 : 4; var lastNo = await dbSet.Where(w => w.UPONo.StartsWith(no) && !w.IsDeleted).OrderByDescending(o => o.UPONo).FirstOrDefaultAsync(); if (lastNo == null) { return(no + "1".PadLeft(Padding, '0')); } else { int lastNoNumber = Int32.Parse(lastNo.UPONo.Replace(no, "")) + 1; return(no + lastNoNumber.ToString().PadLeft(Padding, '0')); } }
private async Task CreateDailyBankTransaction(PPHBankExpenditureNote model) { var item = model.Items.FirstOrDefault(); var spb = dbContext.UnitPaymentOrders.FirstOrDefault(entity => entity.UPONo == item.UnitPaymentOrderNo); if (spb == null) { spb = new UnitPaymentOrder() { SupplierId = "1" } } ; int.TryParse(model.BankId, out var bankId); long.TryParse(spb.SupplierId, out var supplierId); var modelToPost = new DailyBankTransactionViewModel() { Bank = new ViewModels.NewIntegrationViewModel.AccountBankViewModel() { Id = bankId, Code = model.BankCode, AccountName = model.BankAccountName, AccountNumber = model.BankAccountNumber, BankCode = model.BankCode, BankName = model.BankName, Currency = new ViewModels.NewIntegrationViewModel.CurrencyViewModel() { Code = model.Currency, } }, Date = model.Date, Nominal = model.TotalIncomeTax, CurrencyRate = model.CurrencyRate.GetValueOrDefault(), ReferenceNo = model.No, ReferenceType = "Bayar Hutang", //Remark = model.Currency != "IDR" ? $"Pembayaran atas {model.BankCurrencyCode} dengan nominal {string.Format("{0:n}", model.GrandTotal)} dan kurs {model.CurrencyCode}" : "", SourceType = "Operasional", Status = "OUT", Supplier = new NewSupplierViewModel() { _id = supplierId, code = spb.SupplierCode, name = spb.SupplierName }, IsPosted = true }; if (model.Currency != "IDR") { modelToPost.NominalValas = model.TotalIncomeTax * model.CurrencyRate; } string dailyBankTransactionUri = "daily-bank-transactions"; //var httpClient = new HttpClientService(identityService); var httpClient = (IHttpClientService)this._serviceProvider.GetService(typeof(IHttpClientService)); var response = await httpClient.PostAsync($"{APIEndpoint.Finance}{dailyBankTransactionUri}", new StringContent(JsonConvert.SerializeObject(modelToPost).ToString(), Encoding.UTF8, General.JsonMediaType)); response.EnsureSuccessStatusCode(); }
public void Should_Success_Get_Data_PaymentOrderMemoLoader() { var dbContext = _dbContext(GetCurrentMethod()); var facade = new PurchasingDispositionFacade(ServiceProvider, dbContext); var bankExpenditureNote = new BankExpenditureNoteModel() { Id = 1, SupplierImport = false, CurrencyCode = "IDR" }; var bankExpenditureNoteDetail = new BankExpenditureNoteDetailModel() { Id = 1, BankExpenditureNoteId = 1, UnitPaymentOrderNo = "Test" }; var unitPaymentOrder = new UnitPaymentOrder() { Id = 1, UPONo = "Test", CurrencyCode = "IDR", DivisionId = "1", UseVat = true, UseIncomeTax = true }; dbContext.BankExpenditureNotes.Add(bankExpenditureNote); dbContext.BankExpenditureNoteDetails.Add(bankExpenditureNoteDetail); dbContext.UnitPaymentOrders.Add(unitPaymentOrder); dbContext.SaveChanges(); var Response = facade.GetUnitPaymentOrderMemoLoader("Test", 1, false, "IDR"); var Response2 = facade.GetUnitPaymentOrderMemoLoader("", 1, false, ""); Assert.NotNull(Response); Assert.NotNull(Response2); }
public SPBDto(UnitPaymentOrder element, List <UnitPaymentOrderDetail> spbDetails, List <UnitPaymentOrderItem> spbItems, List <UnitReceiptNoteItem> unitReceiptNoteItems, List <UnitReceiptNote> unitReceiptNotes) { Id = element.Id; No = element.UPONo; Date = element.Date; Supplier = new SupplierDto(element); Division = new DivisionDto(element.DivisionCode, element.DivisionId, element.DivisionName); UseVat = element.UseVat; UseIncomeTax = element.UseIncomeTax; IncomeTax = new IncomeTaxDto(element.IncomeTaxId, element.IncomeTaxName, element.IncomeTaxRate); IncomeTaxBy = element.IncomeTaxBy; //var selectedSPBDetails = spbDetails.Where(detail =) var selectedSPBItems = spbItems.Where(item => item.UPOId == element.Id).ToList(); var selectedSPBItemIds = selectedSPBItems.Select(item => item.Id).ToList(); var selectedSPBDetails = spbDetails.Where(detail => selectedSPBItemIds.Contains(detail.UPOItemId)).ToList(); UnitCosts = selectedSPBDetails.Select(detail => new UnitCostDto(detail, selectedSPBItems, unitReceiptNoteItems, unitReceiptNotes, element)).ToList(); //Amount = selectedSPBDetails.Sum(detail => detail.PriceTotal); Amount = selectedSPBDetails.Sum(detail => { var quantity = detail.ReceiptQuantity; if (detail.QuantityCorrection > 0) { quantity = detail.QuantityCorrection; } var price = detail.PricePerDealUnit; if (detail.PricePerDealUnitCorrection > 0) { price = detail.PricePerDealUnitCorrection; } var result = quantity * price; if (detail.PriceTotalCorrection > 0) { result = detail.PriceTotalCorrection; } var total = result; /*if (element != null) * { * if (element.UseVat) * { * result += total * 0.1; * } * * if (element.UseIncomeTax && (element.IncomeTaxBy == "Supplier" || element.IncomeTaxBy == "SUPPLIER")) * { * result -= total * (element.IncomeTaxRate / 100); * } * }*/ return(result); }); }
public SPBDto(UnitPaymentOrder element, List <UnitPaymentOrderDetail> spbDetails, List <UnitPaymentOrderItem> spbItems, List <UnitReceiptNoteItem> unitReceiptNoteItems, List <UnitReceiptNote> unitReceiptNotes) { Id = element.Id; No = element.UPONo; Date = element.Date; Supplier = new SupplierDto(element); Division = new DivisionDto(element.DivisionCode, element.DivisionId, element.DivisionName); UseVat = element.UseVat; UseIncomeTax = element.UseIncomeTax; IncomeTax = new IncomeTaxDto(element.IncomeTaxId, element.IncomeTaxName, element.IncomeTaxRate); IncomeTaxBy = element.IncomeTaxBy; //var selectedSPBDetails = spbDetails.Where(detail =) var selectedSPBItems = spbItems.Where(item => item.UPOId == element.Id).ToList(); var selectedSPBItemIds = selectedSPBItems.Select(item => item.Id).ToList(); var selectedSPBDetails = spbDetails.Where(detail => selectedSPBItemIds.Contains(detail.UPOItemId)).ToList(); UnitCosts = selectedSPBDetails.Select(detail => new UnitCostDto(detail, selectedSPBItems, unitReceiptNoteItems, unitReceiptNotes, element)).ToList(); Amount = selectedSPBDetails.Sum(detail => detail.PriceTotal); }
public IActionResult GetPDF(int id) { try { var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf"); identityService.Username = User.Claims.Single(p => p.Type.Equals("username")).Value; UnitPaymentCorrectionNote model = _facade.ReadById(id); UnitPaymentCorrectionNoteViewModel viewModel = _mapper.Map <UnitPaymentCorrectionNoteViewModel>(model); if (indexAcceptPdf < 0) { return(Ok(new { apiVersion = ApiVersion, statusCode = General.OK_STATUS_CODE, message = General.OK_MESSAGE, data = viewModel, })); } else { int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First()); UnitPaymentOrder spbModel = _spbFacade.ReadById((int)model.UPOId); UnitPaymentOrderViewModel viewModelSpb = _mapper.Map <UnitPaymentOrderViewModel>(spbModel); var supplier = _facade.GetSupplier(model.SupplierId); var supplier_address = ""; if (supplier != null) { supplier_address = supplier.address; } var temp_date = new DateTimeOffset(); foreach (var item in viewModel.items) { Lib.Models.UnitReceiptNoteModel.UnitReceiptNote urnModel = _facade.ReadByURNNo(item.uRNNo); UnitReceiptNoteViewModel viewModelUrn = _mapper.Map <UnitReceiptNoteViewModel>(urnModel); if (viewModelUrn != null && temp_date < viewModelUrn.date) { temp_date = viewModelUrn.date; } } UnitPaymentQuantityCorrectionNotePDFTemplate PdfTemplate = new UnitPaymentQuantityCorrectionNotePDFTemplate(); MemoryStream stream = PdfTemplate.GeneratePdfTemplate(viewModel, viewModelSpb, temp_date, supplier_address, identityService.Username, clientTimeZoneOffset); return(new FileStreamResult(stream, "application/pdf") { FileDownloadName = $"{model.UPCNo}.pdf" }); } } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public async Task <int> Create(UnitPaymentCorrectionNote m, string user, int clientTimeZoneOffset = 7) { int Created = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { EntityExtension.FlagForCreate(m, user, USER_AGENT); var supplier = GetSupplier(m.SupplierId); var supplierImport = false; m.SupplierNpwp = null; if (supplier != null) { m.SupplierNpwp = supplier.npwp; supplierImport = supplier.import; } m.UPCNo = await GenerateNo(m, clientTimeZoneOffset, supplierImport, m.DivisionName); if (m.useVat == true) { m.ReturNoteNo = await GeneratePONo(m, clientTimeZoneOffset); } UnitPaymentOrder unitPaymentOrder = this.dbContext.UnitPaymentOrders.Where(s => s.Id == m.UPOId).Include(p => p.Items).ThenInclude(i => i.Details).FirstOrDefault(); unitPaymentOrder.IsCorrection = true; foreach (var item in m.Items) { EntityExtension.FlagForCreate(item, user, USER_AGENT); foreach (var itemSpb in unitPaymentOrder.Items) { foreach (var detailSpb in itemSpb.Details) { if (item.UPODetailId == detailSpb.Id) { detailSpb.QuantityCorrection = detailSpb.QuantityCorrection - item.Quantity; ExternalPurchaseOrderDetail epoDetail = dbContext.ExternalPurchaseOrderDetails.FirstOrDefault(a => a.Id.Equals(detailSpb.EPODetailId)); epoDetail.DOQuantity -= item.Quantity; } } } } this.dbSet.Add(m); Created = await dbContext.SaveChangesAsync(); Created += await AddCorrections(m, user); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Created); }
public IActionResult GetPDF(int id) { try { var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf"); identityService.Username = User.Claims.Single(p => p.Type.Equals("username")).Value; UnitPaymentCorrectionNote model = _facade.ReadById(id); UnitPaymentCorrectionNoteViewModel viewModel = _mapper.Map <UnitPaymentCorrectionNoteViewModel>(model); //if (indexAcceptPdf < 0) //{ // return Ok(new // { // apiVersion = ApiVersion, // statusCode = General.OK_STATUS_CODE, // message = General.OK_MESSAGE, // data = viewModel, // }); //} //else //{ SupplierViewModel supplier = _facade.GetSupplier(viewModel.supplier._id); viewModel.supplier.address = supplier == null ? "" : supplier.address; int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First()); UnitPaymentOrder spbModel = _spbFacade.ReadById((int)model.UPOId); UnitPaymentOrderViewModel viewModelSpb = _mapper.Map <UnitPaymentOrderViewModel>(spbModel); DateTimeOffset? receiptDate = null; var today = new DateTime(1970, 1, 1); foreach (var item in model.Items) { Lib.Models.UnitReceiptNoteModel.UnitReceiptNote urnModel = _facade.GetUrn(item.URNNo); if (receiptDate == null || urnModel.ReceiptDate > receiptDate) { receiptDate = urnModel == null ? today : urnModel.ReceiptDate; } } UnitPaymentPriceCorrectionNotePDFTemplate PdfTemplate = new UnitPaymentPriceCorrectionNotePDFTemplate(); MemoryStream stream = PdfTemplate.GeneratePdfTemplate(viewModel, viewModelSpb, identityService.Username, clientTimeZoneOffset, receiptDate); return(new FileStreamResult(stream, "application/pdf") { FileDownloadName = $"{model.UPCNo}.pdf" }); //} } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public SPBDtoItem(UnitPaymentOrder element, UnitPaymentOrderItem item) { Date = element.Date; Remark = element.Remark; Amount = item.Details.Sum(detail => detail.PricePerDealUnit); UseVat = element.UseVat; UseIncomeTax = element.UseIncomeTax; IncomeTax = new IncomeTaxDto(element.IncomeTaxId, element.IncomeTaxName, element.IncomeTaxRate); IncomeTaxBy = element.IncomeTaxBy; }
public async Task <int> Create(UnitPaymentCorrectionNote model, bool supplierImport, string username, int clientTimeZoneOffset = 7) { int Created = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { EntityExtension.FlagForCreate(model, username, USER_AGENT); model.UPCNo = await GenerateNo(model, supplierImport, clientTimeZoneOffset); if (model.useVat == true) { model.ReturNoteNo = await GeneratePONo(model, clientTimeZoneOffset); } UnitPaymentOrder unitPaymentOrder = this.dbContext.UnitPaymentOrders.FirstOrDefault(s => s.Id == model.UPOId); unitPaymentOrder.IsCorrection = true; foreach (var item in model.Items) { UnitPaymentOrderDetail upoDetail = dbContext.UnitPaymentOrderDetails.FirstOrDefault(s => s.Id == item.UPODetailId); item.PricePerDealUnitBefore = upoDetail.PricePerDealUnit; item.PriceTotalBefore = upoDetail.PriceTotal; upoDetail.PricePerDealUnitCorrection = item.PricePerDealUnitAfter; upoDetail.PriceTotalCorrection = item.PriceTotalAfter; if (item.PriceTotalAfter > 0 && item.PricePerDealUnitAfter <= 0) { upoDetail.PricePerDealUnitCorrection = upoDetail.PricePerDealUnit; } EntityExtension.FlagForCreate(item, username, USER_AGENT); } this.dbSet.Add(model); Created = await dbContext.SaveChangesAsync(); Created += await AddCorrections(model, username); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Created); }
public async Task <int> Create(UnitPaymentOrder model, string user, bool isImport, int clientTimeZoneOffset = 7) { int Created = 0; using (var transaction = dbContext.Database.BeginTransaction()) { try { EntityExtension.FlagForCreate(model, user, USER_AGENT); model.UPONo = await GenerateNo(model, isImport, clientTimeZoneOffset); foreach (var item in model.Items) { EntityExtension.FlagForCreate(item, user, USER_AGENT); foreach (var detail in item.Details) { SetPOItemIdEPONo(detail); EntityExtension.FlagForCreate(detail, user, USER_AGENT); } SetPaid(item, true, user); } SetDueDate(model); this.dbSet.Add(model); Created = await dbContext.SaveChangesAsync(); foreach (var item in model.Items) { foreach (var detail in item.Details) { SetStatus(detail, user); } } await dbContext.SaveChangesAsync(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Created); }
public SPBDto(UnitPaymentOrder element) { Id = element.Id; No = element.UPONo; Date = element.Date; Amount = element.Items.SelectMany(item => item.Details).Sum(detail => detail.PriceTotal); UseVat = element.UseVat; UseIncomeTax = element.UseIncomeTax; IncomeTax = new IncomeTaxDto(element.IncomeTaxId, element.IncomeTaxName, element.IncomeTaxRate); IncomeTaxBy = element.IncomeTaxBy; UnitCosts = new List <UnitCostDto>(); }
private void SetDueDate(UnitPaymentOrder model) { List <DateTimeOffset> DueDates = new List <DateTimeOffset>(); foreach (var item in model.Items) { var unitReceiptNoteDate = dbContext.UnitReceiptNotes.Single(m => m.Id == item.URNId).ReceiptDate; foreach (var detail in item.Details) { var PaymentDueDays = dbContext.ExternalPurchaseOrders.Single(m => m.EPONo.Equals(detail.EPONo)).PaymentDueDays; DueDates.Add(unitReceiptNoteDate.AddDays(Double.Parse(PaymentDueDays ?? "0"))); } } model.DueDate = DueDates.Min(); }
public void Should_QuantityCorrection_Greater_Than_Zero_SPBDto() { var upoDetails = new List <UnitPaymentOrderDetail>() { new UnitPaymentOrderDetail() { Id = 1, UPOItemId = 1, QuantityCorrection = 1, URNItemId = 1, } }; var upoItems = new List <UnitPaymentOrderItem>() { new UnitPaymentOrderItem() { Id = 1, UPOId = 1, URNId = 1, Details = upoDetails } }; var upo = new UnitPaymentOrder() { Id = 1, Items = upoItems, }; var urnItems = new List <UnitReceiptNoteItem>() { new UnitReceiptNoteItem() { Id = 1, URNId = 1, } }; var urns = new List <UnitReceiptNote>() { new UnitReceiptNote() { Id = 1, Items = urnItems } }; var dto = new SPBDto(upo, upoDetails, upoItems, urnItems, urns); Assert.NotNull(dto); }
public void Should_Success_Construct_SPBDto() { var upoDetails = new List <UnitPaymentOrderDetail>() { new UnitPaymentOrderDetail() { Id = 1, UPOItemId = 1, URNItemId = 1, } }; var upoItems = new List <UnitPaymentOrderItem>() { new UnitPaymentOrderItem() { Id = 1, UPOId = 1, URNId = 1, Details = upoDetails } }; var upo = new UnitPaymentOrder() { Id = 1, Items = upoItems, }; var urnItems = new List <UnitReceiptNoteItem>() { new UnitReceiptNoteItem() { Id = 1, URNId = 1, } }; var urns = new List <UnitReceiptNote>() { new UnitReceiptNote() { Id = 1, Items = urnItems } }; var dto = new SPBDto(upo, upoDetails, upoItems, urnItems, urns); Assert.NotNull(dto); }
public PurchasingDocumentExpedition GetNewData(UnitPaymentOrder unitPaymentOrder = null) { List <PurchasingDocumentExpeditionItem> Items = new List <PurchasingDocumentExpeditionItem>() { new PurchasingDocumentExpeditionItem() { ProductId = "ProductId", ProductCode = "ProductCode", ProductName = "ProductName", Price = 10000, Quantity = 5, Uom = "MTR", UnitId = "UnitId", UnitCode = "UnitCode", UnitName = "UnitName" } }; PurchasingDocumentExpedition TestData = new PurchasingDocumentExpedition() { SendToVerificationDivisionDate = DateTimeOffset.UtcNow, UnitPaymentOrderNo = unitPaymentOrder == null?Guid.NewGuid().ToString() : unitPaymentOrder.UPONo, UPODate = unitPaymentOrder == null ? DateTimeOffset.UtcNow : unitPaymentOrder.Date, DueDate = DateTimeOffset.UtcNow, InvoiceNo = "Invoice", PaymentMethod = "CASH", SupplierCode = "Supplier", SupplierName = "Supplier", DivisionCode = "Division", DivisionName = "Division", IncomeTax = 20000, Vat = 100000, IncomeTaxId = "IncomeTaxId", IncomeTaxName = "IncomeTaxName", IncomeTaxRate = 2, TotalPaid = 1000000, Currency = "IDR", Items = Items, }; return(TestData); }
public IActionResult GetPDFNotaRetur(int id) { try { var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf"); UnitPaymentCorrectionNote model = _facade.ReadById(id); UnitPaymentCorrectionNoteViewModel viewModel = _mapper.Map <UnitPaymentCorrectionNoteViewModel>(model); if (indexAcceptPdf < 0) { return(Ok(new { apiVersion = ApiVersion, statusCode = General.OK_STATUS_CODE, message = General.OK_MESSAGE, data = viewModel, })); } else { int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First()); UnitPaymentQuantityCorrectionNotePDFTemplate PdfTemplate = new UnitPaymentQuantityCorrectionNotePDFTemplate(); UnitPaymentOrder spbModel = _spbFacade.ReadById((int)model.UPOId); UnitPaymentOrderViewModel viewModelSpb = _mapper.Map <UnitPaymentOrderViewModel>(spbModel); MemoryStream stream = PdfTemplate.GeneratePdfNotaReturTemplate(viewModel, viewModelSpb, clientTimeZoneOffset); return(new FileStreamResult(stream, "application/pdf") { FileDownloadName = $"{model.UPCNo}.pdf" }); } } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public void Should_Success_Get_Data_DispositionMemoLoader() { var dbContext = _dbContext(GetCurrentMethod()); var facade = new PurchasingDispositionFacade(ServiceProvider, dbContext); var Response = facade.GetDispositionMemoLoader(0); Assert.Null(Response); var purhcasingDisposition = new PurchasingDisposition() { Id = 1, CurrencyCode = "IDR" }; var purchasingDispositionItem = new PurchasingDispositionItem() { PurchasingDispositionId = 1, UseVat = true, UseIncomeTax = true, EPONo = "1" }; var unitPaymentOrder = new UnitPaymentOrder() { Id = 1 }; var unitPaymentOrderItem = new UnitPaymentOrderItem() { Id = 1, UPOId = 1 }; var unitPaymentOrderDetail = new UnitPaymentOrderDetail() { EPONo = "1", UPOItemId = 1 }; dbContext.PurchasingDispositions.Add(purhcasingDisposition); dbContext.PurchasingDispositionItems.Add(purchasingDispositionItem); dbContext.UnitPaymentOrders.Add(unitPaymentOrder); dbContext.UnitPaymentOrderItems.Add(unitPaymentOrderItem); dbContext.UnitPaymentOrderDetails.Add(unitPaymentOrderDetail); dbContext.SaveChanges(); var Response2 = facade.GetDispositionMemoLoader(1); Assert.NotNull(Response2); }
public UnitCostDto(UnitPaymentOrderDetail detail, List <UnitPaymentOrderItem> spbItems, List <UnitReceiptNoteItem> unitReceiptNoteItems, List <UnitReceiptNote> unitReceiptNotes, UnitPaymentOrder element) { var unitReceiptNoteItem = unitReceiptNoteItems.FirstOrDefault(item => item.Id == detail.URNItemId); var unitReceiptNote = unitReceiptNotes.FirstOrDefault(item => item.Id == unitReceiptNoteItem.URNId); Unit = new UnitDto(unitReceiptNote.UnitId, unitReceiptNote.UnitCode, unitReceiptNote.UnitName, unitReceiptNote.DivisionCode, unitReceiptNote.DivisionId, unitReceiptNote.DivisionName); var total = detail.PriceTotal; if (element != null) { if (element.UseVat) { total += detail.PriceTotal * 0.1; } if (element.UseIncomeTax && (element.IncomeTaxBy == "Supplier" || element.IncomeTaxBy == "SUPPLIER")) { total -= detail.PriceTotal * (element.IncomeTaxRate / 100); } } Amount = total; }
private async Task AutoCreateJournalTransaction(PPHBankExpenditureNote model) { var jsonSerializerSettings = new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore }; var divisions = JsonConvert.DeserializeObject <List <IdCOAResult> >(_jsonDivisions ?? "[]", jsonSerializerSettings); var units = JsonConvert.DeserializeObject <List <IdCOAResult> >(_jsonUnits ?? "[]", jsonSerializerSettings); var categories = JsonConvert.DeserializeObject <List <CategoryCOAResult> >(_jsonCategories ?? "[]", jsonSerializerSettings); var incomeTaxes = JsonConvert.DeserializeObject <List <IncomeTaxCOAResult> >(_jsonIncomeTaxes ?? "[]", jsonSerializerSettings); var accountBanks = JsonConvert.DeserializeObject <List <BankAccountCOAResult> >(_jsonAccountBanks ?? "[]", jsonSerializerSettings); var journalTransactionToPost = new JournalTransaction() { Date = model.Date, Description = "Pengajuan Pembayaran PPh", ReferenceNo = model.No, Status = "POSTED", Items = new List <JournalTransactionItem>() }; int.TryParse(model.BankId, out int bankAccountId); var bankAccount = accountBanks.FirstOrDefault(entity => entity.Id == bankAccountId); if (bankAccount == null) { bankAccount = new BankAccountCOAResult() { AccountCOA = "9999.00.00.00" }; } //int.TryParse(model.IncomeTaxId, out int incomeTaxId); //var incomeTax = incomeTaxes.FirstOrDefault(entity => entity.Id == incomeTaxId); //if (incomeTax == null) //{ // incomeTax = new IncomeTaxCOAResult() // { // COACodeCredit = "9999.00" // }; //} var journalDebitItems = new List <JournalTransactionItem>(); var journalCreditItems = new List <JournalTransactionItem>(); var upoNos = model.Items.Select(element => element.UnitPaymentOrderNo).ToList(); var unitPaymentOrders = dbContext.UnitPaymentOrders.Where(entity => upoNos.Contains(entity.UPONo)).ToList(); var purchasingDocumentExpeditionIds = model.Items.Select(item => item.PurchasingDocumentExpeditionId).ToList(); var purchasingDocumentExpeditions = await dbContext.PurchasingDocumentExpeditions.Include(entity => entity.Items).Where(entity => purchasingDocumentExpeditionIds.Contains(entity.Id)).ToListAsync(); foreach (var item in model.Items) { var unitPaymentOrder = unitPaymentOrders.FirstOrDefault(element => element.UPONo == item.UnitPaymentOrderNo); if (unitPaymentOrder == null) { unitPaymentOrder = new UnitPaymentOrder(); } var purchasingDocumentExpedition = purchasingDocumentExpeditions.FirstOrDefault(entity => entity.Id == item.PurchasingDocumentExpeditionId); var division = divisions.FirstOrDefault(entity => entity.Code == purchasingDocumentExpedition.DivisionCode); if (division == null) { division = new IdCOAResult() { COACode = "0" }; } int.TryParse(unitPaymentOrder.IncomeTaxId, out int incomeTaxId); var incomeTax = incomeTaxes.FirstOrDefault(entity => entity.Id == incomeTaxId); if (incomeTax == null) { incomeTax = new IncomeTaxCOAResult() { COACodeCredit = "9999.00" }; } journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{incomeTax.COACodeCredit}.{division.COACode}.00" }, Debit = (decimal)purchasingDocumentExpedition.IncomeTax * (decimal)model.CurrencyRate.GetValueOrDefault() }); } journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = bankAccount.AccountCOA }, Credit = journalDebitItems.Sum(element => element.Debit) }); journalDebitItems = journalDebitItems.GroupBy(grouping => grouping.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.Key }, Debit = s.Sum(sum => Math.Round(sum.Debit.GetValueOrDefault(), 4)), Credit = 0, //Remark = string.Join("\n", s.Select(grouped => grouped.Remark).ToList()) }).ToList(); journalTransactionToPost.Items.AddRange(journalDebitItems); journalCreditItems = journalCreditItems.GroupBy(grouping => grouping.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.Key }, Debit = 0, Credit = s.Sum(sum => Math.Round(sum.Credit.GetValueOrDefault(), 4)), //Remark = string.Join("\n", s.Select(grouped => grouped.Remark).ToList()) }).ToList(); journalTransactionToPost.Items.AddRange(journalCreditItems); if (journalTransactionToPost.Items.Any(item => item.COA.Code.Split(".").FirstOrDefault().Equals("9999"))) { journalTransactionToPost.Status = "DRAFT"; } string journalTransactionUri = "journal-transactions"; var httpClient = (IHttpClientService)_serviceProvider.GetService(typeof(IHttpClientService)); var response = await httpClient.PostAsync($"{APIEndpoint.Finance}{journalTransactionUri}", new StringContent(JsonConvert.SerializeObject(journalTransactionToPost).ToString(), Encoding.UTF8, General.JsonMediaType)); response.EnsureSuccessStatusCode(); }
public MemoryStream Generate(UnitPaymentOrder model, IUnitPaymentOrderFacade facade, int clientTimeZoneOffset = 7, string userName = null) { Font header_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 12); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 7); Document document = new Document(PageSize.A5.Rotate(), 15, 15, 15, 15); MemoryStream stream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, stream); document.Open(); PdfPCell cellLeftNoBorder = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT }; PdfPCell cellCenterNoBorder = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER }; PdfPCell cellCenterTopNoBorder = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_TOP }; PdfPCell cellRightNoBorder = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT }; PdfPCell cellJustifyNoBorder = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_JUSTIFIED }; PdfPCell cellJustifyAllNoBorder = new PdfPCell() { Border = Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_JUSTIFIED_ALL }; PdfPCell cellCenter = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_CENTER, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 5 }; PdfPCell cellRight = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 5 }; PdfPCell cellLeft = new PdfPCell() { Border = Rectangle.TOP_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_MIDDLE, Padding = 5 }; PdfPCell cellRightMerge = new PdfPCell() { Border = Rectangle.NO_BORDER | Rectangle.NO_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.RIGHT_BORDER, HorizontalAlignment = Element.ALIGN_RIGHT, VerticalAlignment = Element.ALIGN_TOP, Padding = 5 }; PdfPCell cellLeftMerge = new PdfPCell() { Border = Rectangle.NO_BORDER | Rectangle.LEFT_BORDER | Rectangle.BOTTOM_BORDER | Rectangle.NO_BORDER, HorizontalAlignment = Element.ALIGN_LEFT, VerticalAlignment = Element.ALIGN_TOP, Padding = 5 }; #region Header PdfPTable tableHeader = new PdfPTable(3); tableHeader.SetWidths(new float[] { 1f, 1f, 1f }); PdfPCell cellHeaderContentLeft = new PdfPCell() { Border = Rectangle.NO_BORDER }; cellHeaderContentLeft.AddElement(new Phrase("PT. MULTIYASA ABADI SENTOSA", header_font)); cellHeaderContentLeft.AddElement(new Phrase("BANARAN, GROGOL, SUKOHARJO", normal_font)); tableHeader.AddCell(cellHeaderContentLeft); PdfPCell cellHeaderContentCenter = new PdfPCell() { Border = Rectangle.NO_BORDER }; cellHeaderContentCenter.AddElement(new Paragraph("NOTA KREDIT", header_font) { Alignment = Element.ALIGN_CENTER }); cellHeaderContentCenter.AddElement(new Paragraph(model.PaymentMethod.ToUpper().Trim().Equals("KREDIT") ? "" : model.PaymentMethod, normal_font) { Alignment = Element.ALIGN_CENTER }); tableHeader.AddCell(cellHeaderContentCenter); PdfPCell cellHeaderContentRight = new PdfPCell() { Border = Rectangle.NO_BORDER }; //cellHeaderContentRight.AddElement(new Phrase("FM-PB-00-06-014/R1", normal_font)); cellHeaderContentRight.AddElement(new Phrase($"SUKOHARJO, {model.Date.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("dd MMMM yyyy", new CultureInfo("id-ID"))}", normal_font)); cellHeaderContentRight.AddElement(new Phrase($"( {model.SupplierCode} ) {model.SupplierName}", normal_font)); cellHeaderContentRight.AddElement(new Phrase(model.SupplierAddress, normal_font)); tableHeader.AddCell(cellHeaderContentRight); PdfPCell cellHeader = new PdfPCell(tableHeader); tableHeader.ExtendLastRow = false; tableHeader.SpacingAfter = 15f; document.Add(tableHeader); #endregion #region Identity PdfPTable tableIdentity = new PdfPTable(3); tableIdentity.SetWidths(new float[] { 1.5f, 4.5f, 3f }); cellLeftNoBorder.Phrase = new Phrase("Nota Pembelian", normal_font); tableIdentity.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($": {model.CategoryName}", normal_font); tableIdentity.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($"Nomor {model.UPONo}", normal_font); tableIdentity.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase("Untuk", normal_font); tableIdentity.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($": {model.DivisionName}", normal_font); tableIdentity.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase("", normal_font); tableIdentity.AddCell(cellLeftNoBorder); PdfPCell cellIdentity = new PdfPCell(tableIdentity); tableIdentity.ExtendLastRow = false; tableIdentity.SpacingAfter = 15f; document.Add(tableIdentity); #endregion #region TableContent PdfPTable tableContent = new PdfPTable(10); tableContent.SetWidths(new float[] { 1.3f, 5f, 3f, 1.5f, 3.5f, 1.5f, 3.5f, 4f, 4f, 3f }); cellCenter.Phrase = new Phrase("No.", bold_font); tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase("Nama Barang", bold_font); tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase("Jumlah", bold_font); tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase("Harga Satuan", bold_font); cellCenter.Colspan = 2; tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase("Harga Total", bold_font); cellCenter.Colspan = 2; tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase("Nomor Order", bold_font); cellCenter.Colspan = 0; tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase("Nomor Bon Unit", bold_font); tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase("Unit", bold_font); tableContent.AddCell(cellCenter); int no = 0; double jumlah = 0; List <DateTimeOffset> DueDates = new List <DateTimeOffset>() { model.DueDate }; List <DateTimeOffset> UnitReceiptNoteDates = new List <DateTimeOffset>() { DateTimeOffset.MinValue }; //foreach (var f in new float[15]) foreach (var item in model.Items) { var unitReceiptNote = facade.GetUnitReceiptNote(item.URNId); var unitReceiptNoteDate = unitReceiptNote.ReceiptDate; UnitReceiptNoteDates.Add(unitReceiptNoteDate); var UnitName = unitReceiptNote.UnitName; foreach (var detail in item.Details) { var PaymentDueDays = facade.GetExternalPurchaseOrder(detail.EPONo).PaymentDueDays; DueDates.Add(unitReceiptNoteDate.AddDays(Double.Parse(PaymentDueDays ?? "0"))); cellCenter.Phrase = new Phrase($"{++no}", normal_font); tableContent.AddCell(cellCenter); cellLeft.Phrase = new Phrase(detail.ProductName, normal_font); tableContent.AddCell(cellLeft); cellCenter.Phrase = new Phrase(string.Format("{0:n2}", detail.ReceiptQuantity) + $" {detail.UomUnit}", normal_font); tableContent.AddCell(cellCenter); cellLeftMerge.Phrase = new Phrase($"{model.CurrencyCode}", normal_font); tableContent.AddCell(cellLeftMerge); cellRightMerge.Phrase = new Phrase(string.Format("{0:n4}", detail.PricePerDealUnit), normal_font); tableContent.AddCell(cellRightMerge); cellLeftMerge.Phrase = new Phrase($"{model.CurrencyCode}", normal_font); tableContent.AddCell(cellLeftMerge); cellRightMerge.Phrase = new Phrase(string.Format("{0:n2}", detail.PriceTotal), normal_font); tableContent.AddCell(cellRightMerge); cellCenter.Phrase = new Phrase($"{detail.PRNo}", normal_font); tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase($"{item.URNNo}", normal_font); tableContent.AddCell(cellCenter); cellCenter.Phrase = new Phrase($"{UnitName}", normal_font); tableContent.AddCell(cellCenter); jumlah += detail.PriceTotal; } } PdfPCell cellContent = new PdfPCell(tableContent); tableContent.ExtendLastRow = false; tableContent.SpacingAfter = 10f; document.Add(tableContent); #endregion #region Tax PdfPTable tableTax = new PdfPTable(3); tableTax.SetWidths(new float[] { 1f, 0.3f, 1f }); var ppn = jumlah / 10; var total = jumlah + (model.UseVat ? ppn : 0); var pph = jumlah * model.IncomeTaxRate / 100; var totalWithPph = total - pph; var withoutIncomeTax = true; if (model.UseIncomeTax && model.IncomeTaxBy == "Supplier") { withoutIncomeTax = false; } if (withoutIncomeTax) { tableTax.AddCell(new PdfPCell() { Border = Rectangle.NO_BORDER }); } else { PdfPTable tableIncomeTax = new PdfPTable(3); tableIncomeTax.SetWidths(new float[] { 5f, 2f, 3f }); tableIncomeTax.AddCell(new PdfPCell(new Phrase(" ", normal_font)) { Border = Rectangle.NO_BORDER, Colspan = 3 }); cellLeftNoBorder.Phrase = new Phrase($"PPh {model.IncomeTaxName} {model.IncomeTaxRate} %", normal_font); tableIncomeTax.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($": {model.CurrencyCode}", normal_font); tableIncomeTax.AddCell(cellLeftNoBorder); cellRightNoBorder.Phrase = new Phrase($"{pph.ToString("n", new CultureInfo("id-ID"))}", normal_font); tableIncomeTax.AddCell(cellRightNoBorder); cellLeftNoBorder.Phrase = new Phrase("Jumlah dibayar Ke Supplier", normal_font); tableIncomeTax.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($": {model.CurrencyCode}", normal_font); tableIncomeTax.AddCell(cellLeftNoBorder); cellRightNoBorder.Phrase = new Phrase($"{totalWithPph.ToString("n", new CultureInfo("id-ID"))}", normal_font); tableIncomeTax.AddCell(cellRightNoBorder); tableTax.AddCell(new PdfPCell(tableIncomeTax) { Border = Rectangle.NO_BORDER }); } tableTax.AddCell(new PdfPCell() { Border = Rectangle.NO_BORDER }); PdfPTable tableVat = new PdfPTable(2); cellJustifyAllNoBorder.Phrase = new Phrase($"Jumlah . . . . . . . . . . . . . . . {model.CurrencyCode}", normal_font); tableVat.AddCell(cellJustifyAllNoBorder); cellRightNoBorder.Phrase = new Phrase($"{jumlah.ToString("n", new CultureInfo("id-ID"))}", normal_font); tableVat.AddCell(cellRightNoBorder); if (model.UseVat) { cellJustifyAllNoBorder.Phrase = new Phrase($"PPn 10 % . . . . . . . . . . . . . . {model.CurrencyCode}", normal_font); tableVat.AddCell(cellJustifyAllNoBorder); } else { cellLeftNoBorder.Phrase = new Phrase(string.Concat("PPn 10 %"), normal_font); tableVat.AddCell(cellLeftNoBorder); } cellRightNoBorder.Phrase = new Phrase(model.UseVat ? $"{ppn.ToString("n", new CultureInfo("id-ID"))}" : "-", normal_font); tableVat.AddCell(cellRightNoBorder); cellJustifyAllNoBorder.Phrase = new Phrase($"T O T A L. . . . . . . . . . . . . . {model.CurrencyCode}", normal_font); tableVat.AddCell(cellJustifyAllNoBorder); cellRightNoBorder.Phrase = new Phrase($"{total.ToString("n", new CultureInfo("id-ID"))}", normal_font); tableVat.AddCell(cellRightNoBorder); tableTax.AddCell(new PdfPCell(tableVat) { Border = Rectangle.NO_BORDER }); PdfPCell taxCell = new PdfPCell(tableTax); tableTax.ExtendLastRow = false; tableTax.SpacingAfter = 15f; document.Add(tableTax); #endregion Paragraph paragraphTerbilang = new Paragraph($"Terbilang : {NumberToTextIDN.terbilang(!withoutIncomeTax ? totalWithPph : total)} {model.CurrencyDescription.ToLower()}", bold_font) { SpacingAfter = 15f }; document.Add(paragraphTerbilang); #region Footer PdfPTable tableFooter = new PdfPTable(3); tableFooter.SetWidths(new float[] { 1f, 0.3f, 1f }); PdfPTable tableFooterLeft = new PdfPTable(3); tableFooterLeft.SetWidths(new float[] { 5f, 0.4f, 4.6f }); cellLeftNoBorder.Phrase = new Phrase("Perjanjian Pembayaran", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase(":", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($"{DueDates.Max().ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("dd MMMM yyyy", new CultureInfo("id-ID"))}", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase("Invoice", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase(":", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($"{model.InvoiceNo ?? "-"}, {model.InvoiceDate.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("dd MMMM yyyy", new CultureInfo("id-ID"))}", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase("No PIB", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase(":", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($"{model.PibNo ?? "-"}", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase("Ket.", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase(":", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($"{model.Remark ?? "-"}", normal_font); tableFooterLeft.AddCell(cellLeftNoBorder); tableFooter.AddCell(new PdfPCell(tableFooterLeft) { Border = Rectangle.NO_BORDER }); tableFooter.AddCell(new PdfPCell() { Border = Rectangle.NO_BORDER }); PdfPTable tableFooterRight = new PdfPTable(3); tableFooterRight.SetWidths(new float[] { 5f, 0.5f, 6.8f }); cellLeftNoBorder.Phrase = new Phrase("Barang Datang", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase(":", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); var maxUnitReceiptNoteDate = UnitReceiptNoteDates.Max(); cellLeftNoBorder.Phrase = new Phrase($"{maxUnitReceiptNoteDate.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("dd MMMM yyyy", new CultureInfo("id-ID"))}", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase("Nomor Faktur Pajak PPN", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase(":", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($"{model.VatNo ?? "-"}", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase("Pembayaran", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase(":", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); cellLeftNoBorder.Phrase = new Phrase($"{model.PaymentMethod ?? "-"}", normal_font); tableFooterRight.AddCell(cellLeftNoBorder); tableFooter.AddCell(new PdfPCell(tableFooterRight) { Border = Rectangle.NO_BORDER }); PdfPCell taxFooter = new PdfPCell(tableFooter); tableFooter.ExtendLastRow = false; tableFooter.SpacingAfter = 30f; document.Add(tableFooter); #endregion #region TableSignature PdfPTable tableSignature = new PdfPTable(4); cellCenterTopNoBorder.Phrase = new Paragraph("Diperiksa,\nVerifkasi\n\n\n\n\n\n\n\n( )", normal_font); tableSignature.AddCell(cellCenterTopNoBorder); cellCenterTopNoBorder.Phrase = new Paragraph("Mengetahui,\nPimpinan Bagian\n\n\n\n\n\n\n\n( )", normal_font); tableSignature.AddCell(cellCenterTopNoBorder); cellCenterTopNoBorder.Phrase = new Paragraph("Tanda Terima,\nBagian Pembelian\n\n\n\n\n\n\n\n( )", normal_font); tableSignature.AddCell(cellCenterTopNoBorder); cellCenterTopNoBorder.Phrase = new Paragraph($"Dibuat Oleh,\n\n\n\n\n\n\n\n\n( {userName ?? " "} )", normal_font); tableSignature.AddCell(cellCenterTopNoBorder); PdfPCell cellSignature = new PdfPCell(tableSignature); tableSignature.ExtendLastRow = false; document.Add(tableSignature); #endregion document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }
public UnitCostDto(UnitPaymentOrderDetail detail, List <UnitPaymentOrderItem> spbItems, List <UnitReceiptNoteItem> unitReceiptNoteItems, List <UnitReceiptNote> unitReceiptNotes, UnitPaymentOrder element) { var unitReceiptNoteItem = unitReceiptNoteItems.FirstOrDefault(item => item.Id == detail.URNItemId); var unitReceiptNote = unitReceiptNotes.FirstOrDefault(item => item.Id == unitReceiptNoteItem.URNId); Unit = new UnitDto(unitReceiptNote.UnitId, unitReceiptNote.UnitCode, unitReceiptNote.UnitName, unitReceiptNote.DivisionCode, unitReceiptNote.DivisionId, unitReceiptNote.DivisionName); var quantity = detail.ReceiptQuantity; if (detail.QuantityCorrection > 0) { quantity = detail.QuantityCorrection; } var price = detail.PricePerDealUnit; if (detail.PricePerDealUnitCorrection > 0) { price = detail.PricePerDealUnitCorrection; } var result = quantity * price; if (detail.PriceTotalCorrection > 0) { result = detail.PriceTotalCorrection; } var total = result; if (element != null) { if (element.UseVat) { result += total * (element.VatRate / 100); //result += total * 0.1; } if (element.UseIncomeTax && (element.IncomeTaxBy == "Supplier" || element.IncomeTaxBy == "SUPPLIER")) { result -= total * (element.IncomeTaxRate / 100); } } Amount = result; }
public async Task <UnitPaymentOrder> GetNewData() { Lib.Models.UnitReceiptNoteModel.UnitReceiptNote unitReceiptNote = await Task.Run(() => this.unitReceiptNoteDataUtil.GetTestData("Unit Test")); List <UnitPaymentOrderDetail> unitPaymentOrderDetails = new List <UnitPaymentOrderDetail>(); foreach (var item in unitReceiptNote.Items) { unitPaymentOrderDetails.Add(new UnitPaymentOrderDetail { URNItemId = item.Id, EPODetailId = item.EPODetailId, PRId = item.PRId, PRNo = item.PRNo, PRItemId = item.PRItemId, ProductId = item.ProductId, ProductCode = item.ProductCode, ProductName = item.ProductName, ReceiptQuantity = item.ReceiptQuantity, UomId = item.UomId, UomUnit = item.Uom, PricePerDealUnit = item.PricePerDealUnit, PriceTotal = item.PricePerDealUnit * item.ReceiptQuantity, QuantityCorrection = item.ReceiptQuantity, ProductRemark = item.ProductRemark }); } List <UnitPaymentOrderItem> unitPaymentOrderItems = new List <UnitPaymentOrderItem> { new UnitPaymentOrderItem { URNId = unitReceiptNote.Id, URNNo = unitReceiptNote.URNNo, DOId = unitReceiptNote.DOId, DONo = unitReceiptNote.DONo, Details = unitPaymentOrderDetails } }; UnitPaymentOrder unitPaymentOrder = new UnitPaymentOrder { DivisionId = "DivisionId", DivisionCode = "DivisionCode", DivisionName = "DivisionName", SupplierId = "SupplierId", SupplierCode = "SupplierCode", SupplierName = "SupplierName", Date = new DateTimeOffset(), CategoryId = "CategoryId ", CategoryCode = "CategoryCode", CategoryName = "CategoryName", CurrencyId = "CurrencyId", CurrencyCode = "CurrencyCode", CurrencyRate = 5, PaymentMethod = "CASH", InvoiceNo = "INV000111", InvoiceDate = new DateTimeOffset(), PibNo = null, UseIncomeTax = false, IncomeTaxId = null, IncomeTaxName = null, IncomeTaxRate = 0, IncomeTaxNo = null, IncomeTaxDate = null, UseVat = false, VatNo = null, VatDate = new DateTimeOffset(), Position = 1, Remark = null, DueDate = new DateTimeOffset(), // ??? Items = unitPaymentOrderItems }; return(unitPaymentOrder); }
public async Task <int> Update(int id, UnitPaymentOrder model, string user) { int Updated = 0; using (var transaction = this.dbContext.Database.BeginTransaction()) { try { var existingModel = this.dbSet.AsNoTracking() .Include(d => d.Items) .ThenInclude(d => d.Details) .SingleOrDefault(m => m.Id == id && !m.IsDeleted); if (existingModel != null && id == model.Id) { EntityExtension.FlagForUpdate(model, user, USER_AGENT); foreach (var item in model.Items) { if (item.Id == 0) { EntityExtension.FlagForCreate(item, user, USER_AGENT); foreach (var detail in item.Details) { SetPOItemIdEPONo(detail); EntityExtension.FlagForCreate(detail, user, USER_AGENT); } } else { EntityExtension.FlagForUpdate(item, user, USER_AGENT); foreach (var detail in item.Details) { EntityExtension.FlagForUpdate(detail, user, USER_AGENT); } } SetPaid(item, true, user); } SetDueDate(model); this.dbContext.Update(model); foreach (var existingItem in existingModel.Items) { var newItem = model.Items.FirstOrDefault(i => i.Id == existingItem.Id); if (newItem == null) { EntityExtension.FlagForDelete(existingItem, user, USER_AGENT); this.dbContext.UnitPaymentOrderItems.Update(existingItem); foreach (var existingDetail in existingItem.Details) { EntityExtension.FlagForDelete(existingDetail, user, USER_AGENT); this.dbContext.UnitPaymentOrderDetails.Update(existingDetail); } SetPaid(existingItem, false, user); } } Updated = await dbContext.SaveChangesAsync(); foreach (var item in model.Items) { foreach (var detail in item.Details) { SetStatus(detail, user); } } await dbContext.SaveChangesAsync(); transaction.Commit(); } else { throw new Exception("Invalid Id"); } } catch (Exception e) { transaction.Rollback(); throw new Exception(e.Message); } } return(Updated); }