public async Task <int> UpdateAsync(int id, GarmentInvoicePaymentModel model)
        {
            GarmentInvoicePaymentModel exist = DbSet
                                               .Include(d => d.Items)
                                               .Single(dispo => dispo.Id == id && !dispo.IsDeleted);

            exist.PaymentDate  = model.PaymentDate;
            exist.BuyerId      = model.BuyerId;
            exist.BuyerCode    = model.BuyerCode;
            exist.BuyerName    = model.BuyerName;
            exist.BGNo         = model.BGNo;
            exist.CurrencyCode = model.CurrencyCode;
            exist.CurrencyId   = model.CurrencyId;
            exist.CurrencyRate = model.CurrencyRate;
            exist.Remark       = model.Remark;

            foreach (var item in exist.Items)
            {
                GarmentInvoicePaymentItemModel itemModel = model.Items.FirstOrDefault(prop => prop.Id.Equals(item.Id));

                if (itemModel == null)
                {
                    EntityExtension.FlagForDelete(item, IdentityService.Username, UserAgent, true);
                }
                else
                {
                    EntityExtension.FlagForUpdate(item, IdentityService.Username, UserAgent);
                }
            }
            foreach (var newItem in model.Items)
            {
                if (newItem.Id == 0)
                {
                    exist.Items.Add(newItem);
                    EntityExtension.FlagForCreate(newItem, IdentityService.Username, UserAgent);
                }
            }


            EntityExtension.FlagForUpdate(exist, IdentityService.Username, UserAgent);

            return(await DbContext.SaveChangesAsync());
        }
        public async Task Should_Success_Update_Data()
        {
            GarmentInvoicePaymentService service = new GarmentInvoicePaymentService(GetServiceProvider().Object, _dbContext(GetCurrentMethod()));


            GarmentInvoicePaymentModel 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);

            GarmentInvoicePaymentModel model2 = await _dataUtil(service, GetCurrentMethod()).GetTestData();

            //var newModel2 = await service.ReadByIdAsync(model.Id);
            GarmentInvoicePaymentModel newModel2 = new GarmentInvoicePaymentModel();

            newModel2.Id = model2.Id;

            newModel2.Items = new List <GarmentInvoicePaymentItemModel> {
                model2.Items.First()
            };
            var Response = await service.UpdateAsync(model2.Id, newModel2);

            Assert.NotEqual(0, Response);

            GarmentInvoicePaymentItemModel newItem = new GarmentInvoicePaymentItemModel
            {
                InvoiceId = 3,
                InvoiceNo = "no3",
                Amount    = 3,
                IDRAmount = 3
            };

            newModel2.Items.Add(newItem);
            var Response3 = await service.UpdateAsync(model2.Id, newModel2);

            Assert.NotEqual(0, Response);
        }