public async Task <PaymentDispositionNoteModel> GetTestData() { PaymentDispositionNoteModel model = GetNewData(); await Service.CreateAsync(model); return(await Service.ReadByIdAsync(model.Id)); }
public Task <int> AutoRevertFromPaymentDisposition(PaymentDispositionNoteModel model) { var nominal = model.Items.Sum(item => (decimal)item.TotalPaid * (decimal)model.CurrencyRate); var dailyBankTransactionModel = new DailyBankTransactionModel() { AccountBankAccountName = model.BankAccountName, AccountBankAccountNumber = model.BankAccountNumber, AccountBankCode = model.BankCode, AccountBankCurrencyCode = model.BankCurrencyCode, AccountBankCurrencyId = model.BankCurrencyId, AccountBankCurrencySymbol = model.BankCurrencyCode, AccountBankId = model.BankId, AccountBankName = model.BankName, Date = model.PaymentDate, Nominal = nominal, ReferenceNo = model.PaymentDispositionNo, ReferenceType = "Pembayaran Disposisi", Remark = model.CurrencyCode != "IDR" ? $"Pembayaran atas {model.BankCurrencyCode} dengan nominal {string.Format("{0:n}", nominal)} dan kurs {model.CurrencyCode}" : "", SourceType = model.TransactionType, SupplierCode = model.SupplierCode, SupplierId = model.SupplierId, SupplierName = model.SupplierName, Status = "IN" }; return(_dailyBankTransactionService.CreateAsync(dailyBankTransactionModel)); }
public Task <int> AutoRevertFromPaymentDisposition(PaymentDispositionNoteModel model) { var dailyBankTransactionModel = new DailyBankTransactionModel() { AccountBankAccountName = model.BankAccountName, AccountBankAccountNumber = model.BankAccountNumber, AccountBankCode = model.BankCode, AccountBankCurrencyCode = model.CurrencyCode, AccountBankCurrencyId = model.CurrencyId, AccountBankCurrencySymbol = model.CurrencyCode, AccountBankId = model.BankId, AccountBankName = model.BankName, Date = model.PaymentDate, Nominal = model.Items.Sum(item => (decimal)item.TotalPaid * (decimal)model.CurrencyRate), ReferenceNo = model.PaymentDispositionNo, Remark = "Auto Generate Disposition Payment", SourceType = model.TransactionType, SupplierCode = model.SupplierCode, SupplierId = model.SupplierId, SupplierName = model.SupplierName, Status = "IN" }; return(_dailyBankTransactionService.CreateAsync(dailyBankTransactionModel)); }
public async Task <IActionResult> Put([FromRoute] int id, [FromBody] PaymentDispositionNoteViewModel viewModel) { try { VerifyUser(); ValidateService.Validate(viewModel); PaymentDispositionNoteModel model = Mapper.Map <PaymentDispositionNoteModel>(viewModel); await Service.UpdateAsync(id, model); return(NoContent()); } catch (ServiceValidationException e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.BAD_REQUEST_STATUS_CODE, General.BAD_REQUEST_MESSAGE) .Fail(e); return(BadRequest(Result)); } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public async Task Should_Success_Auto_Revert_Disposition_Payment() { var serviceProviderMock = new Mock <IServiceProvider>(); serviceProviderMock.Setup(serviceProvider => serviceProvider.GetService(typeof(IDailyBankTransactionService))).Returns(new DailyBankTransactionServiceHelper()); var service = new AutoDailyBankTransactionService(serviceProviderMock.Object); var dispositionModel = new PaymentDispositionNoteModel() { PaymentDate = DateTimeOffset.Now, Items = new List <PaymentDispositionNoteItemModel>() { new PaymentDispositionNoteItemModel() { Details = new List <PaymentDispositionNoteDetailModel>() { new PaymentDispositionNoteDetailModel() } } } }; var result = await service.AutoRevertFromPaymentDisposition(dispositionModel); Assert.NotEqual(0, result); }
public async Task <ActionResult> Post([FromBody] PaymentDispositionNoteViewModel viewModel) { try { VerifyUser(); ValidateService.Validate(viewModel); viewModel.BankAccountCOA = viewModel.AccountBank.AccountCOA; PaymentDispositionNoteModel model = Mapper.Map <PaymentDispositionNoteModel>(viewModel); model.FixFailAutoMapper(viewModel.AccountBank.BankCode); await Service.CreateAsync(model); Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.CREATED_STATUS_CODE, General.OK_MESSAGE) .Ok(); return(Created(String.Concat(Request.Path, "/", 0), Result)); } catch (ServiceValidationException e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.BAD_REQUEST_STATUS_CODE, General.BAD_REQUEST_MESSAGE) .Fail(e); return(BadRequest(Result)); } catch (Exception e) { Dictionary <string, object> Result = new ResultFormatter(ApiVersion, General.INTERNAL_ERROR_STATUS_CODE, e.Message) .Fail(); return(StatusCode(General.INTERNAL_ERROR_STATUS_CODE, Result)); } }
public async Task Should_Success_Update_Data() { PaymentDispositionNoteService service = new PaymentDispositionNoteService(GetServiceProvider().Object, _dbContext(GetCurrentMethod())); PaymentDispositionNoteModel model = await _dataUtil(service, GetCurrentMethod()).GetTestData(); var newModel = await service.ReadByIdAsync(model.Id); newModel.BGCheckNumber = "newBG"; var Response1 = await service.UpdateAsync(newModel.Id, newModel); Assert.NotEqual(0, Response1); PaymentDispositionNoteModel model2 = await _dataUtil(service, GetCurrentMethod()).GetTestData(); //var newModel2 = await service.ReadByIdAsync(model.Id); PaymentDispositionNoteModel newModel2 = new PaymentDispositionNoteModel(); newModel2.Id = model2.Id; newModel2.Items = new List <PaymentDispositionNoteItemModel> { model2.Items.First() }; var Response = await service.UpdateAsync(model2.Id, newModel2); Assert.NotEqual(0, Response); }
public async Task <int> CreateAsync(PaymentDispositionNoteModel model) { model.PaymentDispositionNo = await GenerateNo(model, 7); CreateModel(model); return(await DbContext.SaveChangesAsync()); }
public async Task Should_Success_Create_Data() { PaymentDispositionNoteService service = new PaymentDispositionNoteService(GetServiceProvider().Object, _dbContext(GetCurrentMethod())); PaymentDispositionNoteModel model = _dataUtil(service, GetCurrentMethod()).GetNewData(); var Response = await service.CreateAsync(model); Assert.NotEqual(0, Response); }
public void Should_Success_Map_Payment_Disposition() { var mapper = new MapperConfiguration(configuration => configuration.AddProfile <PaymentDispositionNoteProfile>()).CreateMapper(); var model = new PaymentDispositionNoteModel(); var vm = mapper.Map <PaymentDispositionNoteViewModel>(model); Assert.True(true); }
public async Task <PaymentDispositionNoteViewModel> GetPDFDataIDRNONIDR() { PaymentDispositionNoteModel model = GetNewData(); PaymentDispositionNoteViewModel viewModel = GetNewDataViewModelIDRNONIDR(); await Service.CreateAsync(model); return(viewModel); }
public async Task Should_Success_Get_Data_By_Id() { PaymentDispositionNoteService service = new PaymentDispositionNoteService(GetServiceProvider().Object, _dbContext(GetCurrentMethod())); PaymentDispositionNoteModel model = await _dataUtil(service, GetCurrentMethod()).GetTestData(); var Response = await service.ReadByIdAsync(model.Id); Assert.NotNull(Response); }
public async Task <int> CreateAsync(PaymentDispositionNoteModel model) { model.PaymentDispositionNo = await GenerateNo(model, 7); CreateModel(model); await _autoDailyBankTransactionService.AutoCreateFromPaymentDisposition(model); return(await DbContext.SaveChangesAsync()); }
public async Task <int> UpdateAsync(int id, PaymentDispositionNoteModel model) { var existingModel = DbSet .Include(d => d.Items) .ThenInclude(d => d.Details) .Single(dispo => dispo.Id == id && !dispo.IsDeleted); UpdateModel(id, model); //await _autoDailyBankTransactionService.AutoRevertFromPaymentDisposition(existingModel); //await _autoDailyBankTransactionService.AutoCreateFromPaymentDisposition(model); return(await DbContext.SaveChangesAsync()); }
public async Task Should_Success_Get_Report_Xls() { PaymentDispositionNoteService service = new PaymentDispositionNoteService(GetServiceProvider().Object, _dbContext(GetCurrentMethod())); PaymentDispositionNoteModel model = _dataUtil(service, GetCurrentMethod()).GetNewData(); var xls = service.GetXls(new List <ReportDto>() { new ReportDto(1, "", DateTimeOffset.Now, 1, "", DateTimeOffset.Now, DateTimeOffset.Now, 1, "", 1, "", 1, "", false, "", 1, "", 1, "", 1, 1, "") }); Assert.NotNull(xls); }
public async Task Should_Success_Get_Data_Details_By_EPOId() { PaymentDispositionNoteService service = new PaymentDispositionNoteService(GetServiceProvider().Object, _dbContext(GetCurrentMethod())); PaymentDispositionNoteModel model = await _dataUtil(service, GetCurrentMethod()).GetTestData(); var item = model.Items.First(); var detail = item.Details.First(); var epoId = detail.EPOId; var Response = service.ReadDetailsByEPOId(detail.EPOId); Assert.NotNull(Response); }
public async Task <int> CreateAsync(PaymentDispositionNoteModel model) { model.PaymentDispositionNo = await GetDocumentNo("K", model.BankCode, IdentityService.Username); if (model.BankCurrencyCode != "IDR") { var garmentCurrency = await GetGarmentCurrency(model.BankCurrencyCode); model.CurrencyRate = garmentCurrency.Rate.GetValueOrDefault(); } CreateModel(model); //await _autoDailyBankTransactionService.AutoCreateFromPaymentDisposition(model); return(await DbContext.SaveChangesAsync()); }
public void UpdateModel(int id, PaymentDispositionNoteModel model) { PaymentDispositionNoteModel exist = DbSet .Include(d => d.Items) .ThenInclude(d => d.Details) .Single(dispo => dispo.Id == id && !dispo.IsDeleted); exist.BGCheckNumber = model.BGCheckNumber; exist.PaymentDate = model.PaymentDate; foreach (var item in exist.Items) { PaymentDispositionNoteItemModel itemModel = model.Items.FirstOrDefault(prop => prop.Id.Equals(item.Id)); if (itemModel == null) { PurchasingDispositionExpeditionModel expedition = DbContext.PurchasingDispositionExpeditions.FirstOrDefault(ex => ex.Id.Equals(item.PurchasingDispositionExpeditionId)); expedition.IsPaid = false; expedition.BankExpenditureNoteNo = null; expedition.BankExpenditureNoteDate = DateTimeOffset.MinValue; EntityExtension.FlagForDelete(item, IdentityService.Username, UserAgent, true); foreach (var detail in item.Details) { EntityExtension.FlagForDelete(detail, IdentityService.Username, UserAgent, true); //DbContext.PaymentDispositionNoteDetails.Update(detail); } //DbContext.PaymentDispositionNoteItems.Update(item); } else { EntityExtension.FlagForUpdate(item, IdentityService.Username, UserAgent); foreach (var detail in DbContext.PaymentDispositionNoteDetails.AsNoTracking().Where(p => p.PaymentDispositionNoteItemId == item.Id)) { EntityExtension.FlagForUpdate(detail, IdentityService.Username, UserAgent); } } } EntityExtension.FlagForUpdate(exist, IdentityService.Username, UserAgent); //DbSet.Update(exist); }
public async Task Should_Success_Get_Report() { try { PaymentDispositionNoteService service = new PaymentDispositionNoteService(GetServiceProvider().Object, _dbContext(GetCurrentMethod())); PaymentDispositionNoteModel model = _dataUtil(service, GetCurrentMethod()).GetNewData(); await service.CreateAsync(model); var item = model.Items.FirstOrDefault(); var result = service.GetReport(model.Id, item.DispositionId, model.SupplierId, item.DivisionId, DateTimeOffset.MinValue, DateTimeOffset.MaxValue); Assert.NotEmpty(result); } catch (Exception e) { } }
public void CreateModel(PaymentDispositionNoteModel model) { EntityExtension.FlagForCreate(model, IdentityService.Username, UserAgent); foreach (var item in model.Items) { PurchasingDispositionExpeditionModel expedition = DbContext.PurchasingDispositionExpeditions.FirstOrDefault(ex => ex.Id.Equals(item.PurchasingDispositionExpeditionId)); EntityExtension.FlagForCreate(item, IdentityService.Username, UserAgent); expedition.IsPaid = true; expedition.BankExpenditureNoteNo = model.PaymentDispositionNo; expedition.BankExpenditureNoteDate = model.PaymentDate; foreach (var detail in item.Details) { EntityExtension.FlagForCreate(detail, IdentityService.Username, UserAgent); } } DbSet.Add(model); }
public async Task <PaymentDispositionNotePostDto> GetNewPostDto() { PaymentDispositionNoteModel model = GetNewData(); await Service.CreateAsync(model); var read = await Service.ReadByIdAsync((int)model.Id); return(new PaymentDispositionNotePostDto { ListIds = new List <PaymentDispositionNotePostIdDto> { new PaymentDispositionNotePostIdDto { Id = read.Id } } }); }
public async Task DeleteModel(int id) { PaymentDispositionNoteModel model = await ReadByIdAsync(id); foreach (var item in model.Items) { PurchasingDispositionExpeditionModel expedition = DbContext.PurchasingDispositionExpeditions.FirstOrDefault(ex => ex.Id.Equals(item.PurchasingDispositionExpeditionId)); EntityExtension.FlagForDelete(item, IdentityService.Username, UserAgent, true); expedition.IsPaid = false; expedition.BankExpenditureNoteNo = null; expedition.BankExpenditureNoteDate = DateTimeOffset.MinValue; foreach (var detail in item.Details) { EntityExtension.FlagForDelete(detail, IdentityService.Username, UserAgent, true); } } EntityExtension.FlagForDelete(model, IdentityService.Username, UserAgent, true); DbSet.Update(model); }
public Task <int> AutoCreateFromPaymentDisposition(PaymentDispositionNoteModel model) { var nominal = model.Items.Sum(item => Math.Round((decimal)item.SupplierPayment, 2)); var dailyBankTransactionModel = new DailyBankTransactionModel() { AccountBankAccountName = model.BankAccountName, AccountBankAccountNumber = model.BankAccountNumber, AccountBankCode = model.BankCode, AccountBankCurrencyCode = model.BankCurrencyCode, AccountBankCurrencyId = model.BankCurrencyId, AccountBankCurrencySymbol = model.BankCurrencyCode, AccountBankId = model.BankId, AccountBankName = model.BankName, Date = model.PaymentDate, Nominal = nominal, CurrencyRate = (decimal)model.CurrencyRate, ReferenceNo = model.PaymentDispositionNo, ReferenceType = "Pembayaran Disposisi", Remark = model.CurrencyCode != "IDR" ? $"Pembayaran atas {model.BankCurrencyCode} dengan nominal {string.Format("{0:n}", nominal)} dan kurs {model.CurrencyCode}" : "", SourceType = model.TransactionType, SupplierCode = model.SupplierCode, SupplierId = model.SupplierId, SupplierName = model.SupplierName, Status = "OUT", IsPosted = true }; if (model.BankCurrencyCode != "IDR") { dailyBankTransactionModel.Nominal = Math.Round(nominal * (decimal)model.CurrencyRate, 2); dailyBankTransactionModel.NominalValas = nominal; } else if (model.CurrencyCode != "IDR") { dailyBankTransactionModel.Nominal = Math.Round(nominal * (decimal)model.CurrencyRate, 2); } return(_dailyBankTransactionService.CreateAsync(dailyBankTransactionModel)); }
async Task <string> GenerateNo(PaymentDispositionNoteModel model, int clientTimeZoneOffset) { DateTimeOffset Now = model.PaymentDate; string Year = Now.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("yy"); string Month = Now.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("MM"); string Day = Now.ToOffset(new TimeSpan(clientTimeZoneOffset, 0, 0)).ToString("dd"); //PD + 2 digit tahun + 2 digit bulan + 2 digit tgl + 3 digit urut string no = $"PD-{Year}-{Month}-{Day}-"; int Padding = 3; var lastNo = await this.DbSet.Where(w => w.PaymentDispositionNo.StartsWith(no) && !w.IsDeleted).OrderByDescending(o => o.PaymentDispositionNo).FirstOrDefaultAsync(); no = $"{no}"; if (lastNo == null) { return(no + "1".PadLeft(Padding, '0')); } else { int lastNoNumber = Int32.Parse(lastNo.PaymentDispositionNo.Replace(no, "")) + 1; return(no + lastNoNumber.ToString().PadLeft(Padding, '0')); } }
public async Task <int> AutoJournalFromDisposition(PaymentDispositionNoteModel model, string Username, string UserAgent) { await Task.Delay(1000); return(await Task.FromResult(1)); }
public async Task <int> UpdateAsync(int id, PaymentDispositionNoteModel model) { UpdateModel(id, model); return(await DbContext.SaveChangesAsync()); }
public async Task <int> AutoRevertFromPaymentDisposition(PaymentDispositionNoteModel model) { await Task.Delay(1000); return(await Task.FromResult(1)); }
public async Task Should_Success_AutoJournalFromDisposition() { //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>(); 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); long nowTicks = DateTimeOffset.Now.Ticks; string nowTicksA = $"{nowTicks}a"; string nowTicksB = $"{nowTicks}b"; PaymentDispositionNoteModel dispositionNoteModel = new PaymentDispositionNoteModel() { SupplierImport = true, SupplierCode = nowTicksA, SupplierName = nowTicksA, SupplierId = 1, BankCurrencyCode = nowTicksA, BankCurrencyId = 1, BankCurrencyRate = 1, BankAccountName = nowTicksA, BankAccountNumber = nowTicksA, BankCode = nowTicksA, BankId = 1, BankName = nowTicksA, BankAccountCOA = nowTicksA, TransactionType = "Any", BGCheckNumber = nowTicksA, Amount = 1000, PaymentDate = DateTimeOffset.Now, Items = new List <PaymentDispositionNoteItemModel> { new PaymentDispositionNoteItemModel { PurchasingDispositionExpeditionId = 1, CategoryCode = "CategoryId", CategoryId = 1, CategoryName = "CategoryName", DispositionDate = DateTimeOffset.Now, DispositionId = 1, DispositionNo = "DispositionNo", DivisionCode = "DivisionCode", DivisionId = 1, DivisionName = "DivisionName", DPP = 1000, VatValue = 100, IncomeTaxValue = 0, ProformaNo = "ProformaNo", TotalPaid = 1100, Details = new List <PaymentDispositionNoteDetailModel> { new PaymentDispositionNoteDetailModel { ProductCode = "ProductCode", Price = 1000, ProductId = 1, ProductName = "ProductName", UnitCode = "UnitCode", UnitId = 1, UnitName = "UnitName", UomId = 1, UomUnit = "UomUnit", Quantity = 1, PurchasingDispositionDetailId = 1, PurchasingDispositionExpeditionItemId = 1, EPOId = "EPOId" } } }, new PaymentDispositionNoteItemModel { PurchasingDispositionExpeditionId = 1, CategoryCode = "CategoryId", CategoryId = 1, CategoryName = "CategoryName", DispositionDate = DateTimeOffset.Now, DispositionId = 1, DispositionNo = "DispositionNo", DivisionCode = "DivisionCode", DivisionId = 1, DivisionName = "DivisionName", DPP = 1000, VatValue = 0, IncomeTaxValue = 0, ProformaNo = "ProformaNo", TotalPaid = 1000, SupplierPayment = 500, Details = new List <PaymentDispositionNoteDetailModel> { new PaymentDispositionNoteDetailModel { ProductCode = "ProductCode", Price = 1000, ProductId = 1, ProductName = "ProductName", UnitCode = "UnitCode", UnitId = 1, UnitName = "UnitName", UomId = 1, UomUnit = "UomUnit", Quantity = 1, PurchasingDispositionDetailId = 1, PurchasingDispositionExpeditionItemId = 1, EPOId = "EPOId" }, new PaymentDispositionNoteDetailModel { ProductCode = "ProductCode", Price = 1000, ProductId = 1, ProductName = "ProductName", UnitCode = "UnitCode2", UnitId = 1, UnitName = "UnitName", UomId = 1, UomUnit = "UomUnit", Quantity = 1, PurchasingDispositionDetailId = 1, PurchasingDispositionExpeditionItemId = 1, EPOId = "EPOId" } } } } }; //Act var result = await service.AutoJournalFromDisposition(dispositionNoteModel, "Username", "UserAgent"); dispositionNoteModel.SupplierImport = false; var result2 = await service.AutoJournalFromDisposition(dispositionNoteModel, "Username", "UserAgent"); //Assert Assert.Equal(0, result); Assert.Equal(0, result2); }