Beispiel #1
0
        public async Task Should_Success_Auto_Create_Others_Bank_Expenditure()
        {
            var serviceProviderMock = new Mock <IServiceProvider>();

            serviceProviderMock.Setup(serviceProvider => serviceProvider.GetService(typeof(IDailyBankTransactionService))).Returns(new DailyBankTransactionServiceHelper());
            serviceProviderMock.Setup(serviceProvider => serviceProvider.GetService(typeof(IHttpClientService))).Returns(new AutoDailyBankTransactionIHttpService());

            var service = new AutoDailyBankTransactionService(serviceProviderMock.Object);

            var model      = new OthersExpenditureProofDocumentModel();
            var itemModels = new List <OthersExpenditureProofDocumentItemModel>()
            {
                new OthersExpenditureProofDocumentItemModel()
                {
                    Debit = 1000
                }
            };

            var result = await service.AutoCreateFromOthersExpenditureProofDocument(model, itemModels);

            Assert.NotEqual(0, result);

            model.AccountBankId = 2;
            var result2 = await service.AutoCreateFromOthersExpenditureProofDocument(model, itemModels);

            Assert.NotEqual(0, result2);
        }
Beispiel #2
0
        public async Task <int> AutoCreateFromOthersExpenditureProofDocument(OthersExpenditureProofDocumentModel model, List <OthersExpenditureProofDocumentItemModel> itemModels)
        {
            var accountBank = await GetAccountBank(model.AccountBankId);

            var total = itemModels.Sum(element => element.Debit);

            var dailyBankTransactionModel = new DailyBankTransactionModel()
            {
                AccountBankAccountName    = accountBank.AccountName,
                AccountBankAccountNumber  = accountBank.AccountNumber,
                AccountBankCode           = accountBank.BankCode,
                AccountBankCurrencyCode   = accountBank.Currency.Code,
                AccountBankCurrencyId     = accountBank.Currency.Id,
                AccountBankCurrencySymbol = accountBank.Currency.Symbol,
                AccountBankId             = accountBank.Id,
                AccountBankName           = accountBank.BankName,
                Date         = model.Date,
                Nominal      = itemModels.Sum(item => item.Debit),
                CurrencyRate = (decimal)model.CurrencyRate,
                ReferenceNo  = model.DocumentNo,
                Remark       = $"{model.Remark}\n\nPembayaran atas {accountBank.Currency.Code} dengan nominal {string.Format("{0:n}", total)}",
                SourceType   = model.Type,
                Status       = "OUT",
                IsPosted     = true
            };

            if (accountBank.Currency.Code != "IDR")
            {
                dailyBankTransactionModel.NominalValas = itemModels.Sum(item => item.Debit) * (decimal)model.CurrencyRate;
            }

            return(await _dailyBankTransactionService.CreateAsync(dailyBankTransactionModel));
        }
        private string DocumentNoGenerator(AccountBankViewModel bank)
        {
            var latestDocumentNo = _dbContext.OthersExpenditureProofDocuments.IgnoreQueryFilters().Where(document => document.DocumentNo.Contains(bank.BankCode)).OrderByDescending(document => document.Id).Select(document => new { document.DocumentNo, document.CreatedUtc }).FirstOrDefault();

            var now    = DateTimeOffset.Now;
            var result = "";

            if (latestDocumentNo == null)
            {
                result = $"{now:yy}{now:MM}{bank.BankCode}K0001";
            }
            else
            {
                if (latestDocumentNo.CreatedUtc.Month != now.Month)
                {
                    result = $"{now:yy}{now:MM}{bank.BankCode}K0001";
                }
                else
                {
                    var numberString = latestDocumentNo.DocumentNo.Split("K").ToList()[1];
                    var number       = int.Parse(numberString) + 1;
                    result = $"{now:yy}{now:MM}{bank.BankCode}K{number.ToString().PadLeft(4, '0')}";
                }
            }

            var model = new OthersExpenditureProofDocumentModel();

            model.DocumentNo = result;
            EntityExtension.FlagForCreate(model, _identityService.Username, "finance-accounting-service");
            EntityExtension.FlagForDelete(model, _identityService.Username, "finance-accounting-service");
            _dbContext.OthersExpenditureProofDocuments.Add(model);
            _dbContext.SaveChanges();

            return(result);
        }
        public async Task <int> AutoJournalFromOthersExpenditureProof(OthersExpenditureProofDocumentModel model, List <OthersExpenditureProofDocumentItemModel> items)
        {
            var journalTransactionModel = new JournalTransactionModel()
            {
                Date        = model.Date,
                Description = "Auto Journal Bukti Pengeluaran Bank Lain - Lain",
                ReferenceNo = model.DocumentNo,
                Status      = "POSTED",
                Items       = new List <JournalTransactionItemModel>()
            };

            journalTransactionModel.Items = items.Select(item => new JournalTransactionItemModel()
            {
                COA = new COAModel()
                {
                    Id = item.COAId,
                },
                Debit = item.Debit
            }).ToList();

            var accountBankCOA = await GetAccountBankCOA(model.AccountBankId);

            var creditItem = new JournalTransactionItemModel()
            {
                COA = new COAModel()
                {
                    Code = accountBankCOA
                },
                Credit = items.Sum(item => item.Debit)
            };

            journalTransactionModel.Items.Add(creditItem);

            return(await _journalTransactionService.CreateAsync(journalTransactionModel));
        }
