/// <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); }