コード例 #1
0
        public Zendesk GetTicketInformation(string ticketNo)
        {
            Zendesk ticket = new Zendesk();

            try
            {
                long.TryParse(ticketNo, out long longTicketNo);

                ticket = ticket.VerifyInsertedZendeskTicket(longTicketNo);

                if (ticket != null)
                {
                    if (String.IsNullOrEmpty(ticket.FromEmailAddress) && String.IsNullOrEmpty(ticket.FromEmailName))
                    {
                        ticket.GetRequester();
                    }
                }
            }
            catch (Exception)
            {
                ticket = null;
            }

            return(ticket);
        }
コード例 #2
0
        protected void BtnIssueReturnLabel_Click(object sender, EventArgs e)
        {
            Zendesk ticket       = new Zendesk();
            bool    dataVerified = ZendeskIssueReturnLabelControl.VerifyInput(ref ticket);

            if (dataVerified)
            {
                ZendeskIssueReturnLabelControl.IssueZendeskReturnLabel(tcNo.Text, tcDocNo.Text, true, ticket);
            }
        }
コード例 #3
0
        public Zendesk VerifyZendeskTicket(long zendeskTicket)
        {
            Zendesk ticket = new Zendesk();

            try
            {
                IResponse <Ticket> validTicket = client.Tickets.Get(zendeskTicket);
                Ticket             response    = validTicket.Item;

                ZendDeskEmailEntry fromEmails = ZendDeskEmailParser.GetEmailList(response.Via.Source.From);
                ZendDeskEmailEntry toEmails   = ZendDeskEmailParser.GetEmailList(response.Via.Source.To);

                ticket = new Zendesk(response.Id.ToString(), response.Created, response.Updated, response.Subject,
                                     response.Status.ToString(), response.Priority, false, fromEmails.Address, fromEmails.Name,
                                     toEmails.Address, toEmails.Name, response.RequesterId.GetValueOrDefault());
            }
            catch (Exception)
            {
                ticket = null;
            }

            return(ticket);
        }
コード例 #4
0
        public HomeController(
            IOptions <SiteConfiguration> settings,
            IMemoryCache memoryCache,
            ApplicationDbContext context,
            IStringLocalizer <GeneralResource> generalLocalizer,
            IEmailSender emailSender,
            IOptions <General> generalSettings,
            IOptions <Features> featureSettings,
            IOptions <Smtp> smtpSettings,
            IOptions <Media> mediaSettings,
            IOptions <ActiveCompaign> activeCompanySettings,
            IOptions <Zendesk> zendeskSettings,
            IWebHostEnvironment _environment,
            IHttpContextAccessor _httpContextAccessor,
            SignInManager <ApplicationUser> signInManager,
            IActiveCampaignClient activeCampaignClient
            )
        {
            _context                = context;
            _emailSender            = emailSender;
            _signInManager          = signInManager;
            _activeCompaignSettings = activeCompanySettings.Value;
            _activeCampaignClient   = activeCampaignClient;
            _zendeskSettings        = zendeskSettings.Value;
            // readable configuration
            Configs.GeneralSettings = generalSettings.Value;
            Configs.SmtpSettings    = smtpSettings.Value;
            Configs.FeatureSettings = featureSettings.Value;
            Configs.MediaSettings   = mediaSettings.Value;

            SiteConfig.Config              = settings.Value;
            SiteConfig.Cache               = memoryCache;
            SiteConfig.generalLocalizer    = generalLocalizer;
            SiteConfig.Environment         = _environment;
            SiteConfig.HttpContextAccessor = _httpContextAccessor;
        }