Beispiel #5
0
 public OthersExpenditureProofDocumentViewModel(OthersExpenditureProofDocumentModel model, List <OthersExpenditureProofDocumentItemModel> items)
 {
     Id            = model.Id;
     AccountBankId = model.AccountBankId;
     Date          = model.Date;
     Type          = model.Type;
     Remark        = model.Remark;
     Items         = items.Select(item => new OthersExpenditureProofDocumentItemViewModel(item)).ToList();
 }
 public OthersExpenditureProofDocumentPDFViewModel(OthersExpenditureProofDocumentModel model, List <OthersExpenditureProofDocumentItemModel> items, AccountBankViewModel accountBank, List <COAModel> coas)
 {
     Id            = model.Id;
     AccountBankId = model.AccountBankId;
     Date          = model.Date;
     Type          = model.Type;
     Remark        = model.Remark;
     Items         = items.Select(item => new OthersExpenditureProofDocumentItemPDFViewModel(item, coas)).ToList();
     Bank          = accountBank;
     DocumentNo    = model.DocumentNo;
     CekBgNo       = model.CekBgNo;
 }
        public async Task <int> AutoRevertFromOthersExpenditureProofDocument(OthersExpenditureProofDocumentModel model, List <OthersExpenditureProofDocumentItemModel> itemModels)
        {
            var accountBank = await GetAccountBank(model.AccountBankId);

            var dailyBankTransactionModel = new DailyBankTransactionModel()
            {
                AccountBankAccountName    = accountBank.AccountName,
                AccountBankAccountNumber  = accountBank.AccountNumber,
                AccountBankCode           = accountBank.BankCode,
                AccountBankCurrencyCode   = accountBank.Currency.Code,
                AccountBankCurrencyId     = accountBank.Currency.Id,
                AccountBankCurrencySymbol = accountBank.Currency.Symbol,
                AccountBankId             = accountBank.Id,
                AccountBankName           = accountBank.BankName,
                Date        = model.Date,
                Nominal     = itemModels.Sum(item => item.Debit),
                ReferenceNo = model.DocumentNo,
                Remark      = "Pembayaran Lain - lain",
                SourceType  = model.Type,
                Status      = "IN"
            };

            return(await _dailyBankTransactionService.CreateAsync(dailyBankTransactionModel));
        }
Beispiel #8
0
        public async Task <int> AutoRevertFromOthersExpenditureProofDocument(OthersExpenditureProofDocumentModel model, List <OthersExpenditureProofDocumentItemModel> itemModels)
        {
            await Task.Delay(1000);

            return(await Task.FromResult(1));
        }
Beispiel #9
0
        public async Task Should_Success_AutoJournalFromOthersExpenditureProof_With_ViewModel()
        {
            //Setup
            var dbContext           = GetDbContext(GetCurrentMethod());
            var serviceProviderMock = GetServiceProvider();

            serviceProviderMock.Setup(s => s.GetService(typeof(FinanceDbContext))).Returns(dbContext);
            serviceProviderMock
            .Setup(x => x.GetService(typeof(IHttpClientService)))
            .Returns(new JournalHttpClientTestService());

            Mock <IJournalTransactionService> journalTransactionServiceMock = new Mock <IJournalTransactionService>();

            journalTransactionServiceMock.Setup(s => s.CreateAsync(It.IsAny <JournalTransactionModel>())).ReturnsAsync(1);

            serviceProviderMock
            .Setup(x => x.GetService(typeof(IJournalTransactionService)))
            .Returns(journalTransactionServiceMock.Object);

            var masterCOAServiceMock = new MasterCOAService(serviceProviderMock.Object);

            serviceProviderMock
            .Setup(x => x.GetService(typeof(IMasterCOAService)))
            .Returns(masterCOAServiceMock);

            var service = new AutoJournalService(dbContext, serviceProviderMock.Object);

            AccountBankViewModel viewModel = new AccountBankViewModel()
            {
                AccountCOA    = "AccountCOA",
                AccountName   = "AccountName",
                AccountNumber = "AccountNumber",
                BankCode      = "BankCode",
                BankName      = "BankName",
                Code          = "Code",
                Currency      = new CurrencyViewModel()
                {
                    Code        = "Rp",
                    Description = "Description",
                    Rate        = 1,
                    Symbol      = "IDR"
                },
            };

            List <int> vbRealizationIds = new List <int>()
            {
                1
            };

            var viewModelOtherProof = new OthersExpenditureProofDocumentModel()
            {
                Date          = DateTime.Now,
                DocumentNo    = "test",
                AccountBankId = 1
            };
            var viewModelOtherProofItems = new List <OthersExpenditureProofDocumentItemModel>()
            {
                new OthersExpenditureProofDocumentItemModel
                {
                    COAId = 1,
                    Debit = 10
                }
            };

            //Act
            var result = await service.AutoJournalFromOthersExpenditureProof(viewModelOtherProof, viewModelOtherProofItems);

            //Assert
            Assert.NotEqual(0, result);
        }