Exemple #1
0
        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);
        }
Exemple #2
0
        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");
        }
Exemple #5
0
        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));
        }
Exemple #6
0
        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));
        }
Exemple #7
0
 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()
     });
 }
Exemple #8
0
        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);
        }