コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }