public bool CheckImportFile(Wtp plan, XDocument xdoc, out string errorMessage) { var StudyPlan = xdoc.Root.Element(XmlConst.diffgram).Element(XmlConst.dsMMISDB); var SpecialityCode = StudyPlan.Element(XmlConst.OOP).Attribute("Шифр").Value; var ModeEducID = StudyPlan.Element(XmlConst.Plans).Attribute("КодФормыОбучения").Value; var StudYearID = WtpPresenter.GetStudYearIDByYear(StudyPlan.Element(XmlConst.Plans).Attribute("ГодНачалаПодготовки").Value); errorMessage = "Не совпадает"; bool error = false; //if(plan.DataRow.SPECIALITY_NUMB != SpecialityCode.Trim()) //поправить ошибку //{ // errorMessage += " код специальности,"; // error = true; //} if (plan.DataRow.MODEEDUC_ID != Convert.ToInt64(ModeEducID)) { errorMessage += " форма обучения,"; error = true; } var FormEduc = StudyPlan.Element(XmlConst.Plans).Attribute("Сокращённое").Value; if (plan.DataRow.FORMEDUC_ID != ImportConverter.GetFormEducId(FormEduc)) { errorMessage += " полный или сокращенный срок обучения,"; error = true; } errorMessage = errorMessage.TrimEnd(',') + "."; return(error); }
public bool Import(WtpPresenter presenter, XDocument xdoc, out string errorMessage) { _presenter = presenter; var plan = presenter.Plan; errorMessage = string.Empty; //Создание плана скорее всего будет отдельно, поэтому вынесла этот процесс из логики импорта, //Wtp newPlan = presenter.CreateWtp(); var StudyPlan = xdoc.Root.Element(XmlConst.diffgram).Element(XmlConst.dsMMISDB); var SpecialityCode = StudyPlan.Element(XmlConst.OOP).Attribute("Шифр").Value; var SpecialityIDFromFile = StudyPlan.Element(XmlConst.OOP).Attribute("Код").Value; var SpecializationIDFromFile = StudyPlan.Element(XmlConst.OOP).Descendants(XmlConst.OOP).Where(r => r.Attribute("Название").Value == plan.DataRow.SPECIALIZATION_NAME).Select(r => r.Attribute("Код").Value).FirstOrDefault(); if (SpecializationIDFromFile == null) { SpecializationIDFromFile = "-1"; } var StudYearID = WtpPresenter.GetStudYearIDByYear(StudyPlan.Element(XmlConst.Plans).Attribute("ГодНачалаПодготовки").Value); IEnumerable <XElement> parentCycles = StudyPlan.Descendants(XmlConst.Cycles).Where(q => q.Attribute("ТипБлока").Value == "1"); foreach (var parentCycle in parentCycles) { var StudDiscipCicleID = presenter.GetStudDiscipCicleByName(parentCycle.Attribute("Идентификатор").Value, parentCycle.Attribute("Цикл").Value); var StudDiscipCicleName = parentCycle.Attribute("Цикл").Value; var parentCycleID = parentCycle.Attribute("Код").Value; var Code = parentCycle.Attribute("Идентификатор").Value; var SortIndex = int.Parse(parentCycle.Attribute("{urn:schemas-microsoft-com:xml-msdata}rowOrder").Value) + 1; //если компонент с указанными параметрами не существует, то создать его, иначе найденный будет являться wtpComponent var parentComponent = plan.Components.Where(r => r.DataRow.STUDDISCIPCICLE_ID == StudDiscipCicleID). Where(r => r.DataRow.WTPCOMPONENT_CODE == Code). Where(r => r.DataRow.WTPCOMPONENT_PARENTID == null). Where(r => r.DataRow.STUDDISCCOMPONENT_ID == null). Where(r => r.DataRow.SPECIALIZATION_ID == null). Where(r => r.DataRow.WTPCOMPONENT_SORTINDEX == SortIndex); WTPComponent wtpComponent; if (parentComponent.Count() == 0) { IWTPCOMPONENT component = presenter.CreateNewComponent(); //поиск по имени STUDDISCIPCICLE_NAME component.STUDDISCIPCICLE_ID = StudDiscipCicleID; component.STUDDISCIPCICLE_NAME = parentCycle.Attribute("Цикл").Value; component.WTPCOMPONENT_CODE = Code; wtpComponent = presenter.AddComponent(component, null); } else { wtpComponent = parentComponent.First(); } //IWTPCOMPONENT component = presenter.CreateNewComponent(); ////поиск по имени STUDDISCIPCICLE_NAME //component.STUDDISCIPCICLE_ID = StudDiscipCicleID; //component.STUDDISCIPCICLE_NAME = parentCycle.Attribute("Цикл").Value; //component.WTPCOMPONENT_CODE = Code; //var wtpComponent = presenter.AddComponent(component, null); var childCycles = StudyPlan.Descendants(XmlConst.Cycles).Where(q => q.Attribute("ТипБлока").Value != "1").Where(q => q.Attribute("КодРодителя").Value == parentCycleID); if (childCycles.Count() != 0) { foreach (var childCycle in childCycles) { var childStudDiscipCicleID = presenter.GetStudDiscipCicleByName(childCycle.Attribute("Идентификатор").Value, childCycle.Attribute("Цикл").Value); var childComponent = plan.Components.Where(r => r.DataRow.STUDDISCIPCICLE_ID == childStudDiscipCicleID). Where(r => r.DataRow.WTPCOMPONENT_CODE == Code). Where(r => r.DataRow.WTPCOMPONENT_PARENTID == wtpComponent.DataRow.WTPCOMPONENT_ID). Where(r => r.DataRow.STUDDISCCOMPONENT_ID == null). Where(r => r.DataRow.SPECIALIZATION_ID == null). Where(r => r.DataRow.WTPCOMPONENT_SORTINDEX == SortIndex); var childCycleID = childCycle.Attribute("Код").Value; WTPComponent wtpComponent2; if (childComponent.Count() == 0) { IWTPCOMPONENT component2 = presenter.CreateNewComponent(); component2.STUDDISCIPCICLE_ID = childStudDiscipCicleID; component2.STUDDISCIPCICLE_NAME = childCycle.Attribute("Цикл").Value; component2.WTPCOMPONENT_CODE = childCycle.Attribute("Идентификатор").Value; component2.WTPCOMPONENT_SORTINDEX = int.Parse(childCycle.Attribute("{urn:schemas-microsoft-com:xml-msdata}rowOrder").Value) + 1; wtpComponent2 = presenter.AddComponent(component2, wtpComponent); } else { wtpComponent2 = childComponent.First(); } //IWTPCOMPONENT component2 = presenter.CreateNewComponent(); //var childID = presenter.GetStudDiscipCicleByName(childCycle.Attribute("Идентификатор").Value, childCycle.Attribute("Цикл").Value); //var childCycleID = childCycle.Attribute("Код").Value; //component2.STUDDISCIPCICLE_ID = childID; //component2.STUDDISCIPCICLE_NAME = childCycle.Attribute("Цикл").Value; //component2.WTPCOMPONENT_CODE = childCycle.Attribute("Идентификатор").Value; //component2.WTPCOMPONENT_SORTINDEX = int.Parse(childCycle.Attribute("{urn:schemas-microsoft-com:xml-msdata}rowOrder").Value) + 1; //var wtpComponent2 = presenter.AddComponent(component2, wtpComponent); //сохранение после каждого действия нужно будет убрать, сохранять только в конце импорта IEnumerable <XElement> planRows = StudyPlan.Descendants(XmlConst.Rows).Where(q => q.Attribute("УровеньВложения").Value == "1").Where(q => q.Attribute("КодБлока").Value == childCycleID); foreach (var planRow in planRows) { if (planRow.Attribute("ТипОбъекта").Value == "2" & (planRow.Attribute("КодООП").Value == SpecializationIDFromFile | planRow.Attribute("КодООП").Value == SpecialityIDFromFile)) { if (planRow.Attribute("СчитатьВПлане").Value == "true") { var rowID = planRow.Attribute("Код").Value; var discipRow = AddWTPROW(planRow, wtpComponent2); var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID); AddWTPROWValues(rowValues, discipRow); } else { continue; } //var rowID = planRow.Attribute("Код").Value; //var discipRow = AddWTPROW(planRow, wtpComponent2); //var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID); //AddWTPROWValues(plan, rowValues, discipRow); } else if (planRow.Attribute("ТипОбъекта").Value == "1" & (planRow.Attribute("КодООП").Value == SpecializationIDFromFile | planRow.Attribute("КодООП").Value == SpecialityIDFromFile)) { //дисциплины специализации WTPRowGroup wtpRowGroup; IWTPROWGROUP rowGroup = presenter.CreateNewRowGroup(); rowGroup.SPECIALIZATION_ID = SpecializationID; rowGroup.WTPROWGROUP_CODE = groupCode; rowGroup.WTPROWGROUP_NAME = groupName; rowGroup.WTPROWGROUP_SORTINDEX = groupSortIndex; rowGroup.WTPROWGROUP_NUMBER = groupNumber; wtpRowGroup = presenter.AddRowGroup(rowGroup, wtpComponent2); //var moduleID = presenter.GetStudDiscComponentByName(planRow.Attribute("Идентификатор").Value, planRow.Attribute("Цикл").Value); //var OOP = StudyPlan.Element(XmlConst.OOP).Descendants(XmlConst.OOP).Where(q => q.Attribute("Код").Value == planRow.Attribute("КодООП").Value).First(); //var SpecializationID = presenter.GetSpecializationByName(OOP.Attribute("Название").Value, SpecialityCode); //var module = plan.Components. // Where(r => r.DataRow.STUDDISCIPCICLE_ID == null). // Where(r => r.DataRow.WTPCOMPONENT_CODE == Code). // Where(r => r.DataRow.WTPCOMPONENT_PARENTID == wtpComponent2.DataRow.WTPCOMPONENT_ID). // Where(r => r.DataRow.STUDDISCCOMPONENT_ID == moduleID). // Where(r => r.DataRow.SPECIALIZATION_ID == SpecializationID). // Where(r => r.DataRow.WTPCOMPONENT_SORTINDEX == SortIndex); //WTPComponent wtpModule; //if (module == null) //{ // IWTPCOMPONENT component3 = presenter.CreateNewComponent(); // var childID = presenter.GetStudDiscipCicleByName(planRow.Attribute("Идентификатор").Value, planRow.Attribute("Цикл").Value); // component3.SPECIALIZATION_ID = SpecializationID; // component3.STUDDISCIPCICLE_NAME = planRow.Attribute("Цикл").Value; // component3.WTPCOMPONENT_CODE = planRow.Attribute("ДисциплинаКод").Value; // wtpModule = presenter.AddComponent(component3, wtpComponent2); //} //else //{ // wtpModule = module.First(); //} //IWTPCOMPONENT component3 = presenter.CreateNewComponent(); //string componentCode = planRow.Attribute("ДисциплинаКод").Value; //var studDiscComponentID = presenter.GetStudDiscComponentByName(planRow.Attribute("Дисциплина").Value, componentCode.Remove(componentCode.Length - 3)); //var OOP = StudyPlan.Element(XmlConst.OOP).Descendants(XmlConst.OOP).Where(q => q.Attribute("Код").Value == planRow.Attribute("КодООП").Value).First();/*Where(q => q.Attribute("Код").Value == planRow.Attribute("КодООП").Value).First();*/ //var SpecializationID = presenter.GetSpecializationByName(OOP.Attribute("Название").Value, OOP.Attribute("Шифр").Value); //component3.SPECIALIZATION_ID = SpecializationID; //component3.SPECIALIZATION_NAME = OOP.Attribute("Название").Value; //component3.WTPCOMPONENT_CODE = planRow.Attribute("ДисциплинаКод").Value; //component3.STUDDISCCOMPONENT_ID = studDiscComponentID; //component3.STUDDISCCOMPONENT_NAME = planRow.Attribute("Дисциплина").Value; //var wtpComponent3 = presenter.AddComponent(component3, wtpComponent2); var componentID = planRow.Attribute("Код").Value; var specRows = StudyPlan.Descendants(XmlConst.Rows).Where(q => q.Attribute("УровеньВложения").Value == "2").Where(q => q.Attribute("КодРодителя").Value == componentID); foreach (var specRow in specRows) { if (specRow.Attribute("СчитатьВПлане").Value == "true") { var rowID = specRow.Attribute("Код").Value; var discipRow = AddWTPROW(specRow, wtpComponent2); //var discipRow = AddWTPROW(chosenRow, wtpComponent2, SpecializationID); var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID); AddWTPROWValues(rowValues, discipRow); } else { continue; } //else continue; //var rowID = specRow.Attribute("Код").Value; //var discipRow = AddWTPROW(specRow, wtpComponent2); //var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID); //AddWTPROWValues(plan, rowValues, discipRow); } } else if (planRow.Attribute("ТипОбъекта").Value == "5" & (planRow.Attribute("КодООП").Value == SpecializationIDFromFile | planRow.Attribute("КодООП").Value == SpecialityIDFromFile)) { //дисциплины по выбору int VariationID; using (SqlConnection conn = ServerHelper.ConnectionHelper.GetConnection()) { SqlDataAdapter adapter = new SqlDataAdapter(); conn.Open(); SqlCommand command = new SqlCommand("SPU_WTPVARIATION_NEXTVALUE_SEL", conn); command.CommandType = CommandType.StoredProcedure; adapter.SelectCommand = command; VariationID = Convert.ToInt32(command.ExecuteScalar()); conn.Close(); } var chosenRows = StudyPlan.Descendants(XmlConst.Rows).Where(q => q.Attribute("УровеньВложения").Value == "2").Where(q => q.Attribute("КодРодителя").Value == planRow.Attribute("Код").Value); foreach (var chosenRow in chosenRows) { if (chosenRow.Attribute("СчитатьВПлане").Value == "true") { var rowID = chosenRow.Attribute("Код").Value; var discipRow = AddWTPROW(chosenRow, wtpComponent2, VariationID); //var discipRow = AddWTPROW(chosenRow, wtpComponent2, SpecializationID); var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID); AddWTPROWValues(rowValues, discipRow); } else { continue; } } } else if (planRow.Attribute("ТипОбъекта").Value == "3" & (planRow.Attribute("КодООП").Value == SpecializationIDFromFile | planRow.Attribute("КодООП").Value == SpecialityIDFromFile)) { //практики var rowID = planRow.Attribute("Код").Value; var practiceRow = AddWTPROW(planRow, wtpComponent2); // добавить значения часов практики var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID).Where(r => r.Attribute("КодТипаЧасов").Value == "1"); var ZE = int.Parse(rowValues.Where(r => r.Attribute("КодВидаРаботы").Value == "50").Select(r => r.Attribute("Количество").Value).First()); IWTPPRACTICE newPractice = presenter.CreateNewPractice(); newPractice.WTPPRACTICE_WEEKSCOUNT = (long)Math.Round(ZE / 1.5); //позже изменить string PracticeType = StudyPlan.Descendants(XmlConst.PracticeCatalog).Where(q => q.Attribute("Код").Value == planRow.Attribute("ВидПрактики").Value).Select(q => q.Attribute("Наименование").Value).First(); newPractice.TYPEPRACTICE_ID = presenter.GetTypePracticeIDByName(PracticeType); var practice = presenter.AddPractice(newPractice, practiceRow); AddWTPROWValues(rowValues, practiceRow); } } } } else { IEnumerable <XElement> planRows = StudyPlan.Descendants(XmlConst.Rows).Where(q => q.Attribute("УровеньВложения").Value == "1").Where(q => q.Attribute("КодБлока").Value == parentCycleID); foreach (var planRow in planRows) { if (planRow.Attribute("СчитатьВПлане").Value == "true") { if (planRow.Attribute("ТипОбъекта").Value == "6" & (planRow.Attribute("КодООП").Value == SpecializationIDFromFile | planRow.Attribute("КодООП").Value == SpecialityIDFromFile)) //государственная итоговая аттестация { var rowID = planRow.Attribute("Код").Value; var diplomaRow = AddWTPROW(planRow, wtpComponent); var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID); AddWTPROWValues(rowValues, diplomaRow); } else if (planRow.Attribute("ТипОбъекта").Value == "2") //факультативы { var rowID = planRow.Attribute("Код").Value; var diplomaRow = AddWTPROW(planRow, wtpComponent); var rowValues = StudyPlan.Descendants(XmlConst.NewHours).Where(q => q.Attribute("КодОбъекта").Value == rowID); AddWTPROWValues(rowValues, diplomaRow); } } else { continue; } } } } //импорт календарного учебного графика //int maxCourse = int.Parse(StudyPlan.Descendants("{http://tempuri.org/dsMMISDB.xsd}Заезды").Last().Attribute("Курс").Value); //for (int i = 1; i <= maxCourse; i++) //{ // IEnumerable<XElement> graphValues = StudyPlan.Descendants(XmlConst.Graph).Where(q => q.Attribute("Курс").Value == i.ToString()); // foreach (XElement graphValue in graphValues) // { // int semestr = (int.Parse(graphValue.Attribute("Курс").Value) - 1) * 2 + int.Parse(graphValue.Attribute("Семестр").Value); // int weekNumber = int.Parse(graphValue.Attribute("НомерНедели").Value); // long typeActivity = presenter.GetTypeActivityIDByCode(int.Parse(graphValue.Attribute("КодВидаДеятельности").Value)); //написать метод в презентере для поиска по коду деятельности // var newValue = presenter.CreateNewGraphValue(); // newValue.CALENDARGRAPHVALUES_SEMNUM = semestr; // //newValue.CALENDARGRAPHVALUES_WEEK = weekNumber; // newValue.CALENDARGRAPHVALUES_ID = typeActivity; // var graph = presenter.AddGraphValue(newValue);//написать метод в презентере для добавления значений графика // } //} Save(); return(true); }
private void button1_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialog(); if (ofd.ShowDialog() != DialogResult.OK) { return; } var SpecialFaculty = 1231; //var Speciality = 50; var StudYear = 22; var FormEduc = 1; var ModeEduc = 1; var StudYearIDVersion = 22; //var WTP = DBManager.GetDataSourse<IWTP>().Rows.Cast<IWTP>(). // Where(r => r.SPECIALFACULTY_ID == SpecialFaculty). // Where(r => r.STUDYEAR_ID == StudYear). // Where(r => r.FORMEDUC_ID == FormEduc). // Where(r => r.MODEEDUC_ID == ModeEduc). // Where(r => r.STUDYEAR_ID_VERSION == StudYearIDVersion); WtpPresenter planPresenter = new WtpPresenter(); //if (WTP.Count() == 0) { } //{ if (WTP_ID == null) { Wtp plan = planPresenter.CreateWtp(); plan.DataRow.SPECIALFACULTY_ID = 1231; //plan.DataRow.SPECIALITY_ID = 50; plan.DataRow.STUDYEAR_ID = 22; plan.DataRow.FORMEDUC_ID = 1; plan.DataRow.MODEEDUC_ID = 1; plan.DataRow.STUDYEAR_ID_VERSION = 22; planPresenter.Save(); WTP_ID = (long)plan.DataRow.WTP_ID; } else { planPresenter.Load((long)WTP_ID); var plan = planPresenter.Plan; } ImportPlanExample importer = new ImportPlanExample(); XDocument xdoc = XDocument.Load(ofd.FileName); //planPresenter.Load(1297); if (importer.CheckImportFile(planPresenter.Plan, xdoc, out string ErrorMessage)) { if (MessageBox.Show(ErrorMessage + " Продолжить?", "Импорт УП", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.Cancel) { return; } } if (!importer.Import(planPresenter, xdoc, out string ErrorMessage2)) { MessageBox.Show(ErrorMessage); } }