Beispiel #1
0
        public virtual ActionResult LogRepair(Models.Job.LogRepairModel m, FormCollection form)
        {
            m.UpdateModel(Database, true);

            if (ModelState.IsValid)
            {
                switch (m.SubmissionAction)
                {
                    case "Update":
                        var updatedModel = new Models.Job.LogRepairModel()
                        {
                            JobId = m.JobId,
                            RepairProviderId = m.RepairProviderId,
                            OrganisationAddressId = m.OrganisationAddressId,
                            RepairDescription = m.RepairDescription,
                            PublishAttachmentIds = m.PublishAttachmentIds,
                            PublishAttachments = m.PublishAttachments
                        };
                        updatedModel.UpdateModel(Database, false);

                        if (updatedModel.RepairProvider != null)
                        {
                            using (var wp = updatedModel.RepairProvider.CreateInstance<RepairProviderFeature>())
                            {
                                using (var rp = m.RepairProvider.CreateInstance<RepairProviderFeature>())
                                {
                                    m.RepairProviderSubmitJobBeginResult = rp.SubmitJobBegin(Database, this, updatedModel.Job, updatedModel.OrganisationAddress, updatedModel.TechUser);
                                }
                            }
                        }

                        return View(updatedModel);
                    case "Manual":
                        if (string.IsNullOrWhiteSpace(m.ManualProviderName))
                        {
                            ModelState.AddModelError("ManualProviderName", "The Repair Provider Name is required");
                            return View(Views.LogRepair, m);
                        }
                        try
                        {
                            m.Job.OnLogRepair(Database, m.RepairDescription, m.ManualProviderName, m.ManualProviderReference, m.OrganisationAddress, m.TechUser);
                            Database.SaveChanges();
                            return RedirectToAction(MVC.Job.Show(m.JobId));
                        }
                        catch (Exception ex)
                        {
                            ex.ToExceptionless().Submit();
                            m.Error = ex;
                            return View(Views.LogRepairError, m);
                            throw;
                        }
                    case "Disclose":
                        using (var p = m.RepairProvider.CreateInstance<RepairProviderFeature>())
                        {
                            Dictionary<string, string> warrantyProviderProperties;
                            try
                            {
                                warrantyProviderProperties = p.SubmitJobParseProperties(Database, form, this, m.Job, m.OrganisationAddress, m.TechUser, m.RepairDescription);
                            }
                            catch (Exception ex)
                            {
                                ex.ToExceptionless().Submit();
                                m.Error = ex;
                                return View(Views.LogRepairError, m);
                            }
                            if (!ModelState.IsValid)
                                return View(Views.LogRepair, m);

                            if (warrantyProviderProperties != null)
                            {
                                m.ProviderPropertiesJson = JsonConvert.SerializeObject(warrantyProviderProperties);
                            }
                            m.DiscloseProperties = p.SubmitJobDiscloseInfo(Database, m.Job, m.OrganisationAddress, m.TechUser, m.RepairDescription, warrantyProviderProperties);
                            return View(Views.LogRepairDisclose, m);
                        }
                    case "Submit":
                        try
                        {
                            m.Job.OnLogRepair(Database, m.RepairDescription, m.PublishAttachments, m.RepairProvider, m.OrganisationAddress, m.TechUser, m.ProviderProperties());
                            Database.SaveChanges();
                            return RedirectToAction(MVC.Job.Show(m.JobId));
                        }
                        catch (Exception ex)
                        {
                            ex.ToExceptionless().Submit();
                            m.Error = ex;
                            return View(Views.LogRepairError, m);
                            throw;
                        }
                    default:
                        return RedirectToAction(MVC.Job.Show(m.JobId));
                }

            }
            else
            {
                return View(Views.LogRepair, m);
            }
        }
        public virtual ActionResult Create(Models.DocumentTemplate.CreateModel model)
        {
            model.UpdateModel(Database);

            if (ModelState.IsValid)
            {
                // Check for Existing
                var existing = Database.DocumentTemplates.Where(m => m.Id == model.DocumentTemplate.Id).FirstOrDefault();
                if (existing == null)
                {

                    Database.DocumentTemplates.Add(model.DocumentTemplate);

                    if (model.DocumentTemplate.Scope == Disco.Models.Repository.DocumentTemplate.DocumentTemplateScopes.Job)
                    {
                        var jobSubTypes = new List<Disco.Models.Repository.JobSubType>();
                        jobSubTypes.AddRange(model.GetJobSubTypes);
                        model.DocumentTemplate.JobSubTypes = jobSubTypes;
                        //foreach (var jobSubType in model.GetJobSubTypes)
                        //    model.AttachmentType.JobSubTypes.Add(jobSubType);
                    }

                    Database.SaveChanges();

                    // Save Template
                    model.DocumentTemplate.SavePdfTemplate(Database, model.Template.InputStream);

                    return RedirectToAction(MVC.Config.DocumentTemplate.Index(model.DocumentTemplate.Id));
                }
                else
                {
                    ModelState.AddModelError("Id", "A Document Template with this Id already exists.");
                }
            }

            // UI Extensions
            UIExtensions.ExecuteExtensions<ConfigDocumentTemplateCreateModel>(this.ControllerContext, model);

            return View(model);
        }
