private void CreateJournalTransaction(BankExpenditureNoteModel model, IdentityService identityService) { var items = new List <JournalTransactionItem>(); foreach (var detail in model.Details) { var sumDataByUnit = detail.Items.GroupBy(g => g.UnitCode).Select(s => new { s.First().UnitCode, Total = s.Sum(sm => sm.Price) }); foreach (var datum in sumDataByUnit) { var item = new JournalTransactionItem() { COA = new COA() { Code = COAGenerator.GetDebtCOA(model.SupplierImport, detail.DivisionName, datum.UnitCode) }, Debit = datum.Total }; items.Add(item); } } items = items.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() { COA = s.First().COA, Debit = s.Sum(sm => sm.Debit) }).ToList(); var bankJournalItem = new JournalTransactionItem() { COA = new COA() { Code = model.BankAccountCOA }, Credit = items.Sum(s => s.Debit) }; items.Add(bankJournalItem); var modelToPost = new JournalTransaction() { Date = DateTimeOffset.Now, Description = "Bukti Pengeluaran Bank", ReferenceNo = model.DocumentNo, Items = items }; string journalTransactionUri = "journal-transactions"; //var httpClient = new HttpClientService(identityService); var httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService)); var response = httpClient.PostAsync($"{APIEndpoint.Finance}{journalTransactionUri}", new StringContent(JsonConvert.SerializeObject(modelToPost).ToString(), Encoding.UTF8, General.JsonMediaType)).Result; response.EnsureSuccessStatusCode(); }
// // Write a object instance to data output stream // public override void LooseMarshal(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut) { JournalTransaction info = (JournalTransaction)o; base.LooseMarshal(wireFormat, o, dataOut); LooseMarshalNestedObject(wireFormat, (DataStructure)info.TransactionId, dataOut); dataOut.Write(info.Type); dataOut.Write(info.WasPrepared); }
// // Un-marshal an object instance from the data input stream // public override void LooseUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn) { base.LooseUnmarshal(wireFormat, o, dataIn); JournalTransaction info = (JournalTransaction)o; info.TransactionId = (TransactionId)LooseUnmarshalNestedObject(wireFormat, dataIn); info.Type = dataIn.ReadByte(); info.WasPrepared = dataIn.ReadBoolean(); }
// // Write a object instance to data output stream // public override void TightMarshal2(OpenWireFormat wireFormat, Object o, BinaryWriter dataOut, BooleanStream bs) { base.TightMarshal2(wireFormat, o, dataOut, bs); JournalTransaction info = (JournalTransaction)o; TightMarshalNestedObject2(wireFormat, (DataStructure)info.TransactionId, dataOut, bs); dataOut.Write(info.Type); bs.ReadBoolean(); }
// // Un-marshal an object instance from the data input stream // public override void TightUnmarshal(OpenWireFormat wireFormat, Object o, BinaryReader dataIn, BooleanStream bs) { base.TightUnmarshal(wireFormat, o, dataIn, bs); JournalTransaction info = (JournalTransaction)o; info.TransactionId = (TransactionId)TightUnmarshalNestedObject(wireFormat, dataIn, bs); info.Type = dataIn.ReadByte(); info.WasPrepared = bs.ReadBoolean(); }
// // Write the booleans that this object uses to a BooleanStream // public override int TightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs) { JournalTransaction info = (JournalTransaction)o; int rc = base.TightMarshal1(wireFormat, o, bs); rc += TightMarshalNestedObject1(wireFormat, (DataStructure)info.TransactionId, bs); bs.WriteBoolean(info.WasPrepared); return(rc + 1); }
public void RejectTransaction([FromBody] JournalTransaction transaction) { var sqlTransaction = GetDbContext().Select <SqlEntities.JournalTransaction>() .FirstOrDefault(t => t.Id == transaction.Id); if (sqlTransaction == null) { return; } sqlTransaction.Status = (int)TransactionStatusType.Rejected; sqlTransaction.ResolveDate = DateTime.Now; sqlTransaction.ResolvedBy = transaction.ResolvedBy.Id; sqlTransaction.Description = transaction.Description; GetDbContext().Update(sqlTransaction); }
public void AddTransaction([FromBody] JournalTransaction transaction) { var dbContext = GetDbContext(); var sqlTransaction = new SqlEntities.JournalTransaction { CreatedBy = transaction.CreatedBy.Id, CreateDate = DateTime.Now, Description = transaction.Description, Type = (int)transaction.Type, Status = (int)transaction.Status }; int transactionId = dbContext.Insert(sqlTransaction); if (transaction.Attachments != null) { var sqlAttachments = transaction.Attachments.Select(a => new SqlEntities.Attachment { TransactionId = transactionId, Name = a.Name, Path = a.Path }); foreach (var attachment in sqlAttachments) { dbContext.Insert(attachment); } } var sqlEntries = transaction.Entries.Select(entry => new SqlEntities.JournalEntry { Amount = entry.Amount, TransactionId = transactionId, Side = (int)entry.Side, AccountId = entry.Account.Id }); foreach (var entry in sqlEntries) { dbContext.Insert(entry); } }
public void ApproveTransaction([FromBody] JournalTransaction transaction) { var dbContext = GetDbContext(); var sqlTransaction = dbContext.Select <SqlEntities.JournalTransaction>().FirstOrDefault(t => t.Id == transaction.Id); //Terminate if transaction ID does not exist if (sqlTransaction == null) { return; } var entries = dbContext.Select <SqlEntities.JournalEntry>().Where(e => e.TransactionId == transaction.Id); PostTransactions(entries); sqlTransaction.Description = transaction.Description; sqlTransaction.Status = (int)TransactionStatusType.Approved; sqlTransaction.ResolveDate = DateTime.Now; sqlTransaction.ResolvedBy = transaction.ResolvedBy.Id; dbContext.Update(sqlTransaction); }
private static ISubledgerTransaction BuildSubledgerTransaction(TransactionType type, TransactionStatus status, decimal amount) { ISubledgerTransaction subledgerTransaction = null; if (type == TransactionType.Invoice) { subledgerTransaction = new InvoiceTransaction(status, amount); } else if (type == TransactionType.Credit) { subledgerTransaction = new CreditTransaction(amount); } else if (type == TransactionType.JournalAr || type == TransactionType.JournalNar) { subledgerTransaction = new JournalTransaction(amount); } else if (type == TransactionType.Receipt) { subledgerTransaction = new ReceiptTransaction(amount); } else if (type == TransactionType.Overpayment) { subledgerTransaction = new OverpaymentTransaction(amount); } else if (type == TransactionType.CreditBalanceTransferCredit || type == TransactionType.CreditBalanceTransferDebit || type == TransactionType.Allocation) { subledgerTransaction = new CreditBalanceTransferTransaction(amount); } else if (type == TransactionType.Discount) { subledgerTransaction = new DiscountTransaction(amount); } else if (type == TransactionType.Repurchase) { subledgerTransaction = new RepurchaseTransaction(amount); } return(subledgerTransaction); }
private async Task CreateJournalTransaction(BankExpenditureNoteModel model, IdentityService identityService) { //var unitPaymentOrderIds = model.Details.Select(detail => detail.UnitPaymentOrderId).ToList(); //var unitPaymentOrders = dbContext.UnitPaymentOrders.Where(unitPaymentOrder => unitPaymentOrderIds.Contains(unitPaymentOrder.Id)).ToList(); var items = new List <JournalTransactionItem>(); foreach (var detail in model.Details) { //var unitPaymentOrder = unitPaymentOrders.FirstOrDefault(entity => entity.Id == detail.UnitPaymentOrderId); var sumDataByUnit = detail.Items.GroupBy(g => g.UnitCode).Select(s => new { UnitCode = s.Key, Total = s.Sum(sm => sm.Price) }); foreach (var datum in sumDataByUnit) { var item = new JournalTransactionItem() { COA = new COA() { Code = COAGenerator.GetDebtCOA(model.SupplierImport, detail.DivisionName, datum.UnitCode) }, Debit = Convert.ToDecimal(datum.Total), Remark = detail.UnitPaymentOrderNo + " / " + detail.InvoiceNo }; var vatCOA = ""; if (detail.Vat > 0) { if (model.SupplierImport) { vatCOA = "1510.00." + COAGenerator.GetDivisionAndUnitCOACode(detail.DivisionName, datum.UnitCode); } else { vatCOA = "1509.00." + COAGenerator.GetDivisionAndUnitCOACode(detail.DivisionName, datum.UnitCode); } } if (string.IsNullOrWhiteSpace(vatCOA)) { var vatItem = new JournalTransactionItem() { COA = new COA() { Code = vatCOA }, Debit = Convert.ToDecimal(datum.Total * 0.1) }; items.Add(vatItem); } items.Add(item); } } //items = items.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() //{ // COA = s.First().COA, // Debit = s.Sum(sm => Math.Round(sm.Debit.GetValueOrDefault(), 4)) //}).ToList(); var bankJournalItem = new JournalTransactionItem() { COA = new COA() { Code = model.BankAccountCOA }, Credit = items.Sum(s => Math.Round(s.Debit.GetValueOrDefault(), 4)) }; items.Add(bankJournalItem); var modelToPost = new JournalTransaction() { Date = DateTimeOffset.Now, Description = "Bukti Pengeluaran Bank", ReferenceNo = model.DocumentNo, Items = items }; string journalTransactionUri = "journal-transactions"; //var httpClient = new HttpClientService(identityService); var httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService)); var response = await httpClient.PostAsync($"{APIEndpoint.Finance}{journalTransactionUri}", new StringContent(JsonConvert.SerializeObject(modelToPost).ToString(), Encoding.UTF8, General.JsonMediaType)); response.EnsureSuccessStatusCode(); }
private async Task AutoCreateJournalTransaction(UnitPaymentCorrectionNote unitPaymentCorrection) { foreach (var unitPaymentCorrectionItem in unitPaymentCorrection.Items) { var unitReceiptNote = dbContext.UnitReceiptNotes.Where(entity => entity.URNNo == unitPaymentCorrectionItem.URNNo).Include(entity => entity.Items).FirstOrDefault(); 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 purchaseRequestIds = unitReceiptNote.Items.Select(s => s.PRId).ToList(); var purchaseRequests = dbContext.PurchaseRequests.Where(w => purchaseRequestIds.Contains(w.Id)).Select(s => new { s.Id, s.CategoryCode, s.CategoryId }).ToList(); var externalPurchaseOrderIds = unitReceiptNote.Items.Select(s => s.EPOId).ToList(); var externalPurchaseOrders = dbContext.ExternalPurchaseOrders.Where(w => externalPurchaseOrderIds.Contains(w.Id)).Select(s => new { s.Id, s.IncomeTaxId, s.UseIncomeTax, s.IncomeTaxName, s.IncomeTaxRate, s.CurrencyCode, s.CurrencyRate }).ToList(); var externalPurchaseOrderDetailIds = unitReceiptNote.Items.Select(s => s.EPODetailId).ToList(); var externalPurchaseOrderDetails = dbContext.ExternalPurchaseOrderDetails.Where(w => externalPurchaseOrderDetailIds.Contains(w.Id)).Select(s => new { s.Id, s.ProductId, TotalPrice = s.PricePerDealUnit * s.DealQuantity, s.DealQuantity }).ToList(); //var postMany = new List<Task<HttpResponseMessage>>(); //var journalTransactionsToPost = new List<JournalTransaction>(); var journalTransactionToPost = new JournalTransaction() { Date = unitPaymentCorrection.CorrectionDate, Description = $"Nota Koreksi {unitReceiptNote.URNNo}", ReferenceNo = unitPaymentCorrection.UPCNo, Status = "POSTED", Items = new List <JournalTransactionItem>() }; int.TryParse(unitReceiptNote.DivisionId, out var divisionId); var division = divisions.FirstOrDefault(f => f.Id.Equals(divisionId)); if (division == null) { division = new IdCOAResult() { COACode = "0" }; } else { if (string.IsNullOrEmpty(division.COACode)) { division.COACode = "0"; } } int.TryParse(unitReceiptNote.UnitId, out var unitId); var unit = units.FirstOrDefault(f => f.Id.Equals(unitId)); if (unit == null) { unit = new IdCOAResult() { COACode = "00" }; } else { if (string.IsNullOrEmpty(unit.COACode)) { unit.COACode = "00"; } } var journalDebitItems = new List <JournalTransactionItem>(); var journalCreditItems = new List <JournalTransactionItem>(); foreach (var unitReceiptNoteItem in unitReceiptNote.Items) { var purchaseRequest = purchaseRequests.FirstOrDefault(f => f.Id.Equals(unitReceiptNoteItem.PRId)); var externalPurchaseOrder = externalPurchaseOrders.FirstOrDefault(f => f.Id.Equals(unitReceiptNoteItem.EPOId)); var unitPaymentOrderDetail = dbContext.UnitPaymentOrderDetails.FirstOrDefault(entity => entity.URNItemId == unitReceiptNoteItem.Id); //double.TryParse(externalPurchaseOrder.IncomeTaxRate, out var incomeTaxRate); //var currency = await _currencyProvider.GetCurrencyByCurrencyCode(externalPurchaseOrder.CurrencyCode); //var currencyTupples = new Tuple<> var currencyTuples = new List <Tuple <string, DateTimeOffset> > { new Tuple <string, DateTimeOffset>(externalPurchaseOrder.CurrencyCode, unitPaymentCorrection.CorrectionDate) }; var currency = await _currencyProvider.GetCurrencyByCurrencyCodeDateList(currencyTuples); var currencyRate = currency != null && currency.FirstOrDefault() != null ? (decimal)currency.FirstOrDefault().Rate.GetValueOrDefault() : (decimal)externalPurchaseOrder.CurrencyRate; //if (!externalPurchaseOrder.UseIncomeTax) // incomeTaxRate = 1; //var externalPurchaseOrderDetail = externalPurchaseOrderDetails.FirstOrDefault(f => f.Id.Equals(item.EPODetailId)); var externalPOPriceTotal = externalPurchaseOrderDetails.Where(w => w.ProductId.Equals(unitReceiptNoteItem.ProductId) && w.Id.Equals(unitReceiptNoteItem.EPODetailId)).Sum(s => s.TotalPrice); int.TryParse(purchaseRequest.CategoryId, out var categoryId); var category = categories.FirstOrDefault(f => f.Id.Equals(categoryId)); if (category == null) { category = new CategoryCOAResult() { ImportDebtCOA = "9999.00", LocalDebtCOA = "9999.00", PurchasingCOA = "9999.00", StockCOA = "9999.00" }; } else { if (string.IsNullOrEmpty(category.ImportDebtCOA)) { category.ImportDebtCOA = "9999.00"; } if (string.IsNullOrEmpty(category.LocalDebtCOA)) { category.LocalDebtCOA = "9999.00"; } if (string.IsNullOrEmpty(category.PurchasingCOA)) { category.PurchasingCOA = "9999.00"; } if (string.IsNullOrEmpty(category.StockCOA)) { category.StockCOA = "9999.00"; } } double.TryParse(externalPurchaseOrder.IncomeTaxRate, out var incomeTaxRate); var grandTotal = (decimal)0.0; if (unitPaymentCorrection.CorrectionType == "Harga Total") { grandTotal = (decimal)((unitPaymentCorrectionItem.PriceTotalAfter - unitPaymentCorrectionItem.PriceTotalBefore) * unitPaymentCorrectionItem.Quantity); } else if (unitPaymentCorrection.CorrectionType == "Harga Satuan") { grandTotal = (decimal)(unitPaymentCorrectionItem.PricePerDealUnitAfter - unitPaymentCorrectionItem.PricePerDealUnitBefore); } else if (unitPaymentCorrection.CorrectionType == "Jumlah") { grandTotal = (decimal)(unitPaymentOrderDetail.QuantityCorrection * unitPaymentOrderDetail.PricePerDealUnit); } if (grandTotal != 0) { if (unitPaymentCorrection.useIncomeTax) { int.TryParse(externalPurchaseOrder.IncomeTaxId, out var incomeTaxId); var incomeTax = incomeTaxes.FirstOrDefault(f => f.Id.Equals(incomeTaxId)); if (incomeTax == null || string.IsNullOrWhiteSpace(incomeTax.COACodeCredit)) { incomeTax = new IncomeTaxCOAResult() { COACodeCredit = "9999.00" }; } var incomeTaxTotal = (decimal)incomeTaxRate / 100 * grandTotal; journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = unitReceiptNote.SupplierIsImport ? $"{category.ImportDebtCOA}.{division.COACode}.{unit.COACode}" : $"{category.LocalDebtCOA}.{division.COACode}.{unit.COACode}" }, Debit = incomeTaxTotal }); journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{incomeTax.COACodeCredit}.{division.COACode}.{unit.COACode}" }, Credit = incomeTaxTotal }); } if (unitPaymentCorrection.useVat) { var inVATCOA = "1509.00"; var totalVAT = (decimal)0.1 * grandTotal; journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = unitReceiptNote.SupplierIsImport ? $"{category.ImportDebtCOA}.{division.COACode}.{unit.COACode}" : $"{category.LocalDebtCOA}.{division.COACode}.{unit.COACode}" }, Credit = totalVAT }); journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{inVATCOA}.{division.COACode}.{unit.COACode}" }, Debit = totalVAT, Remark = unitPaymentCorrection.VatTaxCorrectionNo }); } if (unitReceiptNote.SupplierIsImport && ((decimal)externalPOPriceTotal * currencyRate) > 100000000) { //Purchasing Journal Item journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.PurchasingCOA}.{division.COACode}.{unit.COACode}" }, Debit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); //Debt Journal Item journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.ImportDebtCOA}.{division.COACode}.{unit.COACode}" }, Credit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); //Stock Journal Item journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.StockCOA}.{division.COACode}.{unit.COACode}" }, Debit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); //Purchasing Journal Item journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.PurchasingCOA}.{division.COACode}.{unit.COACode}" }, Credit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); } else { //Purchasing Journal Item journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.PurchasingCOA}.{division.COACode}.{unit.COACode}" }, Debit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); if (SpecialCategoryCode.Contains(category.Code)) { //Stock Journal Item journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.StockCOA}.{division.COACode}.{unit.COACode}" }, Debit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); } //Debt Journal Item journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = unitReceiptNote.SupplierIsImport ? $"{category.ImportDebtCOA}.{division.COACode}.{unit.COACode}" : $"{category.LocalDebtCOA}.{division.COACode}.{unit.COACode}" }, Credit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); if (SpecialCategoryCode.Contains(category.Code)) { //Purchasing Journal Item journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.PurchasingCOA}.{division.COACode}.{unit.COACode}" }, Credit = grandTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); } } } } 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)) > 0 ? s.Sum(sum => Math.Abs(Math.Round(sum.Debit.GetValueOrDefault(), 4))) : 0, Credit = s.Sum(sum => Math.Round(sum.Debit.GetValueOrDefault(), 4)) > 0 ? 0 : s.Sum(sum => Math.Abs(Math.Round(sum.Debit.GetValueOrDefault(), 4))), 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 }, Credit = s.Sum(sum => Math.Round(sum.Credit.GetValueOrDefault(), 4)) > 0 ? s.Sum(sum => Math.Abs(Math.Round(sum.Credit.GetValueOrDefault(), 4))) : 0, Debit = s.Sum(sum => Math.Round(sum.Credit.GetValueOrDefault(), 4)) > 0 ? 0 : s.Sum(sum => Math.Abs(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"; } if (journalTransactionToPost.Items.Count > 0) { var 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 async Task CreateJournalTransactionUnitReceiptNote(UnitReceiptNote model) { var items = new List <JournalTransactionItem>(); var purchasingItems = new List <JournalTransactionItem>(); var stockItems = new List <JournalTransactionItem>(); var debtItems = new List <JournalTransactionItem>(); var incomeTaxPaidItems = new List <JournalTransactionItem>(); var incomeTaxItems = new List <JournalTransactionItem>(); var productListRemark = new List <string>(); foreach (var item in model.Items) { var purchaseRequest = dbContext.PurchaseRequests.FirstOrDefault(f => f.Id.Equals(item.PRId)); var poExternalItem = dbContext.ExternalPurchaseOrderItems.FirstOrDefault(f => f.PRId.Equals(item.PRId)); var poExternal = dbContext.ExternalPurchaseOrders.FirstOrDefault(f => f.Id.Equals(poExternalItem.EPOId)); var purchasingCOACode = ""; var stockCOACode = ""; var debtCOACode = ""; var incomeTaxCOACode = ""; if (purchaseRequest != null) { purchasingCOACode = COAGenerator.GetPurchasingCOA(purchaseRequest.DivisionName, purchaseRequest.UnitCode, purchaseRequest.CategoryCode); stockCOACode = COAGenerator.GetStockCOA(purchaseRequest.DivisionName, purchaseRequest.UnitCode, purchaseRequest.CategoryCode); debtCOACode = COAGenerator.GetDebtCOA(model.SupplierIsImport, purchaseRequest.DivisionName, purchaseRequest.UnitCode); if (poExternal.UseIncomeTax && double.TryParse(poExternal.IncomeTaxRate, out double test) && double.Parse(poExternal.IncomeTaxRate) > 0) { incomeTaxCOACode = COAGenerator.GetIncomeTaxCOA(poExternal.IncomeTaxName, purchaseRequest.DivisionName, purchaseRequest.UnitCode); } } var journalPurchasingItem = new JournalTransactionItem() { COA = new COA() { Code = purchasingCOACode }, Debit = item.PricePerDealUnit * item.ReceiptQuantity, }; purchasingItems.Add(journalPurchasingItem); var journalStockItem = new JournalTransactionItem() { COA = new COA() { Code = stockCOACode }, Debit = item.PricePerDealUnit * item.ReceiptQuantity, }; stockItems.Add(journalStockItem); var journalDebtItem = new JournalTransactionItem() { COA = new COA() { Code = debtCOACode }, Credit = item.PricePerDealUnit * item.ReceiptQuantity }; debtItems.Add(journalDebtItem); if (poExternal.UseIncomeTax && double.Parse(poExternal.IncomeTaxRate) > 0) { var pphItem = new JournalTransactionItem() { COA = new COA() { Code = incomeTaxCOACode }, Credit = item.PricePerDealUnit * item.ReceiptQuantity * double.Parse(poExternal.IncomeTaxRate) / 100 }; incomeTaxItems.Add(pphItem); var incomeTaxPaid = new JournalTransactionItem() { COA = new COA() { Code = debtCOACode }, Debit = item.PricePerDealUnit * item.ReceiptQuantity * double.Parse(poExternal.IncomeTaxRate) / 100 }; incomeTaxPaidItems.Add(incomeTaxPaid); } productListRemark.Add($"- {item.ProductName}"); } purchasingItems = purchasingItems.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.First().COA.Code }, Debit = s.Sum(sum => sum.Debit), Remark = string.Join("\n", productListRemark) }).ToList(); items.AddRange(purchasingItems); debtItems = debtItems.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.First().COA.Code }, Credit = s.Sum(sum => sum.Credit) }).ToList(); items.AddRange(debtItems); incomeTaxPaidItems = incomeTaxPaidItems.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.First().COA.Code }, Debit = s.Sum(sum => sum.Debit) }).ToList(); if (incomeTaxPaidItems.Count > 0) { items.AddRange(incomeTaxPaidItems); } incomeTaxItems = incomeTaxItems.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.First().COA.Code }, Credit = s.Sum(sum => sum.Credit) }).ToList(); if (incomeTaxItems.Count > 0) { items.AddRange(incomeTaxItems); } stockItems = stockItems.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.First().COA.Code }, Debit = s.Sum(sum => sum.Debit), Remark = string.Join("\n", productListRemark) }).ToList(); items.AddRange(stockItems); var purchasingCreditItems = purchasingItems.GroupBy(g => g.COA.Code).Select(s => new JournalTransactionItem() { COA = new COA() { Code = s.First().COA.Code }, Credit = s.Sum(sum => sum.Debit) }).ToList(); items.AddRange(purchasingCreditItems); var modelToPost = new JournalTransaction() { Date = DateTimeOffset.Now, Description = "Bon Terima Unit", ReferenceNo = model.URNNo, Items = items }; string journalTransactionUri = "journal-transactions"; var httpClient = (IHttpClientService)serviceProvider.GetService(typeof(IHttpClientService)); var response = await httpClient.PostAsync($"{APIEndpoint.Finance}{journalTransactionUri}", new StringContent(JsonConvert.SerializeObject(modelToPost).ToString(), Encoding.UTF8, General.JsonMediaType)); response.EnsureSuccessStatusCode(); }
public async Task <int> AutoJournalVBRequest(VBFormDto form) { var externalPurchaseOrders = _dbContext.ExternalPurchaseOrders.Where(entity => form.EPOIds.Contains(entity.Id)).Select(entity => new { entity.Id, entity.IncomeTaxId, entity.UseIncomeTax, entity.IncomeTaxName, entity.IncomeTaxRate, entity.CurrencyCode, entity.IncomeTaxBy, entity.SupplierIsImport }).ToList(); var externalPurchaseOrderItems = _dbContext.ExternalPurchaseOrderItems.Where(entity => form.EPOIds.Contains(entity.EPOId)).Select(entity => new { entity.Id, entity.EPOId, entity.PRId, entity.UnitId }).ToList(); var epoItemIds = externalPurchaseOrderItems.Select(element => element.Id).ToList(); var externalPurchaseOrderDetails = _dbContext.ExternalPurchaseOrderDetails.Where(entity => epoItemIds.Contains(entity.EPOItemId)).Select(entity => new { entity.Id, entity.EPOItemId, entity.DealQuantity, entity.PricePerDealUnit, entity.IncludePpn }).ToList(); var purchaseRequestIds = externalPurchaseOrderItems.Select(element => element.PRId).ToList(); var purchaseRequests = _dbContext.PurchaseRequests.Where(w => purchaseRequestIds.Contains(w.Id)).Select(s => new { s.Id, s.CategoryCode, s.CategoryId, s.UnitId, s.DivisionId }).ToList(); var journalTransactionToPost = new JournalTransaction() { Date = form.Date, Description = "Approval VB", ReferenceNo = form.DocumentNo, Status = "POSTED", Items = new List <JournalTransactionItem>() }; var journalDebitItems = new List <JournalTransactionItem>(); var journalCreditItems = new List <JournalTransactionItem>(); foreach (var externalPurchaseOrderDetail in externalPurchaseOrderDetails) { var externalPurchaseOrderItem = externalPurchaseOrderItems.FirstOrDefault(element => element.Id == externalPurchaseOrderDetail.EPOItemId); var externalPurchaseOrder = externalPurchaseOrders.FirstOrDefault(element => element.Id == externalPurchaseOrderItem.EPOId); var purchaseRequest = purchaseRequests.FirstOrDefault(element => element.Id == externalPurchaseOrderItem.PRId); int.TryParse(purchaseRequest.CategoryId, out var categoryId); var category = Categories.FirstOrDefault(f => f._id.Equals(categoryId)); if (category == null) { category = new CategoryCOAResult() { ImportDebtCOA = "9999.00", LocalDebtCOA = "9999.00", PurchasingCOA = "9999.00", StockCOA = "9999.00" }; } else { if (string.IsNullOrEmpty(category.ImportDebtCOA)) { category.ImportDebtCOA = "9999.00"; } if (string.IsNullOrEmpty(category.LocalDebtCOA)) { category.LocalDebtCOA = "9999.00"; } if (string.IsNullOrEmpty(category.PurchasingCOA)) { category.PurchasingCOA = "9999.00"; } if (string.IsNullOrEmpty(category.StockCOA)) { category.StockCOA = "9999.00"; } } int.TryParse(purchaseRequest.DivisionId, out var divisionId); var division = Divisions.FirstOrDefault(f => f.Id.Equals(divisionId)); if (division == null) { division = new IdCOAResult() { COACode = "0" }; } else { if (string.IsNullOrEmpty(division.COACode)) { division.COACode = "0"; } } int.TryParse(purchaseRequest.UnitId, out var unitId); var unit = Units.FirstOrDefault(f => f.Id.Equals(unitId)); if (unit == null) { unit = new IdCOAResult() { COACode = "00" }; } else { if (string.IsNullOrEmpty(unit.COACode)) { unit.COACode = "0"; } } int.TryParse(externalPurchaseOrder.IncomeTaxId, out var incomeTaxId); var incomeTax = IncomeTaxes.FirstOrDefault(f => f.Id.Equals(incomeTaxId)); if (incomeTax == null || string.IsNullOrWhiteSpace(incomeTax.COACodeCredit)) { incomeTax = new IncomeTaxCOAResult() { COACodeCredit = "9999.00" }; } double.TryParse(externalPurchaseOrder.IncomeTaxRate, out var incomeTaxRate); var currency = await _currencyProvider.GetCurrencyByCurrencyCode(externalPurchaseOrder.CurrencyCode); var currencyRate = currency != null?currency.Rate.GetValueOrDefault() : 1; var basePrice = externalPurchaseOrderDetail.PricePerDealUnit * externalPurchaseOrderDetail.DealQuantity * currencyRate; var totalPrice = basePrice; if (!externalPurchaseOrderDetail.IncludePpn) { totalPrice += basePrice * 0.1; } if (externalPurchaseOrder.UseIncomeTax && externalPurchaseOrder.IncomeTaxBy.ToUpper() == "SUPPLIER") { totalPrice -= basePrice * (incomeTaxRate / 100); } journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = externalPurchaseOrder.SupplierIsImport ? $"{category.ImportDebtCOA}.{division.COACode}.{unit.COACode}" : $"{category.LocalDebtCOA}.{division.COACode}.{unit.COACode}" }, Debit = (decimal)totalPrice }); journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = currency.Code.ToUpper() == "IDR" ? $"1011.00.{division.COACode}.{unit.COACode}" : $"1012.00.{division.COACode}.{unit.COACode}" }, Credit = (decimal)totalPrice }); } 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 }).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)) }).ToList(); journalTransactionToPost.Items.AddRange(journalCreditItems); if (journalTransactionToPost.Items.Any(item => item.COA.Code.Split(".").FirstOrDefault().Equals("9999"))) { journalTransactionToPost.Status = "DRAFT"; } var journalTransactionUri = "journal-transactions"; var httpClient = _serviceProvider.GetService <IHttpClientService>(); var response = await httpClient.PostAsync($"{APIEndpoint.Finance}{journalTransactionUri}", new StringContent(JsonConvert.SerializeObject(journalTransactionToPost).ToString(), Encoding.UTF8, General.JsonMediaType)); return((int)response.StatusCode); }
public void LoadItems(JournalTransaction transaction) { this.DbContext.Entry(transaction).Collection(t => t.Debits).Load(); this.DbContext.Entry(transaction).Collection(t => t.Credits).Load(); }
/// <summary> /// Constructeur par initialisation avec les dépendances requise pour construire le contrôlleur /// </summary> /// <param name="journalTransaction"></param> public TransactionsController(JournalTransaction journalTransaction) { _journalTransaction = journalTransaction; }
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(); }
private async Task AutoCreateJournalTransaction(PPHBankExpenditureNote model) { var journalTransactionToPost = new JournalTransaction() { Date = model.Date, Description = "Bon Terima Unit", ReferenceNo = model.No, Status = "POSTED", Items = new List <JournalTransactionItem>() }; int.TryParse(model.BankId, out int bankAccountId); var bankAccount = BankAccounts.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>(); journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = bankAccount.AccountCOA }, Credit = (decimal)model.TotalIncomeTax }); 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 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" }; } journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{incomeTax.COACodeCredit}.{division.COACode}.00" }, Debit = (decimal)purchasingDocumentExpedition.IncomeTax }); } 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 async Task <int> AutoJournalVBRequest(VBFormDto form) { 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 unitPaymentOrderItemIds = _dbContext.UnitPaymentOrderItems.Where(entity => form.EPOIds.Contains(entity.UPOId)).Select(entity => entity.Id).ToList(); var unitPaymentOrders = _dbContext.UnitPaymentOrders.Where(entity => form.EPOIds.Contains(entity.Id)).ToList(); var _unitPaymentOrderItems = _dbContext.UnitPaymentOrderItems.Where(entity => form.EPOIds.Contains(entity.UPOId)).ToList(); var urnNos = _unitPaymentOrderItems.Select(element => element.URNNo).ToList(); var _unitReceiptNotes = _dbContext.UnitReceiptNotes.Where(entity => urnNos.Contains(entity.URNNo)).ToList(); var unitReceiptIds = _unitReceiptNotes.Select(element => element.Id).ToList(); var _unitReceiptNoteItems = _dbContext.UnitReceiptNoteItems.Where(entity => unitReceiptIds.Contains(entity.URNId)).ToList(); var prIds = _unitReceiptNoteItems.Select(element => element.PRId).ToList(); var _purchaseRequests = _dbContext.PurchaseRequests.Where(entity => prIds.Contains(entity.Id)).ToList(); var epoNos = _unitReceiptNoteItems.Select(element => element.EPONo).ToList(); var _externalPurchaseOrders = _dbContext.ExternalPurchaseOrders.Where(entity => epoNos.Contains(entity.EPONo)).ToList(); var epoDetailIds = _unitReceiptNoteItems.Select(element => element.EPODetailId).ToList(); var _externalPurchaseOrderDetails = _dbContext.ExternalPurchaseOrderDetails.Where(entity => epoDetailIds.Contains(entity.Id)).ToList(); //var epoDetailIds = _dbContext.UnitPaymentOrderDetails.Where(entity => unitPaymentOrderItemIds.Contains(entity.UPOItemId)).Select(entity => entity.EPODetailId).ToList(); //var externalPurchaseOrderItems = _dbContext.ExternalPurchaseOrderItems.Where(entity => form.EPOIds.Contains(entity.EPOId)).Select(entity => new { entity.Id, entity.EPOId, entity.PRId, entity.UnitId }).ToList(); //var epoItemIds = externalPurchaseOrderItems.Select(element => element.Id).ToList(); //var epoIds = externalPurchaseOrderItems.Select(element => element.EPOId).ToList(); //var externalPurchaseOrders = _dbContext.ExternalPurchaseOrders.Where(entity => epoIds.Contains(entity.Id)).Select(entity => new { entity.Id, entity.IncomeTaxId, entity.UseIncomeTax, entity.IncomeTaxName, entity.IncomeTaxRate, entity.CurrencyCode, entity.IncomeTaxBy, entity.SupplierIsImport }).ToList(); //var externalPurchaseOrderDetails = _dbContext.ExternalPurchaseOrderDetails.Where(entity => epoItemIds.Contains(entity.EPOItemId)).Select(entity => new { entity.Id, entity.EPOItemId, entity.DealQuantity, entity.PricePerDealUnit, entity.IncludePpn }).ToList(); //var purchaseRequestIds = externalPurchaseOrderItems.Select(element => element.PRId).ToList(); //var purchaseRequests = _dbContext.PurchaseRequests.Where(w => purchaseRequestIds.Contains(w.Id)).Select(s => new { s.Id, s.CategoryCode, s.CategoryId, s.UnitId, s.DivisionId }).ToList(); var journalTransactionToPost = new JournalTransaction() { Date = form.Date, Description = "Auto Journal Clearance VB", ReferenceNo = form.DocumentNo, Status = "POSTED", Items = new List <JournalTransactionItem>() }; var journalDebitItems = new List <JournalTransactionItem>(); var journalCreditItems = new List <JournalTransactionItem>(); foreach (var unitPaymentOrder in unitPaymentOrders) { var urnIds = _unitPaymentOrderItems.Where(element => element.UPOId == unitPaymentOrder.Id).Select(element => element.URNId).ToList(); var unitReceiptNotes = _unitReceiptNotes.Where(element => urnIds.Contains(element.Id)).ToList(); foreach (var unitReceiptNote in unitReceiptNotes) { var unitReceiptNoteItems = _unitReceiptNoteItems.Where(element => element.URNId == unitReceiptNote.Id).ToList(); foreach (var unitReceiptNoteItem in unitReceiptNoteItems) { var purchaseRequest = _purchaseRequests.FirstOrDefault(element => element.Id == unitReceiptNoteItem.PRId); var externalPurchaseOrder = _externalPurchaseOrders.FirstOrDefault(element => element.Id == unitReceiptNoteItem.EPOId); var externalPurchaseOrderDetail = _externalPurchaseOrderDetails.FirstOrDefault(element => element.Id == unitReceiptNoteItem.EPODetailId); if (purchaseRequest != null && externalPurchaseOrder != null && externalPurchaseOrderDetail != null) { int.TryParse(unitReceiptNote.DivisionId, out var divisionId); var division = divisions.FirstOrDefault(f => f.Id.Equals(divisionId)); if (division == null) { division = new IdCOAResult() { COACode = "0" }; } else { if (string.IsNullOrEmpty(division.COACode)) { division.COACode = "0"; } } int.TryParse(unitReceiptNote.UnitId, out var unitId); var unit = units.FirstOrDefault(f => f.Id.Equals(unitId)); if (unit == null) { unit = new IdCOAResult() { COACode = "00" }; } else { if (string.IsNullOrEmpty(unit.COACode)) { unit.COACode = "00"; } } int.TryParse(purchaseRequest.CategoryId, out var categoryId); var category = categories.FirstOrDefault(element => element.Id == categoryId); if (category == null) { category = new CategoryCOAResult() { ImportDebtCOA = "9999.00", LocalDebtCOA = "9999.00", PurchasingCOA = "9999.00", StockCOA = "9999.00" }; } else { if (string.IsNullOrEmpty(category.ImportDebtCOA)) { category.ImportDebtCOA = "9999.00"; } if (string.IsNullOrEmpty(category.LocalDebtCOA)) { category.LocalDebtCOA = "9999.00"; } if (string.IsNullOrEmpty(category.PurchasingCOA)) { category.PurchasingCOA = "9999.00"; } if (string.IsNullOrEmpty(category.StockCOA)) { category.StockCOA = "9999.00"; } } var currency = await GetBICurrency(externalPurchaseOrder.CurrencyCode, unitReceiptNote.ReceiptDate); var currencyRate = currency != null ? (decimal)currency.Rate.GetValueOrDefault() : (decimal)externalPurchaseOrder.CurrencyRate; var externalPOPriceTotal = externalPurchaseOrderDetail.PricePerDealUnit * externalPurchaseOrderDetail.DealQuantity; double.TryParse(externalPurchaseOrder.IncomeTaxRate, out var incomeTaxRate); var grandTotal = Convert.ToDecimal(unitReceiptNoteItem.ReceiptQuantity * unitReceiptNoteItem.PricePerDealUnit * (double)currencyRate); var incomeTaxTotal = (decimal)0; var vatTotal = (decimal)0; if (externalPurchaseOrder.UseIncomeTax && externalPurchaseOrder.IncomeTaxBy.ToUpper() == "SUPPLIER") { int.TryParse(externalPurchaseOrder.IncomeTaxId, out var incomeTaxId); var incomeTax = incomeTaxes.FirstOrDefault(f => f.Id.Equals(incomeTaxId)); if (incomeTax == null || string.IsNullOrWhiteSpace(incomeTax.COACodeCredit)) { incomeTax = new IncomeTaxCOAResult() { COACodeCredit = "9999.00" }; } incomeTaxTotal = (decimal)incomeTaxRate / 100 * grandTotal; //journalDebitItems.Add(new UAT.Data.Models.JournalTransactionItem() //{ // Coa = new ChartsOfAccount() // { // Code = unitReceiptNote.SupplierIsImport ? $"{category.ImportDebtCoa}.{division.Coacode}.{unit.Coacode}" : $"{category.LocalDebtCoa}.{division.Coacode}.{unit.Coacode}" // }, // Debit = incomeTaxTotal //}); //journalDebitItems.Add(new JournalTransactionItem() //{ // COA = new COA() // { // Code = $"{incomeTax.COACodeCredit}.{division.COACode}.{unit.COACode}" // }, // Debit = incomeTaxTotal //}); //journalCreditItems.Add(new JournalTransactionItem() //{ // COA = new COA() // { // Code = !string.IsNullOrWhiteSpace(form.Bank.AccountCOA) ? $"{form.Bank.AccountCOA}" : $"9999.00.{division.COACode}.{unit.COACode}" // }, // Credit = incomeTaxTotal //}); } if (externalPurchaseOrder.UseVat) { vatTotal = grandTotal * (decimal)0.1; } if (unitReceiptNote.SupplierIsImport && ((decimal)externalPOPriceTotal * currencyRate) > 100000000) { //Purchasing Journal Item //journalDebitItems.Add(new UAT.Data.Models.JournalTransactionItem() //{ // Coa = new ChartsOfAccount() // { // Code = $"{category.PurchasingCoa}.{division.Coacode}.{unit.Coacode}" // }, // Debit = grandTotal, // Remark = $"- {unitReceiptNoteItem.ProductName}" //}); //Debt Journal Item journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = $"{category.ImportDebtCOA}.{division.COACode}.{unit.COACode}" }, Debit = grandTotal - incomeTaxTotal + vatTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = !string.IsNullOrWhiteSpace(form.Bank.AccountCOA) ? $"{form.Bank.AccountCOA}" : $"9999.00.{division.COACode}.{unit.COACode}" }, Credit = grandTotal - incomeTaxTotal + vatTotal }); //Stock Journal Item //journalDebitItems.Add(new UAT.Data.Models.JournalTransactionItem() //{ // Coa = new ChartsOfAccount() // { // Code = $"{category.StockCoa}.{division.Coacode}.{unit.Coacode}" // }, // Debit = grandTotal, // Remark = $"- {unitReceiptNoteItem.ProductName}" //}); //Purchasing Journal Item //journalDebitItems.Add(new UAT.Data.Models.JournalTransactionItem() //{ // Coa = new ChartsOfAccount() // { // Code = $"{category.PurchasingCoa}.{division.Coacode}.{unit.Coacode}" // }, // Debit = grandTotal, // Remark = $"- {unitReceiptNoteItem.ProductName}" //}); } else { //Purchasing Journal Item //journalDebitItems.Add(new UAT.Data.Models.JournalTransactionItem() //{ // Coa = new ChartsOfAccount() // { // Code = $"{category.PurchasingCoa}.{division.Coacode}.{unit.Coacode}" // }, // Debit = grandTotal, // Remark = $"- {unitReceiptNoteItem.ProductName}" //}); if (SpecialCategoryCode.Contains(category.Code)) { //Stock Journal Item //journalDebitItems.Add(new UAT.Data.Models.JournalTransactionItem() //{ // Coa = new ChartsOfAccount() // { // Code = $"{category.StockCoa}.{division.Coacode}.{unit.Coacode}" // }, // Debit = grandTotal, // Remark = $"- {unitReceiptNoteItem.ProductName}" //}); } //Debt Journal Item journalDebitItems.Add(new JournalTransactionItem() { COA = new COA() { Code = unitReceiptNote.SupplierIsImport ? $"{category.ImportDebtCOA}.{division.COACode}.{unit.COACode}" : $"{category.LocalDebtCOA}.{division.COACode}.{unit.COACode}" }, Debit = grandTotal - incomeTaxTotal + vatTotal, Remark = $"- {unitReceiptNoteItem.ProductName}" }); journalCreditItems.Add(new JournalTransactionItem() { COA = new COA() { Code = !string.IsNullOrWhiteSpace(form.Bank.AccountCOA) ? $"{form.Bank.AccountCOA}" : $"9999.00.{division.COACode}.{unit.COACode}" }, Credit = grandTotal - incomeTaxTotal + vatTotal }); //if (SpecialCategoryCode.Contains(category.Code)) //{ // //Purchasing Journal Item // journalDebitItems.Add(new UAT.Data.Models.JournalTransactionItem() // { // Coa = new ChartsOfAccount() // { // Code = $"{category.PurchasingCoa}.{division.Coacode}.{unit.Coacode}" // }, // Debit = grandTotal, // Remark = $"- {unitReceiptNoteItem.ProductName}" // }); //} } } } } } 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 }).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)) }).ToList(); journalTransactionToPost.Items.AddRange(journalCreditItems); if (journalTransactionToPost.Items.Any(item => item.COA.Code.Split(".").FirstOrDefault().Equals("9999"))) { journalTransactionToPost.Status = "DRAFT"; } var journalTransactionUri = "journal-transactions"; var httpClient = _serviceProvider.GetService <IHttpClientService>(); var response = await httpClient.PostAsync($"{APIEndpoint.Finance}{journalTransactionUri}", new StringContent(JsonConvert.SerializeObject(journalTransactionToPost).ToString(), Encoding.UTF8, General.JsonMediaType)); return((int)response.StatusCode); }