public List <NetsuiteApiResult> GetAllTickets(JiraSuiteDbContext dbContext)
        {
            List <NetsuiteApiResult> allTickets = new List <NetsuiteApiResult>();
            HttpWebRequest           request    = (HttpWebRequest)WebRequest.Create(_netsuiteUrlTrackedUpdate);

            AddRequestHeaders(request);
            using (var stream = new StreamReader(request.GetResponse().GetResponseStream()))
            {
                var responseObj = stream.ReadToEnd();
                //multi thread this?
                allTickets.AddRange(DeserializeResult(responseObj, dbContext));
            }
            return(allTickets);
        }
        public JiraIssue GetCreateJiraIssue(Issue issue, out bool isNew)
        {
            _dbContext = DBContextManager.Instance.DbContext;
            JiraIssue thisIssue = new JiraIssue();

            if (_dbContext.JiraIssues.Any())
            {
                thisIssue = _dbContext.JiraIssues.FirstOrDefault(x => (x.IssueKey != null) && (issue.key != null) && (x.IssueKey == issue.key));
                if (thisIssue != null)
                {
                    thisIssue.UpdateFromExisting(issue);
                    _dbContext.SaveChanges();
                }
            }

            bool state = isNew = string.IsNullOrEmpty(thisIssue?.IssueKey) ? true : false;

            return(thisIssue);
        }
 public void GetJiraTicketsWithMissingInfoFromNetsuite()
 {
     using (_dbContext = DBContextManager.Instance.DbContext)
     {
         var jiraIssues = _dbContext.JiraIssues.Where(x => x.IssueId == null).ToList();
         Parallel.ForEach(jiraIssues, issue =>
         {
             try
             {
                 Issue newJiraIssue = _jiraConnection.Client.LoadIssue(issue.IssueKey);
                 // .GetIssuesByQuery(issue.IssueKey.Substring(0, issue.IssueKey.IndexOf('-')), $"key = {issue.IssueKey}").FirstOrDefault();
                 issue.UpdateFromExisting(newJiraIssue);
                 _dbContext.Entry(issue).State = EntityState.Modified;
                 _dbContext.SaveChanges();
             }
             catch (Exception e)
             {
                 Console.Write($"Error Caught: {e.Message}.");
             }
         });
     }
 }
