/// <summary> /// Формирование заявок пляшем от АИС 3 /// </summary> /// <param name="userRule">Данные АИС 3 для создания заявки</param> /// <returns></returns> public async Task <ModelPathReport> GenerateTemplateRule(UserRules userRule) { var report = new ModelPathReport(); try { return(await Task.Factory.StartNew(() => { var sql = new SelectSql(); var templateWord = new TemplateUserRule(); var templateRule = new RuleTemplate() { SenderUsers = new SenderUsers() }; var modelSelect = sql.SendersUsers(ref templateRule); sql.UserRuleModel(ref templateRule, userRule, modelSelect); templateWord.CreateDocum(_parameterService.ReportMassTemplate, templateRule, null); report.Note = "Заявки запущены и сохраняются в папку"; report.Url = _parameterService.ReportMassTemplate; return report; })); } catch (Exception e) { Loggers.Log4NetLogger.Error(e); report.Note = e.Message; return(report); } }
/// <summary> /// Запрос на лиц кто согласовывает надо добавлять в xml /// </summary> /// <param name="template">Шаблон возврата</param> public ModelSelect SendersUsers(ref RuleTemplate template) { try { ModelSelect model = new ModelSelect { LogicaSelect = SqlSelectModel(13) }; template.SenderUsers.Security = Inventory.Database.SqlQuery <Security>(model.LogicaSelect.SelectUser, new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[0], 3), new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[1], "Отдел информационной безопасности"), new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[2], DBNull.Value)).FirstOrDefault(); template.SenderUsers.ItOtdel = Inventory.Database.SqlQuery <ItOtdel>(model.LogicaSelect.SelectUser, new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[0], 4), new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[1], "Отдел информатизации"), new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[2], DBNull.Value)).FirstOrDefault(); template.SenderUsers.SenderRukovodstvo = Inventory.Database.SqlQuery <SenderRukovodstvo>(model.LogicaSelect.SelectUser, new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[0], 5), new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[1], "Руководство"), new SqlParameter(model.LogicaSelect.SelectedParametr.Split(',')[2], DBNull.Value)).FirstOrDefault(); return(model); } catch (Exception e) { Loggers.Log4NetLogger.Error(e); } return(null); }
/// <summary> /// Вытягивание данных на отдел и пользователей /// </summary> /// <param name="template">Шаблон раскладки</param> /// <param name="userRule">Данные ролей из АИС 3</param> /// <param name="sqlSelect">Запрос к БД для выборки данных</param> public void UserRuleModel(ref RuleTemplate template, UserRules userRule, ModelSelect sqlSelect) { //Группируем по номеру, отделу, дате и назначению var groupElement = userRule.User.Where(x => x.Number != "Скрипт").SelectMany(x => x.Rule, (u, r) => new { u, r }).GroupBy(x => new { x.r.Pushed, x.u.Dates, x.u.Number, x.u.Otdel }) .Select(x => new { x.Key.Number, x.Key.Dates, x.Key.Otdel, x.Key.Pushed }).ToList(); int i = 0; foreach (var gr in groupElement) { if (template.Otdel == null) { template.Otdel = new Otdel[groupElement.Count]; } template.Otdel[i] = Inventory.Database.SqlQuery <Otdel>( sqlSelect.LogicaSelect.SelectUser, new SqlParameter(sqlSelect.LogicaSelect.SelectedParametr.Split(',')[0], 1), new SqlParameter(sqlSelect.LogicaSelect.SelectedParametr.Split(',')[1], gr.Otdel.Replace("№ ", "№")), new SqlParameter(sqlSelect.LogicaSelect.SelectedParametr.Split(',')[2], gr.Number)).FirstOrDefault() ?? new Otdel() { Number = gr.Number, NameOtdel = "Ошибка в наименование отдела Кадры,AD,АИС3", RnameOtdel = "Ошибка в наименование отдела Кадры,AD,АИС3", SmallName = "Отсутствует", NamePosition = "Отсутствует" }; template.Otdel[i].Dates = Convert.ToDateTime(gr.Dates); template.Otdel[i].DateStatement = Convert.ToDateTime(gr.Dates).AddWorkdays(-1); var user = userRule.User.SelectMany(x => x.Rule, (u, r) => new { u, r }).Where(userRole => (userRole.u.Dates == gr.Dates) && (userRole.u.Number == gr.Number) && (userRole.r.Pushed == gr.Pushed) && (userRole.u.Otdel.Replace("№ ", "№") == gr.Otdel.Replace("№ ", "№")) ).Select(mussel => new { mussel.u.Dates, mussel.u.Fio, mussel.u.SysName, mussel.u.Dolj, Otdel = mussel.u.Otdel.Replace("№ ", "№"), mussel.u.Number }).Distinct().ToList(); int j = 0; foreach (var userRole in user) { var roleAll = userRule.User.Where(u => u.Dates == userRole.Dates && u.Dolj == userRole.Dolj && u.Otdel.Replace("№ ", "№") == userRole.Otdel && u.Fio == userRole.Fio && u.SysName == userRole.SysName && u.Number == userRole.Number). Select(x => x.Rule.Where(r => r.Pushed == gr.Pushed)).Aggregate((element, next) => element.Concat(next).ToArray()).ToArray(); if (template.Otdel[i].Users == null) { template.Otdel[i].Users = new LibaryXMLAutoModelXmlAuto.OtdelRuleUsers.Users[user.Count]; } template.Otdel[i].Users[j] = Inventory.Database.SqlQuery <LibaryXMLAutoModelXmlAuto.OtdelRuleUsers.Users>(sqlSelect.LogicaSelect.SelectUser, new SqlParameter(sqlSelect.LogicaSelect.SelectedParametr.Split(',')[0], 2), new SqlParameter(sqlSelect.LogicaSelect.SelectedParametr.Split(',')[1], userRole.SysName.Split('@')[0]), new SqlParameter(sqlSelect.LogicaSelect.SelectedParametr.Split(',')[2], DBNull.Value)).FirstOrDefault() ?? new LibaryXMLAutoModelXmlAuto.OtdelRuleUsers.Users() { NameUser = userRole.Fio, NamePosition = userRole.Dolj, IpAdress = null, Tabel = $"regions\\{userRole.SysName.Split('@')[0]}", NumberKabinet = null, RuleTemplate = null }; template.Otdel[i].Users[j].RuleTemplate = roleAll.Select(elem => $"{elem.Types}: {elem.Name} {((string.IsNullOrWhiteSpace(elem.DateFinish) || elem.Pushed == "Отзыв") ? null :" - " + elem.DateFinish)}").Aggregate( (element, next) => element + (string.IsNullOrWhiteSpace(element) ? string.Empty : ", ") + next); template.Otdel[i].Users[j].Pushed = roleAll[0].Pushed; j++; } i++; } }