コード例 #5
0
        protected void BtnCreateRMA_Click(object sender, EventArgs e)
        {
            StringBuilder lineBuild     = new StringBuilder();
            StringBuilder shippingBuild = new StringBuilder();
            string        lineError     = "";

            try
            {
                shipToName     = txtShipToName.Text;
                shipToAddress1 = txtShipToAddress1.Text;
                shipToAddress2 = txtShipToAddress2.Text;
                shipToCity     = txtShipToCity.Text;
                shipToCode     = txtShipToCode.Text;
                shipToState    = txtShipToState.Text;

                no          = tcNo.Text;
                docNo       = tcDocNo.Text;
                notes       = txtNotes.Text;
                resources   = cbxResources.Checked;
                printRMA    = cbxPrintRMA.Checked;
                createLabel = cbxCreateLabel.Checked;
                //email = txtCustEmail.Text;
                returnTrackingNo = txtInsertTrackingNo.Text;
                imeiNo           = tcIMEINo.Text;

                string validateMsg     = ValidateInput();
                bool   validateZendesk = false;
                bool   allValidLines   = true;
                int    rowCount        = 0;
                int    controlCount    = 0;

                Zendesk ticket = new Zendesk();

                if (validateMsg == "All Input Valid")
                {
                    bool process = true;

                    if (createLabel)
                    {
                        validateZendesk = ZendeskIssueReturnLabelControl.VerifyInput(ref ticket);
                        process         = validateZendesk;
                    }

                    if (process)
                    {
                        if (ZendeskIssueReturnLabelControl.NewZendeskTicket)
                        {
                            email = ZendeskIssueReturnLabelControl.EmailTo;
                        }
                        else
                        {
                            email = String.IsNullOrEmpty(ticket.FromEmailAddress) ? string.Empty : ticket.FromEmailAddress;
                        }

                        foreach (TableRow row in tblCreateReturnOrderTableDetails.Rows)
                        {
                            rowCount++;
                            string itemNo          = string.Empty;
                            int    qtyLine         = 0;
                            int    actionQty       = 0;
                            string reasonCode      = string.Empty;
                            int    reqReturnAction = -1;

                            controlCount = 0;

                            foreach (TableCell cell in row.Cells)
                            {
                                if (cell.ID.Contains("itemNo_"))
                                {
                                    itemNo = cell.Text.ToString();
                                }

                                if (cell.ID.Contains("itemQuantity_"))
                                {
                                    int.TryParse(cell.Text.ToString(), out qtyLine);
                                }

                                if (cell.ID.Contains("actionQty_"))
                                {
                                    int.TryParse(cell.Text.ToString(), out actionQty);
                                }

                                foreach (Control c in cell.Controls)
                                {
                                    controlCount++;

                                    //if (c.GetType() == typeof(TextBox))
                                    //{
                                    //    string value = ((TextBox)c).Text;
                                    //    int.TryParse(value, out actionQty);
                                    //}

                                    if (c.GetType() == typeof(DropDownList))
                                    {
                                        int index = ((DropDownList)c).SelectedIndex;

                                        if (c.ID.Contains("ddlReturnReasonCode"))
                                        {
                                            /* v7.1 - 3 October 2018 - Neil Jansen
                                             * Updated logic to filter out incorrect catagories for Return Reason Code
                                             */

                                            List <ReturnReason> sr = (List <ReturnReason>)Session["ReturnReasons"];
                                            List <ReturnReason> rl = new List <ReturnReason>();
                                            foreach (ReturnReason item in sr)
                                            {
                                                if (item.Category != "Part Request" && item.Category != "Cancel Order" && item.Category != "Partial Refund" && item.Category != "Unknown" &&
                                                    item.Category != "Nonconformed" && item.Category != "Vendor Rejected")
                                                {
                                                    rl.Add(item);
                                                }
                                            }
                                            reasonCode = (rl)[index].ReasonCode;
                                        }
                                        else if (c.ID.Contains("ddlREQReturnAction"))
                                        {
                                            reqReturnAction = index;
                                        }
                                    }
                                }

                                string lineValidMessage = string.Empty;

                                if ((rowCount > 1 && controlCount == 2 && actionQty != 0))
                                {
                                    lineValidMessage = ValidateLine(itemNo, qtyLine, actionQty, reasonCode, reqReturnAction);

                                    if (lineValidMessage == "Valid Line Input")
                                    {
                                        lineBuild.Append(itemNo).Append(":");
                                        lineBuild.Append(actionQty).Append(":");
                                        lineBuild.Append(reasonCode).Append(":");
                                        lineBuild.Append(reqReturnAction).Append(",");
                                    }
                                    else
                                    {
                                        allValidLines = false;

                                        if (lineError == "")
                                        {
                                            lineError = lineValidMessage;
                                        }
                                    }
                                }
                            }
                        }

                        if (allValidLines)
                        {
                            string lineValues       = lineBuild.ToString();
                            CreatedReturnHeader crh = new CreatedReturnHeader();

                            SendService ss = new SendService();

                            if (no.ToUpper().Contains("RMA"))
                            {
                                update = true;
                            }
                            else
                            {
                                update = false;
                            }

                            shippingBuild.Append(shipToName).Append(":");
                            shippingBuild.Append(shipToAddress1).Append(":");
                            shippingBuild.Append(shipToAddress2).Append(":");
                            shippingBuild.Append(shipToCity).Append(":");
                            shippingBuild.Append(shipToCode).Append(":");
                            shippingBuild.Append(shipToState);

                            string shippingDetails = shippingBuild.ToString();

                            crh = ss.CreateReturnOrder(no, docNo, string.Empty, notes, resources, printRMA, createLabel, email, lineValues, update, returnTrackingNo,
                                                       shippingDetails, imeiNo, zendeskTicketNo);

                            ClientScript.RegisterStartupScript(this.GetType(), "returnRMA", "alert('" + crh.RMANo + "');", true);

                            if (createLabel)
                            {
                                ZendeskIssueReturnLabelControl.IssueZendeskReturnLabel(crh.RMANo, docNo, false, ticket);
                            }

                            // Replace legacy with Zendesk return label
                            //worker = new Thread(() =>
                            //{
                            //    try
                            //    {
                            //        ss.LegacyReturnLabel(crh.RMANo, email, sessionID);
                            //    }
                            //    catch (Exception workerE)
                            //    {
                            //        Log.Error(workerE.Message, workerE);
                            //        ClientScript.RegisterStartupScript(this.GetType(), "labelError", "alert('" + workerE.Message.Replace("'", "\"") + "');", true);
                            //    }
                            //});

                            //worker.Start();

                            Session["CreatedRMA"]        = crh;
                            Session["NoUserInteraction"] = true;

                            if (!ZendeskIssueReturnLabelControl.GenerateURL)
                            {
                                ClientScript.RegisterStartupScript(this.GetType(), "openCreatedRMA", "OpenCreatedRMA();", true);
                            }
                        }
                        else
                        {
                            ClientScript.RegisterStartupScript(this.GetType(), "lineError", "alert('" + lineError + "');", true);
                        }
                    }
                }
                else
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "validateMsg", "alert('" + validateMsg + "');", true);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message, ex);
                ClientScript.RegisterStartupScript(this.GetType(), "errorAlert", "alert('" + ex.Message.Replace("'", "\"") + "');", true);

                if (ex.Message.ToLower().Contains("session"))
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "closeErrorAlert", "parent.window.close();", true);
                }
            }
        }
