public async Task <ActionResult> Post([FromBody] PaymentDispositionNoteViewModel viewModel) { try { VerifyUser(); ValidateService.Validate(viewModel); viewModel.BankAccountCOA = viewModel.AccountBank.AccountCOA; PaymentDispositionNoteModel model = Mapper.Map <PaymentDispositionNoteModel>(viewModel); model.FixFailAutoMapper(viewModel.AccountBank.BankCode); await Service.CreateAsync(model); Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.CREATED_STATUS_CODE, General.OK_MESSAGE) .Ok(); return(Created(String.Concat(Request.Path, "/", 0), Result)); } catch (ServiceValidationException 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 void Should_Success_Validate_Date_Data() { PaymentDispositionNoteViewModel vm = new PaymentDispositionNoteViewModel(); vm.PaymentDate = DateTimeOffset.UtcNow.AddDays(2); Assert.True(vm.Validate(null).Count() > 0); }
public async Task <IActionResult> Put([FromRoute] int id, [FromBody] PaymentDispositionNoteViewModel viewModel) { try { VerifyUser(); ValidateService.Validate(viewModel); PaymentDispositionNoteModel model = Mapper.Map <PaymentDispositionNoteModel>(viewModel); await Service.UpdateAsync(id, model); return(NoContent()); } catch (ServiceValidationException 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 async Task <PaymentDispositionNoteViewModel> GetPDFDataIDRNONIDR() { PaymentDispositionNoteModel model = GetNewData(); PaymentDispositionNoteViewModel viewModel = GetNewDataViewModelIDRNONIDR(); await Service.CreateAsync(model); return(viewModel); }
public async Task <IActionResult> GetById([FromRoute] int id) { try { var indexAcceptPdf = Request.Headers["Accept"].ToList().IndexOf("application/pdf"); var model = await Service.ReadByIdAsync(id); PaymentDispositionNoteViewModel viewModel = Mapper.Map <PaymentDispositionNoteViewModel>(model); if (model == null) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.NOT_FOUND_STATUS_CODE, General.NOT_FOUND_MESSAGE) .Fail(); return(NotFound(Result)); } if (indexAcceptPdf < 0) { return(Ok(new { apiVersion = ApiVersion, data = viewModel, message = General.OK_MESSAGE, statusCode = General.OK_STATUS_CODE })); } else { int clientTimeZoneOffset = int.Parse(Request.Headers["x-timezone-offset"].First()); //PaymentDispositionNotePDFTemplate PdfTemplate = new PaymentDispositionNotePDFTemplate(); //MemoryStream stream = PdfTemplate.GeneratePdfTemplate(viewModel, clientTimeZoneOffset); MemoryStream stream = Service.GeneratePdfTemplate(viewModel, clientTimeZoneOffset); return(new FileStreamResult(stream, "application/pdf") { FileDownloadName = $"Bukti Pembayaran Disposisi {viewModel.PaymentDispositionNo}.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_Validate_Date_Data_IDR() { PaymentDispositionNoteViewModel vm = new PaymentDispositionNoteViewModel(); vm.PaymentDate = DateTimeOffset.UtcNow.AddDays(2); vm.AccountBank = new AccountBankViewModel { Currency = new CurrencyViewModel { Code = "IDR" } }; vm.CurrencyCode = null; vm.CurrencyRate = 0; Assert.True(vm.Validate(null).Count() > 0); }
public void Should_Success_Validate_All_Null_Data() { PaymentDispositionNoteViewModel vm = new PaymentDispositionNoteViewModel(); Assert.True(vm.Validate(null).Count() > 0); }
public MemoryStream GeneratePdfTemplate(PaymentDispositionNoteViewModel viewModel, int clientTimeZoneOffset) { const int MARGIN = 15; Font header_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 18); Font normal_font = FontFactory.GetFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 8); Font bold_font = FontFactory.GetFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1250, BaseFont.NOT_EMBEDDED, 8); Document document = new Document(PageSize.A4, MARGIN, MARGIN, MARGIN, MARGIN); MemoryStream stream = new MemoryStream(); PdfWriter writer = PdfWriter.GetInstance(document, stream); document.Open(); #region Header PdfPTable headerTable = new PdfPTable(2); headerTable.SetWidths(new float[] { 10f, 10f }); headerTable.WidthPercentage = 100; PdfPTable headerTable1 = new PdfPTable(1); PdfPTable headerTable2 = new PdfPTable(2); headerTable2.SetWidths(new float[] { 15f, 40f }); headerTable2.WidthPercentage = 100; PdfPCell cellHeader1 = new PdfPCell() { Border = Rectangle.NO_BORDER }; PdfPCell cellHeader2 = new PdfPCell() { Border = Rectangle.NO_BORDER }; PdfPCell cellHeaderBody = new PdfPCell() { Border = Rectangle.NO_BORDER }; PdfPCell cellHeaderCS2 = new PdfPCell() { Border = Rectangle.NO_BORDER, Colspan = 2 }; cellHeaderCS2.Phrase = new Phrase("BUKTI PENGELUARAN BANK - DISPOSISI", bold_font); cellHeaderCS2.HorizontalAlignment = Element.ALIGN_CENTER; headerTable.AddCell(cellHeaderCS2); cellHeaderCS2.Phrase = new Phrase("", bold_font); cellHeaderCS2.HorizontalAlignment = Element.ALIGN_CENTER; headerTable.AddCell(cellHeaderCS2); cellHeaderBody.Phrase = new Phrase("PT. DANLIRIS", normal_font); headerTable1.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase("Kel. Banaran, Kec. Grogol", normal_font); headerTable1.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase("Sukoharjo - 57100", normal_font); headerTable1.AddCell(cellHeaderBody); cellHeader1.AddElement(headerTable1); headerTable.AddCell(cellHeader1); cellHeaderCS2.Phrase = new Phrase("", bold_font); headerTable2.AddCell(cellHeaderCS2); cellHeaderBody.Phrase = new Phrase("Tanggal", normal_font); headerTable2.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase(": " + viewModel.PaymentDate.AddHours(clientTimeZoneOffset).ToString("dd MMMM yyyy", new CultureInfo("id-ID")), normal_font); headerTable2.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase("NO", normal_font); headerTable2.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase(": " + viewModel.PaymentDispositionNo, normal_font); headerTable2.AddCell(cellHeaderBody); //List<string> supplier = model.Details.Select(m => m.SupplierName).Distinct().ToList(); cellHeaderBody.Phrase = new Phrase("Dibayarkan ke", normal_font); headerTable2.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase(": " + viewModel.Supplier.Name, normal_font); headerTable2.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase("Bank", normal_font); headerTable2.AddCell(cellHeaderBody); cellHeaderBody.Phrase = new Phrase(": " + viewModel.AccountBank.BankName + " - A/C : " + viewModel.AccountBank.AccountNumber, normal_font); headerTable2.AddCell(cellHeaderBody); cellHeader2.AddElement(headerTable2); headerTable.AddCell(cellHeader2); cellHeaderCS2.Phrase = new Phrase("", normal_font); headerTable.AddCell(cellHeaderCS2); document.Add(headerTable); #endregion Header Dictionary <string, double> units = new Dictionary <string, double>(); Dictionary <string, double> percentageUnits = new Dictionary <string, double>(); int index = 1; double total = 0; double totalPay = 0; if (viewModel.AccountBank.Currency.Code != "IDR" || viewModel.CurrencyCode == "IDR") { #region BodyNonIDR PdfPTable bodyNonIDRTable = new PdfPTable(6); PdfPCell bodyNonIDRCell = new PdfPCell(); float[] widthsBodyNonIDR = new float[] { 5f, 10f, 10f, 10f, 7f, 15f }; bodyNonIDRTable.SetWidths(widthsBodyNonIDR); bodyNonIDRTable.WidthPercentage = 100; bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyNonIDRCell.Phrase = new Phrase("No.", bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Phrase = new Phrase("No. Disposisi", bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Phrase = new Phrase("Kategori Barang", bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Phrase = new Phrase("Divisi", bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Phrase = new Phrase("Mata Uang", bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Phrase = new Phrase("Jumlah", bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); foreach (PaymentDispositionNoteItemViewModel item in viewModel.Items) { var details = item.Details .GroupBy(m => new { m.unit.code, m.unit.name }) .Select(s => new { s.First().unit.code, s.First().unit.name, Total = s.Sum(d => d.price) }); bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyNonIDRCell.VerticalAlignment = Element.ALIGN_TOP; bodyNonIDRCell.Phrase = new Phrase((index++).ToString(), normal_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyNonIDRCell.Phrase = new Phrase(item.dispositionNo, normal_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Phrase = new Phrase(item.category.name, normal_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Phrase = new Phrase(item.division.name, normal_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyNonIDRCell.Phrase = new Phrase(viewModel.AccountBank.Currency.Code, normal_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyNonIDRCell.Phrase = new Phrase(string.Format("{0:n4}", item.payToSupplier), normal_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); total += item.payToSupplier; foreach (var detail in details) { if (units.ContainsKey(detail.code)) { units[detail.code] += detail.Total; } else { units.Add(detail.code, detail.Total); } totalPay += detail.Total; } } foreach (var un in units) { percentageUnits[un.Key] = un.Value * 100 / totalPay; } bodyNonIDRCell.Colspan = 3; bodyNonIDRCell.Border = Rectangle.NO_BORDER; bodyNonIDRCell.Phrase = new Phrase("", normal_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Colspan = 1; bodyNonIDRCell.Border = Rectangle.BOX; bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyNonIDRCell.Phrase = new Phrase("Total", bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.Colspan = 1; bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyNonIDRCell.Phrase = new Phrase(viewModel.AccountBank.Currency.Code, bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); bodyNonIDRCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyNonIDRCell.Phrase = new Phrase(string.Format("{0:n4}", total), bold_font); bodyNonIDRTable.AddCell(bodyNonIDRCell); document.Add(bodyNonIDRTable); #endregion BodyNonIDR } else { #region Body PdfPTable bodyTable = new PdfPTable(7); PdfPCell bodyCell = new PdfPCell(); float[] widthsBody = new float[] { 5f, 10f, 10f, 10f, 7f, 10f, 10f }; bodyTable.SetWidths(widthsBody); bodyTable.WidthPercentage = 100; bodyCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyCell.Phrase = new Phrase("No.", bold_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase("No. Disposisi", bold_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase("Kategori Barang", bold_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase("Divisi", bold_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase("Mata Uang", bold_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase("Jumlah", bold_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase("Jumlah (IDR)", bold_font); bodyTable.AddCell(bodyCell); foreach (PaymentDispositionNoteItemViewModel item in viewModel.Items) { var details = item.Details .GroupBy(m => new { m.unit.code, m.unit.name }) .Select(s => new { s.First().unit.code, s.First().unit.name, Total = s.Sum(d => d.price) }); bodyCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyCell.VerticalAlignment = Element.ALIGN_TOP; bodyCell.Phrase = new Phrase((index++).ToString(), normal_font); bodyTable.AddCell(bodyCell); bodyCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyCell.Phrase = new Phrase(item.dispositionNo, normal_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase(item.category.name, normal_font); bodyTable.AddCell(bodyCell); bodyCell.Phrase = new Phrase(item.division.name, normal_font); bodyTable.AddCell(bodyCell); bodyCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyCell.Phrase = new Phrase(viewModel.CurrencyCode, normal_font); bodyTable.AddCell(bodyCell); bodyCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyCell.Phrase = new Phrase(string.Format("{0:n4}", item.payToSupplier), normal_font); bodyTable.AddCell(bodyCell); bodyCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyCell.Phrase = new Phrase(string.Format("{0:n4}", (item.payToSupplier * viewModel.CurrencyRate)), normal_font); bodyTable.AddCell(bodyCell); total += item.payToSupplier; foreach (var detail in details) { if (units.ContainsKey(detail.code)) { units[detail.code] += detail.Total; } else { units.Add(detail.code, detail.Total); } totalPay += detail.Total; } } foreach (var un in units) { percentageUnits[un.Key] = (un.Value * viewModel.CurrencyRate) * 100 / (totalPay * viewModel.CurrencyRate); } bodyCell.Colspan = 3; bodyCell.Border = Rectangle.NO_BORDER; bodyCell.Phrase = new Phrase("", normal_font); bodyTable.AddCell(bodyCell); bodyCell.Colspan = 1; bodyCell.Border = Rectangle.BOX; bodyCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyCell.Phrase = new Phrase("Total", bold_font); bodyTable.AddCell(bodyCell); bodyCell.Colspan = 1; bodyCell.HorizontalAlignment = Element.ALIGN_CENTER; bodyCell.Phrase = new Phrase(viewModel.AccountBank.Currency.Code, bold_font); bodyTable.AddCell(bodyCell); bodyCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyCell.Phrase = new Phrase(string.Format("{0:n4}", total), bold_font); bodyTable.AddCell(bodyCell); bodyCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyCell.Phrase = new Phrase(string.Format("{0:n4}", total * viewModel.CurrencyRate), bold_font); bodyTable.AddCell(bodyCell); document.Add(bodyTable); #endregion Body } #region BodyFooter PdfPTable bodyFooterTable = new PdfPTable(6); bodyFooterTable.SetWidths(new float[] { 3f, 6f, 2f, 6f, 10f, 10f }); bodyFooterTable.WidthPercentage = 100; PdfPCell bodyFooterCell = new PdfPCell() { Border = Rectangle.NO_BORDER }; bodyFooterCell.Colspan = 1; bodyFooterCell.Phrase = new Phrase(""); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Colspan = 1; bodyFooterCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyFooterCell.Phrase = new Phrase("Rincian per bagian:", normal_font); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Colspan = 4; bodyFooterCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyFooterCell.Phrase = new Phrase(""); bodyFooterTable.AddCell(bodyFooterCell); total = viewModel.CurrencyId > 0 ? total * viewModel.CurrencyRate : total; foreach (var unit in percentageUnits) { bodyFooterCell.Colspan = 1; bodyFooterCell.Phrase = new Phrase(""); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Phrase = new Phrase(unit.Key, normal_font); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Phrase = new Phrase(viewModel.AccountBank.Currency.Code, normal_font); bodyFooterTable.AddCell(bodyFooterCell); //bodyFooterCell.Phrase = new Phrase(string.Format("{0:n4}", unit.Value), normal_font); //bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Phrase = new Phrase(string.Format("{0:n4}", unit.Value * total / 100), normal_font); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Colspan = 2; bodyFooterCell.Phrase = new Phrase(""); bodyFooterTable.AddCell(bodyFooterCell); } bodyFooterCell.Colspan = 6; bodyFooterCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyFooterCell.Phrase = new Phrase(""); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Colspan = 1; bodyFooterCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyFooterCell.Phrase = new Phrase(""); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Phrase = new Phrase("Terbilang", normal_font); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.HorizontalAlignment = Element.ALIGN_RIGHT; bodyFooterCell.Phrase = new Phrase(": " + viewModel.AccountBank.Currency.Code, normal_font); bodyFooterTable.AddCell(bodyFooterCell); bodyFooterCell.Colspan = 3; bodyFooterCell.HorizontalAlignment = Element.ALIGN_LEFT; bodyFooterCell.Phrase = new Phrase(NumberToTextIDN.terbilang(total), normal_font); bodyFooterTable.AddCell(bodyFooterCell); document.Add(bodyFooterTable); document.Add(new Paragraph("\n")); #endregion BodyFooter #region Footer PdfPTable footerTable = new PdfPTable(2); PdfPCell cellFooter = new PdfPCell() { Border = Rectangle.NO_BORDER }; float[] widthsFooter = new float[] { 10f, 5f }; footerTable.SetWidths(widthsFooter); footerTable.WidthPercentage = 100; cellFooter.Phrase = new Phrase("Dikeluarkan dengan cek/BG No. : " + viewModel.BGCheckNumber, normal_font); footerTable.AddCell(cellFooter); cellFooter.Phrase = new Phrase("", normal_font); footerTable.AddCell(cellFooter); PdfPTable signatureTable = new PdfPTable(3); PdfPCell signatureCell = new PdfPCell() { HorizontalAlignment = Element.ALIGN_CENTER }; signatureCell.Phrase = new Phrase("Bag. Keuangan", normal_font); signatureTable.AddCell(signatureCell); signatureCell.Colspan = 2; signatureCell.HorizontalAlignment = Element.ALIGN_CENTER; signatureCell.Phrase = new Phrase("Direksi", normal_font); signatureTable.AddCell(signatureCell); signatureTable.AddCell(new PdfPCell() { Phrase = new Phrase("---------------------------", normal_font), FixedHeight = 40, VerticalAlignment = Element.ALIGN_BOTTOM, HorizontalAlignment = Element.ALIGN_CENTER }); signatureTable.AddCell(new PdfPCell() { Phrase = new Phrase("---------------------------", normal_font), FixedHeight = 40, Border = Rectangle.NO_BORDER, VerticalAlignment = Element.ALIGN_BOTTOM, HorizontalAlignment = Element.ALIGN_CENTER }); signatureTable.AddCell(new PdfPCell() { Phrase = new Phrase("---------------------------", normal_font), FixedHeight = 40, Border = Rectangle.NO_BORDER, VerticalAlignment = Element.ALIGN_BOTTOM, HorizontalAlignment = Element.ALIGN_CENTER }); footerTable.AddCell(new PdfPCell(signatureTable)); cellFooter.Phrase = new Phrase("", normal_font); footerTable.AddCell(cellFooter); document.Add(footerTable); #endregion Footer document.Close(); byte[] byteInfo = stream.ToArray(); stream.Write(byteInfo, 0, byteInfo.Length); stream.Position = 0; return(stream); }