コード例 #1
0
        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();
        }
コード例 #2
0
        public void Should_Success_Generate_UnitAndDivision()
        {
            var result = COAGenerator.GetDivisionAndUnitCOACode("", "");

            Assert.NotNull(result);
        }