public ActionResult SaveProductRoute(int productId, ProductRoute data)
        {
            ProductRoute route   = null;
            bool         success = false;
            string       msg     = string.Empty;

            Product product = Product.GetProduct(productId);

            route = product.Routes.AddRoute(data.RouteId);
            if (!product.IsValid)
            {
                msg = product.BrokenRulesCollection.ToString();
            }
            try
            {
                product = ImportWizard.PrepareProductSave(product);
                product = (Product)product.Save();
                success = true;
            }
            catch (Exception e)
            {
                msg = msg + ", " + e.Message;
            }

            return(this.Direct(new
            {
                success = success,
                data = route,
                msg = msg
            }));
        }
        public ActionResult SaveProductSubstance(ProductSubstance productSubstance)
        {
            bool             success   = false;
            string           msg       = string.Empty;
            ProductSubstance substance = null;

            if (Product.Exists(new Product.ExistCriteria(productSubstance.ProductId)))
            {
                Product product = Product.GetProduct(productSubstance.ProductId);
                if (product.HasSubstance(productSubstance.SubstanceName))
                {
                    substance = product.Substances.GetSubstanceByName(productSubstance.SubstanceName);
                }
                else
                {
                    substance = product.Substances.AddNew();
                }

                if (substance != null)
                {
                    Csla.Data.DataMapper.Map(productSubstance, substance, "ProductId");
                    if (product.IsSavable)
                    {
                        try
                        {
                            product   = ImportWizard.PrepareProductSave(product);
                            product   = (Product)product.Save();
                            substance = product.Substances.GetSubstanceByName(productSubstance.SubstanceName);
                            success   = true;
                        }
                        catch (Exception e)
                        {
                            msg = e.Message;
                        }
                    }
                }
            }

            return(this.Direct(new
            {
                success = success,
                data = substance,
                msg = msg
            }));
        }