public InventoryMovementAddViewModel UpdateInventoryMovement(InventoryMovementAddViewModel model) { this._closedMonthsService.ValidateIfMonthIsClosed(model.Date.Value); DateTime CurrentDate = DateTime.Now; var entity = this._InventoryMovementsRepository.Get(model.Id); //var costCenterList = entity.InventoryMovementCostCenter.ToList(); //if (costCenterList.Count > 0) //{ // foreach (var item in costCenterList) // { // item.LastModificationDate = CurrentDate; // this._InventoryMovementCostCentersRepository.Delete(item); // } // #region Commit Changes // this._unitOfWork.Commit(); // #endregion //} //if (model.InventoryMovementCostCenter != null) //{ // var list = model.InventoryMovementCostCenter.ToList(); // foreach (var item in list) // { // InventoryMovementCostCenter costCenter = new InventoryMovementCostCenter(); // costCenter.CostCenterId = item.CostCenterId; // costCenter.CreationDate = CurrentDate; // entity.InventoryMovementCostCenter.Add(costCenter); // } //} foreach (var item in model.Products) { var products = this._inventoryProductHistoryRepository.Get().Where(x => x.InventoryMovementId == entity.Id); foreach (var product in products) { product.Price = item.Price; this._inventoryProductHistoryRepository.Update(product); } } #region translation entity.LastModificationDate = CurrentDate; entity.ReferenceNumber = model.ReferenceNumber; entity.InventoryMovementTypeId = model.InventoryMovementTypeId; entity.ChildTranslatedInventoryMovements.Where(x => x.Language == Language.Arabic).FirstOrDefault().Description = model.DescriptionAr; entity.ChildTranslatedInventoryMovements.Where(x => x.Language == Language.English).FirstOrDefault().Description = model.DescriptionEn; #endregion entity = this._InventoryMovementsRepository.Update(entity); #region Commit Changes this._unitOfWork.Commit(); #endregion return(model); }
public InventoryMovementAddViewModel AddInventoryMovement(InventoryMovementAddViewModel model) { if (model.Journal == null) { this._closedMonthsService.ValidateIfMonthIsClosed(model.Date.Value); DateTime CurrentDate = DateTime.Now; var entity = model.ToEntity(); foreach (var item in entity.InventoryMovementCostCenter) { item.CreationDate = CurrentDate; } var movementTypeList = this._inventoryMovementTypeRepository.Get(null).ToList(); foreach (var item in entity.InventoryProductHistorys) { item.CreationDate = CurrentDate; item.InventoryId = model.InventoryId; var movementType = movementTypeList.FirstOrDefault(x => x.Id == model.InventoryMovementTypeId); if (movementType.Type == InventoryMovementTypeEnum.GiftsIn || movementType.Type == InventoryMovementTypeEnum.InventoryIn || movementType.Type == InventoryMovementTypeEnum.PositiveInventoryDifferences) { var product = new Product { BrandId = item.BrandId, InventoryId = item.InventoryId, MeasurementUnitId = item.MeasurementUnitId, NetValue = item.NetValue, Price = item.Price, Quantity = item.Quantity }; this._ProductsRepository.Add(product); } else if (movementType.Type == InventoryMovementTypeEnum.GiftsOut || movementType.Type == InventoryMovementTypeEnum.InventoryOut || movementType.Type == InventoryMovementTypeEnum.NegativeInventoryDifferences || movementType.Type == InventoryMovementTypeEnum.Consists) { } else if (movementType.Type == InventoryMovementTypeEnum.Reservation) { var existProduct = this._ProductsRepository.Get(null).Where(x => x.BrandId == item.BrandId && x.MeasurementUnitId == item.MeasurementUnitId); if (existProduct.Count() > 0) { } else { var product = new Product { BrandId = item.BrandId, InventoryId = item.InventoryId, MeasurementUnitId = item.MeasurementUnitId, NetValue = item.NetValue, Price = item.Price, Quantity = item.Quantity, LockedCount = item.Quantity }; this._ProductsRepository.Add(product); } } else if (movementType.Type == InventoryMovementTypeEnum.ReservationRebate) { } } //foreach (var item in model.Products) //{ // var productEntity = item.ToEntity(); // productEntity.InventoryId = model.InventoryId; // this._ProductsRepository.Add(productEntity); //} #region translation entity.Description = ""; entity.CreationDate = CurrentDate; entity.Code = model.Code; entity.Date = model.Date; entity.Language = Language.None; InventoryMovement InventoryMovementAr = new InventoryMovement { Description = model.DescriptionAr, Language = Language.Arabic, CreationDate = CurrentDate }; InventoryMovement InventoryMovementEn = new InventoryMovement { Description = model.DescriptionEn, Language = Language.English, CreationDate = CurrentDate }; entity.ChildTranslatedInventoryMovements.Add(InventoryMovementAr); entity.ChildTranslatedInventoryMovements.Add(InventoryMovementEn); #endregion entity = this._InventoryMovementsRepository.Add(entity); #region Commit Changes this._unitOfWork.Commit(); #endregion #region Generate New Code try { ConditionFilter <InventoryMovement, long> condition = new ConditionFilter <InventoryMovement, long> { Query = x => x.ParentKeyInventoryMovement == null && string.IsNullOrEmpty(x.Code) == false , Order = Order.Descending }; var z = this._InventoryMovementsRepository.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._InventoryMovementsRepository.Update(entity); this._unitOfWork.Commit(); #endregion model.Id = entity.Id; model.Code = entity.Code; //model = entity.ToModel(); if (movementTypeList.FirstOrDefault(x => x.Id == model.InventoryMovementTypeId).Type == InventoryMovementTypeEnum.InventoryOut) { model.Journal = this._journalPostingsService.Post(model.Id, MovementType.StoreMovement); model.Journal.Date = model.Date.Value; foreach (var Journal in model.Journal.journalDetails) { AccountChart accountChart = this._accountChartsRepository.Get().FirstOrDefault(x => x.Id == Journal.AccountId); if (accountChart != null) { Journal.AccountFullCode = accountChart.FullCode; } } model.Journal.DescriptionAr = model.DescriptionAr; model.Journal.DescriptionEn = model.DescriptionEn; } } else if (model.Journal.PostingStatus == PostingStatus.Approved) { model.Journal.PostingStatus = PostingStatus.NeedAprove; Journal journal = model.Journal.ToEntity(); journal = this._journalsRepository.Add(journal); Journal journalAr = new Journal { Description = model.Journal.DescriptionAr, Language = Language.Arabic, ParentKeyJournal = journal }; journalAr = this._journalsRepository.Add(journalAr); journal.ChildTranslatedJournals.Add(journalAr); Journal journalEn = new Journal { Description = model.Journal.DescriptionEn, Language = Language.English, ParentKeyJournal = journal }; journalEn = this._journalsRepository.Add(journalEn); journal.ChildTranslatedJournals.Add(journalEn); var entity = this._InventoryMovementsRepository.Get(model.Id); entity.IsPosted = false; entity.PostingDate = DateTime.Now; entity.PostedByUserId = this._currentUserService.CurrentUserId; entity = this._InventoryMovementsRepository.Update(entity); this._unitOfWork.Commit(); } else if (model.Journal.PostingStatus == PostingStatus.Rejected) { } return(model); }