public void Should_Success_Build_BaseResponses() { var idCOAResult = new IdCOAResult() { COACode = "", Code = "", Id = 0 }; var bankAccountCOAResult = new BankAccountCOAResult() { AccountCOA = "", Id = 0 }; var incomeTaxCOAResult = new IncomeTaxCOAResult() { COACodeCredit = "", Id = 0 }; Assert.NotNull(idCOAResult); Assert.NotNull(bankAccountCOAResult); Assert.NotNull(incomeTaxCOAResult); }
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(); }
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(); }