コード例 #6
0
        public configurationController(
            IApplicationLifetime applicationLifetime,
            IWritableOptions <General> general_options,
            IWritableOptions <Database> database_options,
            IWritableOptions <Comments> comment_options,
            IWritableOptions <Smtp> smtp_options,
            IWritableOptions <Media> media_options,
            IWritableOptions <Features> features_options,
            IWritableOptions <Listing> listings_options,
            IWritableOptions <Authentication> authentication_options,
            IWritableOptions <Registration> registration_options,
            IWritableOptions <Aws> aws_options,
            IWritableOptions <Social> social_options,
            IWritableOptions <Contact> contact_options,
            IWritableOptions <Rechapcha> rechapcha_options,
            IWritableOptions <ElasticSearch> elasticsearch_options,
            IWritableOptions <ActiveCompaign> activecompany_options,
            IWritableOptions <Zendesk> zendesk_options,
            IOptions <General> generalSettings,
            IOptions <Comments> commentSettings,
            IOptions <Smtp> smtpSettings,
            IOptions <Media> mediaSettings,
            IOptions <Features> featureSettings,
            IOptions <Listing> listingSettings,
            IOptions <Authentication> authenticationSettings,
            IOptions <Registration> registrationSettings,
            IOptions <Aws> awsSettings,
            IOptions <Social> socialSettings,
            IOptions <Contact> contactSettings,
            IOptions <Rechapcha> rechapchaSettings,
            IOptions <ElasticSearch> elasticSearchSettings,
            IOptions <Zendesk> zendeskSettings,
            IOptions <ActiveCompaign> activeSettings,
            IOptions <Jugnoon.Blogs.Settings.General> blogs_general_Settings,
            IOptions <Jugnoon.Blogs.Settings.Aws> blogs_aws_Settings,
            ApplicationDbContext context

            )
        {
            _context = context;
            // writable injectors
            _database_options       = database_options;
            _general_options        = general_options;
            _comment_options        = comment_options;
            _smtp_options           = smtp_options;
            _media_options          = media_options;
            _features_options       = features_options;
            _listings_options       = listings_options;
            _authentication_options = authentication_options;
            _registration_options   = registration_options;
            _aws_options            = aws_options;
            _social_options         = social_options;
            _contact_options        = contact_options;
            _rechapcha_options      = rechapcha_options;
            _elasticsearch_options  = elasticsearch_options;
            _activecompaign_options = activecompany_options;
            _zendesk_options        = zendesk_options;

            ApplicationLifetime = applicationLifetime;
            // readable injectors
            _generalSettings        = generalSettings.Value;
            _commentSettings        = commentSettings.Value;
            _smtpSettings           = smtpSettings.Value;
            _mediaSettings          = mediaSettings.Value;
            _featureSettings        = featureSettings.Value;
            _listingSettings        = listingSettings.Value;
            _authenticationSettings = authenticationSettings.Value;
            _registrationSettings   = registrationSettings.Value;
            _awsSettings            = awsSettings.Value;

            _socialSettings        = socialSettings.Value;
            _contactSettings       = contactSettings.Value;
            _rechapchaSettings     = rechapchaSettings.Value;
            _elasticSearchSettings = elasticSearchSettings.Value;
            _zendeskSettings       = zendeskSettings.Value;
            _activeSettings        = activeSettings.Value;

            _blogs_general_Settings = blogs_general_Settings.Value;
            _blogs_aws_Settings     = blogs_aws_Settings.Value;
        }
