public UpdatePackage GetUpdatePackage()
 {
     UpdatePackage updatePackage = new UpdatePackage();
     updatePackage.ProjectName = ProjectName;
     updatePackage.Subject = Subject;
     updatePackage.Body = Body;
     updatePackage.Updates = Updates;
     return updatePackage;
 }
示例#2
0
        /// <summary>
        /// This takes an UpdatePackage, which represents an email, and records it to the database
        /// </summary>
        /// <param name="package">An UpdatePackage is a normalized email</param>
        /// <returns>Guid of updated project as a string. 
        /// Useful if this project is new or caller wants to retreive other data on that project</returns>
        public string RecordUpdatePackage(UpdatePackage package)
        {
            //__get the information from input
            string projectName = package.ProjectName;
            string subject = package.Subject;
            string body = package.Body;
            if (string.IsNullOrEmpty(projectName)) return null;

            Dictionary<string, string> updatePairs = package.Updates;

            Project project = context.Projects.FirstOrDefault(p => p.ProjectName == projectName);

            //__if no existing project, create new one
            bool madeNewProject = false;
            if (project == null)
            {
                project = new Project();
                project.ProjectID = Guid.NewGuid();
                madeNewProject = true;
            }

            //__get the Project ID to use locally
            Guid projectID = project.ProjectID;

            //__Look for VerticalID
            int verticalID = -1;//__default is not assigned.
            try
            {
                KeyValuePair<string, string> verticalPair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "verticalid");
                if (verticalPair.Value != null) verticalID = Convert.ToInt16(verticalPair.Value);
                if (verticalID < -1 || verticalID > 8) verticalID = -1;
            }
            catch (Exception)
            {
                //__just use default value 
                verticalID = -1;
            }

            //__these might be new or changed
            project.VerticalID = verticalID;
            project.ProjectName = projectName;

            //__Look for a PhaseID
            int phaseID = -1;
            try
            {
                KeyValuePair<string, string> phasePair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "phaseid");
                if (phasePair.Value != null) phaseID = Convert.ToInt16(phasePair.Value);

                if (phaseID < -1 || phaseID > 7) phaseID = -1;

            }
            catch (Exception)
            {
                //_simply use default
                phaseID = -1;
            }

            //__do fuzzy word matches if no phase found yet
            if (phaseID < 0)
            {
                string searchString = subject + body;
                phaseID = Convert.ToInt16(PhaseKeywords.GuessPhase(searchString));
            }

            //__if this is new Project write it to DB
            if (madeNewProject)
            {
                context.Projects.Add(project);
                context.SaveChanges();
            }

            //__create and record new ProjectUpdate
            ProjectUpdate projectUpdate = new ProjectUpdate();
            projectUpdate.ProjectUpdateID = Guid.NewGuid();
            projectUpdate.ProjectID = projectID;
            projectUpdate.Subject = subject;
            projectUpdate.Body = body;
            context.ProjectUpdates.Add(projectUpdate);
            context.SaveChanges();

            //__build and record StatusUpdates from list of Key:Value pairs
            //__also make sure to update ProjectPhase table for efficient queries later
            StatusUpdate statusUpdateTemplate = new StatusUpdate();
            statusUpdateTemplate.ProjectID = projectID;
            statusUpdateTemplate.ProjectUpdateID = projectUpdate.ProjectUpdateID;
            statusUpdateTemplate.PhaseID = phaseID;
            statusUpdateTemplate.VerticalID = verticalID;

            //__safety, incase of duplicate keys, combine the values so there is only one entry
            //___trying to record duplicate keys in the same PackageUpdate will cause primary key error in DB
            Dictionary<string, string> cleanedPairs = combineEqualKeys(updatePairs);

            foreach (var pair in cleanedPairs)
            {
                string key = pair.Key;
                string value = pair.Value;

                StatusUpdate statusUpdate = statusUpdateTemplate.Clone();
                statusUpdate.UpdateKey = key;
                statusUpdate.UpdateValue = value;
                statusUpdate.RecordDate = DateTime.Now;
                context.StatusUpdates.Add(statusUpdate);
                context.SaveChanges();

                updateProjectPhase(projectID, phaseID, key);
            }
            return projectID.ToString();
        }
