コード例 #1
0
ファイル: Serializer.cs プロジェクト: NikolayStefanov/SoftUni
        public static string ExportProjectWithTheirTasks(TeisterMaskContext context)
        {
            var targetProjects = context.Projects
                                 .ToList()
                                 .Where(p => p.Tasks.Any())
                                 .Select(p => new ExportProjectWithTasksDto
            {
                TasksCount  = p.Tasks.Count,
                ProjectName = p.Name,
                HasEndDate  = p.DueDate == null || p.DueDate.Value.Year == 1 ? "No" : "Yes",
                Tasks       = p.Tasks.Select(t => new ExportTaskDto
                {
                    Name  = t.Name,
                    Label = t.LabelType.ToString()
                }).OrderBy(t => t.Name).ToArray()
            })
                                 .OrderByDescending(p => p.TasksCount)
                                 .ThenBy(p => p.ProjectName)
                                 .ToList();
            var resultXml = XmlConverter.Serialize(targetProjects, "Projects");

            return(resultXml);
        }
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            StringBuilder sb = new StringBuilder();
            var           projectsToImport = new List <Project>();
            var           projects         = XmlConverter.Deserializer <ProjectXmlInputModel>(xmlString, "Projects");

            foreach (var currentProject in projects)
            {
                var isValidCurrentProjectOpenDate = DateTime.TryParseExact(
                    currentProject.OpenDate,
                    "dd/MM/yyyy",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None,
                    out DateTime currentProjectOpenDate);

                if (!IsValid(currentProject) ||
                    !isValidCurrentProjectOpenDate)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var isValidDueDate = DateTime.TryParseExact(
                    currentProject.DueDate,
                    "dd/MM/yyyy",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None,
                    out DateTime currentDueDate);

                var projectToAdd = new Project
                {
                    Name     = currentProject.Name,
                    OpenDate = currentProjectOpenDate,
                    DueDate  = isValidDueDate ? (DateTime?)currentDueDate : null,
                };

                foreach (var currentTask in currentProject.Tasks)
                {
                    var isValidTaskOpenDate = DateTime.TryParseExact(
                        currentTask.OpenDate,
                        "dd/MM/yyyy",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out DateTime currentTaskOpenDate);

                    var isValidTaskDueDate = DateTime.TryParseExact(
                        currentTask.DueDate,
                        "dd/MM/yyyy",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out DateTime currentTaskDueDate);

                    if (!IsValid(currentTask) ||
                        !isValidTaskOpenDate ||
                        !isValidTaskDueDate ||
                        currentTaskOpenDate < currentProjectOpenDate ||
                        currentTaskDueDate > projectToAdd.DueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var taskToAdd = new Task
                    {
                        Name          = currentTask.Name,
                        OpenDate      = currentTaskOpenDate,
                        DueDate       = currentTaskDueDate,
                        ExecutionType = Enum.Parse <ExecutionType>(currentTask.ExecutionType),
                        LabelType     = Enum.Parse <LabelType>(currentTask.LabelType)
                    };

                    projectToAdd.Tasks.Add(taskToAdd);
                }

                projectsToImport.Add(projectToAdd);
                sb.AppendLine(string.Format(SuccessfullyImportedProject, projectToAdd.Name, projectToAdd.Tasks.Count));
            }

            context.Projects.AddRange(projectsToImport);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
コード例 #3
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var data = XmlConverter.Deserializer <ImportProjectDTO>(xmlString, "Projects");

            StringBuilder sb = new StringBuilder();

            foreach (var item in data)
            {
                if (!IsValid(item))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var validOpenDateProject = DateTime.TryParseExact(item.OpenDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime projectOpenDate);

                if (!validOpenDateProject)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var project = new Project
                {
                    Name     = item.Name,
                    OpenDate = projectOpenDate
                };

                var validProjectDueDate = DateTime.TryParseExact(item.DueDate?.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime projectDueDate);

                if (string.IsNullOrEmpty(item.DueDate))
                {
                    project.DueDate = null;
                }
                else
                {
                    if (!validProjectDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    project.DueDate = projectDueDate;
                }

                foreach (var taskDTO in item.Tasks)
                {
                    if (!IsValid(taskDTO))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var validOpenDate = DateTime.TryParseExact(taskDTO.OpenDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime openDate);

                    var validDueDate = DateTime.TryParseExact(taskDTO.DueDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dueDate);

                    if (!validOpenDate || !validDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    //task open date is before project open date - invalid
                    if (openDate < dueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    //maybe due date null
                    if (projectDueDate == null)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    //task due date is after project due date - invalid
                    if (dueDate > projectDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var validExecutionType = Enum.TryParse <ExecutionType>(taskDTO.ExecutionType.ToString(), out ExecutionType et);

                    var validLabelType = Enum.TryParse <LabelType>(taskDTO.LabelType.ToString(), out LabelType lt);

                    if (!validExecutionType || !validLabelType)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var task = new Task
                    {
                        Name          = taskDTO.Name,
                        OpenDate      = openDate,
                        DueDate       = dueDate,
                        ExecutionType = et,
                        LabelType     = lt,
                    };

                    project.Tasks.Add(task);
                }

                if (project.Tasks.Count == 0)
                {
                    continue;
                }

                context.Projects.Add(project);
                sb.AppendLine(string.Format(SuccessfullyImportedProject, project.Name, project.Tasks.Count));
            }

            context.SaveChanges();

            return(sb.ToString());
        }
コード例 #4
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var           projectsDto = XmlConverter.Deserializer <ProjectImportModel>(xmlString, "Projects");
            var           projects    = new List <Project>();
            StringBuilder sb          = new StringBuilder();

            foreach (var currentProject in projectsDto)
            {
                var isValidProjectOpenDate = DateTime.TryParseExact(currentProject.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime projectOpenDate);
                var isValidProjectDueDate  = DateTime.TryParseExact(currentProject.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime projectDueDate);
                if (!IsValid(currentProject) || !isValidProjectOpenDate)
                {
                    sb.AppendLine("Invalid data!");
                    continue;
                }

                var tasks = new List <Task>();

                foreach (var currentTask in currentProject.Tasks)
                {
                    var isValidTaskOpenDate = DateTime.TryParseExact(currentTask.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime taskOpenDate);
                    var isValidTaskDueDate  = DateTime.TryParseExact(currentTask.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime taskDueDate);



                    int compareOpenDates = DateTime.Compare(taskOpenDate, projectOpenDate);

                    int compareDueDates = DateTime.Compare(taskDueDate, projectDueDate);

                    if (!IsValid(currentTask) || !isValidTaskOpenDate || !isValidTaskDueDate || compareOpenDates < 0 || (isValidProjectDueDate && compareDueDates > 0))
                    {
                        sb.AppendLine("Invalid data!");
                        continue;
                    }

                    var task = new Task
                    {
                        Name          = currentTask.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = (ExecutionType)(currentTask.ExecutionType),
                        LabelType     = (LabelType)(currentTask.LabelType),
                    };

                    tasks.Add(task);
                }

                var project = new Project
                {
                    Name     = currentProject.Name,
                    OpenDate = projectOpenDate,
                    DueDate  = isValidProjectDueDate ? projectDueDate : (DateTime?)null,

                    Tasks = tasks
                };

                projects.Add(project);

                sb.AppendLine($"Successfully imported project - {project.Name} with {project.Tasks.Count} tasks.");
            }

            context.Projects.AddRange(projects);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
コード例 #5
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            StringBuilder sb = new StringBuilder();

            ImportProjectDto[] xmlProjects = XmlConverter.Deserializer <ImportProjectDto>(xmlString, "Projects");

            foreach (var xmlProject in xmlProjects)
            {
                if (!IsValid(xmlProject))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime projectOpenDate;
                bool     isValidOpenDate = DateTime.TryParseExact(xmlProject.OpenDate,
                                                                  "dd/MM/yyyy", CultureInfo.InvariantCulture,
                                                                  DateTimeStyles.None,
                                                                  out projectOpenDate);

                if (!isValidOpenDate)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime projectDueDate;
                bool     isValidDueDate = DateTime.TryParseExact(xmlProject.DueDate,
                                                                 "dd/MM/yyyy", CultureInfo.InvariantCulture,
                                                                 DateTimeStyles.None,
                                                                 out projectDueDate);


                DateTime?finalProjectDueDate = isValidDueDate
                    ? (DateTime?)projectDueDate
                    : null;

                List <Task> validTasks = new List <Task>();

                foreach (var taskDto in xmlProject.Tasks)
                {
                    if (!IsValid(taskDto))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskOpenDate;
                    bool     isValidTaskOpenDate = DateTime.TryParseExact(taskDto.OpenDate,
                                                                          "dd/MM/yyyy", CultureInfo.InvariantCulture,
                                                                          DateTimeStyles.None,
                                                                          out taskOpenDate);

                    if (!isValidTaskOpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (taskOpenDate < projectOpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskDueDate;
                    bool     isValidTaskDueDate = DateTime.TryParseExact(taskDto.DueDate,
                                                                         "dd/MM/yyyy", CultureInfo.InvariantCulture,
                                                                         DateTimeStyles.None,
                                                                         out taskDueDate);

                    if (!isValidTaskDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (finalProjectDueDate != null)
                    {
                        if (taskDueDate > finalProjectDueDate)
                        {
                            sb.AppendLine(ErrorMessage);
                            continue;
                        }
                    }

                    Task task = new Task
                    {
                        Name          = taskDto.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = Enum.Parse <ExecutionType>(taskDto.ExecutionType),
                        LabelType     = Enum.Parse <LabelType>(taskDto.LabelType),
                    };

                    validTasks.Add(task);
                }

                Project project = new Project
                {
                    Name     = xmlProject.Name,
                    OpenDate = projectOpenDate,
                    DueDate  = isValidDueDate ? (DateTime?)projectDueDate : null,
                    Tasks    = validTasks
                };

                context.Projects.Add(project);
                context.SaveChanges();
                sb.AppendLine(string.Format(SuccessfullyImportedProject,
                                            project.Name,
                                            project.Tasks.Count));
            }
            return(sb.ToString().TrimEnd());
        }
コード例 #6
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var projectDtos = XmlConverter.Deserializer <ProjectDTO>(xmlString, "Projects");

            var projects = new List <Project>();
            var sb       = new StringBuilder();

            foreach (ProjectDTO projectDto in projectDtos)
            {
                // Project

                if (!IsValid(projectDto))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                //valid open date
                DateTime projectOpenDate;
                bool     isProjectOpenDateValid = DateTime.TryParseExact(projectDto.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out projectOpenDate);

                if (!isProjectOpenDateValid)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                //valid due date
                DateTime?projectDueDate;
                if (!string.IsNullOrEmpty(projectDto.DueDate))
                {
                    //if we receive date
                    DateTime projectDueDateValue;
                    bool     isProjectDueDateValid = DateTime.TryParseExact(projectDto.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out projectDueDateValue);

                    if (!isProjectDueDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                    }

                    projectDueDate = projectDueDateValue;
                }
                else
                {
                    //if we dont receive date
                    projectDueDate = null;
                }

                var pr = new Project
                {
                    Name     = projectDto.Name,
                    OpenDate = projectOpenDate,
                    DueDate  = projectDueDate
                };

                //validate task
                foreach (var taskDto in projectDto.Tasks)
                {
                    if (!IsValid(taskDto))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var checkExecutionType = Enum.IsDefined(typeof(ExecutionType), taskDto.ExecutionType);
                    var checkLabelType     = Enum.IsDefined(typeof(LabelType), taskDto.LabelType);

                    //is task open date valid
                    DateTime taskOpenDate;
                    bool     istaskOpenDateValid = DateTime.TryParseExact(taskDto.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out taskOpenDate);

                    if (!istaskOpenDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    //is task duedate valid
                    DateTime taskDueDate;
                    bool     isTaskDueDateDateValid = DateTime.TryParseExact(taskDto.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out taskDueDate);

                    if (!isTaskDueDateDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    //check for open date
                    if (taskOpenDate < projectOpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    //check for due date
                    if (projectDueDate.HasValue)
                    {
                        if (taskDueDate > projectDueDate.Value)
                        {
                            sb.AppendLine(ErrorMessage);
                            continue;
                        }
                    }
                    var task = new Task
                    {
                        Name          = taskDto.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = (ExecutionType)taskDto.ExecutionType,
                        LabelType     = (LabelType)taskDto.LabelType,
                    };

                    pr.Tasks.Add(task);
                }

                projects.Add(pr);
                sb.AppendLine(string.Format(SuccessfullyImportedProject, pr.Name, pr.Tasks.Count()));
            }

            context.Projects.AddRange(projects);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
コード例 #7
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var sb = new StringBuilder();

            ImportProjectModel[] projectDtos = XmlConverter.Deserializer <ImportProjectModel>(xmlString, "Projects");

            foreach (var p in projectDtos)
            {
                if (!IsValid(p))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                bool isOpenDateValid = DateTime.TryParseExact(p.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var openDate);

                bool isDueDateValid = DateTime.TryParseExact(p.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var dueDate);

                if (!isOpenDateValid)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var project = new Project
                {
                    Name    = p.Name,
                    DueDate = dueDate
                };

                if (isOpenDateValid)
                {
                    project.OpenDate = openDate;
                }

                foreach (var t in p.Tasks)
                {
                    if (!IsValid(t))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    bool isTaskOpenDateValid = DateTime.TryParseExact(t.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var taskOpenDate);

                    bool isTaskDueDateValid = DateTime.TryParseExact(t.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var taskDueDate);

                    if (taskOpenDate < openDate || (isDueDateValid && taskDueDate > dueDate))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var task = new Task
                    {
                        Name          = t.Name,
                        ExecutionType = (ExecutionType)t.ExecutionType,
                        LabelType     = (LabelType)t.LabelType
                    };

                    if (isTaskOpenDateValid)
                    {
                        task.OpenDate = taskOpenDate;
                    }

                    if (isTaskDueDateValid)
                    {
                        task.DueDate = taskDueDate;
                    }

                    project.Tasks.Add(task);
                }

                context.Projects.Add(project);
                context.SaveChanges();

                sb.AppendLine(String.Format(SuccessfullyImportedProject, project.Name, project.Tasks.Count));
            }

            return(sb.ToString().TrimEnd());
        }
コード例 #8
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var projectDTOs = XmlConverter.Deserializer <ProjectTasksImportModel>(xmlString,
                                                                                  "Projects");

            var result = new StringBuilder();

            foreach (var projectDTO in projectDTOs)
            {
                if (!IsValid(projectDTO))
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime dueDate;
                bool     isDueDateValid = DateTime.TryParseExact(projectDTO.DueDate, "dd/MM/yyyy",
                                                                 CultureInfo.InvariantCulture, DateTimeStyles.None, out dueDate);

                DateTime openDate;
                bool     isOpenDateValid = DateTime.TryParseExact(projectDTO.OpenDate, "dd/MM/yyyy",
                                                                  CultureInfo.InvariantCulture, DateTimeStyles.None, out openDate);

                if (!isOpenDateValid)
                {
                    result.AppendLine(ErrorMessage);
                    continue;
                }

                var project = new Project()
                {
                    Name     = projectDTO.Name,
                    OpenDate = openDate
                };

                if (!isDueDateValid)
                {
                    project.DueDate = null;
                }
                else
                {
                    project.DueDate = dueDate;
                }


                foreach (var taskDTO in projectDTO.Tasks)
                {
                    if (!IsValid(taskDTO))
                    {
                        result.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskDueDate;
                    bool     isTaskDueDateValid = DateTime.TryParseExact(taskDTO.DueDate, "dd/MM/yyyy",
                                                                         CultureInfo.InvariantCulture, DateTimeStyles.None, out taskDueDate);

                    DateTime taskOpenDate;
                    bool     isTaskOpenDateValid = DateTime.TryParseExact(taskDTO.OpenDate,
                                                                          "dd/MM/yyyy",
                                                                          CultureInfo.InvariantCulture, DateTimeStyles.None, out taskOpenDate);

                    if (!isTaskDueDateValid || !isTaskOpenDateValid)
                    {
                        result.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (taskOpenDate < project.OpenDate ||
                        taskDueDate > project.DueDate)    // TODO: might have some bugs
                    {
                        result.AppendLine(ErrorMessage);
                        continue;
                    }

                    var task = new Task()
                    {
                        Name          = taskDTO.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        LabelType     = Enum.Parse <LabelType>(taskDTO.LabelType), // should be int
                        ExecutionType = Enum.Parse <ExecutionType>(taskDTO.ExecutionType)
                    };

                    project.Tasks.Add(task);
                }

                context.Projects.Add(project);
                context.SaveChanges();
                result.AppendLine(String.Format(SuccessfullyImportedProject, project.Name,
                                                project.Tasks.Count));
            }

            return(result.ToString().Trim());

            //TODO: Check DateTime? DueDate on project
            //I dont have to parse the project OpenDate as well as the dates on Task
        }
コード例 #9
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var outputResult        = new StringBuilder();
            var validProjectsToAdd  = new List <Project>();
            var datetimeDefaulValue = default(DateTime);

            var projectsDtos = XmlConverter.Deserializer <ImportProjectDto>(xmlString, "Projects");

            foreach (var projectDto in projectsDtos)
            {
                if (!IsValid(projectDto))
                {
                    outputResult.AppendLine(ErrorMessage);
                    continue;
                }
                var projectOpenDate = DateTime.ParseExact(projectDto.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);

                DateTime dueDateToAdd;
                var      projectDueDate = DateTime.TryParseExact
                                          (
                    projectDto.DueDate,
                    "dd/MM/yyyy",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None,
                    out dueDateToAdd
                                          );
                if (projectDto.DueDate != null && projectDto.DueDate != "" && projectOpenDate > dueDateToAdd)
                {
                    outputResult.AppendLine(ErrorMessage);
                    continue;
                }

                var newProject = new Project
                {
                    Name     = projectDto.Name,
                    OpenDate = projectOpenDate,
                    DueDate  = dueDateToAdd
                };

                foreach (var taskDto in projectDto.Tasks)
                {
                    if (!IsValid(taskDto) ||
                        !Enum.IsDefined(typeof(ExecutionType), taskDto.ExecutionType) ||
                        !Enum.IsDefined(typeof(LabelType), taskDto.LabelType))
                    {
                        outputResult.AppendLine(ErrorMessage);
                        continue;
                    }
                    var taskOpenDate = DateTime.ParseExact(taskDto.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    var taskDueDate  = DateTime.ParseExact(taskDto.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    if (taskOpenDate < newProject.OpenDate)
                    {
                        outputResult.AppendLine(ErrorMessage);
                        continue;
                    }
                    if (newProject.DueDate != datetimeDefaulValue && taskDueDate > newProject.DueDate)
                    {
                        outputResult.AppendLine(ErrorMessage);
                        continue;
                    }
                    var newTask = new Task
                    {
                        Name          = taskDto.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = (ExecutionType)taskDto.ExecutionType,
                        LabelType     = (LabelType)taskDto.LabelType
                    };
                    newProject.Tasks.Add(newTask);
                }

                validProjectsToAdd.Add(newProject);
                outputResult.AppendLine(string.Format(SuccessfullyImportedProject, newProject.Name, newProject.Tasks.Count));
            }
            context.Projects.AddRange(validProjectsToAdd);
            context.SaveChanges();

            return(outputResult.ToString().TrimEnd());
        }
コード例 #10
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            string        root = "Projects";
            StringBuilder sb   = new StringBuilder();

            ProjectInputXmlModel[] projects = XmlConverter.Deserialize <ProjectInputXmlModel>(xmlString, root);

            foreach (var currProject in projects)
            {
                if (!IsValid(currProject))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime openDate;
                bool     parseOpenDate = DateTime.TryParseExact(currProject.OpenDate,
                                                                "dd/MM/yyyy",
                                                                CultureInfo.InvariantCulture,
                                                                DateTimeStyles.None,
                                                                out openDate);

                if (!parseOpenDate)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime?dueDate;
                if (!String.IsNullOrEmpty(currProject.DueDate))
                {
                    DateTime projDueDate;
                    bool     parseDueDate = DateTime
                                            .TryParseExact(currProject.DueDate,
                                                           "dd/MM/yyyy",
                                                           CultureInfo.InvariantCulture,
                                                           DateTimeStyles.None,
                                                           out projDueDate);

                    if (!parseDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    dueDate = projDueDate;
                }
                else
                {
                    dueDate = null;
                }

                Project project = new Project()
                {
                    Name     = currProject.Name,
                    OpenDate = openDate,
                    DueDate  = dueDate
                };

                foreach (var currTask in currProject.Tasks)
                {
                    if (!IsValid(currTask))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskOpenDate;
                    bool     parseTaskOpenDate = DateTime.TryParseExact(currTask.OpenDate,
                                                                        "dd/MM/yyyy",
                                                                        CultureInfo.InvariantCulture,
                                                                        DateTimeStyles.None,
                                                                        out taskOpenDate);

                    if (!parseTaskOpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (taskOpenDate < project.OpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskDueDate;
                    bool     parseTaskDueDate = DateTime.TryParseExact(currTask.DueDate,
                                                                       "dd/MM/yyyy",
                                                                       CultureInfo.InvariantCulture,
                                                                       DateTimeStyles.None,
                                                                       out taskDueDate);

                    if (!parseTaskDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (project.DueDate.HasValue)
                    {
                        if (taskDueDate > project.DueDate)
                        {
                            sb.AppendLine(ErrorMessage);
                            continue;
                        }
                    }

                    Task task = new Task()
                    {
                        Name          = currTask.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = (ExecutionType)currTask.ExecutionType,
                        LabelType     = (LabelType)currTask.LabelType,
                    };
                    project.Tasks.Add(task);
                }

                context.Projects.Add(project);
                context.SaveChanges();

                sb.AppendLine($"Successfully imported project - {project.Name} with {project.Tasks.Count()} tasks.");
                //sb.AppendLine(String.Format(SuccessfullyImportedBook, book.Name, book.Price));
            }

            return(sb.ToString().TrimEnd());
        }
コード例 #11
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            StringBuilder sb = new StringBuilder();

            var projectDtos = XmlConverter.Deserializer <ProjectDto>(xmlString, "Projects");

            List <Project> projects = new List <Project>();

            foreach (var projectDto in projectDtos)
            {
                if (!IsValid(projectDto))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var IsOpenDateValid = DateTime.TryParseExact(projectDto.OpenDate,
                                                             "dd/MM/yyyy",
                                                             CultureInfo.InvariantCulture,
                                                             DateTimeStyles.None,
                                                             out DateTime openDate);
                if (!IsOpenDateValid)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime?dueDate = null;

                if (!string.IsNullOrWhiteSpace(projectDto.DueDate))
                {
                    var isDueDateValid =
                        DateTime.TryParseExact(projectDto.DueDate,
                                               "dd/MM/yyyy",
                                               CultureInfo.InvariantCulture,
                                               DateTimeStyles.None,
                                               out DateTime dueDateTp);

                    if (!isDueDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    dueDate = dueDateTp;
                }

                Project project = new Project()
                {
                    Name     = projectDto.Name,
                    OpenDate = openDate,
                    DueDate  = dueDate
                };

                foreach (var task in projectDto.Tasks)
                {
                    if (!IsValid(task))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var IsTaskOpenDateValid = DateTime.TryParseExact(task.OpenDate,
                                                                     "dd/MM/yyyy",
                                                                     CultureInfo.InvariantCulture,
                                                                     DateTimeStyles.None,
                                                                     out DateTime taskOpenDate);

                    if (!IsTaskOpenDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var IsTaskDueDateValid = DateTime.TryParseExact(task.DueDate,
                                                                    "dd/MM/yyyy",
                                                                    CultureInfo.InvariantCulture,
                                                                    DateTimeStyles.None,
                                                                    out DateTime taskDueDate);

                    if (!IsTaskDueDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (taskOpenDate < openDate || (dueDate.HasValue && taskDueDate > dueDate.Value))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    Task newTask = new Task()
                    {
                        Name          = task.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = Enum.Parse <ExecutionType>(task.ExecutionType),
                        LabelType     = Enum.Parse <LabelType>(task.LabelType)
                    };

                    project.Tasks.Add(newTask);
                }

                sb.AppendLine(string.Format(SuccessfullyImportedProject, project.Name, project.Tasks.Count));

                projects.Add(project);
            }

            context.Projects.AddRange(projects);

            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
コード例 #12
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var sb = new StringBuilder();

            var projects = new List <Project>();

            var validProjects = XmlConverter
                                .Deserializer <XmlImportProjectDto>(xmlString, "Projects");

            foreach (var currentProject in validProjects)
            {
                if (!IsValid(currentProject))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime projectOpenDate;
                var      validProjectOpenDate = DateTime.TryParseExact(
                    currentProject.OpenDate,
                    "dd/MM/yyyy",
                    CultureInfo.InvariantCulture,
                    DateTimeStyles.None,
                    out projectOpenDate);

                if (!validProjectOpenDate)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime?projectDueDate;

                if (!string.IsNullOrWhiteSpace(currentProject.DueDate))
                {
                    DateTime nonNullableDate;
                    var      isDueDateProjectValid = DateTime.TryParseExact(
                        currentProject.DueDate,
                        "dd/MM/yyyy",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out nonNullableDate);

                    if (!isDueDateProjectValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    projectDueDate = nonNullableDate;
                }
                else
                {
                    projectDueDate = null;
                }

                var project = new Project
                {
                    Name     = currentProject.Name,
                    OpenDate = projectOpenDate,
                    DueDate  = projectDueDate
                };

                //We need to validate the tasks as well

                foreach (var taskDto in currentProject.Tasks)
                {
                    if (!IsValid(taskDto))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskOpenDate;
                    var      validTaskOpenDate = DateTime.TryParseExact(
                        taskDto.OpenDate,
                        "dd/MM/yyyy",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out taskOpenDate);

                    if (!validTaskOpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskDueDate;
                    var      validTaskDueDate = DateTime.TryParseExact(
                        taskDto.DueDate,
                        "dd/MM/yyyy",
                        CultureInfo.InvariantCulture,
                        DateTimeStyles.None,
                        out taskDueDate);

                    if (!validTaskDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (taskOpenDate < projectOpenDate || taskDueDate > projectDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var task = new Task
                    {
                        Name          = taskDto.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = (ExecutionType)taskDto.ExecutionType,
                        LabelType     = (LabelType)taskDto.LabelType
                    };

                    project.Tasks.Add(task);
                }

                projects.Add(project);
                sb
                .AppendLine(string.Format(SuccessfullyImportedProject, project.Name, project.Tasks.Count()));
            }
            context.Projects.AddRange(projects);
            context.SaveChanges();
            return(sb.ToString().TrimEnd());
        }
コード例 #13
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            StringBuilder sb = new StringBuilder();

            const string root        = "Projects";
            var          projectsDto = XmlConverter.Deserializer <ProjectInputModel>(xmlString, root);

            List <Project> projects = new List <Project>();

            foreach (var project in projectsDto)
            {
                if (!IsValid(project))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime outDate;
                bool     isValidDate = DateTime
                                       .TryParseExact(project.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out outDate);

                DateTime?dueDate            = null;
                bool     isValidDateDueDate = false;

                if (!string.IsNullOrEmpty(project.DueDate))
                {
                    DateTime dueDateValue;
                    isValidDateDueDate = DateTime.TryParseExact(project.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dueDateValue);

                    if (!isValidDateDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    dueDate = dueDateValue;
                }

                if (!isValidDate)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                var projectt = new Project
                {
                    Name     = project.Name,
                    OpenDate = outDate,
                    DueDate  = dueDate,
                };

                foreach (var task in project.Tasks)
                {
                    if (!IsValid(task))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskOutDate;
                    bool     isValidTaksDate = DateTime
                                               .TryParseExact(task.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out taskOutDate);

                    DateTime taskDueDate;
                    bool     isValidTaskDueDate = DateTime
                                                  .TryParseExact(task.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out taskDueDate);

                    if (!isValidTaksDate || !isValidTaskDueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (taskOutDate < projectt.OpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (dueDate != null && taskDueDate > projectt.DueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var taskk = new Task
                    {
                        Name          = task.Name,
                        OpenDate      = taskOutDate,
                        DueDate       = taskDueDate,
                        ExecutionType = (ExecutionType)task.ExecutionType,
                        LabelType     = (LabelType)task.LabelType,
                    };

                    projectt.Tasks.Add(taskk);
                }

                projects.Add(projectt);
                sb.AppendLine(string.Format(SuccessfullyImportedProject, projectt.Name, projectt.Tasks.Count));
            }

            context.Projects.AddRange(projects);

            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
コード例 #14
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var sb = new StringBuilder();

            var projectsDto = XmlConverter.Deserializer <ProjectImportModel>(xmlString, "Projects");

            var projects = new List <Project>();

            foreach (var projectDto in projectsDto)
            {
                if (!IsValid(projectDto))
                {
                    sb.AppendLine(ErrorMessage);

                    continue;
                }


                var isProjectOpenDateValid = DateTime.TryParseExact(projectDto.OpenDate, "dd/MM/yyyy",
                                                                    CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime projectOpenDate);

                if (!isProjectOpenDateValid)
                {
                    sb.AppendLine(ErrorMessage);

                    continue;
                }

                var isProjectDueDateValid = DateTime.TryParseExact(projectDto.DueDate, "dd/MM/yyyy",
                                                                   CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime projectDueDate);

                var project = new Project
                {
                    Name     = projectDto.Name,
                    OpenDate = projectOpenDate,
                    DueDate  = isProjectDueDateValid ? (DateTime?)projectDueDate : null
                };

                foreach (var task in projectDto.Tasks)
                {
                    var isTaskOpenDateValid = DateTime.TryParseExact(task.OpenDate, "dd/MM/yyyy",
                                                                     CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime taskOpenDate);

                    var isTaskDueDateValid = DateTime.TryParseExact(task.DueDate, "dd/MM/yyyy",
                                                                    CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime taskDueDate);

                    if (!IsValid(task) || !isTaskOpenDateValid || !isTaskDueDateValid)
                    {
                        sb.AppendLine(ErrorMessage);

                        continue;
                    }

                    if (isProjectOpenDateValid && taskOpenDate < projectOpenDate || isProjectDueDateValid && taskDueDate > projectDueDate)
                    {
                        sb.AppendLine(ErrorMessage);

                        continue;
                    }

                    else
                    {
                        project.Tasks.Add(new Task
                        {
                            Name          = task.Name,
                            OpenDate      = taskOpenDate,
                            DueDate       = taskDueDate,
                            ExecutionType = (ExecutionType)task.ExecutionType,
                            LabelType     = (LabelType)task.LabelType
                        });
                    }
                }

                projects.Add(project);

                sb.AppendLine(string.Format(SuccessfullyImportedProject, project.Name, project.Tasks.Count));
            }

            context.Projects.AddRange(projects);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }
コード例 #15
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var sb = new StringBuilder();
            var projectsFromXml = XmlConverter
                                  .Deserializer <ProjectInputXml>(xmlString, "Projects");
            var projects = new List <Project>();

            foreach (var projectDto in projectsFromXml)
            {
                if (IsValid(projectDto) == false)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }
                var validDueDate = DateTime.TryParseExact(projectDto.DueDate, "dd/MM/yyyy",
                                                          CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dueDate);
                var openProjectDate = DateTime.ParseExact(projectDto.OpenDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
                var project         = new Project
                {
                    Name     = projectDto.Name,
                    OpenDate = openProjectDate,
                    DueDate  = validDueDate ? (DateTime?)dueDate : null
                };
                foreach (var taskDto in projectDto.Tasks)
                {
                    if (IsValid(taskDto) == false)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }
                    var openTaskDate = DateTime.ParseExact(taskDto.OpenDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    var dueTaskDate  = DateTime.ParseExact(taskDto.DueDate.ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture);
                    if (openTaskDate < openProjectDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }
                    if (validDueDate && dueTaskDate > dueDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }
                    var task = new Task
                    {
                        Name          = taskDto.Name,
                        OpenDate      = openTaskDate,
                        DueDate       = dueTaskDate,
                        ExecutionType = Enum.Parse <ExecutionType>(taskDto.ExecutionType),
                        LabelType     = Enum.Parse <LabelType>(taskDto.LabelType)
                    };
                    project.Tasks.Add(task);
                }
                sb.AppendLine($"Successfully imported project - {project.Name} with {project.Tasks.Count} tasks.");
                projects.Add(project);
            }
            context.AddRange(projects);
            context.SaveChanges();

            return(sb.ToString().TrimEnd());
            // throw new NotImplementedException();
        }
コード例 #16
0
        public static string ImportProjects(TeisterMaskContext context, string xmlString)
        {
            var sb = new StringBuilder();

            var projects = new List <Project>();

            var projectDtos = XmlConverter
                              .Deserializer <ProjectInputModel>(xmlString, "Projects");

            foreach (var projectInfo in projectDtos)
            {
                if (!IsValid(projectInfo))
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime openDate;

                var isOpenDateValid = DateTime.TryParseExact(projectInfo.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out openDate);

                if (!isOpenDateValid)
                {
                    sb.AppendLine(ErrorMessage);
                    continue;
                }

                DateTime?dueDate = null;

                if (!string.IsNullOrEmpty(projectInfo.DueDate))
                {
                    DateTime dueDateValue;

                    var isDueDateValid = DateTime.TryParseExact(projectInfo.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dueDateValue);

                    if (!isDueDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    dueDate = dueDateValue;
                }

                var project = new Project
                {
                    Name     = projectInfo.Name,
                    OpenDate = openDate,
                    DueDate  = dueDate
                };


                foreach (var taskInfo in projectInfo.Tasks)
                {
                    if (!IsValid(taskInfo))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskOpenDate;

                    var isTaskOpenDateValid = DateTime.TryParseExact(taskInfo.OpenDate, "dd/MM/yyyy", CultureInfo.InvariantCulture,
                                                                     DateTimeStyles.None, out taskOpenDate);

                    if (taskOpenDate < project.OpenDate)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    DateTime taskDueDate;

                    var isTaskDueDateValid = DateTime.TryParseExact(taskInfo.DueDate, "dd/MM/yyyy", CultureInfo.InvariantCulture,
                                                                    DateTimeStyles.None, out taskDueDate);

                    if (!isTaskDueDateValid)
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    if (dueDate.HasValue && (taskDueDate > project.DueDate))
                    {
                        sb.AppendLine(ErrorMessage);
                        continue;
                    }

                    var task = new Task
                    {
                        Name          = taskInfo.Name,
                        OpenDate      = taskOpenDate,
                        DueDate       = taskDueDate,
                        ExecutionType = (ExecutionType)taskInfo.ExecutionType,
                        LabelType     = (LabelType)taskInfo.LabelType
                    };

                    project.Tasks.Add(task);
                }

                projects.Add(project);

                sb.AppendLine(string.Format(SuccessfullyImportedProject, project.Name, project.Tasks.Count));
            }

            context.Projects.AddRange(projects);

            context.SaveChanges();

            return(sb.ToString().TrimEnd());
        }