コード例 #7
0
        public void IssueZendeskReturnLabel(string no, string docNo, bool closeWindow, Zendesk ticket)
        {
            SendService ss = new SendService();

            string pdf64String     = string.Empty;
            string amazonBucketURL = string.Empty;

            try
            {
                if (ExistingZendeskTicket)
                {
                    string message = string.Empty;
                    ZendeskTicket = ticket;

                    if (EmailTo != null)
                    {
                        int index = EmailTo.IndexOf('@');
                        EmailTo = EmailTo.Insert(index, "+id" + TicketNo);
                    }
                    else
                    {
                        EmailTo = string.Empty;
                    }

                    if (FromEmail == null)
                    {
                        FromEmail = string.Empty;
                    }

                    pdf64String = ss.IssueReturnLabel(no, EmailTo, ExistingZendeskTicket, FromEmail, DownloadManually, CustomerEmailAddress, FromEmailName, EmailSubject, ref amazonBucketURL, GenerateURL);

                    Session["NoUserInteraction"] = true;

                    ZendeskTicket.UpdateZendeskTicketWithPDFFile(pdf64String, no, amazonBucketURL);

                    message = no + ", Return label is being processed and will be emailed within 1 hour.";

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "issueReturnLableExistingTicket", "alert('" + Json.Encode(message) + "');", true);

                    if (closeWindow)
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "closeAfterProcessing", "parent.window.close();", true);
                    }
                }
                else if (NewZendeskTicket)
                {
                    string message = string.Empty;

                    pdf64String = ss.IssueReturnLabel(no, EmailTo, ExistingZendeskTicket, FromEmail, DownloadManually, CustomerEmailAddress, FromEmailName, EmailSubject, ref amazonBucketURL, GenerateURL);
                    Session["NoUserInteraction"] = true;

                    long?newZendeskTicketID = 0;

                    ZendeskTicket      = new Zendesk();
                    newZendeskTicketID = ZendeskTicket.CreateNewZendeskTicketWithPDFFile(pdf64String, no, amazonBucketURL, EmailTo, CustomerName, docNo);

                    message = "New Zendesk Ticket is: " + newZendeskTicketID + @".

" + no + ", Return label is being processed and will be emailed within 1 hour.";

                    Page.ClientScript.RegisterStartupScript(this.GetType(), "issueReturnLabelNewTicket", "alert('" + Json.Encode(message) + "');", true);
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "closeErrorAlert", "parent.window.close();", true);
                }
                else if (DownloadManually)
                {
                    string message = string.Empty;
                    pdf64String = ss.IssueReturnLabel(no, string.Empty, ExistingZendeskTicket, string.Empty, DownloadManually, CustomerEmailAddress, FromEmailName, EmailSubject, ref amazonBucketURL, GenerateURL);
                    Session["NoUserInteraction"] = true;

                    if (pdf64String != string.Empty) // Display only the URL
                    {
                        ZendeskTicket = new Zendesk();

                        ZendeskTicket.DownloadRMAPDFManually(pdf64String, no);

                        message = no + ", Return label has been successfully downloaded.";

                        Page.ClientScript.RegisterStartupScript(this.GetType(), "manualDownloadExistingTicket", "alert('" + Json.Encode(message) + "');", true);
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "closeAfterDownload", "parent.window.close();", true);
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "manualDownloadExistingTicket", "alert('The file could not be downloaded.');", true);
                    }
                }
                else if (GenerateURL)
                {
                    string message          = string.Empty;
                    string clipboardMessage = string.Empty;
                    pdf64String = ss.IssueReturnLabel(no, string.Empty, ExistingZendeskTicket, string.Empty, DownloadManually, CustomerEmailAddress, FromEmailName, EmailSubject, ref amazonBucketURL, GenerateURL);
                    Session["NoUserInteraction"] = true;

                    if (amazonBucketURL != string.Empty) // Display only the URL
                    {
                        BitlyAPI bitlyAPI = new BitlyAPI();

                        string url = bitlyAPI.ShortenURL(amazonBucketURL);

                        message = no + ", Return label URL has been successfully generated.";

                        clipboardMessage = @"Hello, 

Your return request has been approved.  Your Return Merchandise Authorization number is " + no + @"

Follow the link below to download your return instructions and shipping label. Or copy and paste the link into your browser.

" + url + @"

IMPORTANT: Please remove ALL locks and passwords. Any device(s) received locked with your information will be denied, returned at your expense with no refund submitted for processing.

Thank You";

                        Page.ClientScript.RegisterStartupScript(this.GetType(), "clipboardMessage", "CopyToClipboard('" + Json.Encode(clipboardMessage) + "');", true);
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "manualGenerateURL", "alert('The URL could not be generated.');", true);
                    }
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "manualDownloadExistingTicket", "alert('Please select a valid option.');", true);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message, ex);

                Page.ClientScript.RegisterStartupScript(this.GetType(), "errorAlert", "alert('" + ex.Message.Replace("'", "\"").Replace("\n", "\\n") + "');", true);

                if (ex.Message.ToLower().Contains("session"))
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "closeErrorAlert", "parent.window.close();", true);
                }
            }
        }
