//public WasteStockDto GetExisWasteStockByWerksAndMaterial(string werks, string materialNumber)
        //{
        //    var dbdata = _uow.GetGenericRepository<WASTE_STOCK>().Get(p => p.WERKS == werks && p.MATERIAL_NUMBER == materialNumber).FirstOrDefault();

        //    return Mapper.Map<WasteStockDto>(dbdata);
        //}

        public void UpdateWasteStockFromWaste(WasteStockDto input, string userId)
        {
            var dbWasteStock =
                _repository.Get(c => c.WERKS == input.WERKS && c.MATERIAL_NUMBER == input.MATERIAL_NUMBER)
                .FirstOrDefault();

            var origin = Mapper.Map <WasteStockDto>(dbWasteStock);

            if (dbWasteStock == null)
            {
                dbWasteStock = new WASTE_STOCK();
                Mapper.Map <WasteStockDto, WASTE_STOCK>(input, dbWasteStock);

                dbWasteStock.CREATED_BY   = input.CREATED_BY;
                dbWasteStock.CREATED_DATE = DateTime.Now;
            }
            else
            {
                //update
                dbWasteStock.STOCK = input.STOCK;

                dbWasteStock.MODIFIED_BY   = input.CREATED_BY;
                dbWasteStock.MODIFIED_DATE = DateTime.Now;
                var dbData = _repository.GetByID(dbWasteStock.WASTE_STOCK_ID);

                var inputNew = Mapper.Map <WasteStockDto>(dbData);
                if (inputNew.WASTE_STOCK_ID > 0)
                {
                    SetChangesHistory(origin, inputNew, userId);
                }
            }

            _repository.InsertOrUpdate(dbWasteStock);
        }
        public WasteStockDto SaveWasteStock(WasteStockSaveInput input)
        {
            ValidateWasteStock(input);

            WASTE_STOCK dbData = null;

            if (input.WasteStockDto.WASTE_STOCK_ID > 0)
            {
                //update
                dbData = _repository.GetByID(input.WasteStockDto.WASTE_STOCK_ID);
                if (dbData == null)
                {
                    throw new BLLException(ExceptionCodes.BLLExceptions.DataNotFound);
                }

                //set changes history
                var origin = Mapper.Map <WasteStockDto>(dbData);

                SetChangesHistory(origin, input.WasteStockDto, input.UserId);

                Mapper.Map <WasteStockDto, WASTE_STOCK>(input.WasteStockDto, dbData);

                dbData.MODIFIED_DATE = DateTime.Now;
                dbData.MODIFIED_BY   = input.UserId;
            }
            else
            {
                input.WasteStockDto.CREATED_DATE = DateTime.Now;
                input.WasteStockDto.CREATED_BY   = input.UserId;
                dbData = new WASTE_STOCK();
                Mapper.Map <WasteStockDto, WASTE_STOCK>(input.WasteStockDto, dbData);
                _repository.Insert(dbData);
            }

            try
            {
                _uow.SaveChanges();
            }
            catch (DbEntityValidationException e)
            {
                foreach (var eve in e.EntityValidationErrors)
                {
                    Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                      eve.Entry.Entity.GetType().Name, eve.Entry.State);
                    foreach (var ve in eve.ValidationErrors)
                    {
                        Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                                          ve.PropertyName, ve.ErrorMessage);
                    }
                }
                throw;
            }


            return(Mapper.Map <WasteStockDto>(dbData));
        }