示例#3
0
        /// <summary>
        /// This takes an UpdatePackage, which represents an email, and records it to the database
        /// </summary>
        /// <param name="package">An UpdatePackage is a normalized email</param>
        /// <returns>Guid of updated project as a string.
        /// Useful if this project is new or caller wants to retreive other data on that project</returns>
        public string RecordUpdatePackage(UpdatePackage package)
        {
            //__get the information from input
            string projectName = package.ProjectName;
            string subject     = package.Subject;
            string body        = package.Body;

            if (string.IsNullOrEmpty(projectName))
            {
                return(null);
            }

            Dictionary <string, string> updatePairs = package.Updates;

            Project project = context.Projects.FirstOrDefault(p => p.ProjectName == projectName);

            //__if no existing project, create new one
            bool madeNewProject = false;

            if (project == null)
            {
                project           = new Project();
                project.ProjectID = Guid.NewGuid();
                madeNewProject    = true;
            }

            //__get the Project ID to use locally
            Guid projectID = project.ProjectID;

            //__Look for VerticalID
            int verticalID = -1;//__default is not assigned.

            try
            {
                KeyValuePair <string, string> verticalPair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "verticalid");
                if (verticalPair.Value != null)
                {
                    verticalID = Convert.ToInt16(verticalPair.Value);
                }
                if (verticalID < -1 || verticalID > 8)
                {
                    verticalID = -1;
                }
            }
            catch (Exception)
            {
                //__just use default value
                verticalID = -1;
            }

            //__these might be new or changed
            project.VerticalID  = verticalID;
            project.ProjectName = projectName;

            //__Look for a PhaseID
            int phaseID = -1;

            try
            {
                KeyValuePair <string, string> phasePair = updatePairs.FirstOrDefault(u => u.Key.ToLower() == "phaseid");
                if (phasePair.Value != null)
                {
                    phaseID = Convert.ToInt16(phasePair.Value);
                }

                if (phaseID < -1 || phaseID > 7)
                {
                    phaseID = -1;
                }
            }
            catch (Exception)
            {
                //_simply use default
                phaseID = -1;
            }

            //__do fuzzy word matches if no phase found yet
            if (phaseID < 0)
            {
                string searchString = subject + body;
                phaseID = Convert.ToInt16(PhaseKeywords.GuessPhase(searchString));
            }

            //__if this is new Project write it to DB
            if (madeNewProject)
            {
                context.Projects.Add(project);
                context.SaveChanges();
            }

            //__create and record new ProjectUpdate
            ProjectUpdate projectUpdate = new ProjectUpdate();

            projectUpdate.ProjectUpdateID = Guid.NewGuid();
            projectUpdate.ProjectID       = projectID;
            projectUpdate.Subject         = subject;
            projectUpdate.Body            = body;
            context.ProjectUpdates.Add(projectUpdate);
            context.SaveChanges();

            //__build and record StatusUpdates from list of Key:Value pairs
            //__also make sure to update ProjectPhase table for efficient queries later
            StatusUpdate statusUpdateTemplate = new StatusUpdate();

            statusUpdateTemplate.ProjectID       = projectID;
            statusUpdateTemplate.ProjectUpdateID = projectUpdate.ProjectUpdateID;
            statusUpdateTemplate.PhaseID         = phaseID;
            statusUpdateTemplate.VerticalID      = verticalID;

            //__safety, incase of duplicate keys, combine the values so there is only one entry
            //___trying to record duplicate keys in the same PackageUpdate will cause primary key error in DB
            Dictionary <string, string> cleanedPairs = combineEqualKeys(updatePairs);

            foreach (var pair in cleanedPairs)
            {
                string key   = pair.Key;
                string value = pair.Value;

                StatusUpdate statusUpdate = statusUpdateTemplate.Clone();
                statusUpdate.UpdateKey   = key;
                statusUpdate.UpdateValue = value;
                statusUpdate.RecordDate  = DateTime.Now;
                context.StatusUpdates.Add(statusUpdate);
                context.SaveChanges();

                updateProjectPhase(projectID, phaseID, key);
            }
            return(projectID.ToString());
        }
