public bool Equals(WorkTypeClass work)
        {
            bool ret = Article.Equals(work.Article);

            ret &= category.Equals(work.category);
            return(ret);
        }
        public static void CreateWorkType(WorkTypeClass obj = null)
        {
            Functions.CenterForm(cwf, NewForm.MainForm);

            if (obj != null)
            {
                cwf.AddType.Text         = "Редактировать работу";
                cwf.Text                 = "Редактировать работу";
                RedactedItemIndex        = JSONSerializeService.OutputItems.IndexOf(obj);
                RedactedWork             = obj;
                cwf.WorkTypeNameInp.Text = obj.Article;
                cwf.formula.TextBox.Text = obj.Formula;
                cwf.Listofparams.Items.Clear();
                foreach (string str in obj.parametrs)
                {
                    cwf.Listofparams.Items.Add(str);
                }
                cwf.Category.SelectedIndex = (int)obj.category;
            }
            else
            {
                cwf.AddType.Text           = "Создать работу";
                cwf.Text                   = "Создать работу";
                cwf.Category.SelectedIndex = 3;
                cwf.WorkTypeNameInp.Text   = "";
                cwf.formula.Text           = "";
                cwf.Listofparams.Items.Clear();
            }
            cwf.ShowDialog();
        }
Example #3
0
 /// <summary>
 /// добавляем элемент в выходные данные, что бы в будущем их сохранить
 /// </summary>
 /// <param name="item"> добавляемый объект</param>
 public static bool AddToOutput(WorkTypeClass item)
 {
     if (!JSONSerializeService.Contains(item))
     {
         OutputItems.Add(item);
         return(true);
     }
     return(false);
 }
        public bool FullEquals(WorkTypeClass work)
        {
            bool ret = Article == null && work.Article == null ? true:Article.Equals(work.Article);

            ret &= ParametersValue == null && work.ParametersValue == null ? true: ParametersValue.Length == work.ParametersValue.Length;
            ret &= Formula == null && work.Formula == null ? true : Formula.Equals(work.Formula);
            ret &= category.Equals(work.category);
            ret &= (parametrs == null && work.parametrs == null) ? true : parametrs.Count == work.parametrs.Count;
            return(ret);
        }
Example #5
0
 public static bool Contains(WorkTypeClass work)
 {
     for (int i = 0; i < OutputItems.Count; i++)
     {
         if (OutputItems[i].Equals(work))
         {
             return(true);
         }
     }
     return(false);
 }
Example #6
0
        public static bool getAlternate(WorkTypeClass work)
        {
            WorkTypeClass ret = work;

            foreach (WorkTypeClass w in JSONSerializeService.OutputItems)
            {
                if (work.Equals(w))
                {
                    ret = w;
                    return(true);
                }
            }
            return(false);
        }
        private void AddWorkType(object sender, EventArgs e)
        {
            WorkTypeClass work = new WorkTypeClass();

            work.Article = WorkTypeNameInp.Text;
            work.setPriceFunc(formula.TextBox.Text);
            var numer = Listofparams.Items.GetEnumerator();

            while (numer.MoveNext())
            {
                work.parametrs.Add(numer.Current.ToString());
            }
            work.ParametersValue = new double[work.parametrs.Count];
            if (Category.SelectedIndex == -1)
            {
                MessageBox.Show("Выберите категорию!");
                return;
            }
            work.category = (WorkTypeClass.Category)(Category.SelectedIndex);
            if (DelegateAssemblyService.isCreatedCorrect(work))
            {
                if (RedactedItemIndex != null)
                {
                    JSONSerializeService.OutputItems.Remove(JSONSerializeService.OutputItems.Find(w => w.FullEquals(RedactedWork)));
                    JSONSerializeService.AddToOutput(work);
                    JSONSerializeService.Save();
                    WorksTypeTree.Edit(RedactedWork, work);
                    RedactedWork = null;
                }
                else
                {
                    JSONSerializeService.AddToOutput(work);
                    JSONSerializeService.Save();
                    work = JSONSerializeService.OutputItems.Find(w => w.FullEquals(work));
                    WorksTypeTree.AddtoList(work);
                }

                this.Hide();
            }
            else
            {
                MessageBox.Show("Параметры обьекта заданны некоректно.");
            }
        }
        public object Clone()
        {
            WorkTypeClass copywork = new WorkTypeClass();

            copywork.Article      = Article;
            copywork.category     = category;
            copywork.delegateName = delegateName;
            copywork.Formula      = Formula;
            copywork.id           = id;
            copywork.IsFixedPrice = IsFixedPrice;
            copywork.Quantity     = Quantity;
            double[] copyparams = new double[ParametersValue.Length];
            ParametersValue.CopyTo(copyparams, 0);
            copywork.ParametersValue = copyparams;
            List <string> copyparamss = new List <string>();

            foreach (string s in parametrs)
            {
                copyparamss.Add(s);
            }
            copywork.parametrs = copyparamss;
            return(copywork);
        }
