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); }
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)); }
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)); }
public async Task <int> AutoRevertFromOthersExpenditureProofDocument(OthersExpenditureProofDocumentModel model, List <OthersExpenditureProofDocumentItemModel> itemModels) { await Task.Delay(1000); return(await Task.FromResult(1)); }
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); }