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(); }
/// <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); }
public static bool Contains(WorkTypeClass work) { for (int i = 0; i < OutputItems.Count; i++) { if (OutputItems[i].Equals(work)) { return(true); } } return(false); }
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); }
/// <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; //} }
/// <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); } }
/// <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); }