Beispiel #3
0
        public virtual ActionResult Create(Models.Job.CreateModel m)
        {
            m.UpdateModel(Database, Authorization);

            if (!ModelState.IsValid)
            {
                // UI Extensions
                UIExtensions.ExecuteExtensions<JobCreateModel>(this.ControllerContext, m);

                return View(m);
            }
            else
            {
                Database.Configuration.LazyLoadingEnabled = true;

                // Create New Job
                var currentUser = Database.Users.Find(UserService.CurrentUserId);

                // Try QuickLog?
                bool addAutoQueues = !(Authorization.Has(Claims.Job.Actions.Close)
                    && m.QuickLog.HasValue && m.QuickLog.Value
                    && m.QuickLogTaskTimeMinutes.HasValue && m.QuickLogTaskTimeMinutes.Value > 0);

                var j = Jobs.Create(Database, m.Device, m.User, m.GetJobType, m.GetJobSubTypes, currentUser, addAutoQueues);

                if (m.DeviceHeld.Value)
                {
                    j.OnDeviceHeld(currentUser);
                    m.QuickLog = false;
                }
                else
                {
                    if (Authorization.Has(Claims.Job.Actions.Close)
                        && m.QuickLog.HasValue && m.QuickLog.Value
                        && m.QuickLogTaskTimeMinutes.HasValue && m.QuickLogTaskTimeMinutes.Value > 0
                        && (j.JobQueues == null || j.JobQueues.All(jqj => jqj.RemovedDate.HasValue))
                        )
                    {
                        // Quick Log
                        // Set Opened Date in the past
                        j.OpenedDate = DateTime.Now.AddMinutes(-1 * m.QuickLogTaskTimeMinutes.Value);
                        // Close Job
                        j.OnCloseNormally(Database, currentUser);
                    }
                    else
                    {
                        m.QuickLog = false;
                    }
                }

                Database.SaveChanges();

                // Evaluate OnCreate Expression
                try
                {
                    var onCreateResult = j.EvaluateOnCreateExpression(Database);
                    if (!string.IsNullOrWhiteSpace(onCreateResult))
                    {
                        var jl = new JobLog()
                        {
                            Job = j,
                            TechUser = currentUser,
                            Timestamp = DateTime.Now,
                            Comments = onCreateResult
                        };
                        Database.JobLogs.Add(jl);
                    }
                }
                catch (Exception ex)
                {
                    SystemLog.LogException("Job Expression - OnCreateExpression", ex);
                }


                // Add Comments
                if (!string.IsNullOrWhiteSpace(m.Comments))
                {
                    var jl = new JobLog()
                    {
                        Job = j,
                        TechUser = currentUser,
                        Timestamp = DateTime.Now,
                        Comments = m.Comments
                    };
                    Database.JobLogs.Add(jl);
                }

                Database.SaveChanges();

                // Return Dialog Redirect
                var redirectModel = new Models.Job.CreateRedirectModel()
                {
                    JobId = j.Id
                };
                redirectModel.RedirectDelay = TimeSpan.FromSeconds(2);
                if (m.QuickLog.HasValue && m.QuickLog.Value && !string.IsNullOrWhiteSpace(m.SourceUrl))
                    redirectModel.RedirectLink = m.SourceUrl;
                else if (!Authorization.Has(Claims.Job.Show))
                    if (!string.IsNullOrWhiteSpace(m.SourceUrl))
                        redirectModel.RedirectLink = m.SourceUrl;
                    else
                        redirectModel.RedirectLink = Url.Action(MVC.Job.Index());
                else
                {
                    redirectModel.RedirectLink = Url.Action(MVC.Job.Show(j.Id));
                    redirectModel.RedirectDelay = null;
                }

                return View(Views.Create_Redirect, redirectModel);
            }
        }