Exemple #4
0
 public List <NetsuiteApiResult> GetAllResults(JiraSuiteDbContext dbContext)
 {
     return(_netsuiteConnection.GetAllTickets(dbContext));
 }
        private List <NetsuiteApiResult> DeserializeResult(string responseString, JiraSuiteDbContext dbContext)
        {
            List <NetsuiteApiResult> parsedList = new List <NetsuiteApiResult>();

            string[] responseArray = responseString.Split('}');

            var loopCounter = 0;

            while (loopCounter < responseArray.Length / 10)
            {
                try
                {
                    NetsuiteApiResult thisResult = new NetsuiteApiResult()
                    {
                        columns = new Columns()
                    };

                    var thisarraySet = responseArray[(loopCounter * 10)].Split('\\');
                    for (var i = 0; i < thisarraySet.Length - 2; i++)
                    {
                        var column = thisarraySet[i].Replace("\"", "");
                        var value  = thisarraySet[i + 2].Replace("\"", "");
                        switch (column)
                        {
                        case "id":
                            thisResult.id = value;
                            i            += 3;
                            break;

                        case "recordtype":
                            thisResult.recordtype = value;
                            i += 3;
                            break;

                        case "casenumber":
                            thisResult.columns.casenumber = value;
                            i += 3;
                            break;

                        case "title":
                            thisResult.columns.title = value;
                            i += 3;
                            break;

                        case "company":
                            if (dbContext.NetsuiteCompanies.Find(thisarraySet[i + 4].Replace("\"", "")) != null)
                            {
                                thisResult.columns.company =
                                    dbContext.NetsuiteCompanies.Find(thisarraySet[i + 4].Replace("\"", ""));
                            }
                            else
                            {
                                thisResult.columns.company      = dbContext.NetsuiteCompanies.Create();
                                thisResult.columns.company.name = thisarraySet[i + 4].Replace("\"", "");
                                dbContext.Entry(thisResult.columns.company).State = EntityState.Added;;
                                dbContext.SaveChanges();
                            }
                            i += 3;
                            break;
                        }
                    }

                    for (var i = 1; i < 9; i++)
                    {
                        string columnName = string.Empty, columnValue = string.Empty;
                        try
                        {
                            columnName  = responseArray[i + (loopCounter * 10)].Split('\\')[1].Replace("\"", "");
                            columnValue = responseArray[i + (loopCounter * 10)].Split('\\')[5].Replace("\"", "");
                        }
                        catch {}

                        switch (columnName)
                        {
                        case "casenumber":
                            thisResult.columns.casenumber = columnValue;
                            break;

                        case "contact":
                            if (dbContext.NetuiteContacts.Find(columnValue) != null)
                            {
                                thisResult.columns.contact = dbContext.NetuiteContacts.Find(columnValue);
                            }
                            else
                            {
                                thisResult.columns.contact      = dbContext.NetuiteContacts.Create();
                                thisResult.columns.contact.name = columnValue;
                                dbContext.Entry(thisResult.columns.contact).State = EntityState.Added;;
                                dbContext.SaveChanges();
                            }
                            break;

                        case "stage":
                            if (dbContext.NetsuiteStages.Find(columnValue) != null)
                            {
                                thisResult.columns.stage = dbContext.NetsuiteStages.Find(columnValue);
                            }
                            else
                            {
                                thisResult.columns.stage      = dbContext.NetsuiteStages.Create();
                                thisResult.columns.stage.name = columnValue;
                                dbContext.Entry(thisResult.columns.stage).State = EntityState.Added;;
                                dbContext.SaveChanges();
                            }
                            break;

                        case "status":
                            if (dbContext.NetsuiteStatuses.Find(columnValue) != null)
                            {
                                thisResult.columns.status = dbContext.NetsuiteStatuses.Find(columnValue);
                            }
                            else
                            {
                                thisResult.columns.status      = dbContext.NetsuiteStatuses.Create();
                                thisResult.columns.status.name = columnValue;
                                dbContext.Entry(thisResult.columns.status).State = EntityState.Added;;
                                dbContext.SaveChanges();
                            }

                            break;

                        case "startdate":
                            thisResult.columns.startdate =
                                responseArray[i + (loopCounter * 10)].Split('\\')[3].Replace("\"", "");
                            if (
                                dbContext.NetsuiteCategories.Find(
                                    responseArray[i + (loopCounter * 10)].Split('\\')[13].Replace("\"", "")) != null)
                            {
                                thisResult.columns.category =
                                    dbContext.NetsuiteCategories.Find(
                                        responseArray[i + (loopCounter * 10)].Split('\\')[13].Replace("\"", ""));
                            }
                            else
                            {
                                thisResult.columns.category      = dbContext.NetsuiteCategories.Create();
                                thisResult.columns.category.name =
                                    responseArray[i + (loopCounter * 10)].Split('\\')[13].Replace("\"", "");
                                dbContext.Entry(thisResult.columns.category).State = EntityState.Added;;
                                dbContext.SaveChanges();
                            }
                            break;

                        case "assigned":
                            if (dbContext.NetsuiteAssigndes.Find(columnValue) != null)
                            {
                                thisResult.columns.assigned = dbContext.NetsuiteAssigndes.Find(columnValue);
                            }
                            else
                            {
                                thisResult.columns.assigned      = dbContext.NetsuiteAssigndes.Create();
                                thisResult.columns.assigned.name = columnValue;
                                dbContext.Entry(thisResult.columns.assigned).State = EntityState.Added;;
                                dbContext.SaveChanges();
                            }
                            break;

                        case "priority":
                            if (dbContext.NetsuitePriorities.Find(columnValue) != null)
                            {
                                thisResult.columns.priority = dbContext.NetsuitePriorities.Find(columnValue);
                            }
                            else
                            {
                                thisResult.columns.priority      = dbContext.NetsuitePriorities.Create();
                                thisResult.columns.priority.name = columnValue;
                                dbContext.Entry(thisResult.columns.priority).State = EntityState.Added;;
                                dbContext.SaveChanges();
                            }
                            break;

                        case "helpdesk":
                            //ASSIGN CUSTOM FIELDS HERE!!!
                            var refinedFields = from str in responseArray[i + (loopCounter * 10)].Split('\\')
                                                select str.Replace("\"", "");

                            for (var j = 0; j < refinedFields.ToArray().Length; j++)
                            {
                                switch (refinedFields.ToArray()[j])
                                {
                                case "custeventsn_case_number":
                                    columnValue = refinedFields.ToArray()[j + 2];
                                    foreach (var ticket in columnValue.Split(','))
                                    {
                                        thisResult.columns.JiraIssues.Add(
                                            dbContext.JiraIssues.Find(ticket) ??
                                            new JiraIssue()
                                        {
                                            IssueKey = ticket
                                        });
                                    }
                                    break;

                                case "custeventescalatedto":
                                    thisResult.columns.escalatedto = refinedFields.ToArray()[j + 2];
                                    break;
                                }
                            }
                            break;
                        }
                    }
                    FillEmptyReferences(thisResult);
                    parsedList.Add(thisResult);
                    loopCounter++;
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
            }
            return(parsedList);
        }