private bool ProdItemEvaluate(int row, string itemName) { ComplexRecipeDetail detail = recipe.DetailsProd [row]; if (detail.ItemId >= 0 && detail.ItemName == itemName) { return(true); } double currentQuantity = detail.Quantity; string codeLot; long lotId; Item item = Item.GetByAny(itemName, out barcodeUsed, out codeQtty, out codeLot, out lotId); if (!ProdItemEvaluate(row, item, true)) { return(false); } // no quantity from the barcode scanner if (codeQtty.IsZero()) { codeQtty = currentQuantity; } return(true); }
private bool OperationDetailsValidate() { #region Validate materials if (recipe.DetailsMat.Count == 0) { return(false); } MatCurrentColumnEvaluate(); bool hasValidMaterialQuantities = false; for (int i = recipe.DetailsMat.Count - 1; i >= 0; i--) { try { // Validate Item string itemName = recipe.DetailsMat [i].ItemName.Trim(); // If the gooods field is empty then this line has to be skipped if (itemName.Length == 0) { // If this is not the first line then delete it if (i > 0) { recipe.DetailsMat.RemoveAt(i); continue; } DetailsValidationWarning(Translator.GetString("There are no valid materials!")); MatEditGridField(0, colItem.Index); return(false); } Item item = Item.GetById(recipe.DetailsMat [i].ItemId); if (item == null || item.Name != itemName) { DetailsValidationWarning(string.Format(Translator.GetString("Invalid item at row {0}!"), i + 1)); MatEditGridField(i, colItem.Index); return(false); } // Validate quantity double qty = recipe.DetailsMat [i].Quantity; if ((!editMode && qty <= 0) || (editMode && qty < 0)) { DetailsValidationWarning(string.Format(Translator.GetString("Invalid quantity of item \"{0}\"!"), item.Name)); MatEditGridField(i, colQuantity.Index); return(false); } if (qty > 0) { hasValidMaterialQuantities = true; } } catch { DetailsValidationWarning(string.Format(Translator.GetString("Error at row {0}!"), i + 1)); MatEditGridField(i, colItem.Index); return(false); } } if (!hasValidMaterialQuantities) { if (editMode) { ResponseType ret = DetailsValidationQuestion(Translator.GetString("There are no materials with quantities greater than 0! The recipe will be deleted. Are you sure?")); if (ret == ResponseType.No) { return(false); } } else { DetailsValidationWarning(Translator.GetString("The recipe must contain at least one material with quantity greater than 0.")); return(false); } } #endregion #region Validate products if (recipe.DetailsProd.Count == 0) { return(false); } ProdCurrentColumnEvaluate(); bool hasValidProductQuantities = false; for (int i = recipe.DetailsProd.Count - 1; i >= 0; i--) { try { // Validate Item string itemName = recipe.DetailsProd [i].ItemName.Trim(); // If the gooods field is empty then this line has to be skipped if (itemName.Length == 0) { // If this is not the first line then delete it if (i > 0) { recipe.DetailsProd.RemoveAt(i); continue; } DetailsValidationWarning(Translator.GetString("There are no valid products!")); ProdEditGridField(0, colSecondItem.Index); return(false); } Item item = Item.GetById(recipe.DetailsProd [i].ItemId); if (item == null || item.Name != itemName) { DetailsValidationWarning(string.Format(Translator.GetString("Invalid item at row {0}!"), i + 1)); ProdEditGridField(i, colSecondItem.Index); return(false); } // Validate quantity double qty = recipe.DetailsProd [i].Quantity; if ((!editMode && qty <= 0) || (editMode && qty < 0)) { DetailsValidationWarning(string.Format(Translator.GetString("Invalid quantity of item \"{0}\"!"), item.Name)); ProdEditGridField(i, colSecondQuantity.Index); return(false); } if (qty > 0) { hasValidProductQuantities = true; } } catch { DetailsValidationWarning(string.Format(Translator.GetString("Error at row {0}!"), i + 1)); ProdEditGridField(i, colSecondItem.Index); return(false); } } if (hasValidMaterialQuantities && !hasValidProductQuantities) { if (editMode) { ResponseType ret = DetailsValidationQuestion(Translator.GetString("There are no products with quantities greater than 0! The recipe will be deleted. Are you sure?")); if (ret == ResponseType.No) { return(false); } } else { DetailsValidationWarning(Translator.GetString("The recipe must contain at least one product with quantity greater than 0.")); return(false); } } #endregion for (int i = 0; i < recipe.DetailsMat.Count; i++) { ComplexRecipeDetail detMat = recipe.DetailsMat [i]; foreach (ComplexRecipeDetail detProd in recipe.DetailsProd) { if (detMat.ItemId != detProd.ItemId) { continue; } DetailsValidationWarning(string.Format(Translator.GetString("The item \"{0}\" is used as a material and as a product!"), detMat.ItemName)); MatEditGridField(i, colItem.Index); return(false); } } if (!hasValidMaterialQuantities || !hasValidProductQuantities) { recipe.ClearDetails(); } return(true); }