Ejemplo n.º 1
0
        // 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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 4
0
        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"));
        }