public int Create(FormDto form) { var model = new VBRealizationDocumentModel(); string division = GetDivision(form); var unitCode = GetDocumentUnitCode(division, form.IsInklaring); var existingData = _dbContext.VBRealizationDocuments .Where(a => a.Date.AddHours(_identityService.TimezoneOffset).Month == form.Date.GetValueOrDefault().AddHours(_identityService.TimezoneOffset).Month && a.DocumentNo.StartsWith(unitCode)) .OrderByDescending(s => s.Index) .FirstOrDefault(); var documentNo = GetDocumentNo(form, existingData); var amount = form.Items.Sum(element => { var nominal = element.UnitPaymentOrder.Amount.GetValueOrDefault(); if (element.UnitPaymentOrder.UseVat.GetValueOrDefault()) { nominal += element.UnitPaymentOrder.Amount.GetValueOrDefault() * (decimal)0.1; } if (element.UnitPaymentOrder.UseIncomeTax.GetValueOrDefault() && element.UnitPaymentOrder.IncomeTaxBy.ToUpper() == "SUPPLIER") { nominal -= element.UnitPaymentOrder.Amount.GetValueOrDefault() * (decimal)element.UnitPaymentOrder.IncomeTax.Rate.GetValueOrDefault(); } return(nominal); }); if (form.Type == "Tanpa Nomor VB") { model = new VBRealizationDocumentModel(form.Currency, form.Date, form.SuppliantUnit, documentNo, (decimal)amount, form.Remark); } else { var vbRequest = _dbContext.VBRequestDocuments.FirstOrDefault(entity => entity.Id == form.VBRequestDocument.Id.GetValueOrDefault()); if (vbRequest != null) { vbRequest.SetIsRealized(true, _identityService.Username, UserAgent); _dbContext.VBRequestDocuments.Update(vbRequest); } model = new VBRealizationDocumentModel(form.Date, vbRequest, documentNo, (decimal)amount, form.Remark); } EntityExtension.FlagForCreate(model, _identityService.Username, UserAgent); _dbContext.VBRealizationDocuments.Add(model); _dbContext.SaveChanges(); AddItems(model.Id, form.Items, model.SuppliantDivisionName); AddUnitCosts(model.Id, form.Items.SelectMany(element => element.UnitPaymentOrder.UnitCosts).ToList()); _dbContext.SaveChanges(); return(model.Id); }
public VBRealizationDocumentModel GetTestData_VBRealizationDocument() { var data = GetTestData_VBRealizationDocumentNonPO(); var result = new VBRealizationDocumentModel(data); dbContext.VBRealizationDocuments.Add(result); dbContext.SaveChanges(); return(result); }
public async Task Should_Success_AutoJournalVBNonPOClearence() { //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 vBRequestDocumentService = new VBRequestDocumentService(dbContext, GetServiceProvider().Object); var data = await GetdataUtil(vBRequestDocumentService).GetTestData_VBRequestDocumentNonPO(); var vBRealizationWithPOService = new VBRealizationWithPOService(dbContext, serviceProviderMock.Object); var vBRealizationDocumenData = GetDataUtil(vBRealizationWithPOService).GetTestData_DenganNomorVB(); var realization = new Lib.ViewModels.VBRealizationDocumentNonPO.VBRealizationDocumentNonPOViewModel() { IsInklaring = true, Currency = new Lib.ViewModels.VBRealizationDocumentNonPO.CurrencyViewModel() { Code = "USD" } }; var vbRealizations = new VBRealizationDocumentModel(realization); dbContext.VBRealizationDocuments.Add(vbRealizations); dbContext.SaveChanges(); var service = new AutoJournalService(dbContext, serviceProviderMock.Object); List <int> vbRealizationIds = new List <int>() { 1, 2 }; //Act var result = await service.AutoJournalVBNonPOClearence(vbRealizationIds); //Assert Assert.NotEqual(0, result); }
public void should_success_instantiate() { VBRealizationDocumentModel model = new VBRealizationDocumentModel(); model.SetIsCompleted(DateTimeOffset.Now.AddDays(1), "user", "userAgent"); model.SetCurrency(1, "IDR", "Rp", 1, "description", "user", "userAgent"); model.SetUnit(1, "newUnitCode", "newUnitName", "user", "userAgent"); model.SetDivision(1, "newDivisionCode", "newDivisionName", "user", "userAgent"); model.SetVBRequest(1, "newVBRequestNo", DateTimeOffset.Now, DateTimeOffset.Now, "newVBRequestCreatedBy", 1, "newPurpose", "user", "userAgent"); model.SetAmount(1, "user", "userAgent"); }
private Tuple <string, int> GetDocumentNo(FormDto form, VBRealizationDocumentModel existingData) { var now = form.Date.GetValueOrDefault().AddHours(_identityService.TimezoneOffset); var year = now.ToString("yy"); var month = now.ToString("MM"); var division = ""; division = GetDivision(form); //if (form.Type == "Tanpa Nomor VB") // division = form.SuppliantUnit.Division.Name; //else //{ // var vbRequest = _dbContext.VBRequestDocuments.FirstOrDefault(entity => entity.Id == form.VBRequestDocument.Id.GetValueOrDefault()); // division = vbRequest.SuppliantDivisionName; //} var unitCode = "T"; if (division == "GARMENT") { unitCode = "G"; } if (form.IsInklaring) { unitCode += "I"; } var documentNo = $"R-{unitCode}-{month}{year}-"; var index = 1; if (existingData != null) { index = existingData.Index + 1; } documentNo += string.Format("{0:000}", index); return(new Tuple <string, int>(documentNo, index)); }
private Tuple <string, int> GetDocumentNo(VBRealizationDocumentNonPOViewModel form, VBRealizationDocumentModel existingData) { var now = form.Date.GetValueOrDefault().AddHours(_identityService.TimezoneOffset); var year = now.ToString("yy"); var month = now.ToString("MM"); var unitCode = "T"; if (form.Unit.Division.Name.ToUpper() == "GARMENT") { unitCode = "G"; } if (form.IsInklaring) { unitCode += "I"; } var documentNo = $"R-{unitCode}-{month}{year}-"; var index = 1; if (existingData != null) { index = existingData.Index + 1; } documentNo += string.Format("{0:000}", index); return(new Tuple <string, int>(documentNo, index)); }
private VBRealizationDocumentNonPOViewModel MaptoVM(VBRealizationDocumentModel model, List <VBRealizationDocumentExpenditureItemModel> items, List <VBRealizationDocumentUnitCostsItemModel> unitCosts) { return(new VBRealizationDocumentNonPOViewModel() { Active = model.Active, Amount = model.Amount, CreatedAgent = model.CreatedAgent, CreatedBy = model.CreatedBy, CreatedUtc = model.CreatedUtc, Currency = new CurrencyViewModel() { Code = model.CurrencyCode, Description = model.CurrencyDescription, Id = model.CurrencyId, Rate = model.CurrencyRate, Symbol = model.CurrencySymbol }, Id = model.Id, Date = model.Date, DocumentNo = model.DocumentNo, Index = model.Index, IsDeleted = model.IsDeleted, LastModifiedAgent = model.LastModifiedAgent, LastModifiedBy = model.LastModifiedBy, LastModifiedUtc = model.LastModifiedUtc, Type = model.Type, Position = model.Position, BLAWBNumber = model.BLAWBNumber, ContractPONumber = model.ContractPONumber, IsInklaring = model.IsInklaring, Unit = new UnitViewModel() { Code = model.SuppliantUnitCode, Division = new DivisionViewModel() { Code = model.SuppliantDivisionCode, Id = model.SuppliantDivisionId, Name = model.SuppliantDivisionName }, Name = model.SuppliantUnitName, Id = model.SuppliantUnitId }, VBDocument = model.VBRequestDocumentId == 0 ? null : new VBRequestDocumentNonPODto() { Id = model.VBRequestDocumentId, DocumentNo = model.VBRequestDocumentNo, Amount = model.VBRequestDocumentAmount, RealizationEstimationDate = model.VBRequestDocumentRealizationEstimationDate, CreatedBy = model.VBRequestDocumentCreatedBy, Date = model.VBRequestDocumentDate, Purpose = model.VBRequestDocumentPurpose }, VBNonPOType = model.VBNonPoType, Remark = model.Remark, Items = items.Select(s => new VBRealizationDocumentNonPOExpenditureItemViewModel() { Active = s.Active, Amount = s.Amount, CreatedAgent = s.CreatedAgent, CreatedBy = s.CreatedBy, CreatedUtc = s.CreatedUtc, DateDetail = s.Date, Id = s.Id, IncomeTax = new IncomeTaxViewModel() { Id = s.IncomeTaxId, Name = s.IncomeTaxName, Rate = s.IncomeTaxRate }, IncomeTaxBy = s.IncomeTaxBy, IsDeleted = s.IsDeleted, IsGetPPh = s.UseIncomeTax, IsGetPPn = s.UseVat, PPhAmount = s.PPhAmount, PPnAmount = s.PPnAmount, BLAWBNumber = s.BLAWBNumber, LastModifiedAgent = s.LastModifiedAgent, LastModifiedBy = s.LastModifiedBy, LastModifiedUtc = s.LastModifiedUtc, VatTax = new VatTaxViewModel() { Id = s.VatId, Rate = s.VatRate, }, Remark = s.Remark }).ToList(), UnitCosts = unitCosts.Select(s => new VBRealizationDocumentNonPOUnitCostViewModel() { Amount = s.Amount, IsSelected = s.IsSelected, Active = s.Active, CreatedAgent = s.CreatedAgent, CreatedBy = s.CreatedBy, CreatedUtc = s.CreatedUtc, Id = s.Id, IsDeleted = s.IsDeleted, LastModifiedAgent = s.LastModifiedAgent, LastModifiedBy = s.LastModifiedBy, LastModifiedUtc = s.LastModifiedUtc, Unit = new UnitViewModel() { Id = s.UnitId, Code = s.UnitCode, Division = new DivisionViewModel() { Code = s.DivisionCode, Id = s.DivisionId, Name = s.DivisionName }, Name = s.UnitName, VBDocumentLayoutOrder = s.VBDocumentLayoutOrder } }).ToList() }); }
public async Task <int> CreateAsync(VBRealizationDocumentNonPOViewModel vm) { var internalTransaction = _dbContext.Database.CurrentTransaction == null; var transaction = !internalTransaction ? _dbContext.Database.CurrentTransaction : _dbContext.Database.BeginTransaction(); try { string unitCode = GetDocumentUnitCode(vm.Unit.Division.Name.ToUpper(), vm.IsInklaring); var existingData = _dbContext.VBRealizationDocuments .Where(a => a.Date.AddHours(_identityService.TimezoneOffset).Month == vm.Date.GetValueOrDefault().AddHours(_identityService.TimezoneOffset).Month && a.Date.AddHours(_identityService.TimezoneOffset).Year == vm.Date.GetValueOrDefault().AddHours(_identityService.TimezoneOffset).Year && a.DocumentNo.StartsWith(unitCode)) .OrderByDescending(s => s.Index) .FirstOrDefault(); var documentNo = GetDocumentNo(vm, existingData); vm.DocumentNo = documentNo.Item1; vm.Index = documentNo.Item2; vm.Amount = vm.Items.Sum(s => s.Total); if (vm.VBNonPOType == "Dengan Nomor VB") { vm.DocumentType = RealizationDocumentType.WithVB; } else { vm.DocumentType = RealizationDocumentType.NonVB; } var model = new VBRealizationDocumentModel(vm); model.FlagForCreate(_identityService.Username, UserAgent); _dbContext.VBRealizationDocuments.Add(model); await _dbContext.SaveChangesAsync(); var items = AddItems(model.Id, vm.Items); _dbContext.VBRealizationDocumentExpenditureItems.AddRange(items); await _dbContext.SaveChangesAsync(); var unitCosts = AddUnitCosts(model.Id, vm.UnitCosts); _dbContext.VBRealizationDocumentUnitCostsItems.AddRange(unitCosts); await _dbContext.SaveChangesAsync(); if (vm.VBNonPOType == "Dengan Nomor VB") { var vbRequest = _dbContext.VBRequestDocuments.FirstOrDefault(s => s.Id == vm.VBDocument.Id); if (vbRequest != null) { vbRequest.SetIsRealized(true, _identityService.Username, UserAgent); } } await _dbContext.SaveChangesAsync(); if (internalTransaction) { transaction.Commit(); } return(model.Id); } catch (Exception ex) { if (internalTransaction) { transaction.Rollback(); } throw ex; } }
public async Task Should_Success_AutoJournalVBNonPOClearence_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>(); 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 vBRequestDocumentService = new VBRequestDocumentService(dbContext, GetServiceProvider().Object); var data = await GetdataUtil(vBRequestDocumentService).GetTestData_VBRequestDocumentNonPO(); var vBRealizationWithPOService = new VBRealizationWithPOService(dbContext, serviceProviderMock.Object); var vBRealizationDocumenData = GetDataUtil(vBRealizationWithPOService).GetTestData_DenganNomorVB(); var expeditionService = new VBRealizationDocumentExpeditionService(dbContext, GetServiceProvider().Object); var model = _dataUtil(expeditionService, dbContext).GetTestData_VBRealizationDocumentExpedition(); var realization = new Lib.ViewModels.VBRealizationDocumentNonPO.VBRealizationDocumentNonPOViewModel() { IsInklaring = true, Currency = new Lib.ViewModels.VBRealizationDocumentNonPO.CurrencyViewModel() { Code = "IDR" } }; var expenditureitem = new Lib.ViewModels.VBRealizationDocumentNonPO.VBRealizationDocumentNonPOExpenditureItemViewModel() { PPhAmount = 1, PPnAmount = 1, }; var unitcostitem = new Lib.ViewModels.VBRealizationDocumentNonPO.VBRealizationDocumentNonPOUnitCostViewModel() { IsSelected = true }; var vbRealizations = new VBRealizationDocumentModel(realization); var vbRealizationItems = new VBRealizationDocumentExpenditureItemModel(2, expenditureitem); var vbRealizationsUnitItems = new VBRealizationDocumentUnitCostsItemModel(2, unitcostitem); dbContext.VBRealizationDocuments.Add(vbRealizations); dbContext.VBRealizationDocumentExpenditureItems.Add(vbRealizationItems); dbContext.VBRealizationDocumentUnitCostsItems.Add(vbRealizationsUnitItems); dbContext.SaveChanges(); 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, 2 }; //Act var result = await service.AutoJournalVBNonPOClearence(vbRealizationIds, viewModel, null); //Assert Assert.NotEqual(0, result); }