Esempio n. 1
0
        /// <summary>
        /// Constructor that takes 3 params.
        /// </summary>
        /// <param name="yourZendeskUrl">Will be formated to "https://yoursite.zendesk.com/api/v2"</param>
        /// <param name="user"></param>
        /// <param name="password">LEAVE BLANK IF USING TOKEN</param>
        /// <param name="apiToken">Optional Param which is used if specified instead of the password</param>
        public ZendeskApi(string yourZendeskUrl, string user, string password = "", string apiToken = "")
        {
            var formattedUrl = GetFormattedZendeskUrl(yourZendeskUrl).AbsoluteUri;

            Tickets             = new Tickets(formattedUrl, user, password, apiToken);
            Attachments         = new Attachments(formattedUrl, user, password, apiToken);
            Views               = new Views(formattedUrl, user, password, apiToken);
            Users               = new Users(formattedUrl, user, password, apiToken);
            Requests            = new Requests.Requests(formattedUrl, user, password, apiToken);
            Groups              = new Groups(formattedUrl, user, password, apiToken);
            CustomAgentRoles    = new CustomAgentRoles(formattedUrl, user, password, apiToken);
            Organizations       = new Organizations(formattedUrl, user, password, apiToken);
            Search              = new Search(formattedUrl, user, password, apiToken);
            Tags                = new Tags(formattedUrl, user, password, apiToken);
            Forums              = new Forums(formattedUrl, user, password, apiToken);
            Categories          = new Categories(formattedUrl, user, password, apiToken);
            Topics              = new Topics(formattedUrl, user, password, apiToken);
            AccountsAndActivity = new AccountsAndActivity(formattedUrl, user, password, apiToken);
            JobStatuses         = new JobStatuses(formattedUrl, user, password, apiToken);
            Locales             = new Locales(formattedUrl, user, password, apiToken);
            Macros              = new Macros(formattedUrl, user, password, apiToken);
            SatisfactionRatings = new SatisfactionRatings(formattedUrl, user, password, apiToken);
            SharingAgreements   = new SharingAgreements(formattedUrl, user, password, apiToken);
            Triggers            = new Triggers(formattedUrl, user, password, apiToken);

            ZendeskUrl = formattedUrl;
        }
        public ZendeskApi(string yourZendeskUrl, string user, string password)
        {
            Tickets             = new Tickets(yourZendeskUrl, user, password);
            Attachments         = new Attachments(yourZendeskUrl, user, password);
            Views               = new Views(yourZendeskUrl, user, password);
            Users               = new Users(yourZendeskUrl, user, password);
            Requests            = new Requests.Requests(yourZendeskUrl, user, password);
            Groups              = new Groups(yourZendeskUrl, user, password);
            CustomAgentRoles    = new CustomAgentRoles(yourZendeskUrl, user, password);
            Organizations       = new Organizations(yourZendeskUrl, user, password);
            Search              = new Search(yourZendeskUrl, user, password);
            Tags                = new Tags(yourZendeskUrl, user, password);
            Forums              = new Forums(yourZendeskUrl, user, password);
            Categories          = new Categories(yourZendeskUrl, user, password);
            Topics              = new Topics(yourZendeskUrl, user, password);
            AccountsAndActivity = new AccountsAndActivity(yourZendeskUrl, user, password);
            JobStatuses         = new JobStatuses(yourZendeskUrl, user, password);
            Locales             = new Locales(yourZendeskUrl, user, password);
            Macros              = new Macros(yourZendeskUrl, user, password);
            SatisfactionRatings = new SatisfactionRatings(yourZendeskUrl, user, password);
            SharingAgreements   = new SharingAgreements(yourZendeskUrl, user, password);
            Triggers            = new Triggers(yourZendeskUrl, user, password);

            ZendeskUrl = yourZendeskUrl;
        }
