Example #1
0
        public static List<RecipeJob> ResolveJobs(XElement rootElement)
        {
            var result = new List<RecipeJob>();
            var orderElements = rootElement.Elements(TagOrder);
            foreach(var orderElement in orderElements)
            {
                var quantityTag = orderElement.Element(TagQuantity);
                if (quantityTag == null )
                    continue;
                var quantity = Decimal.Parse(quantityTag.Value, System.Globalization.CultureInfo.InvariantCulture);
                if (quantity == 0.0m) continue;

                var salesItemTag = orderElement.Element(TagSalesItem);
                if (salesItemTag == null )
                    continue;
                var salesItem = Convert.ToInt32(salesItemTag.Value);
                if (salesItem == 0) continue;

                var recipeJob = new RecipeJob
                    {Quantity = quantity, SalesItem = salesItem};

                var costcenter = orderElement.Element(TagCostcenter);
                if( costcenter!=null )
                    recipeJob.Costcenter = Convert.ToInt32(costcenter.Value);
                /*var price = orderElement.Element(TagPrice);
                if( price!=null )
                    recipeJob.Price = Convert.ToInt32(price.Value);*/
                result.Add(recipeJob);
            }

            return result;
        }
Example #2
0
 public Stock FindStockFor(RecipeJob recipeJob, RecipeItem recipeItem)
 {
     Stock stock = null;
     _dbConversation.UsingTransaction(()=>
         {
             stock = _dbConversation.Query(new FindStockForRecipeItemQuery(recipeItem));
         });
     return stock;
 }
Example #3
0
 public IEnumerable<Recipe> FindRecipes(RecipeJob recipeJob)
 {
     List<Recipe> recipes = null;
     _dbConversation.UsingTransaction(() =>
         {
             recipes = _dbConversation.Query(new FindRecipesForSalesItemQuery(recipeJob.SalesItem)).ToList();
         });
     return recipes;
 }
Example #4
0
        public void Execute(RecipeJob recipeJob)
        {
            var recipes = _recipeFinder.FindRecipes(recipeJob);
            if (recipes == null)
            {
                Console.WriteLine("Could not find recipe for {0}", recipeJob.SalesItem);
                return;
            }
            Console.WriteLine("Got recipe(s) for {0}", recipeJob.SalesItem);
            foreach(var recipe in recipes)
            {
                foreach (var recipeItem in recipe.RecipeItems)
                {
                    var stock = _stockFinder.FindStockFor(recipeJob, recipeItem);
                    if (stock == null)
                    {
                        Console.WriteLine("Could not find stock for {0}", recipeItem.RecipeableItem.Name);
                        continue;
                    }
                    Console.WriteLine("Got stock {0} for {1}", stock.Name, recipeItem.RecipeableItem.Name);
                    _dbConversation.UsingTransaction(()=>
                        {
                            var moveRecipe = new StockMoveRecipe {OfStock = stock, ExecutedAt = DateTime.Now, Recipe = recipe};

                            var quantity = recipeJob.Quantity * recipeItem.Quantity;
                            var fromStockItem = _stockBooker.BookItemOutOfStock(stock, quantity, recipeItem.Unit, recipeItem.RecipeableItem);
                            if (fromStockItem != null)
                                _dbConversation.InsertObjectOnCommit(fromStockItem);
                            var moveItem = new StockMoveItem
                            {
                                Unit = recipeItem.Unit,
                                Quantity = quantity,
                                RecipeableItem = recipeItem.RecipeableItem,
                            };
                            moveRecipe.AddMoveItem(moveItem);

                            _dbConversation.InsertObjectOnCommit(moveRecipe);
                        });
                }
            }
        }