private void ButtonSelectDataBase_Click(object sender, EventArgs e) { if (openFileDialogForXml.ShowDialog() != DialogResult.OK) { return; } labelProjectNumber.Text = ""; labelMegingInfo.Text = ""; try { var databaseFilePath = openFileDialogForXml.FileName; textBoxDatabaseFilePath.Text = databaseFilePath; var mergingService = new MergingService(databaseFilePath); var projects = ProjectService.SelectAll(); var theSameProjectsCount = mergingService.GetTheSameProjectsCount(projects); var newProjectsCount = mergingService.GetNewProjectsCount(projects); labelMegingInfo.Text = $@"Found {theSameProjectsCount} project(s) with the same name And {newProjectsCount} new project(s)"; if (theSameProjectsCount <= 0 && newProjectsCount <= 0) { labelMegingInfo.Text += $"{Environment.NewLine}There are nothing to merge"; } buttonMerge.Visible = theSameProjectsCount > 0 || newProjectsCount > 0; } catch (Exception exception) { ShowErrorMessage($"Selected Database is invalid {Environment.NewLine} {exception.Message}"); } }
private void ButtonMerge_Click(object sender, EventArgs e) { if (MessageBox.Show(this, @"Are you sure to want merge?", @"Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) { return; } try { var databaseFilePath = textBoxDatabaseFilePath.Text.Trim(); var mergingService = new MergingService(databaseFilePath); var projectsOfCurrentDataBase = ProjectService.SelectAll(); var theSameProjects = mergingService.GetTheSameProjects(projectsOfCurrentDataBase); var timeModelsToSave = new List <TimeModel>(); Parallel.ForEach(theSameProjects, theSameProject => { var projectOfCurrentDatabase = projectsOfCurrentDataBase.Find(q => q.Title.Equals(theSameProject.Title, StringComparison.InvariantCultureIgnoreCase)); if (projectOfCurrentDatabase == null) { return; } foreach (var timeModel in theSameProject.Times) { timeModel.ProjectId = projectOfCurrentDatabase.Id; timeModelsToSave.Add(timeModel); } }); TimeService.Save(timeModelsToSave); timeModelsToSave = new List <TimeModel>(); if (checkBoxAddNewProjects.Checked) { var newProjects = mergingService.GetNewProjects(projectsOfCurrentDataBase); Parallel.ForEach(newProjects, newProject => { var project = ProjectService.Insert(newProject); foreach (var timeModel in newProject.Times) { timeModel.ProjectId = project.Id; timeModelsToSave.Add(timeModel); } }); } TimeService.Save(timeModelsToSave); ShowSuccessMessage("The databases merged successfully"); } catch (Exception exception) { ShowErrorMessage(exception.Message); } }