Esempio n. 3
0
        /// <summary>
        /// Constructor that takes 6 params.
        /// </summary>
        /// <param name="yourZendeskUrl">Will be formated to "https://yoursite.zendesk.com/api/v2"</param>
        /// <param name="user">Email adress of the user</param>
        /// <param name="password">LEAVE BLANK IF USING TOKEN</param>
        /// <param name="apiToken">Used if specified instead of the password</param>
        /// <param name="locale">Locale to use for Help Center requests. Defaults to "en-us" if no value is provided.</param>
        public ZendeskApi(string yourZendeskUrl,
                          string user,
                          string password,
                          string apiToken,
                          string locale,
                          string p_OAuthToken)
        {
            var formattedUrl = GetFormattedZendeskUrl(yourZendeskUrl).AbsoluteUri;

            Tickets             = new Tickets(formattedUrl, user, password, apiToken, p_OAuthToken);
            Attachments         = new Attachments(formattedUrl, user, password, apiToken, p_OAuthToken);
            Brands              = new Brands(formattedUrl, user, password, apiToken, p_OAuthToken);
            Views               = new Views(formattedUrl, user, password, apiToken, p_OAuthToken);
            Users               = new Users(formattedUrl, user, password, apiToken, p_OAuthToken);
            Requests            = new Requests.Requests(formattedUrl, user, password, apiToken, p_OAuthToken);
            Groups              = new Groups(formattedUrl, user, password, apiToken, p_OAuthToken);
            CustomAgentRoles    = new CustomAgentRoles(formattedUrl, user, password, apiToken, p_OAuthToken);
            Organizations       = new Organizations(formattedUrl, user, password, apiToken, p_OAuthToken);
            Search              = new Search(formattedUrl, user, password, apiToken, p_OAuthToken);
            Tags                = new Tags(formattedUrl, user, password, apiToken, p_OAuthToken);
            AccountsAndActivity = new AccountsAndActivity(formattedUrl, user, password, apiToken, p_OAuthToken);
            JobStatuses         = new JobStatuses(formattedUrl, user, password, apiToken, p_OAuthToken);
            Locales             = new Locales(formattedUrl, user, password, apiToken, p_OAuthToken);
            Macros              = new Macros(formattedUrl, user, password, apiToken, p_OAuthToken);
            SatisfactionRatings = new SatisfactionRatings(formattedUrl, user, password, apiToken, p_OAuthToken);
            SharingAgreements   = new SharingAgreements(formattedUrl, user, password, apiToken, p_OAuthToken);
            Triggers            = new Triggers(formattedUrl, user, password, apiToken, p_OAuthToken);
            HelpCenter          = new HelpCenterApi(formattedUrl, user, password, apiToken, locale, p_OAuthToken);
            Voice               = new Voice(formattedUrl, user, password, apiToken, p_OAuthToken);
            Schedules           = new Schedules(formattedUrl, user, password, apiToken, p_OAuthToken);
            Targets             = new Targets(formattedUrl, user, password, apiToken, p_OAuthToken);
            Automations         = new Automations(formattedUrl, user, password, apiToken, p_OAuthToken);

            ZendeskUrl = formattedUrl;
        }
 public static string FriendlyName(this JobStatuses status)
 {
     return(status switch
     {
         JobStatuses.New => "Pending Approval",
         JobStatuses.InProgress => "In Progress",
         _ => status.ToString()
     });
 private void constructMe(int jobId, JobStatuses jobStatus, JobBatchModes jobBatchMode, int jobBatchSize, int jobBatchCounter, DateTime timestamp)
 {
     this.JobID           = jobId;
     this.JobStatus       = jobStatus;
     this.JobBatchMode    = jobBatchMode;
     this.JobBatchSize    = jobBatchSize;
     this.JobBatchCounter = jobBatchCounter;
     this.TimeStamp       = timestamp;
 }
Esempio n. 6
0
 public static string Icon(this JobStatuses jobStatus)
 {
     return(jobStatus switch
     {
         JobStatuses.New => "new.svg",
         JobStatuses.Open => "open.svg",
         JobStatuses.Accepted => "accepted.svg",
         JobStatuses.InProgress => "inprogress.svg",
         JobStatuses.Done => "complete.svg",
         JobStatuses.Cancelled => "cancelled.svg",
         _ => throw new ArgumentException(message: $"Unexpected JobStatuses value: {jobStatus}", paramName: nameof(jobStatus))
     });
Esempio n. 7
0
 public IActionResult GetStatusChangePopup(string j, string rq, JobStatuses s)
 {
     if (string.IsNullOrEmpty(j))
     {
         int requestId = Base64Utils.Base64DecodeToInt(rq);
         return(ViewComponent("JobStatusChangePopup", new { requestId, targetStatus = s }));
     }
     else
     {
         int jobId = Base64Utils.Base64DecodeToInt(j);
         return(ViewComponent("JobStatusChangePopup", new { jobId, targetStatus = s }));
     }
 }
Esempio n. 8
0
        public async Task <UpdateJobStatusOutcome?> UpdateRequestStatusAsync(int requestId, JobStatuses status, int createdByUserId, CancellationToken cancellationToken)
        {
            UpdateJobStatusOutcome?outcome = status switch
            {
                JobStatuses.Done => await _requestHelpRepository.PutUpdateRequestStatusToDone(requestId, createdByUserId),
                JobStatuses.Cancelled => await _requestHelpRepository.PutUpdateRequestStatusToCancelled(requestId, createdByUserId),
                _ => throw new ArgumentException(message: $"Invalid JobStatuses value for Request: {status}", paramName: nameof(status)),
            };

            if (outcome == UpdateJobStatusOutcome.Success || outcome == UpdateJobStatusOutcome.AlreadyInThisStatus)
            {
                TriggerCacheRefresh(createdByUserId, cancellationToken);
            }

            return(outcome);
        }
Esempio n. 9
0
        public async Task <UpdateJobStatusOutcome?> UpdateJobStatusAsync(int jobID, JobStatuses status, int createdByUserId, int?volunteerUserId, CancellationToken cancellationToken)
        {
            UpdateJobStatusOutcome?outcome = status switch
            {
                JobStatuses.Accepted => await _requestHelpRepository.UpdateJobStatusToAcceptedAsync(jobID, createdByUserId, volunteerUserId.Value),
                JobStatuses.InProgress => await UpdateJobStatusToInProgressAsync(jobID, createdByUserId, volunteerUserId.Value, cancellationToken),
                JobStatuses.Done => await _requestHelpRepository.UpdateJobStatusToDoneAsync(jobID, createdByUserId),
                JobStatuses.Cancelled => await _requestHelpRepository.UpdateJobStatusToCancelledAsync(jobID, createdByUserId),
                JobStatuses.Open => await _requestHelpRepository.UpdateJobStatusToOpenAsync(jobID, createdByUserId),
                JobStatuses.New => await _requestHelpRepository.UpdateJobStatusToNewAsync(jobID, createdByUserId),
                _ => throw new ArgumentException(message: $"Invalid JobStatuses value: {status}", paramName: nameof(status)),
            };

            if (outcome == UpdateJobStatusOutcome.Success || outcome == UpdateJobStatusOutcome.AlreadyInThisStatus)
            {
                TriggerCacheRefresh(createdByUserId, cancellationToken);
            }

            return(outcome);
        }
Esempio n. 10
0
        public async Task <ActionResult <SetJobStatusResult> > SetJobStatus(string j, string rq, JobStatuses s, string r, string u, CancellationToken cancellationToken)
        {
            try
            {
                var user = await _authService.GetCurrentUser(HttpContext, cancellationToken);

                UpdateJobStatusOutcome?outcome;
                bool requestFeedback = false;

                if (string.IsNullOrEmpty(j))
                {
                    int requestId = Base64Utils.Base64DecodeToInt(rq);
                    outcome = await _requestService.UpdateRequestStatusAsync(requestId, s, user.ID, cancellationToken);
                }
                else
                {
                    RequestRoles requestRole  = (RequestRoles)Base64Utils.Base64DecodeToInt(r);
                    int?         targetUserId = null;
                    if (s == JobStatuses.Accepted || s == JobStatuses.InProgress)
                    {
                        targetUserId = (requestRole == RequestRoles.Volunteer ? user.ID : Base64Utils.Base64DecodeToInt(u));
                    }

                    int jobId = Base64Utils.Base64DecodeToInt(j);
                    outcome = await _requestService.UpdateJobStatusAsync(jobId, s, user.ID, targetUserId, cancellationToken);

                    var job = await _requestService.GetJobSummaryAsync(jobId, cancellationToken);

                    if (job.RequestType.Equals(RequestType.Task))
                    {
                        requestFeedback = (await GetJobFeedbackStatus(jobId, user.ID, requestRole, cancellationToken)).FeedbackDue;
                    }
                }

                switch (outcome)
                {
                case UpdateJobStatusOutcome.AlreadyInThisStatus:
                case UpdateJobStatusOutcome.Success:
                    return(new SetJobStatusResult
                    {
                        NewStatus = s.FriendlyName(),
                        RequestFeedback = requestFeedback
                    });

                case UpdateJobStatusOutcome.BadRequest:
                    return(StatusCode(400));

                case UpdateJobStatusOutcome.Unauthorized:
                    return(StatusCode(401));

                default:
                    return(StatusCode(500));
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("Exception in SetRequestStatus", ex);
                return(StatusCode(500));
            }
        }
 public MID_0035(int jobId, JobStatuses jobStatus, JobBatchModes jobBatchMode, int jobBatchSize, int jobBatchCounter, DateTime timestamp) : base(length, MID, revision)
 {
     this.constructMe(jobId, jobStatus, jobBatchMode, jobBatchSize, jobBatchCounter, timestamp);
 }
Esempio n. 12
0
        public async Task <IViewComponentResult> InvokeAsync(int jobId, int requestId, JobStatuses targetStatus, CancellationToken cancellationToken)
        {
            JobSummary job = null;

            if (jobId > 0)
            {
                job = await _requestService.GetJobSummaryAsync(jobId, cancellationToken);

                requestId = job.RequestID;
            }
            var request = await _requestService.GetRequestSummaryAsync(requestId, cancellationToken);

            var user = await _authService.GetCurrentUser(HttpContext, cancellationToken);

            bool userIsAdmin = await _groupMemberService.GetUserHasRole(user.ID, request.ReferringGroupID, GroupRoles.TaskAdmin, true, cancellationToken);

            JobStatusChangePopupViewModel vm = await BuildVm(request, job, targetStatus, cancellationToken);

            if (job == null)
            {
                return((request.SingleJobStatus(), targetStatus, userIsAdmin) switch
                {
                    (_, JobStatuses.Done, true) => View("Admin_MarkRequestAsDonePopup", vm),
                    (_, JobStatuses.Cancelled, true) => View("Admin_CancelRequestPopup", vm),
                    _ => throw new Exception($"Unhandled status/admin combination for request: {request.SingleJobStatus()} -> {targetStatus} / admin:{userIsAdmin}")
                });
        public async Task <EmailBuildData> PrepareTemplateData(Guid batchId, int?recipientUserId, int?jobId, int?groupId, int?requestId, Dictionary <string, string> additionalParameters, string templateName)
        {
            var job = _connectRequestService.GetJobDetailsAsync(jobId.Value).Result;

            // Recipient
            RequestRoles emailRecipientRequestRole = (RequestRoles)Enum.Parse(typeof(RequestRoles), additionalParameters["RequestRole"]);

            string emailToAddress   = string.Empty;
            string emailToFullName  = string.Empty;
            string emailToFirstName = string.Empty;

            switch (emailRecipientRequestRole)
            {
            case RequestRoles.Volunteer:
                var user = await _connectUserService.GetUserByIdAsync(recipientUserId.Value);

                emailToFirstName = user.UserPersonalDetails.FirstName;
                emailToAddress   = user.UserPersonalDetails.EmailAddress;
                emailToFullName  = $"{user.UserPersonalDetails.FirstName} {user.UserPersonalDetails.LastName}";
                break;

            case RequestRoles.Requestor:
                emailToFirstName = job.Requestor.FirstName;
                emailToAddress   = job.Requestor.EmailAddress;
                emailToFullName  = $"{job.Requestor.FirstName} {job.Requestor.LastName}";
                break;

            case RequestRoles.Recipient:
                emailToFirstName = job.Recipient.FirstName;
                emailToAddress   = job.Recipient.EmailAddress;
                emailToFullName  = $"{job.Recipient.FirstName} {job.Recipient.LastName}";
                break;
            }

            // Change summary
            additionalParameters.TryGetValue("FieldUpdated", out string fieldUpdated);
            JobStatuses  previousStatus  = _connectRequestService.PreviousJobStatus(job);
            RequestRoles changedByRole   = GetChangedByRole(job);
            string       supportActivity = job.JobSummary.SupportActivity.FriendlyNameShort();

            bool showJobUrl = emailRecipientRequestRole == RequestRoles.Volunteer ||
                              emailRecipientRequestRole == RequestRoles.GroupAdmin ||
                              (emailRecipientRequestRole == RequestRoles.Requestor && job.JobSummary.RequestorDefinedByGroup);
            string jobUrl = showJobUrl ? GetJobUrl(jobId.Value) : string.Empty;

            // First table
            List <TaskDataItem> importantDataList = new List <TaskDataItem>();

            AddIfNotNullOrEmpty(importantDataList, "Status", job.JobSummary.JobStatus.FriendlyName().ToTitleCase());
            AddIfNotNullOrEmpty(importantDataList, "Reference", GetReference(emailRecipientRequestRole, job));

            // Second table
            string requestedBy   = GetRequestedBy(emailRecipientRequestRole, job);
            string helpRecipient = GetHelpRecipient(emailRecipientRequestRole, job);

            List <TaskDataItem> otherDataList = new List <TaskDataItem>();

            AddIfNotNullOrEmpty(otherDataList, "Request type", supportActivity.ToTitleCase());
            AddIfNotNullOrEmpty(otherDataList, "Help needed", GetDueDate(job));
            AddIfNotNullOrEmpty(otherDataList, "Help needed", GetShiftDetails(job));
            AddIfNotNullOrEmpty(otherDataList, "Location", GetLocationDetails(job));
            AddIfNotNullOrEmpty(otherDataList, "Requested by", requestedBy);
            AddIfNotNullOrEmpty(otherDataList, "Help requested from", await GetHelpRequestedFrom(job));
            if (!helpRecipient.Equals(requestedBy))
            {
                AddIfNotNullOrEmpty(otherDataList, "Recipient", helpRecipient);
            }
            AddIfNotNullOrEmpty(otherDataList, "Volunteer", await GetVolunteer(emailRecipientRequestRole, job));

            return(new EmailBuildData()
            {
                BaseDynamicData = new TaskUpdateSimplifiedData
                                  (
                    $"A {supportActivity} request has been updated",
                    $"A {supportActivity} request has been updated",
                    emailToFirstName,
                    changedByRole == RequestRoles.GroupAdmin ? "group administrator" : "volunteer",
                    fieldUpdated.ToLower(),
                    showJobUrl,
                    jobUrl,
                    importantDataList,
                    otherDataList,
                    faceCoveringComplete: job.JobSummary.SupportActivity == SupportActivities.FaceMask && job.JobSummary.JobStatus == JobStatuses.Done,
                    previouStatusCompleteAndNowInProgress: previousStatus == JobStatuses.Done && job.JobSummary.JobStatus == JobStatuses.InProgress,
                    previouStatusInProgressAndNowOpen: previousStatus == JobStatuses.InProgress && job.JobSummary.JobStatus == JobStatuses.Open,
                    statusNowCancelled: job.JobSummary.JobStatus == JobStatuses.Cancelled,
                    GetFeedback(job, emailRecipientRequestRole)
                                  ),
                EmailToAddress = emailToAddress,
                EmailToName = emailToFullName,
                JobID = job.JobSummary.JobID,
                RequestID = job.JobSummary.RequestID,
                GroupID = job.JobSummary.ReferringGroupID,
                ReferencedJobs = new List <ReferencedJob>()
                {
                    new ReferencedJob()
                    {
                        G = job.JobSummary.ReferringGroupID,
                        R = job.JobSummary.RequestID,
                        J = job.JobSummary.JobID
                    }
                }
            });
        }