Example #9
0
        /// <summary>
        /// функция расчета цены для конкретного объекта с конкретными параметрами
        /// </summary>
        /// <param name="work">объект для которого нужно найти цену</param>
        /// <param name="parametr">массив со значениями параметров обьекта(параметры расположены в том же порядке, что и в файле)</param>
        /// <returns></returns>
        public static double getPriceforWorkType(WorkTypeClass work, double[] parametr)
        {
            //try
            //{
            var method = CompiledClass.GetMethod(work.delegateName, BindingFlags.Static | BindingFlags.Public);//получение метода соответствующего объекту

            if (parametr.Length == 0)
            {
                parametr = new double[work.parametrs.Count];
            }
            object[] ObjPar = new object[parametr.Length];
            for (int i = 0; i < parametr.Length; i++)
            {
                ObjPar[i] = parametr[i];           //конвертация double в object КОСТЫЛЬ
            }
            var ret = method.Invoke(null, ObjPar); //получение значения

            return((double)ret);
            //}
            //catch (TargetParameterCountException)
            //{
            //    return 0;
            //}
        }
Example #10
0
        /// <summary>
        /// проверка корректности данных в объекте
        /// </summary>
        /// <param name="work">проверяемый объект</param>
        /// <returns></returns>
        public static bool isCreatedCorrect(WorkTypeClass work)
        {
            if (!work.IsFixedPrice)
            {
                string func = CreateFunctions(work, true);//генерация кода

                try
                {
                    CSharpCodeProvider provider   = new CSharpCodeProvider();
                    CompilerParameters parameters = new CompilerParameters();
                    parameters.GenerateInMemory = false;
                    //if (File.Exists("test.dll"))
                    //    File.Delete("test.dll");
                    //parameters.OutputAssembly = "test.dll";
                    parameters.ReferencedAssemblies.Add("System.dll");
                    CompilerResults results = provider.CompileAssemblyFromSource(parameters, begin + func + end);//компиляция кода

                    if (results.Errors.Count == 0)
                    {
                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                catch
                {
                    return(false);//в случае ошибки, код сгенерирован неверно
                }
            }
            else
            {
                return(true);
            }
        }
Example #11
0
        /// <summary>
        /// создание функции для объекта для последующей компиляции
        /// </summary>
        /// <param name="work">объект для которого формируется функция</param>
        /// <returns></returns>
        static string CreateFunctions(WorkTypeClass work, bool isTest = false)
        {
            //if (work.isFixedPrice)
            //    return "";
            string parametrs = "";

            foreach (string str in work.parametrs)
            {
                parametrs += "double " + str + ",";//формирование стороки параметров
            }
            if (parametrs != "")
            {
                parametrs = parametrs.Substring(0, parametrs.Length - 1);
            }
            string ret = @"
        public static double " + "f" + fId + "(" + parametrs + ")" + "{ return " + work.Formula + ";}";//формирование кода

            if (!isTest)
            {
                work.delegateName = "f" + fId.ToString();//запоминание объектом имени соответствующей ему функции
                fId++;
            }
            return(ret);
        }