/// <summary>
        /// Add an entity.
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        /// <InventoryTransferAddViewModel, AddInventoryTransfer>
        public InventoryTransferAddViewModel UpdateInventoryTransfer(InventoryTransferAddViewModel model)
        {
            this._closedMonthsService.ValidateIfMonthIsClosed(model.Date.Value);

            DateTime CurrentDate = DateTime.Now;
            var      entity      = this._InventoryTransfersRepository.Get(model.Id);

            //var costCenterList = entity.InventoryTransferCostCenter.ToList();

            //foreach (var item in costCenterList)
            //{
            //    item.LastModificationDate = CurrentDate;
            //    this._InventoryTransferCostCentersRepository.Delete(item);
            //}

            //if (model.InventoryTransferCostCenter != null)
            //{
            //    foreach (var item in model.InventoryTransferCostCenter)
            //    {
            //        InventoryTransferCostCenter costCenter = new InventoryTransferCostCenter();
            //        costCenter.CostCenterId = item.CostCenterId;
            //        costCenter.CreationDate = CurrentDate;
            //        entity.InventoryTransferCostCenter.Add(costCenter);
            //    }
            //}

            #region translation
            entity.LastModificationDate = CurrentDate;
            entity.ChildTranslatedInventoryTransfers.Where(x => x.Language == Language.Arabic).FirstOrDefault().Description  = model.DescriptionAr;
            entity.ChildTranslatedInventoryTransfers.Where(x => x.Language == Language.English).FirstOrDefault().Description = model.DescriptionEn;
            #endregion

            entity = this._InventoryTransfersRepository.Update(entity);

            #region Commit Changes
            this._unitOfWork.Commit();
            #endregion

            return(model);
        }
        /// <summary>
        /// Add an entity.
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        /// <InventoryTransferAddViewModel, AddInventoryTransfer>
        public InventoryTransferAddViewModel AddInventoryTransfer(InventoryTransferAddViewModel model)
        {
            this._closedMonthsService.ValidateIfMonthIsClosed(model.Date.Value);

            DateTime CurrentDate = DateTime.Now;
            var      entity      = model.ToEntity();

            foreach (var item in entity.InventoryTransferCostCenter)
            {
                item.CreationDate = CurrentDate;
            }
            foreach (var item in entity.InventoryProductHistorys)
            {
                item.CreationDate = CurrentDate;
                item.InventoryId  = model.InventoryToId;
            }
            foreach (var item in model.Products)
            {
                Product fromProduct = this._ProductsRepository.Get(item.Id);
                fromProduct.Quantity = fromProduct.Quantity - item.Quantity;
                this._ProductsRepository.Update(fromProduct);
                ConditionFilter <Product, long> condition = new ConditionFilter <Product, long>
                {
                    Query = (x => x.BrandId == item.BrandId && x.InventoryId == model.InventoryToId)
                };
                var existEntity = this._ProductsRepository.Get(condition).FirstOrDefault();
                if (existEntity == null)
                {
                    var productEntity = item.ToEntity();
                    productEntity.InventoryId = model.InventoryToId;
                    this._ProductsRepository.Add(productEntity);
                }
                else
                {
                    existEntity.Quantity = existEntity.Quantity + item.Quantity;
                    this._ProductsRepository.Update(existEntity);
                }
            }
            #region translation
            entity.Description  = "";
            entity.CreationDate = CurrentDate;
            entity.Code         = model.Code;
            entity.Language     = Language.None;

            InventoryTransfer InventoryTransferAr = new InventoryTransfer();
            InventoryTransferAr.Description  = model.DescriptionAr;
            InventoryTransferAr.Language     = Language.Arabic;
            InventoryTransferAr.CreationDate = CurrentDate;

            InventoryTransfer InventoryTransferEn = new InventoryTransfer();
            InventoryTransferEn.Description  = model.DescriptionEn;
            InventoryTransferEn.Language     = Language.English;
            InventoryTransferEn.CreationDate = CurrentDate;

            entity.ChildTranslatedInventoryTransfers.Add(InventoryTransferAr);
            entity.ChildTranslatedInventoryTransfers.Add(InventoryTransferEn);
            #endregion

            entity = this._InventoryTransfersRepository.Add(entity);

            #region Commit Changes
            this._unitOfWork.Commit();
            #endregion

            #region Generate New Code
            try
            {
                ConditionFilter <InventoryTransfer, long> condition = new ConditionFilter <InventoryTransfer, long>
                {
                    Query = x =>
                            x.ParentKeyInventoryTransferId == null &&
                            string.IsNullOrEmpty(x.Code) == false
                    ,
                    Order = Order.Descending
                };

                var  z          = this._InventoryTransfersRepository.Get(condition);
                var  lastEntity = z.FirstOrDefault();
                long newCode    = 1;

                if (lastEntity != null)
                {
                    try
                    {
                        newCode = long.Parse(lastEntity.Code) + 1;
                    }
                    catch
                    {
                        newCode = entity.Id;
                    }
                }
                entity.Code = newCode.ToString();
            }
            catch
            {
                entity.Code = entity.Id.ToString();
            }

            entity = this._InventoryTransfersRepository.Update(entity);

            this._unitOfWork.Commit();
            #endregion

            model.Id   = entity.Id;
            model.Code = entity.Code;
            //model = entity.ToModel();
            return(model);
        }