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; }
public Stock FindStockFor(RecipeJob recipeJob, RecipeItem recipeItem) { Stock stock = null; _dbConversation.UsingTransaction(()=> { stock = _dbConversation.Query(new FindStockForRecipeItemQuery(recipeItem)); }); return stock; }
public IEnumerable<Recipe> FindRecipes(RecipeJob recipeJob) { List<Recipe> recipes = null; _dbConversation.UsingTransaction(() => { recipes = _dbConversation.Query(new FindRecipesForSalesItemQuery(recipeJob.SalesItem)).ToList(); }); return recipes; }
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); }); } } }