示例#4
0
        static void Main(string[] args)
        {

            if (inDebug)
            {
                AccessService dbService = new AccessService();
                //
                var projectUpdates = dbService.GetProjectUpdates("0a9514be-0e61-4ffc-9d7b-8e151a126038");
                UpdatePackage package = new UpdatePackage();
                package.ProjectName = "we done testing";
                package.Subject = "Deployment";
                package.Body = "Environment:br549|Jimmy, toloose";

                package.Updates.Add("VerticalID",  "-1");
                package.Updates.Add( "PhaseID", "0");
                package.Updates.Add( "Environment",  "Joe's Computer");
                package.Updates.Add("Some Key","Some Value" );

                dbService.RecordUpdatePackage(package);
                var db = 1;

            }

            //AccessService dataAccess = new AccessService();
            int actionOption = 1;
           

            while (actionOption > 0)
            {
                Console.WriteLine("Select action to take:");
                Console.WriteLine("--> 1) Clear all data");
                Console.WriteLine("--> 2) Create sample data");
                Console.WriteLine("--> 3) Delete Project by ID");
                Console.WriteLine("--> 4) Delete Project by Name");
                Console.WriteLine("--> 5) Exit application");
                Console.WriteLine("??\n");

                try
                {
                    string input = Console.ReadLine();
                    actionOption = Convert.ToInt16(input);
                }
                catch (Exception)
                {

                    Console.WriteLine("Integers only please");
                    Console.WriteLine("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");
                    continue;
                }
                bool success = false;
                switch (actionOption)
                {
                    case 1:
                        success = deleteAllData();
                        if (!success)
                        {
                            Console.WriteLine("Problem deleting data: " + errorMessage);
                            errorMessage = "";
                        }
                        break;
                    case 2:
                        success = writeSampleData();
                        if (!success)
                        {
                            Console.WriteLine("Problem writing sample data: " + errorMessage);
                            errorMessage = "";
                        }
                        break;
                    case 3:
                        Console.WriteLine("Enter ProjectID Guid");
                        string projectID = Console.ReadLine();
                        try
                        {
                            deleteProject(projectID, null);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Error deleting project, " + e.Message);
                            continue;
                        }
                        break;
                    case 4:
                        Console.WriteLine("Enter Project Name");
                        string projectName = Console.ReadLine();
                        try
                        {
                            deleteProject(null, projectName);
                        }
                        catch (Exception e)
                        {
                            Console.WriteLine("Error deleting project, " + e.Message);
                            continue;
                        }
                        break;
                    case 5:
                        return;
                    default:
                        return;
                }
                success = false;
            }
        }
        public void DeleteProjectTest()
        {
            AccessService dbService = new AccessService();
            //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6");
            UpdatePackage package = new UpdatePackage();
            package.ProjectName = "Test Project";
            package.Subject = "Deployment";
            package.Body = "Environment:br549|Jimmy, toloose";

            package.Updates.Add("verticalID", "3");
            package.Updates.Add("Environment", "br549");
            package.Updates.Add("Author", "Samantha");
            package.Updates.Add("Manager", "Bocephus");

            //__Adding this package should create a new Project and return the ProjectID as string
            string stId = dbService.RecordUpdatePackage(package);
            Assert.IsFalse(string.IsNullOrEmpty(stId));

            Guid projectID = Guid.Parse(stId);
            Assert.IsFalse(projectID == Guid.Empty);

            Guid recordedId = dbService.GetProjectIDbyName(package.ProjectName);
            Assert.AreEqual(projectID, recordedId);
            // This is the actual test - let's see if it actually deletes the project
            dbService.DeleteProject(projectID);

            // When we look for updates, it should be null or empty.
            // We will not test this part because the code crashes if you try and
            // delete a project that does not exist and we are in code freeze.
            // Assert.IsNull(dbService.GetAllUpdatesForProject(projectID.ToString()));
        }
        public void UpdateProjectVerticalTest()
        {
            AccessService dbService = new AccessService();
            //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6");
            UpdatePackage package = new UpdatePackage();
            package.ProjectName = "Test Getting Project Updates";
            package.Subject = "Deployment";
            package.Body = "Environment:br549|Jimmy, toloose";

            package.Updates.Add("verticalID", "3");
            package.Updates.Add("Environment", "br549");
            package.Updates.Add("Author", "Samantha");
            package.Updates.Add("Manager", "Bocephus");

            //__Adding this package should create a new Project and return the ProjectID as string
            string stId = dbService.RecordUpdatePackage(package);
            Guid projectID = Guid.Parse(stId);
            // In theory there should be an easy way to check a project vertical, but there isn't
            

            //now the actual test
            dbService.UpdateProjectVertical(5, projectID);
            List<ProjectUpdate> pjUpdates = dbService.GetProjectUpdates(stId);
            Assert.IsTrue(pjUpdates[0].Project.VerticalID == 5);

            dbService.UpdateProjectVertical(7, projectID);
            List<ProjectUpdate> pjUpdates2 = dbService.GetProjectUpdates(stId);
            Assert.IsTrue(pjUpdates2[0].Project.VerticalID == 7);


            dbService.DeleteProject(projectID);
        }
        public void ChangeProjectUpdatePhaseTest1()
        {
            AccessService dbService = new AccessService();
            //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6");
            UpdatePackage package = new UpdatePackage();
            package.ProjectName = "Test Getting Project Updates";
            package.Subject = "Deployment";
            package.Body = "Environment:br549|Jimmy, toloose";

            package.Updates.Add("verticalID", "3");
            package.Updates.Add("Environment", "br549");
            package.Updates.Add("Author", "Samantha");
            package.Updates.Add("Manager", "Bocephus");

            //__Adding this package should create a new Project and return the ProjectID as string
            string stId = dbService.RecordUpdatePackage(package);
            Guid projectID = Guid.Parse(stId);

            // Gotta convert this to a Project Update as opposed to a plain Update Project
            List<ProjectUpdate> pjUpdates = dbService.GetProjectUpdates(stId);
            pjUpdates[0].PhaseID = 4;
            pjUpdates[0].Phase = "Build_and_Test"; // Don't think this needs to be done
            dbService.ChangeProjectUpdatePhase(pjUpdates[0]);
            List<ProjectUpdate> pjUpdateChanges = dbService.GetProjectUpdates(stId);
            Assert.IsTrue(pjUpdateChanges[0].PhaseID == 4);
            pjUpdateChanges[0].PhaseID = 5;
            dbService.ChangeProjectUpdatePhase(pjUpdateChanges[0]);
            List<ProjectUpdate> pjUpdateChangesMore = dbService.GetProjectUpdates(stId);
            Assert.IsTrue(pjUpdateChangesMore[0].PhaseID == 5);
            dbService.DeleteProject(projectID);
        }
        public void GetAllUpdatesFromEmailTest()
        {
            AccessService dbService = new AccessService();
            UpdatePackage package = new UpdatePackage();
            package.ProjectName = "Test Get All Updates from Email";
            package.Subject = "Deployment";
            package.Body = "Environment:br549|Jimmy, toloose";

            package.Updates.Add("verticalID", "3");
            package.Updates.Add("Environment", "br549");
            package.Updates.Add("Author", "Samantha");
            package.Updates.Add("Manager", "Bocephus");

            //__Adding this package should create a new Project and return the ProjectID as string
            string stId = dbService.RecordUpdatePackage(package);
            Guid projectID = Guid.Parse(stId);
            List<ProjectUpdate> pUpdate = dbService.GetProjectUpdates(stId);
            
            Assert.AreEqual(dbService.GetAllUpdatesFromEmail(pUpdate[0].ProjectUpdateID).Count, 4);
            dbService.DeleteProject(projectID);
        }
        public void GetUpdatesForKeyTest()
        {
            AccessService dbService = new AccessService();
            //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6");
            UpdatePackage package = new UpdatePackage();
            package.ProjectName = "Test retrieving key Project Updates";
            package.Subject = "Deployment";
            package.Body = "Environment:br549|Jimmy, toloose";

            package.Updates.Add("SuperDuperKeyTest", "13504");
            package.Updates.Add("SuperDuperKeyTest2", "hello world");

            //__Adding this package should create a new Project and return the ProjectID as string
            string stId = dbService.RecordUpdatePackage(package);
            //List<ProjectUpdate> list = dbService.GetProjectUpdates(stId);
            //Assert.AreEqual(list[0].StatusUpdates.Count, 4);
            Guid projectID = Guid.Parse(stId);
            List<StatusUpdate> statusUpdates = dbService.GetUpdatesForKey("SuperDuperKeyTest", projectID);
            Assert.IsTrue(statusUpdates[0].UpdateValue == "13504");
            dbService.DeleteProject(projectID);

        }
        public void GetProjectUpdatesTest()
        {
            AccessService dbService = new AccessService();
            //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6");
            UpdatePackage package = new UpdatePackage();
            package.ProjectName = "Test Getting Project Updates";
            package.Subject = "Deployment";
            package.Body = "Environment:br549|Jimmy, toloose";

            package.Updates.Add("verticalID", "3");
            package.Updates.Add("Environment", "br549");
            package.Updates.Add("Author", "Samantha");
            package.Updates.Add("Manager", "Bocephus");

            //__Adding this package should create a new Project and return the ProjectID as string
            string stId = dbService.RecordUpdatePackage(package);
            List<ProjectUpdate> list = dbService.GetProjectUpdates(stId);
            Assert.AreEqual(list[0].StatusUpdates.Count, 4);
            Guid projectID = Guid.Parse(stId);

            dbService.DeleteProject(projectID);
        }
        public void RecordUpdatePackageTest()
        {
            AccessService dbService = new AccessService();
            //var projectUpdates = dbService.GetProjectUpdates("6a8a7e56-e9ac-4385-a8be-5be702c1f2e6");
            UpdatePackage package = new UpdatePackage();
            package.ProjectName = "Test Project";
            package.Subject = "Deployment";
            package.Body = "Environment:br549|Jimmy, toloose";

            package.Updates.Add("verticalID", "3");
            package.Updates.Add("Environment", "br549");
            package.Updates.Add("Author", "Samantha");
            package.Updates.Add("Manager", "Bocephus");

            //__Adding this package should create a new Project and return the ProjectID as string
            string stId = dbService.RecordUpdatePackage(package);
            Assert.IsFalse(string.IsNullOrEmpty(stId));

            Guid projectID = Guid.Parse(stId);
            Assert.IsFalse(projectID == Guid.Empty);

            Guid recordedId = dbService.GetProjectIDbyName(package.ProjectName);
            Assert.AreEqual(projectID, recordedId);



            dbService.DeleteProject(projectID);
        }