Exemplo n.º 1
0
        public BillViewModel UpdateBill(BillViewModel billViewModel)
        {
            var billDetails = Mapper.Map <List <BillDetailViewModel>, List <BillDetail> >(billViewModel.BillDetails.ToList());

            var bill = Mapper.Map <BillViewModel, Bill>(billViewModel);

            bill.BillDetails.Clear();
            foreach (var item in billDetails)
            {
                var product = _productRepository.FindById(item.ProductId);
                item.Price = product.Price;
                var billDetail = _billDetailRepository.FindById(item.Id);

                if (billDetail == null) // add new bill detail
                {
                    bill.BillDetails.Add(item);
                }
                else // edit existed bill detail
                {
                    billDetail.ColorId   = item.ColorId;
                    billDetail.ProductId = item.ProductId;
                    billDetail.SizeId    = item.SizeId;
                    billDetail.Quantity  = item.Quantity;
                    billDetail.Price     = item.Price;

                    bill.BillDetails.Add(billDetail);
                }
            }

            // remove bill detail that
            var billDetailToRemove = _billDetailRepository.FindAll(x => !billDetails.Contains(x) && x.BillId == bill.Id).ToList();

            foreach (var item in billDetailToRemove)
            {
                _billDetailRepository.Remove(item.Id);
            }

            _billRepository.Update(bill);
            return(billViewModel);
        }