private void AddStockAndMovement(CreateBoxVM entity, BoxType boxtype, int totalProductItems)
 {
     try
     {
         var stock = _unitOfWork.Repository <Stock>().Find(x => x.ProductID == entity.ProductID && x.ClientID == entity.ClientID);
         if (stock == null)
         {
             stock = Stock.FactoryCreate(entity.ClientID, entity.ProductID);
             stock.AddMovementInput(totalProductItems);
             _unitOfWork.Repository <Stock>().Add(stock);
         }
         else
         {
             stock.AddMovementInput(totalProductItems);
             _unitOfWork.Repository <Stock>().Update(stock);
         }
     }
     catch (CustomException exc)
     {
         throw exc;
     }
     catch (Exception ex)
     {
         throw CustomException.Create <BoxApplicationService>("Unexpected error fetching add boxes", nameof(this.Add), ex);
     }
 }
        public void Add(CreateBoxVM entity)
        {
            try
            {
                _unitOfWork.SetTrackAll();
                var boxtype = _unitOfWork.Repository <BoxType>().GetById(entity.BoxTypeID);

                int totalProductItemsToStock = 0;

                foreach (var barcode in entity.TagsBarcodes)
                {
                    Box box = _unitOfWork.Repository <Box>().Find(b => b.GraphicCodes.BarcodeEAN13 == barcode) ?? Box.FactoryCreate(boxtype, barcode);

                    if (entity.HasMovementStock)
                    {
                        int totalItemsByBox = SumTotalProductItemsForStock(entity, boxtype);
                        totalProductItemsToStock += totalItemsByBox;

                        box.StoreProductsItems(entity.ProductID, totalItemsByBox);
                    }
                    _unitOfWork.Repository <Box>().AddUpdate(box);
                }

                if (entity.HasMovementStock)
                {
                    AddStockAndMovement(entity, boxtype, totalProductItemsToStock);
                }
                _unitOfWork.CommitSync();
            }
            catch (CustomException exc)
            {
                throw exc;
            }
            catch (Exception ex)
            {
                throw CustomException.Create <BoxApplicationService>("Unexpected error fetching add boxes", nameof(this.Add), ex);
            }
        }
        private int SumTotalProductItemsForStock(CreateBoxVM entity, BoxType boxtype)
        {
            var totalProductItems = entity.HasAutoCompleteItems ? boxtype.MaxProductsItems : entity.TotalItemsinBox;

            return(totalProductItems);
        }