コード例 #8
0
        public bool VerifyInput(ref Zendesk zendeskTicket)
        {
            bool validInput = false;

            if (ExistingZendeskTicket)
            {
                if (SelectedZendeskTicket)
                {
                    cust = (Customer)Session["SelectedCustomer"];
                    foreach (SalesHeader head in cust.SalesHeader)
                    {
                        foreach (Zendesk ticket in head.Tickets)
                        {
                            if (!zendeskTickets.Any(t => t.TicketNo.Equals(ticket.TicketNo)))
                            {
                                zendeskTickets.Add(ticket);
                            }
                        }
                    }

                    foreach (ReturnHeader returnHead in cust.ReturnHeaders)
                    {
                        foreach (Zendesk ticket in returnHead.Tickets)
                        {
                            if (!zendeskTickets.Any(t => t.TicketNo.Equals(ticket.TicketNo)))
                            {
                                zendeskTickets.Add(ticket);
                            }
                        }
                    }

                    // TicketNo = ddlZendeskTickets.SelectedValue; ~ why are you here? Go away!

                    if (TicketNo != string.Empty)
                    {
                        foreach (Zendesk ticket in zendeskTickets)
                        {
                            if (ticket.TicketNo == TicketNo)
                            {
                                EmailSubject  = ticket.Subject;
                                FromEmail     = ticket.FromEmailAddress;
                                FromEmailName = ticket.FromEmailName;

                                EmailTo       = ticket.ToEmailsAddress;
                                zendeskTicket = ticket;
                            }
                        }

                        validInput = true;
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "selectValidTicketNo", "alert('Please select a valid existing Zendesk ticket when attempting to update a ticket number.');", true);
                    }
                }
                else if (InsertZendeskTicket)
                {
                    long.TryParse(InsertedZendeskTicket, out long ticketResult);

                    if (ticketResult != 0)
                    {
                        Zendesk Zendesk = new Zendesk();
                        zendeskTicket = Zendesk.VerifyInsertedZendeskTicket(ticketResult);

                        if (zendeskTicket != null)
                        {
                            if (String.IsNullOrEmpty(zendeskTicket.FromEmailAddress) && String.IsNullOrEmpty(zendeskTicket.FromEmailName))
                            {
                                zendeskTicket.GetRequester();
                            }

                            validInput = true;
                        }
                        else
                        {
                            Page.ClientScript.RegisterStartupScript(this.GetType(), "invalidZendeskTicket", "alert('The Zendesk ticket is invalid, please enter a valid ticket number.');", true);
                        }
                    }
                    else
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "invalidTicketNoInserted", "alert('Please insert a valid Zendesk ticket number.');", true);
                    }
                }
                else
                {
                    Page.ClientScript.RegisterStartupScript(this.GetType(), "invalidZendeskUpdateSelection", "alert('Please select a valid option to update existing Zendesk Ticket.');", true);
                }
            }
            else if (NewZendeskTicket)
            {
                if (HttpContext.Current.Session["ActiveUser"] != null)
                {
                    User u = (User)HttpContext.Current.Session["ActiveUser"];
                    FromEmail = u.ZendeskEmail;

                    EmailTo = CustomerEmailAddress;

                    string validateInput = ValidateInput(EmailTo, CustomerName);
                    if (validateInput != "Valid Input")
                    {
                        validInput = false;
                        Page.ClientScript.RegisterStartupScript(this.GetType(), "unvalidatedData", "alert('" + validateInput + "');", true);
                    }
                    else
                    {
                        validInput = true;
                    }
                }
                else
                {
                    throw new Exception("Unable to retrieve current Zendesk Email address.");
                }
            }
            else if (DownloadManually)
            {
                validInput = true;
            }
            else if (GenerateURL)
            {
                validInput = true;
            }

            return(validInput);
        }