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));
            }
        }
Exemple #2
0
 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);
            });
        }
Exemple #7
0
        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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        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;
 }
Exemple #12
0
        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);
        }
Exemple #14
0
        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);
        }
Exemple #18
0
        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);
        }
Exemple #19
0
        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);
        }
Exemple #21
0
        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);
        }
Exemple #24
0
        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;
        }
Exemple #25
0
        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);
        }