public void FormulSwith(ModelZg modelZg, string databasepath, ModelImnsOtdel otdel, CalendarModel calendar, Status status, OtdelFormul formul, Loading Load) { SeathZg seathzg = new SeathZg(); if (!formul.IsValidation()) { } else { switch (formul.SelectfFormul.Index) { case 1: if (!otdel.IsValidation() || !calendar.IsValidation()) { break; } { seathzg.SeathZgOtdel(databasepath, modelZg, Formula.GenerateFormula(formul.SelectfFormul.Formula, otdel.SelectOtdel.OtdelDepartament, calendar.Stardatetime, calendar.EndDateTime), Load); break; } case 2: if (!otdel.IsValidation() || !calendar.IsValidation() || !status.IsValidation()) { break; } { seathzg.SeathZgOtdel(databasepath, modelZg, Formula.GenerateFormula(formul.SelectfFormul.Formula, otdel.SelectOtdel.OtdelDepartament, calendar.Stardatetime, calendar.EndDateTime, status.Selectstatus.StatusZg), Load); break; } } } }
/// <summary> /// Наша модель глобальных страниц можно добавлять /// </summary> public ZgDialogModel(string zg) { ZgOtdel = new[] { new LinkCommutator("Полная выборка на отдел", new Dialogs.Local.Zg.Local.Zg.ZgOtdel(), new[] { Link.Pageses <Dialogs.Local.Zg.Local.Zg.ZgOtdel>() }), new LinkCommutator("Выборка на пользователя", new Dialogs.Local.Zg.Local.Zg.ZgUsers(), new[] { Link.Pageses <Dialogs.Local.Zg.Local.Zg.ZgUsers>() }) }; Zg = zg; //CalendarModel Sheme = LoadOtdUser(); FormulsOtdel = Lotuslib.LoadingModel.LoadingFormuls.Formuls(); Status = Lotuslib.LoadingModel.LoadStatus.Status(); ShemeZg = new ModelZg(); GetChange = new DelegateCommand(() => Dispatcher.CurrentDispatcher.Invoke(() => FormulaSwithFormul.FormulSwith(ShemeZg, Zg, Sheme, ((CalendarDataContext)Calendar.DataContext).Calendar, Status, FormulsOtdel, Load))); Calendar = new CalendarView(); Load = new Loading("", 0); }
/// <summary> /// Тестовая функция выгрузки в Excel /// </summary> /// <param name="model"></param> public void ExportToExcel(ModelZg model) { var i = 1; var workbook1 = new XLWorkbook(); var worksheet1 = workbook1.Worksheets.Add("Отчет Lotus"); foreach (var zn in model.ShemeDbZg.ToList()) { worksheet1.Cell($"A{i}").Value = zn.NameFio; worksheet1.Cell($"B{i}").Value = zn.Num; worksheet1.Cell($"C{i}").Value = zn.Status; worksheet1.Cell($"D{i}").Value = zn.Datareg; worksheet1.Cell($"E{i}").Value = zn.InCardRespOutNum; i++; } workbook1.SaveAs("C:\\Отчет.xlsx"); }
/// <summary> /// Очень сложный метод т.к ObservableCollection нельзя обновить из другого потока потомучто он привязан к UI потоку. /// Поэтому пришлось создавать метод UpdateOn() который отвяжет его от потока UI /// После этого мы можем манипулировать ObservableCollection /// Такая функция появилась только в Net 4.5 /// </summary> /// <param name="databasepath">Путь кбазе в Lotus</param> /// <param name="shemezg">Наша модель отражения элементов для манипуляции </param> /// <param name="formula">Заранее сгенерированая формула поиска ЗГ</param> public async void SeathZgOtdel(string databasepath, ModelZg shemezg, string formula, Loading Load) { try { shemezg.ShemeDbZg.Clear(); shemezg.UpdateOn(); await Task.Run(() => { var db = ConectDb.ConectDb.Databaseconect(ConectionString.ConectionString.Pass, ConectionString.ConectionString.ServerLocal, databasepath, false); Load.Text = "Приступили к поиску ждите"; var col = db.Search(formula, null, 0); var count = col.Count; var docum = col.GetFirstDocument(); var i = 1; var workbook1 = new XLWorkbook(); var worksheet1 = workbook1.Worksheets.Add("Отчет Lotus"); while (docum != null) { Load.Text = "Обработано " + i + " из " + count; var NamePerson = docum.GetItemValue(LotusItem.DbZgItem.NamePerson)[0].ToString(); var NumZg = docum.GetItemValue(LotusItem.DbZgItem.NumZg)[0].ToString(); var StatusZg = docum.GetItemValue(LotusItem.DbZgItem.StatusZg)[0].ToString(); var DataregZg = docum.GetItemValue(LotusItem.DbZgItem.DataregZg)[0].ToString(); var InCardRespOutNum = docum.GetItemValue(LotusItem.DbZgItem.InCardRespOutNum)[0].ToString(); var IoInn = docum.GetItemValue(LotusItem.DbZgItem.IoInn)[0].ToString(); var DepartamentZg = docum.GetItemValue(LotusItem.DbZgItem.DepartamentZg)[0].ToString(); var Incardrespoutnum = docum.GetItemValue(LotusItem.DbZgItem.InCardRespOutNum)[0].ToString(); var Incardrespdi = docum.GetItemValue(LotusItem.DbZgItem.InCardRespDi)[0].ToString(); var Extofiledate = docum.GetItemValue(LotusItem.DbZgItem.ExToFileDate)[0].ToString(); worksheet1.Cell($"A{i}").Value = NamePerson; worksheet1.Cell($"B{i}").Value = NumZg; worksheet1.Cell($"C{i}").Value = StatusZg; worksheet1.Cell($"D{i}").Value = DataregZg; worksheet1.Cell($"E{i}").Value = InCardRespOutNum; worksheet1.Cell($"F{i}").Value = IoInn; lock (shemezg._lock) { shemezg.ShemeDbZg.Add(new ModelZg() { Incardrespoutnum = Incardrespoutnum, DepartamentZg = DepartamentZg, StatusZg = StatusZg, DataregZg = DataregZg, NumZg = NumZg, Namefio = NamePerson, Incardrespdi = Incardrespdi, Extofiledate = Extofiledate }); } i++; docum = col.GetNextDocument(docum); } workbook1.SaveAs("D:\\Отчет.xlsx"); shemezg.UpdateOff(); }); } catch (Exception e) { MessageBox.Show(e.Message); } }
/// <summary> /// Очень сложный метод т.к ObservableCollection нельзя обновить из другого потока потомучто он привязан к UI потоку. /// Поэтому пришлось создавать метод UpdateOn() который отвяжет его от потока UI /// После этого мы можем манипулировать ObservableCollection /// Такая функция появилась только в Net 4.5 /// </summary> /// <param name="databasepath">Путь кбазе в Lotus</param> /// <param name="shemezg">Наша модель отражения элементов для манипуляции </param> /// <param name="formula">Заранее сгенерированая формула поиска ЗГ</param> public void SeathZgOtdel(string databasepath, ModelZg shemezg, string formula, Loading Load) { try { shemezg.ShemeDbZg.Clear(); shemezg.UpdateOn(); Task.Run(() => { //var db = ConectDb.ConectDb.Databaseconect(ConectionString.ConectionString.Pass, //ConectionString.ConectionString.ServerLocal, databasepath, false); var db = ConectDb.ConectDb.Databaseconect(ConectionString.ConectionString.Pass, ConectionString.ConectionString.ServerLocal, "IFNS\\Комутатор_архивов\\Arhiv2018\\2017\\ZG_Arhiv_2017.nsf", false); // var col = db.Search(formula, null, 0); var col = db.Search("Select @All", null, 0); var count = col.Count; var docum = col.GetFirstDocument(); var i = 1; var workbook1 = new XLWorkbook(); var worksheet1 = workbook1.Worksheets.Add("Отчет Lotus"); while (docum != null) { Load.Text = "Обработано " + i + " из " + count; //var docum1 = docum; //Task.Run(async () => //{ // await Task.Run(() => // { var a = docum.GetItemValue(LotusItem.DbZgItem.NamePerson)[0].ToString(); var a1 = docum.GetItemValue(LotusItem.DbZgItem.NumZg)[0].ToString(); var a2 = docum.GetItemValue(LotusItem.DbZgItem.StatusZg)[0].ToString(); var a3 = docum.GetItemValue(LotusItem.DbZgItem.DataregZg)[0].ToString(); var a4 = docum.GetItemValue(LotusItem.DbZgItem.InCardRespOutNum)[0].ToString(); var a5 = docum.GetItemValue(LotusItem.DbZgItem.IoInn)[0].ToString(); worksheet1.Cell($"A{i}").Value = a; worksheet1.Cell($"B{i}").Value = a1; worksheet1.Cell($"C{i}").Value = a2; worksheet1.Cell($"D{i}").Value = a3; worksheet1.Cell($"E{i}").Value = a4; worksheet1.Cell($"F{i}").Value = a5; i++; //lock (shemezg._lock) //shemezg.ShemeDbZg.Add(new ModelZg //{ // StatusZg = docum1.GetItemValue(LotusItem.DbZgItem.StatusZg)[0], // Num = docum1.GetItemValue(LotusItem.DbZgItem.NumZg)[0], // Datareg = docum1.GetItemValue(LotusItem.DbZgItem.DataregZg)[0], // DepartamentZg = docum1.GetItemValue(LotusItem.DbZgItem.DepartamentZg)[0], // Incardrespoutnum = docum1.GetItemValue(LotusItem.DbZgItem.InCardRespOutNum)[0], // Incardrespdi =Convert.ToString(docum1.GetItemValue(LotusItem.DbZgItem.InCardRespDi)[0]), // Extofiledate =Convert.ToString(docum1.GetItemValue(LotusItem.DbZgItem.ExToFileDate)[0]), // NameFio = docum1.GetItemValue(LotusItem.DbZgItem.NamePerson)[0] //}); // }); //}); docum = col.GetNextDocument(docum); } workbook1.SaveAs("C:\\Отчет.xlsx"); // ExportToExcel(shemezg); shemezg.UpdateOff(); }); } catch (Exception e) { MessageBox.Show(e.Message); } }