// public bool Save {get; set;} public override async Task <int> InvokeAsync(InvocationContext invocationContext) { var paths = this.fileMatcher.ExpandMatches(this.fileSystem.Directory.GetCurrentDirectory(), this.Targets); Dictionary <string, List <TargetInformation> > targetDirectories = new Dictionary <string, List <TargetInformation> >(); // Group targets together according to their directories // This is done so that only one search for support files is done per directory foreach (var path in paths) { using var context = this.CreateContainer(path); string directory = context.FileSystem.Path.GetDirectoryName(context.Path); if (targetDirectories.ContainsKey(directory)) { targetDirectories[directory].Add(context); } else { targetDirectories[directory] = new List <TargetInformation> { context }; } } // Extract recording information from each target foreach ((string directory, List <TargetInformation> targets) in targetDirectories) { SupportFile.FindSupportFiles(directory, targets, this.fileSystem); foreach (TargetInformation target in targets) { Recording recording = new Recording { SourcePath = target.Path, }; foreach (var extractor in this.extractorRegister.All) { if (await extractor.CanProcessAsync(target)) { recording = await extractor.ProcessFileAsync(target, recording); } } this.writer.Write(recording); } } return(ExitCodes.Success); }
public async Task <ActionResult> Edit(SupportRequestViewModel requestViewModel) { var started = false; var itUserChanged = false; var login = User.Identity.Name; var accountName = login.Substring(5, login.Length - 5); var person = await _db.Persons.FirstOrDefaultAsync(p => p.AccountName == accountName); if (person == null || !ModelState.IsValid) { // return view with error message if (person == null) { ModelState.AddModelError(string.Empty, "Ошибка авторизации!"); } return(View(requestViewModel.EditByIt ? "EditByIt" : "EditByUser", requestViewModel)); } var supportRequest = await _db.SupportRequests.FindAsync(requestViewModel.Id); if (supportRequest == null) { return(HttpNotFound()); } supportRequest.Category = requestViewModel.Category; //a file was attached if (requestViewModel.Upload != null && requestViewModel.Upload.ContentLength > 0) { if (requestViewModel.Upload.ContentLength > 10485760) { ModelState.AddModelError(string.Empty, "Файл должен быть меньше 10 МБ!"); return(View(requestViewModel.EditByIt ? "EditByIt" : "EditByUser", requestViewModel)); } var fileName = Path.GetFileName(requestViewModel.Upload.FileName); if (!string.IsNullOrEmpty(fileName)) { var dir = Directory.CreateDirectory(Path.Combine(HostingEnvironment.MapPath(@"~/SupportFiles"), Guid.NewGuid().ToString())); var filePath = Path.Combine(dir.FullName, fileName); requestViewModel.Upload.SaveAs(filePath); var requestFile = new SupportFile { Path = filePath }; _db.SupportFiles.Add(requestFile); supportRequest.File = requestFile; } } //edit by user if (!requestViewModel.EditByIt) { int mark; supportRequest.Text = requestViewModel.Text; supportRequest.Mark = int.TryParse(requestViewModel.Mark, out mark) ? mark : 0; if (supportRequest.State == 2 && supportRequest.Mark == 0) { requestViewModel.State = 2; ModelState.AddModelError(string.Empty, "Пожалуйста, выберите оценку"); return(View("EditByUser", requestViewModel)); } supportRequest.FeedBack = requestViewModel.FeedBack; supportRequest.Urgency = requestViewModel.Urgency; } //edit by IT-user else { if (requestViewModel.ToId != 0) { var itUser = await _db.Persons.FindAsync(requestViewModel.ToId); if (itUser != null) { //new request assigned to an IT-user - start it if (supportRequest.State == 0) { supportRequest.State = 1; supportRequest.StartTime = DateTime.Now; started = true; } else if (supportRequest.To != itUser) { itUserChanged = true; } supportRequest.To = itUser; } } supportRequest.Comment = requestViewModel.Comment; supportRequest.SoftwareInstalled = requestViewModel.SoftwareInstalled; supportRequest.SoftwareRemoved = requestViewModel.SoftwareRemoved; supportRequest.SoftwareRepaired = requestViewModel.SoftwareRepaired; supportRequest.SoftwareUpdated = requestViewModel.SoftwareUpdated; //supportRequest.HardwareId = requestViewModel.HardwareId; //supportRequest.HardwareReplaced = requestViewModel.HardwareReplaced; supportRequest.OtherActions = requestViewModel.OtherActions; } _db.Entry(supportRequest).State = EntityState.Modified; await _db.SaveChangesAsync(); using (var mailer = new EmailController()) { EmailResult mail = null; //edit by IT-user if (requestViewModel.EditByIt) { //job started right now, IT-user selected if (started) { //mail for user (job started) mail = await mailer.Accepted(requestViewModel.Id); mail?.Deliver(); //mail for selected IT user (request assigned) mail = await mailer.EditByIt(requestViewModel.Id, User.Identity.Name.GetUserName()); mail?.Deliver(); } //job in progress, IT-user changed by another IT-user else if (itUserChanged) { //mail for selected IT user (request assigned) mail = await mailer.EditByIt(requestViewModel.Id, User.Identity.Name.GetUserName()); mail?.Deliver(); } } //edit by user else { switch (supportRequest.State) { //job in progress case 1: //mail for selected IT user (request changed) mail = await mailer.EditByUser(requestViewModel.Id); break; //job is done, user added mark and feedback case 2: //mail for IT managers mail = await mailer.Feedback(requestViewModel.Id); break; } mail?.Deliver(); } } return(RedirectToAction("Index")); }
protected override void TreatmentLaunch() { SupportFile supportFile = new SupportFile(this.DataFilePath, worker); supportFile.ExportFile(); }
public async Task <ActionResult> Create(SupportRequestViewModel supportRequest) { if (!ModelState.IsValid) { return(View(supportRequest)); } if (string.IsNullOrEmpty(supportRequest.Text)) { // return view with error message ModelState.AddModelError(string.Empty, "Введите текст заявки!"); return(View(supportRequest)); } var fromIt = false; var login = User.Identity.Name; var accountName = login.Substring(5, login.Length - 5); var person = _db.Persons.FirstOrDefault(p => p.AccountName == accountName); if (person == null) { ModelState.AddModelError(string.Empty, "Ошибка авторизации!"); return(View(supportRequest)); } Computer comp = null; SupportFile requestFile = null; //support request has attached file if (supportRequest.Upload != null && supportRequest.Upload.ContentLength > 0) { if (supportRequest.Upload.ContentLength > 10485760) { ModelState.AddModelError(string.Empty, "Файл должен быть меньше 10 МБ!"); return(View(supportRequest)); } var fileName = Path.GetFileName(supportRequest.Upload.FileName); if (!string.IsNullOrEmpty(fileName)) { var dir = Directory.CreateDirectory(Path.Combine(HostingEnvironment.MapPath(@"~/SupportFiles"), Guid.NewGuid().ToString())); var filePath = Path.Combine(dir.FullName, fileName); supportRequest.Upload.SaveAs(filePath); requestFile = new SupportFile { Path = filePath }; _db.SupportFiles.Add(requestFile); } } var newRequest = new SupportRequest { Text = supportRequest.Text, Urgency = supportRequest.Urgency, Category = supportRequest.Category, CreationTime = DateTime.Now, FinishTime = null, File = requestFile }; //created by IT-user if (supportRequest.ToId != 0 && supportRequest.FromId != 0) { var ituser = await _db.Persons.FindAsync(supportRequest.ToId); var user = await _db.Persons.FindAsync(supportRequest.FromId); if (ituser == null || user == null) { ModelState.AddModelError(string.Empty, "Пользователь не найден!"); return(View(supportRequest)); } comp = _db.Computers.Where(c => c.Owner.Id == user.Id).OrderByDescending(c => c.LastReportDate).FirstOrDefault(); newRequest.To = ituser; newRequest.From = user; newRequest.State = 1; newRequest.StartTime = DateTime.Now; user.SupportRequests.Add(newRequest); _db.Entry(user).State = EntityState.Modified; fromIt = true; } //created by ordinary user else { var compName = StaticData.GetCompName(Request.UserHostName); if (!string.IsNullOrEmpty(compName)) { comp = _db.Computers.FirstOrDefault(c => c.ComputerName == compName); } newRequest.From = person; newRequest.State = 0; newRequest.StartTime = null; person.SupportRequests.Add(newRequest); _db.Entry(person).State = EntityState.Modified; } if (comp != null) { newRequest.FromComputer = comp; comp.SupportRequests.Add(newRequest); _db.Entry(comp).State = EntityState.Modified; } _db.SupportRequests.Add(newRequest); _db.SaveChanges(); using (var mailer = new EmailController()) { EmailResult mail; if (fromIt) { //mail for selected IT user mail = await mailer.EditByIt(newRequest.Id, User.Identity.Name.GetUserName()); mail?.Deliver(); //mail for user (job started) mail = await mailer.Accepted(newRequest.Id); mail?.Deliver(); } else { //mail for IT users mail = await mailer.NewFromUser(newRequest.Id); mail?.Deliver(); } } return(RedirectToAction("Index")); }