public async Task Should_Success_Update_Data()
        {
            var numberGeneratorMock             = new Mock <IBankDocumentNumberGenerator>();
            PPHBankExpenditureNoteFacade facade = new PPHBankExpenditureNoteFacade(_dbContext(GetCurrentMethod()), numberGeneratorMock.Object);
            PPHBankExpenditureNote       model  = await _dataUtil(facade, GetCurrentMethod()).GetTestData();

            PPHBankExpenditureNoteItem modelItem = await _dataUtil(facade, GetCurrentMethod()).GetItemNewData();

            model.Items.Clear();
            model.Items.Add(modelItem);
            var Response = await facade.Update((int)model.Id, model, "Unit Test");

            Assert.NotEqual(Response, 0);
        }
Example #2
0
        public async Task Should_Success_Update_Data()
        {
            var numberGeneratorMock = new Mock <IBankDocumentNumberGenerator>();

            var serviceProvider = new Mock <IServiceProvider>();

            serviceProvider
            .Setup(x => x.GetService(typeof(IHttpClientService)))
            .Returns(new HttpClientTestService());

            var services = new ServiceCollection();

            services.AddMemoryCache();
            var serviceProviders = services.BuildServiceProvider();
            var memoryCache      = serviceProviders.GetService <IMemoryCache>();
            var mockMemoryCache  = new Mock <IMemoryCacheManager>();

            mockMemoryCache.Setup(x => x.Get(MemoryCacheConstant.Divisions, It.IsAny <Func <ICacheEntry, List <IdCOAResult> > >()))
            .Returns(new List <IdCOAResult>());
            mockMemoryCache.Setup(x => x.Get(MemoryCacheConstant.BankAccounts, It.IsAny <Func <ICacheEntry, List <BankAccountCOAResult> > >()))
            .Returns(new List <BankAccountCOAResult>());
            mockMemoryCache.Setup(x => x.Get(MemoryCacheConstant.IncomeTaxes, It.IsAny <Func <ICacheEntry, List <IncomeTaxCOAResult> > >()))
            .Returns(new List <IncomeTaxCOAResult>());
            serviceProvider
            .Setup(x => x.GetService(typeof(IMemoryCacheManager)))
            .Returns(mockMemoryCache.Object);
            serviceProvider
            .Setup(x => x.GetService(typeof(IdentityService)))
            .Returns(new IdentityService()
            {
                TimezoneOffset = 1, Token = "token", Username = "******"
            });

            PPHBankExpenditureNoteFacade facade = new PPHBankExpenditureNoteFacade(_dbContext(GetCurrentMethod()), numberGeneratorMock.Object, serviceProvider.Object);
            PPHBankExpenditureNote       model  = await _dataUtil(facade, GetCurrentMethod()).GetTestData();

            PPHBankExpenditureNoteItem modelItem = await _dataUtil(facade, GetCurrentMethod()).GetItemNewData();

            model.Items.Clear();
            model.Items.Add(modelItem);
            var Response = await facade.Update((int)model.Id, model, "Unit Test");

            Assert.NotEqual(0, Response);
        }
        public async Task <int> Update(int id, PPHBankExpenditureNote model, string username)
        {
            int Updated = 0;

            using (var transaction = this.dbContext.Database.BeginTransaction())
            {
                try
                {
                    EntityExtension.FlagForUpdate(model, username, UserAgent);
                    dbContext.Entry(model).Property(x => x.Date).IsModified              = true;
                    dbContext.Entry(model).Property(x => x.TotalDPP).IsModified          = true;
                    dbContext.Entry(model).Property(x => x.TotalIncomeTax).IsModified    = true;
                    dbContext.Entry(model).Property(x => x.BGNo).IsModified              = true;
                    dbContext.Entry(model).Property(x => x.LastModifiedAgent).IsModified = true;
                    dbContext.Entry(model).Property(x => x.LastModifiedBy).IsModified    = true;
                    dbContext.Entry(model).Property(x => x.LastModifiedUtc).IsModified   = true;

                    foreach (var item in model.Items)
                    {
                        if (item.Id == 0)
                        {
                            EntityExtension.FlagForCreate(item, username, UserAgent);
                            dbContext.PPHBankExpenditureNoteItems.Add(item);

                            PurchasingDocumentExpedition pde = new PurchasingDocumentExpedition
                            {
                                Id        = item.PurchasingDocumentExpeditionId,
                                IsPaidPPH = true,
                                BankExpenditureNotePPHNo   = model.No,
                                BankExpenditureNotePPHDate = model.Date
                            };

                            EntityExtension.FlagForUpdate(pde, username, UserAgent);
                            //dbContext.Attach(pde);
                            dbContext.Entry(pde).Property(x => x.IsPaidPPH).IsModified = true;
                            dbContext.Entry(pde).Property(x => x.BankExpenditureNotePPHNo).IsModified   = true;
                            dbContext.Entry(pde).Property(x => x.BankExpenditureNotePPHDate).IsModified = true;
                            dbContext.Entry(pde).Property(x => x.LastModifiedAgent).IsModified          = true;
                            dbContext.Entry(pde).Property(x => x.LastModifiedBy).IsModified             = true;
                            dbContext.Entry(pde).Property(x => x.LastModifiedUtc).IsModified            = true;
                        }
                    }

                    foreach (var item in dbContext.PPHBankExpenditureNoteItems.AsNoTracking().Where(p => p.PPHBankExpenditureNoteId == model.Id))
                    {
                        PPHBankExpenditureNoteItem itemModel = model.Items.FirstOrDefault(prop => prop.Id.Equals(item.Id));

                        if (itemModel == null)
                        {
                            EntityExtension.FlagForDelete(item, username, UserAgent);
                            this.dbContext.PPHBankExpenditureNoteItems.Update(item);

                            PurchasingDocumentExpedition pde = new PurchasingDocumentExpedition
                            {
                                Id        = item.PurchasingDocumentExpeditionId,
                                IsPaidPPH = false,
                                BankExpenditureNotePPHDate = null,
                                BankExpenditureNotePPHNo   = null
                            };

                            EntityExtension.FlagForUpdate(pde, username, UserAgent);
                            //dbContext.Attach(pde);
                            dbContext.Entry(pde).Property(x => x.IsPaidPPH).IsModified = true;
                            dbContext.Entry(pde).Property(x => x.BankExpenditureNotePPHNo).IsModified   = true;
                            dbContext.Entry(pde).Property(x => x.BankExpenditureNotePPHDate).IsModified = true;
                            dbContext.Entry(pde).Property(x => x.LastModifiedAgent).IsModified          = true;
                            dbContext.Entry(pde).Property(x => x.LastModifiedBy).IsModified             = true;
                            dbContext.Entry(pde).Property(x => x.LastModifiedUtc).IsModified            = true;
                        }
                    }

                    Updated = await dbContext.SaveChangesAsync();

                    //await ReverseJournalTransaction(model.No);
                    //await AutoCreateJournalTransaction(model);

                    //await DeleteDailyBankTransaction(model.No);
                    //await CreateDailyBankTransaction(model);

                    transaction.Commit();
                }
                catch (Exception e)
                {
                    transaction.Rollback();
                    throw new Exception(e.Message);
                }
            }

            return(Updated);
        }