Ejemplo n.º 1
0
        public static void UpdateDictionary(this Dictionary <string, List <TMS_TP> > dict, string key, TMS_TP newValue, IOutputable ouotput = null)
        {
            List <TMS_TP> existingList;

            if (!dict.TryGetValue(key, out existingList))
            {
                existingList = new List <TMS_TP>();
                dict.Add(key, existingList);
            }
            existingList.Add(newValue);

            if (Consts.VERBOSE && ouotput != null)
            {
                ouotput.WriteLine("{0}: {1}", key, newValue);
            }
        }
        //reason + list of pairs <TMS task, RM TMS task>
        public void CreateSyncOutputList()
        {
            outputList = new Dictionary <string, List <TMS_TP> >();

            foreach (TMSItem itemFromRM in rmTMSDict.GetItemList())
            {
                bool isRedmineAssignedToMyTeam = TeamService.IsPersonFromMyTeam(itemFromRM.AssignedTo);
                bool isTMSAssignedtoMyTeam     = false;

                TMSItem dbTMSItem = dbTMSDict.Get(itemFromRM.TMS);

                if (dbTMSItem != null)
                {
                    isTMSAssignedtoMyTeam = TeamService.IsPersonFromMyTeam(dbTMSItem.AssignedTo);

                    if (isRedmineAssignedToMyTeam || isTMSAssignedtoMyTeam)
                    {
                        //ommit closed tasks
                        if (dbTMSItem.Status.StartsWith("C") || dbTMSItem.Status.StartsWith("c"))
                        {
                            if (itemFromRM.Status == Consts.RM_CLOSED)
                            {
                                //ignore closed in TMS and in RM
                                TMS_TP tp = new TMS_TP(dbTMSItem, itemFromRM);
                                outputList.UpdateDictionary(Consts.RFC_BOTH_CLOSED, tp);
                            }
                            else
                            {
                                TMS_TP tp = new TMS_TP(dbTMSItem, itemFromRM);
                                outputList.UpdateDictionary(Consts.RFC_DIFFERENT_STATUSES, tp);
                            }
                        }
                        else
                        {
                            /*TODO*/
                            //check if the task is assigned not to my team
                            if (!TeamService.CheckIfSamePersonByTMSLoginAndFullName(dbTMSItem.AssignedTo, itemFromRM.AssignedTo))
                            {
                                TMS_TP tp = new TMS_TP(dbTMSItem, itemFromRM);
                                outputList.UpdateDictionary(Consts.RFC_ASSIGNED_TO_DIFFERENT_PERSON_IN_RM_AND_TMS, tp);
                            }
                            else
                            {
                                //Console.WriteLine("{0}\nRM: {1}", dbTMSItem, itemFromRM);
                                TMS_TP tp = new TMS_TP(dbTMSItem, itemFromRM);
                                outputList.UpdateDictionary(Consts.RFC_BOTH_OK, tp);
                            }
                        }
                    }
                }
                else
                {
                    if (isRedmineAssignedToMyTeam)
                    {
                        TMS_TP tp = new TMS_TP(null, itemFromRM);
                        //if the problem is not related to client TMS (so its subject does not start with "client")
                        if (itemFromRM.TMS != null && !itemFromRM.TMS.StartsWith(client))
                        {
                            outputList.UpdateDictionary(Consts.RFC_NOT_CONNECTED_WITH_TMS, tp);
                            //Console.WriteLine("Element not connected with !: {0}", itemFromRM);
                        }
                        else
                        {
                            outputList.UpdateDictionary(Consts.RFC_NOT_EXISTS_IN_TMS, tp);
                        }
                    }
                }
            }
        }