From 0d22a7e51f5591e2785352dc49b7ba02b5c7d5ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 12 Jun 2023 13:03:41 -0400 Subject: [PATCH 001/177] #265, button was working, but query was a bit wonky. Updated it like it should act. --- GSCFieldApp/ViewModels/DocumentViewModel.cs | 35 +++++++++++---------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index 136c7f42..9bb072b6 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -333,7 +333,7 @@ public async void ShowWarningExistingFileNumberAsync() /// For validation purposes. /// public void GetAllFileNumbers() - { + { List docTableLRaw = accessData.ReadTable(documentModel.GetType(), null); IEnumerable docTable = docTableLRaw.Cast(); //Cast to proper list type IEnumerable docs = from d in docTable select d.FileNumber.ToString(); @@ -387,9 +387,9 @@ public bool SaveDialogInfoAsync() documentModel.DocumentID = _documentID; documentModel.DocumentName = _documentName; documentModel.Description = _description; - + documentModel.FileName = _fileName; - + //Variable parsing if (_direction != String.Empty) @@ -524,10 +524,11 @@ public bool SaveDialogInfoAsync() public List GetLastDocument() { string lastDocumentQueryFrom = "SELECT * FROM " + Dictionaries.DatabaseLiterals.TableDocument + " "; - string lastDocumentQueryWhere = "WHERE " + DatabaseLiterals.TableDocument + "." + DatabaseLiterals.FieldDocumentType + " <> '' "; + string lastDocumentQueryWhere = "WHERE " + DatabaseLiterals.TableDocument + "." + DatabaseLiterals.FieldDocumentDescription + " <> '' "; + string lastDocumentQueryWhere2 = "AND " + DatabaseLiterals.TableDocument + "." + DatabaseLiterals.FieldDocumentDescription + " is not null "; string lastDocumentQueryOrderBy = "ORDER BY " + Dictionaries.DatabaseLiterals.TableDocument + "." + Dictionaries.DatabaseLiterals.FieldDocumentName + " DESC LIMIT 1"; - string lastDocumentQuery = lastDocumentQueryFrom + lastDocumentQueryWhere + lastDocumentQueryOrderBy; + string lastDocumentQuery = lastDocumentQueryFrom + lastDocumentQueryWhere + lastDocumentQueryWhere2 + lastDocumentQueryOrderBy; return dataAcess.ReadTable(documentModel.GetType(), lastDocumentQuery); } @@ -678,7 +679,7 @@ public void DeleteCascadeOnQuickPhoto(FieldNotes inParentModel) public async void DeleteCapturePhoto() { // Make sure not to delete a real picture, but the current snapshot only - if (_documentPhotoFile!=null && !_documentPhotoPath.Contains(_documentPhotoFile.Path)) + if (_documentPhotoFile != null && !_documentPhotoPath.Contains(_documentPhotoFile.Path)) { await _documentPhotoFile.DeleteAsync(); } @@ -703,7 +704,7 @@ private void FillCategory() RaisePropertyChanged("Category"); RaisePropertyChanged("SelectedCategory"); - + } /// @@ -805,7 +806,7 @@ private void FillRelatedIDs() if (_selectedRelatedTable == DatabaseLiterals.TableEarthMat) { - string filterEarthmats = "Select * from " + DatabaseLiterals.TableEarthMat + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID ; + string filterEarthmats = "Select * from " + DatabaseLiterals.TableEarthMat + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID; List relatedEarths = dataAcess.ReadTable(eartModel.GetType(), filterEarthmats); IEnumerable earths = relatedEarths.Cast(); foreach (EarthMaterial ea in earths) @@ -839,8 +840,8 @@ private void FillRelatedIDs() if (_selectedRelatedTable == DatabaseLiterals.TableSample) { - string filterSamplesSelectJoin = "Select * from " + DatabaseLiterals.TableSample + " join " + DatabaseLiterals.TableEarthMat; - string filterSamplesWhere = " on " + DatabaseLiterals.TableSample + "." + DatabaseLiterals.FieldSampleEarthmatID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID; + string filterSamplesSelectJoin = "Select * from " + DatabaseLiterals.TableSample + " join " + DatabaseLiterals.TableEarthMat; + string filterSamplesWhere = " on " + DatabaseLiterals.TableSample + "." + DatabaseLiterals.FieldSampleEarthmatID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID; List relatedSamples = dataAcess.ReadTable(smModel.GetType(), filterSamplesSelectJoin + filterSamplesWhere); IEnumerable sms = relatedSamples.Cast(); foreach (Sample sm in sms) @@ -858,7 +859,7 @@ private void FillRelatedIDs() if (_selectedRelatedTable == DatabaseLiterals.TablePFlow) { string filterPflowSelectJoin = "Select * from " + DatabaseLiterals.TablePFlow + " join " + DatabaseLiterals.TableEarthMat; - string filterPflowWhere = " on " + DatabaseLiterals.TablePFlow + "." + DatabaseLiterals.FieldPFlowParentID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID ; + string filterPflowWhere = " on " + DatabaseLiterals.TablePFlow + "." + DatabaseLiterals.FieldPFlowParentID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID; List relatedPflow = dataAcess.ReadTable(pflowModel.GetType(), filterPflowSelectJoin + filterPflowWhere); IEnumerable pfs = relatedPflow.Cast(); foreach (Paleoflow pf in pfs) @@ -875,7 +876,7 @@ private void FillRelatedIDs() if (_selectedRelatedTable == DatabaseLiterals.TableFossil) { string filterFossilSelectJoin = "Select * from " + DatabaseLiterals.TableFossil + " join " + DatabaseLiterals.TableEarthMat; - string filterFossilWhere = " on " + DatabaseLiterals.TableFossil + "." + DatabaseLiterals.FieldFossilParentID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID ; + string filterFossilWhere = " on " + DatabaseLiterals.TableFossil + "." + DatabaseLiterals.FieldFossilParentID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID; List relatedFossil = dataAcess.ReadTable(fossilModel.GetType(), filterFossilSelectJoin + filterFossilWhere); IEnumerable fss = relatedFossil.Cast(); foreach (Fossil fs in fss) @@ -892,7 +893,7 @@ private void FillRelatedIDs() if (_selectedRelatedTable == DatabaseLiterals.TableStructure) { string filterStructureSelectJoin = "Select * from " + DatabaseLiterals.TableStructure + " join " + DatabaseLiterals.TableEarthMat; - string filterStructureWhere = " on " + DatabaseLiterals.TableStructure + "." + DatabaseLiterals.FieldStructureParentID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID ; + string filterStructureWhere = " on " + DatabaseLiterals.TableStructure + "." + DatabaseLiterals.FieldStructureParentID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID; List relatedFossil = dataAcess.ReadTable(structureModel.GetType(), filterStructureSelectJoin + filterStructureWhere); IEnumerable sts = relatedFossil.Cast(); foreach (Structure st in sts) @@ -910,7 +911,7 @@ private void FillRelatedIDs() if (_selectedRelatedTable == DatabaseLiterals.TableMineral) { string filterMineralSelectJoin = "Select * from " + DatabaseLiterals.TableMineral + " join " + DatabaseLiterals.TableEarthMat; - string filterMineralWhere = " on " + DatabaseLiterals.TableMineral + "." + DatabaseLiterals.FieldMineralEMID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID ; + string filterMineralWhere = " on " + DatabaseLiterals.TableMineral + "." + DatabaseLiterals.FieldMineralEMID + " = " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatID + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = " + processedStationID; List relatedMineral = dataAcess.ReadTable(mineralModel.GetType(), filterMineralSelectJoin + filterMineralWhere); IEnumerable minerals = relatedMineral.Cast(); foreach (Mineral ms in minerals) @@ -1113,7 +1114,7 @@ public void DocumentTypeCombobox_SelectionChanged(object sender, SelectionChange Themes.ComboBoxItem senderSelectedItem = senderBox.SelectedItem as Themes.ComboBoxItem; _fileNumber = GetLastFileNumberPlusOne(senderSelectedItem.itemValue); - + SetFileNumberAsString(); RaisePropertyChanged("FileNumber"); } @@ -1171,7 +1172,7 @@ public string GetLastFileNumberPlusOne(string documentTypeName) { queryWhere = "WHERE " + DatabaseLiterals.TableDocument + "." + DatabaseLiterals.FieldDocumentType + " <> '' "; } - + string queryWhere2 = "AND " + DatabaseLiterals.TableDocument + "." + DatabaseLiterals.FieldDocumentFileNo + " <> '' "; string queryOrder = "ORDER BY " + DatabaseLiterals.TableDocument + "." + DatabaseLiterals.FieldDocumentFileNo + " DESC LIMIT 1"; string lastFileNoquery = querySelect + queryFrom + queryWhere + queryWhere2 + queryOrder; @@ -1194,7 +1195,7 @@ public string GetLastFileNumberPlusOne(string documentTypeName) { //Do nothing, it might be empty } - + } } From 703131c0205e9d442acef256615bae11933f5a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 12 Jun 2023 15:07:28 -0400 Subject: [PATCH 002/177] #266 station edit now keeps selection. --- GSCFieldApp/ViewModels/FieldNotesViewModel.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs index dead4132..68deb576 100644 --- a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs @@ -707,6 +707,14 @@ public void FillSummaryReportDateItems() /// public void FillStationFromList() { + //Keep selection + string userTempSelection = string.Empty; + if (_reportStationIndex >= 0 && _reportStationIndex < _reportDetailedStation.Count()) + { + userTempSelection = _reportDetailedStation[_reportStationIndex].GenericAliasName; + } + + #region Conditional to user having selected a station EmptyAll(); if (_reportDateIndex != -1) @@ -764,7 +772,7 @@ public void FillStationFromList() ValidateCheck(currentStation.isValid, currentStation.StationID, currentDetailReport.MainID); //Keep index if station id is the same as the one selected from map page by user - if (currentStation.StationAlias == userSelectedStationID) + if (currentStation.StationAlias == userTempSelection) { userSelectedStationIndex = stationTableRows.IndexOf(sts); } From 6d3cd3d8f524127224226c49f5338019ca058a01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Thu, 22 Jun 2023 15:56:49 -0400 Subject: [PATCH 003/177] #276 fixed thousands station alias going back to no.1 --- GSCFieldApp/Package.appxmanifest | 2 +- GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/GSCFieldApp/Package.appxmanifest b/GSCFieldApp/Package.appxmanifest index 4722650e..462caca7 100644 --- a/GSCFieldApp/Package.appxmanifest +++ b/GSCFieldApp/Package.appxmanifest @@ -1,6 +1,6 @@  - + Geological Survey Canada Field Application diff --git a/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs b/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs index 8f02c160..689e61bc 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs @@ -142,7 +142,7 @@ public string CalculateStationAlias(DateTime stationDate) //Get actual last alias and extract it's number string lastAlias = stations.ToList()[0].ToString(); List lastCharacters = lastAlias.ToList(); - List lastNumbers = lastCharacters.GetRange(lastCharacters.Count() - 3, 3); + List lastNumbers = lastCharacters.GetRange(lastCharacters.Count() - 4, 4); string lastNumber = string.Empty; foreach (char c in lastNumbers) { From c3c06f3728b9f79f69efd23a07f6621439a7e509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Tue, 4 Jul 2023 15:07:38 -0400 Subject: [PATCH 004/177] #278 fixed can't edit filename, except on embeded device photos. --- GSCFieldApp/ViewModels/DocumentViewModel.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index 9bb072b6..ebf1e8c4 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -1133,7 +1133,7 @@ public void DocumentFromNumberTextbox_TextChanged(object sender, TextBoxTextChan //Update file number TextBox senderBox = sender as TextBox; _fileNumber = senderBox.Text; - if (_fileNumber != string.Empty && !doDocumentUpdate) + if (_fileNumber != string.Empty) { CalculateFileName(); } From 3f94a9a9aacbdf00c58b374875e4645fc77a2944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 10 Jul 2023 09:36:18 -0400 Subject: [PATCH 005/177] #278 missing some files with last commit. --- GSCFieldApp/ViewModels/DocumentViewModel.cs | 278 ++++++++++---------- GSCFieldApp/Views/DocumentDialog.xaml | 3 +- GSCFieldApp/Views/DocumentDialog.xaml.cs | 7 +- 3 files changed, 144 insertions(+), 144 deletions(-) diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index ebf1e8c4..3ea8def4 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -13,6 +13,7 @@ using System.Collections.ObjectModel; using Windows.Media.Capture; using System.Reflection; +using Windows.UI.Core; namespace GSCFieldApp.ViewModels { @@ -143,7 +144,7 @@ public string FileNumber if (_fileNumbers.Contains(indexFrom.ToString())) { - _fileNumberExists = true; + //_fileNumberExists = true; if (existingFileNumber != null) { existingFileNumber(this, null); @@ -157,7 +158,7 @@ public string FileNumber } else { - _fileNumberExists = false; + //_fileNumberExists = false; } //Make sure it's lower then File Number To value @@ -307,7 +308,7 @@ public async void ShowWarningExistingFileNumberAsync() { var loadLocalization = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView(); - try + await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => { ContentDialog warningBookDialog = new ContentDialog() { @@ -315,16 +316,10 @@ public async void ShowWarningExistingFileNumberAsync() Content = loadLocalization.GetString("WarningInvalidDocNumber"), PrimaryButtonText = loadLocalization.GetString("GenericDialog_ButtonOK") }; - warningBookDialog.Style = (Style)Application.Current.Resources["WarningDialog"]; - ContentDialogResult cdr = await warningBookDialog.ShowAsync(); - System.Runtime.InteropServices.Marshal.ReleaseComObject(warningBookDialog); - } - catch (Exception) - { - - } + await Services.ContentDialogMaker.CreateContentDialogAsync(warningBookDialog, true); + }).AsTask(); } @@ -379,116 +374,106 @@ private void SetFieldVisibility() public bool SaveDialogInfoAsync() { //Validate if the file number exists or not. If yes don't save anything. - if (!_fileNumberExists) - { - Themes.ConcatenatedCombobox concat = new Themes.ConcatenatedCombobox(); - //Get current UI information and add to model class - documentModel.DocumentID = _documentID; - documentModel.DocumentName = _documentName; - documentModel.Description = _description; + Themes.ConcatenatedCombobox concat = new Themes.ConcatenatedCombobox(); - documentModel.FileName = _fileName; + //Get current UI information and add to model class + documentModel.DocumentID = _documentID; + documentModel.DocumentName = _documentName; + documentModel.Description = _description; + documentModel.FileName = _fileName; - //Variable parsing - if (_direction != String.Empty) - { - documentModel.Direction = int.Parse(_direction); - } - if (_fileNumber != String.Empty) - { - documentModel.FileNumber = int.Parse(_fileNumber); - } - - #region COMBOBOXES - if (SelectedCategory != null) - { - documentModel.Category = SelectedCategory; - } - if (SelectedCategory != null) - { - documentModel.Category = concat.PipeValues(_categoryValues); //process list of values so they are concatenated. - } - - if (SelectedDocType != null) - { - documentModel.DocumentType = SelectedDocType; - } - - if (SelectedRelatedTable != null && SelectedRelatedID != null && int.Parse(SelectedRelatedID) != 0) - { - documentModel.RelatedTable = SelectedRelatedTable; - documentModel.RelatedID = int.Parse(SelectedRelatedID); - } - else - { - documentModel.RelatedTable = DatabaseLiterals.TableStation; - documentModel.RelatedID = selectedStationSummaryDocument.station.StationID; - } - #endregion + //Variable parsing + if (_direction != String.Empty) + { + documentModel.Direction = int.Parse(_direction); + } + if (_fileNumber != String.Empty) + { + documentModel.FileNumber = int.Parse(_fileNumber); + } - #region Photos + #region COMBOBOXES + if (SelectedCategory != null) + { + documentModel.Category = SelectedCategory; + } - if (_documentPhotoFile != null) - { - documentModel.FileName = _documentPhotoFile.Name; - documentModel.DocumentType = DatabaseLiterals.documentTableFileSuffix; //Default value from embeded cameras. - //documentModel.FileNumber = string.Empty; //File number can be empty since embedded photo don't need renaming - } + if (SelectedCategory != null) + { + documentModel.Category = concat.PipeValues(_categoryValues); //process list of values so they are concatenated. + } - #endregion + if (SelectedDocType != null) + { + documentModel.DocumentType = SelectedDocType; + } - #region FILE NUMBER - if (_fileToNumber != string.Empty) - { - bool fromResult = int.TryParse(_fileNumber, out int fromNumber); + if (SelectedRelatedTable != null && SelectedRelatedID != null && int.Parse(SelectedRelatedID) != 0) + { + documentModel.RelatedTable = SelectedRelatedTable; + documentModel.RelatedID = int.Parse(SelectedRelatedID); + } + else + { + documentModel.RelatedTable = DatabaseLiterals.TableStation; + documentModel.RelatedID = selectedStationSummaryDocument.station.StationID; + } + #endregion - bool toResult = int.TryParse(_fileToNumber, out int toNumber); + #region Photos - if (fromResult && toResult) - { - List docList = new List(); - int totalIteration = fromNumber + (toNumber - fromNumber); - int iteratedFileNumber = fromNumber; - int currentIteration = 1; - while (iteratedFileNumber <= totalIteration) - { - _fileNumber = iteratedFileNumber.ToString(); + if (_documentPhotoFile != null) + { + documentModel.FileName = _documentPhotoFile.Name; + documentModel.DocumentType = DatabaseLiterals.documentTableFileSuffix; //Default value from embeded cameras. + //documentModel.FileNumber = string.Empty; //File number can be empty since embedded photo don't need renaming + } - Document newDoc = new Document - { - //DocumentID = _documentID = idCalculatorDoc.CalculateDocumentID(), - FileNumber = iteratedFileNumber, - FileName = _fileName = CalculateFileName(), - DocumentName = _documentName = idCalculatorDoc.CalculateDocumentAlias(selectedStationSummaryDocument.GenericID, selectedStationSummaryDocument.GenericAliasName, currentIteration), - - Category = documentModel.Category, - Description = documentModel.Description, - Direction = documentModel.Direction, - DocumentType = documentModel.DocumentType, - RelatedID = documentModel.RelatedID, - RelatedTable = documentModel.RelatedTable - }; + #endregion - docList.Add(newDoc); - iteratedFileNumber++; + #region FILE NUMBER + if (_fileToNumber != string.Empty) + { + bool fromResult = int.TryParse(_fileNumber, out int fromNumber); - currentIteration++; - } + bool toResult = int.TryParse(_fileToNumber, out int toNumber); - //Save model class - dataAcess.BatchSaveSQLTables(docList); - } - else + if (fromResult && toResult) + { + List docList = new List(); + int totalIteration = fromNumber + (toNumber - fromNumber); + int iteratedFileNumber = fromNumber; + int currentIteration = 1; + while (iteratedFileNumber <= totalIteration) { - //Save model class - object docObject = (object)documentModel; - dataAcess.SaveFromSQLTableObject(ref docObject, doDocumentUpdate); - documentModel = (Document)docObject; - //dataAcess.SaveFromSQLTableObject(documentModel, doDocumentUpdate); + _fileNumber = iteratedFileNumber.ToString(); + + Document newDoc = new Document + { + //DocumentID = _documentID = idCalculatorDoc.CalculateDocumentID(), + FileNumber = iteratedFileNumber, + FileName = _fileName = CalculateFileName(), + DocumentName = _documentName = idCalculatorDoc.CalculateDocumentAlias(selectedStationSummaryDocument.GenericID, selectedStationSummaryDocument.GenericAliasName, currentIteration), + + Category = documentModel.Category, + Description = documentModel.Description, + Direction = documentModel.Direction, + DocumentType = documentModel.DocumentType, + RelatedID = documentModel.RelatedID, + RelatedTable = documentModel.RelatedTable + }; + + docList.Add(newDoc); + iteratedFileNumber++; + + currentIteration++; } + + //Save model class + dataAcess.BatchSaveSQLTables(docList); } else { @@ -498,22 +483,27 @@ public bool SaveDialogInfoAsync() documentModel = (Document)docObject; //dataAcess.SaveFromSQLTableObject(documentModel, doDocumentUpdate); } - - #endregion - - //Launch an event call for everyone that an earthmat has been edited. - if (newDocumentEdit != null) - { - newDocumentEdit(this); - } - - return true; } else { - return false; + //Save model class + object docObject = (object)documentModel; + dataAcess.SaveFromSQLTableObject(ref docObject, doDocumentUpdate); + documentModel = (Document)docObject; + //dataAcess.SaveFromSQLTableObject(documentModel, doDocumentUpdate); + } + + #endregion + + //Launch an event call for everyone that an earthmat has been edited. + if (newDocumentEdit != null) + { + newDocumentEdit(this); } + return true; + + } /// @@ -593,42 +583,48 @@ private string GetOlympusPrefix() /// private string CalculateFileName() { - _fileName = string.Empty; - string _noOlympusFileNumber = string.Empty; - RaisePropertyChanged("FileName"); + if (existingDataDetailDocument!= null && existingDataDetailDocument.document.DocumentType != DatabaseLiterals.documentTableFileSuffix) + { + _fileName = string.Empty; + string _noOlympusFileNumber = string.Empty; + RaisePropertyChanged("FileName"); - //Get suffix and prefix - string[] splitedDoc = SelectedDocType.Split('.'); + //Get suffix and prefix + string[] splitedDoc = SelectedDocType.Split('.'); - #region PHOTO NUMBERING - //Calculate a proper file number for photos - if (SelectedDocType.ToLower().Contains("jpg")) - { - SetFileNumberAsString(); + #region PHOTO NUMBERING + //Calculate a proper file number for photos + if (SelectedDocType.ToLower().Contains("jpg")) + { + SetFileNumberAsString(); + + //Special procedure for Olympus camera + if (splitedDoc[0].ToLower().Contains("p")) + { + _noOlympusFileNumber = GetOlympusPrefix() + _fileNumber; + } + else + { + _noOlympusFileNumber = _fileNumber; + } + } + #endregion - //Special procedure for Olympus camera - if (splitedDoc[0].ToLower().Contains("p")) + //Calculate file name and update UI + if (splitedDoc.Count() == 1) { - _noOlympusFileNumber = GetOlympusPrefix() + _fileNumber; + _fileName = _noOlympusFileNumber + "." + splitedDoc[0]; } - else + else if (splitedDoc.Count() == 2) { - _noOlympusFileNumber = _fileNumber; + _fileName = splitedDoc[0] + _noOlympusFileNumber + "." + splitedDoc[1]; } - } - #endregion - //Calculate file name and update UI - if (splitedDoc.Count() == 1) - { - _fileName = _noOlympusFileNumber + "." + splitedDoc[0]; - } - else if (splitedDoc.Count() == 2) - { - _fileName = splitedDoc[0] + _noOlympusFileNumber + "." + splitedDoc[1]; + RaisePropertyChanged("FileName"); } - RaisePropertyChanged("FileName"); + + return _fileName; } diff --git a/GSCFieldApp/Views/DocumentDialog.xaml b/GSCFieldApp/Views/DocumentDialog.xaml index 59f4eb9a..cd95483c 100644 --- a/GSCFieldApp/Views/DocumentDialog.xaml +++ b/GSCFieldApp/Views/DocumentDialog.xaml @@ -136,9 +136,8 @@ diff --git a/GSCFieldApp/Views/DocumentDialog.xaml.cs b/GSCFieldApp/Views/DocumentDialog.xaml.cs index 90be0386..bcd44d21 100644 --- a/GSCFieldApp/Views/DocumentDialog.xaml.cs +++ b/GSCFieldApp/Views/DocumentDialog.xaml.cs @@ -63,6 +63,11 @@ private void DocumentSaveButton_GotFocus(object sender, RoutedEventArgs e) private void DocumentDialog_Loaded(object sender, RoutedEventArgs e) { DocViewModel.hasInitialized = true; + + if (parentViewModel.GenericTableName == Dictionaries.DatabaseLiterals.TableDocument && DocViewModel.doDocumentUpdate) + { + this.DocViewModel.AutoFillDialogAsync(parentViewModel); + } } /// @@ -74,7 +79,7 @@ private void DocumentDialog_Loading(FrameworkElement sender, object args) { if (parentViewModel.GenericTableName == Dictionaries.DatabaseLiterals.TableDocument && DocViewModel.doDocumentUpdate) { - this.DocViewModel.AutoFillDialogAsync(parentViewModel); + //this.DocViewModel.AutoFillDialogAsync(parentViewModel); this.pageHeader.Text = parentViewModel.GenericAliasName; } else if (!DocViewModel.doDocumentUpdate) From ae486e886eb94664ddad9f9af0fbf5c0855e2b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 10 Jul 2023 14:46:09 -0400 Subject: [PATCH 006/177] #284 waypoint doesn't pause graphic refresh now. --- GSCFieldApp/ViewModels/MapPageViewModel.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/GSCFieldApp/ViewModels/MapPageViewModel.cs b/GSCFieldApp/ViewModels/MapPageViewModel.cs index 18b604b8..9156ce6f 100644 --- a/GSCFieldApp/ViewModels/MapPageViewModel.cs +++ b/GSCFieldApp/ViewModels/MapPageViewModel.cs @@ -1719,6 +1719,8 @@ public void AddStationWaypoint(FieldLocation stationWaypointMapPoint) DataLocalSettings dLocalSettings = new DataLocalSettings(); dLocalSettings.SetSettingValue("forceNoteRefresh", true); + + pauseGraphicRefresh = false; } /// From 3fcdd407f94d15dc6e917eeb30510e05f65eb0d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Wed, 12 Jul 2023 11:07:16 -0400 Subject: [PATCH 007/177] brought back easter eggs for fun. --- GSCFieldApp/Themes/EasterEgg.cs | 4 +-- GSCFieldApp/ViewModels/StationViewModel.cs | 1 + GSCFieldApp/Views/StationDialog.xaml | 2 +- GSCFieldApp/Views/StationDialog.xaml.cs | 29 +++++++++++++++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/GSCFieldApp/Themes/EasterEgg.cs b/GSCFieldApp/Themes/EasterEgg.cs index 1ca0bf01..304ac440 100644 --- a/GSCFieldApp/Themes/EasterEgg.cs +++ b/GSCFieldApp/Themes/EasterEgg.cs @@ -21,10 +21,10 @@ public void ShowMosquito(RelativePanel inParentPanel, int r = 0) Random random = new Random(DateTime.Now.Millisecond * DateTime.Now.Year / (DateTime.Now.Second + 1)); if (r == 0) { - r = random.Next(0, 1000); + r = random.Next(0, 100); } - int mosquitoCount = random.Next(1, 15); + int mosquitoCount = random.Next(1, 3); if (r >= 40 && r <= 44) { diff --git a/GSCFieldApp/ViewModels/StationViewModel.cs b/GSCFieldApp/ViewModels/StationViewModel.cs index a66855d0..68770945 100644 --- a/GSCFieldApp/ViewModels/StationViewModel.cs +++ b/GSCFieldApp/ViewModels/StationViewModel.cs @@ -9,6 +9,7 @@ using Windows.UI.Xaml.Controls; using System.Collections.ObjectModel; using GSCFieldApp.Dictionaries; +using GSCFieldApp.Themes; using Windows.ApplicationModel.Contacts; namespace GSCFieldApp.ViewModels diff --git a/GSCFieldApp/Views/StationDialog.xaml b/GSCFieldApp/Views/StationDialog.xaml index a2b998a1..632182a9 100644 --- a/GSCFieldApp/Views/StationDialog.xaml +++ b/GSCFieldApp/Views/StationDialog.xaml @@ -147,7 +147,7 @@ Date: Thu, 20 Jul 2023 14:20:34 -0400 Subject: [PATCH 008/177] Fixed some problems with activity in settings not being there and crashing with older fieldbooks. --- GSCFieldApp/Package.appxmanifest | 2 +- .../DatabaseServices/DataLocalSettings.cs | 2 +- .../ViewModels/FieldBooksPageViewModel.cs | 34 ++++++++++--------- 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/GSCFieldApp/Package.appxmanifest b/GSCFieldApp/Package.appxmanifest index 462caca7..bfefad82 100644 --- a/GSCFieldApp/Package.appxmanifest +++ b/GSCFieldApp/Package.appxmanifest @@ -1,6 +1,6 @@  - + Geological Survey Canada Field Application diff --git a/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs b/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs index 7479ea89..2f935ced 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs @@ -102,7 +102,7 @@ public void WipeUserMapSettings() public object GetSettingValue(string keyName, string inContainerName="") { //Variable - object output = null; + object output = ""; string wantedContainer = containerName; if (inContainerName != string.Empty) diff --git a/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs b/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs index 8c604252..b35e8232 100644 --- a/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs @@ -235,26 +235,28 @@ public void SelectActiveProject() //Make sure the setting exists, with user info id if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoID) != null) { + //Get some unique values + string currentUser = string.Empty; + string currentProject = string.Empty; + string currentActivity = string.Empty; + + try + { + currentUser = localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoUCode).ToString(); + currentProject = localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoPName).ToString(); + currentActivity = localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoActivityName).ToString(); + + } + catch (Exception e) + { + //Probably missing a setting, no big deal it'll fallback on first book. + Debug.WriteLine(e.Message); + } + //Iterate through project to find match foreach (FieldBooks prjs in _projectCollection) { - //Get some unique values - string currentUser = string.Empty; - string currentProject = string.Empty; - string currentActivity = string.Empty; - - try - { - currentUser = localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoUCode).ToString(); - currentProject = localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoPName).ToString(); - currentActivity = localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoActivityName).ToString(); - } - catch (Exception e) - { - //Probably missing a setting, no big deal it'll fallback on first book. - Debug.WriteLine(e.Message); - } //Get match if (prjs.metadataForProject.UserCode == currentUser && From 6c5bb3d15c7f73d0e0e9b0defd8104686c559f69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 21 Jul 2023 08:50:45 -0400 Subject: [PATCH 009/177] #291 fixed failing older field books on upgrade. --- GSCFieldApp/Models/EarthMaterial.cs | 2 +- GSCFieldApp/Models/FieldLocation.cs | 2 +- GSCFieldApp/Models/Station.cs | 2 +- .../Services/DatabaseServices/DataAccess.cs | 15 +++++++++++++++ 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/GSCFieldApp/Models/EarthMaterial.cs b/GSCFieldApp/Models/EarthMaterial.cs index 8fd6fd88..dd3ed9e3 100644 --- a/GSCFieldApp/Models/EarthMaterial.cs +++ b/GSCFieldApp/Models/EarthMaterial.cs @@ -205,7 +205,7 @@ public Dictionary> getFieldList //Revert schema 1.6 changes. List earthmatFieldList15 = new List(); - earthmatFieldList15.AddRange(earthmatFieldListDefault); + earthmatFieldList15.AddRange(earthmatFieldList160); earthmatFieldList15.Remove(DatabaseLiterals.FieldEarthMatPercent); earthmatFieldList15.Remove(DatabaseLiterals.FieldEarthMatMagQualifier); earthmatFieldList15.Remove(DatabaseLiterals.FieldEarthMatMetaIntensity); diff --git a/GSCFieldApp/Models/FieldLocation.cs b/GSCFieldApp/Models/FieldLocation.cs index d2ec2a5a..5019db96 100644 --- a/GSCFieldApp/Models/FieldLocation.cs +++ b/GSCFieldApp/Models/FieldLocation.cs @@ -155,7 +155,7 @@ public Dictionary> getFieldList //Revert schema 1.6 changes. List locationFieldList15 = new List(); - locationFieldList15.AddRange(locationFieldListDefault); + locationFieldList15.AddRange(locationFieldList160); locationFieldList15.Remove(DatabaseLiterals.FieldLocationNTS); locationFieldList[DatabaseLiterals.DBVersion150] = locationFieldList15; diff --git a/GSCFieldApp/Models/Station.cs b/GSCFieldApp/Models/Station.cs index 5da10eb8..cd3136f3 100644 --- a/GSCFieldApp/Models/Station.cs +++ b/GSCFieldApp/Models/Station.cs @@ -121,7 +121,7 @@ public Dictionary> getFieldList //Revert schema 1.6 changes. List stationFieldList150 = new List(); - stationFieldList150.AddRange(stationFieldListDefault); + stationFieldList150.AddRange(statFieldList160); stationFieldList150.Remove(DatabaseLiterals.FieldStationRelatedTo); stationFieldList150.Remove(DatabaseLiterals.FieldStationObsSource); diff --git a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs index 1868d600..feb66a78 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs @@ -749,6 +749,11 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne queryList.Add(GetUpgradeQueryVersion1_42(attachDBName)); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEarthMat); + //Tables that are either not in are can't have any data in this version + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEnvironment); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraverseLine); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraversePoint); + newVersionNumber = DatabaseLiterals.DBVersion143; } if (inDBVersion == 1.43) @@ -757,6 +762,11 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableLocation); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableMetadata); + //Tables that are either not in are can't have any data in this version + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEnvironment); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraverseLine); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraversePoint); + newVersionNumber = DatabaseLiterals.DBVersion144; } if (inDBVersion < 1.5 && inDBVersion >= 1.44) @@ -770,6 +780,11 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableMetadata); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableDocument); + //Tables that are either not in are can't have any data in this version + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEnvironment); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraverseLine); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraversePoint); + newVersionNumber = DatabaseLiterals.DBVersion150; } From 40ab2edbadbdd57c704c653e1532f1588e68b011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 21 Jul 2023 09:20:09 -0400 Subject: [PATCH 010/177] #291 fixed setting being wiped out on field book upgrade and failing on all bool casting for field note headers. --- GSCFieldApp/ViewModels/FieldNotesViewModel.cs | 282 ++++++++++-------- GSCFieldApp/ViewModels/MapPageViewModel.cs | 241 ++++++++------- GSCFieldApp/Views/FieldNotesPage.xaml.cs | 14 +- 3 files changed, 309 insertions(+), 228 deletions(-) diff --git a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs index 68deb576..ace28d2d 100644 --- a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs @@ -489,22 +489,30 @@ public string HeaderDocument { get { - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode) != null) + try { - if ((bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode)) + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode) != null) { - return ApplicationLiterals.KeywordDocumentHeaderFalse; + if ((bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode)) + { + return ApplicationLiterals.KeywordDocumentHeaderFalse; + } + else + { + return ApplicationLiterals.KeywordDocumentHeaderTrue; + } } else { - return ApplicationLiterals.KeywordDocumentHeaderTrue; + return ApplicationLiterals.KeywordDocumentHeaderFalse; } } - else + catch (Exception) { return ApplicationLiterals.KeywordDocumentHeaderFalse; } + } set { @@ -683,22 +691,30 @@ public void FillSummaryReportDateItems() } //Set header text - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode) != null) + try { - if ((bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode)) + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode) != null) { - _headerDocumenText = ApplicationLiterals.KeywordDocumentHeaderTrue; + if ((bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode)) + { + _headerDocumenText = ApplicationLiterals.KeywordDocumentHeaderTrue; + } + else + { + _headerDocumenText = ApplicationLiterals.KeywordDocumentHeaderFalse; + } } else { _headerDocumenText = ApplicationLiterals.KeywordDocumentHeaderFalse; } } - else + catch (Exception) { _headerDocumenText = ApplicationLiterals.KeywordDocumentHeaderFalse; } + RaisePropertyChanged("HeaderDocument"); } @@ -2383,50 +2399,58 @@ public async void DeleteIcon_TappedAsync(object sender, Windows.UI.Xaml.Input.Ta public void SetHeaderExpansion() { - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandLocation)!=null) - { - _locationHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandLocation); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandEarthmat) != null) - { - _earthmatHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandEarthmat); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandSample) != null) - { - _sampleHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandSample); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandStation) != null) - { - _stationHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandStation); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandDocument) != null) - { - _documentHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandDocument); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandStructure) != null) - { - _structureHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandStructure); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandPflow) != null) - { - _pflowHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandPflow); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandFossil) != null) - { - _fossilHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandFossil); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineral) != null) - { - _mineralHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineral); - } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineralAlt) != null) + try { - _mineralAltHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineralAlt); + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandLocation) != null) + { + _locationHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandLocation); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandEarthmat) != null) + { + _earthmatHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandEarthmat); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandSample) != null) + { + _sampleHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandSample); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandStation) != null) + { + _stationHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandStation); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandDocument) != null) + { + _documentHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandDocument); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandStructure) != null) + { + _structureHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandStructure); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandPflow) != null) + { + _pflowHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandPflow); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandFossil) != null) + { + _fossilHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandFossil); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineral) != null) + { + _mineralHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineral); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineralAlt) != null) + { + _mineralAltHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandMineralAlt); + } + if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandEnv) != null) + { + _environmentHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandEnv); + } } - if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandEnv) != null) + catch (Exception) { - _environmentHeaderExpansion = (bool)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordExpandEnv); + } + } /// @@ -2568,90 +2592,98 @@ public void SetHeadersVisibility() /// public void SetHeaderVisibility(string tableName, Visibility inTableVisibility, string propertyName ) { - if (localSetting.GetSettingValue(DatabaseLiterals.TableSample) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableSample)) - { - _samplePanelVisibility = Visibility.Visible; - } - else + try { - _samplePanelVisibility = Visibility.Collapsed; - } + if (localSetting.GetSettingValue(DatabaseLiterals.TableSample) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableSample)) + { + _samplePanelVisibility = Visibility.Visible; + } + else + { + _samplePanelVisibility = Visibility.Collapsed; + } - if (localSetting.GetSettingValue(DatabaseLiterals.TableMineral) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableMineral)) - { - _mineralPanelVisibility = Visibility.Visible; - } - else - { - _mineralPanelVisibility = Visibility.Collapsed; - } + if (localSetting.GetSettingValue(DatabaseLiterals.TableMineral) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableMineral)) + { + _mineralPanelVisibility = Visibility.Visible; + } + else + { + _mineralPanelVisibility = Visibility.Collapsed; + } - if (localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration)) - { - _mineralAltPanelVisibility = Visibility.Visible; - } - else - { - _mineralAltPanelVisibility = Visibility.Collapsed; - } - if (localSetting.GetSettingValue(DatabaseLiterals.TableDocument) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableDocument)) - { - _documentPanelVisibility = Visibility.Visible; - } - else - { - _documentPanelVisibility = Visibility.Collapsed; - } - if (localSetting.GetSettingValue(DatabaseLiterals.TableStructure) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableStructure)) - { - _structurePanelVisibility = Visibility.Visible; - } - else - { - _structurePanelVisibility = Visibility.Collapsed; - } - if (localSetting.GetSettingValue(DatabaseLiterals.TablePFlow) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TablePFlow)) - { - _pflowPanelVisibility = Visibility.Visible; - } - else - { - _pflowPanelVisibility = Visibility.Collapsed; - } - if (localSetting.GetSettingValue(DatabaseLiterals.TableFossil) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableFossil)) - { - _fossilPanelVisibility = Visibility.Visible; - } - else - { - _fossilPanelVisibility = Visibility.Collapsed; - } + if (localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration)) + { + _mineralAltPanelVisibility = Visibility.Visible; + } + else + { + _mineralAltPanelVisibility = Visibility.Collapsed; + } + if (localSetting.GetSettingValue(DatabaseLiterals.TableDocument) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableDocument)) + { + _documentPanelVisibility = Visibility.Visible; + } + else + { + _documentPanelVisibility = Visibility.Collapsed; + } + if (localSetting.GetSettingValue(DatabaseLiterals.TableStructure) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableStructure)) + { + _structurePanelVisibility = Visibility.Visible; + } + else + { + _structurePanelVisibility = Visibility.Collapsed; + } + if (localSetting.GetSettingValue(DatabaseLiterals.TablePFlow) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TablePFlow)) + { + _pflowPanelVisibility = Visibility.Visible; + } + else + { + _pflowPanelVisibility = Visibility.Collapsed; + } + if (localSetting.GetSettingValue(DatabaseLiterals.TableFossil) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableFossil)) + { + _fossilPanelVisibility = Visibility.Visible; + } + else + { + _fossilPanelVisibility = Visibility.Collapsed; + } - if (localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration)) - { - _mineralAltPanelVisibility = Visibility.Visible; - } - else - { - _mineralAltPanelVisibility = Visibility.Collapsed; - } + if (localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableMineralAlteration)) + { + _mineralAltPanelVisibility = Visibility.Visible; + } + else + { + _mineralAltPanelVisibility = Visibility.Collapsed; + } - if (localSetting.GetSettingValue(DatabaseLiterals.TableEarthMat) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableEarthMat)) - { - _earthmatPanelVisibility = Visibility.Visible; - } - else - { - _earthmatPanelVisibility = Visibility.Collapsed; - } - if (localSetting.GetSettingValue(DatabaseLiterals.TableEnvironment) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableEnvironment)) - { - _environmentPanelVisibility = Visibility.Visible; + if (localSetting.GetSettingValue(DatabaseLiterals.TableEarthMat) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableEarthMat)) + { + _earthmatPanelVisibility = Visibility.Visible; + } + else + { + _earthmatPanelVisibility = Visibility.Collapsed; + } + if (localSetting.GetSettingValue(DatabaseLiterals.TableEnvironment) != null && (bool)localSetting.GetSettingValue(DatabaseLiterals.TableEnvironment)) + { + _environmentPanelVisibility = Visibility.Visible; + } + else + { + _environmentPanelVisibility = Visibility.Collapsed; + } } - else + catch (Exception) { - _environmentPanelVisibility = Visibility.Collapsed; + } + RaisePropertyChanged("SamplePanelVisibility"); RaisePropertyChanged("EarthmatPanelVisibility"); RaisePropertyChanged("MineralPanelVisibility"); diff --git a/GSCFieldApp/ViewModels/MapPageViewModel.cs b/GSCFieldApp/ViewModels/MapPageViewModel.cs index 9156ce6f..2f436566 100644 --- a/GSCFieldApp/ViewModels/MapPageViewModel.cs +++ b/GSCFieldApp/ViewModels/MapPageViewModel.cs @@ -1085,121 +1085,129 @@ public void LoadFromGivenDBTest(Dictionary graphicList, bool is #region STRUCTURES ///For structure symboles (planar and linear) make sure they are wanted by user but that it's within a bedrock field notebook also - if (localSettings.GetSettingValue(ApplicationLiterals.KeyworkStructureSymbols) != null && (bool)localSettings.GetSettingValue(ApplicationLiterals.KeyworkStructureSymbols) && _mapPageQuickMeasurementEnable) - { - //Get related structures, if any - List strucTableRows = new List(); - Structure structs = new Structure(); - string structSelectionQuery = "SELECT s.* FROM " + DatabaseLiterals.TableStructure + " s" + - " JOIN " + DatabaseLiterals.TableEarthMat + " e on e." + DatabaseLiterals.FieldStructureParentID + " = s." + DatabaseLiterals.FieldEarthMatID + - " JOIN " + DatabaseLiterals.TableStation + " st on st." + DatabaseLiterals.FieldStationID + " = e." + DatabaseLiterals.FieldEarthMatStatID + - " WHERE st." + DatabaseLiterals.FieldStationID + " = " + ptStationId + ";"; - strucTableRows = accessData.ReadTable(structs.GetType(), structSelectionQuery); - - //Variables - if (!structureGraphicExists && strucTableRows.Count() > 0) + try + { + if (localSettings.GetSettingValue(ApplicationLiterals.KeyworkStructureSymbols) != null && (bool)localSettings.GetSettingValue(ApplicationLiterals.KeyworkStructureSymbols) && _mapPageQuickMeasurementEnable) { - //Structure pairs tracking - //Key = record ID, Value = priority number for placement - Dictionary strucPairs = new Dictionary(); - int iteration = 1; - foreach (Structure sts in strucTableRows) + //Get related structures, if any + List strucTableRows = new List(); + Structure structs = new Structure(); + string structSelectionQuery = "SELECT s.* FROM " + DatabaseLiterals.TableStructure + " s" + + " JOIN " + DatabaseLiterals.TableEarthMat + " e on e." + DatabaseLiterals.FieldStructureParentID + " = s." + DatabaseLiterals.FieldEarthMatID + + " JOIN " + DatabaseLiterals.TableStation + " st on st." + DatabaseLiterals.FieldStationID + " = e." + DatabaseLiterals.FieldEarthMatStatID + + " WHERE st." + DatabaseLiterals.FieldStationID + " = " + ptStationId + ";"; + strucTableRows = accessData.ReadTable(structs.GetType(), structSelectionQuery); + + //Variables + if (!structureGraphicExists && strucTableRows.Count() > 0) { - //Manage pair tracking for pool placement - if (!strucPairs.ContainsKey(sts.StructureID)) + //Structure pairs tracking + //Key = record ID, Value = priority number for placement + Dictionary strucPairs = new Dictionary(); + int iteration = 1; + foreach (Structure sts in strucTableRows) { - if (sts.StructureRelated != null) + //Manage pair tracking for pool placement + if (!strucPairs.ContainsKey(sts.StructureID)) { - int relatedStruc = sts.StructureRelated ?? default(int); - //Get related struc placement priority - strucPairs[sts.StructureID] = strucPairs[relatedStruc]; + if (sts.StructureRelated != null) + { + int relatedStruc = sts.StructureRelated ?? default(int); + //Get related struc placement priority + strucPairs[sts.StructureID] = strucPairs[relatedStruc]; + } + else + { + //Assign new priority and remove it from the pool + strucPairs[sts.StructureID] = iteration; + iteration = iteration + 1; + } + } - else + + + //Set proper symbol + PictureMarkerSymbol strucSym = StrucPlaneSym.Clone() as PictureMarkerSymbol; + if (sts.StructureClass == DatabaseLiterals.KeywordLinear) { - //Assign new priority and remove it from the pool - strucPairs[sts.StructureID] = iteration; - iteration = iteration + 1; + strucSym = StrucLinearSym.Clone() as PictureMarkerSymbol; } - } + //Set azim + double azimAngle = sts.StructureSymAng; + if (azimAngle != 0.0) + { + strucSym.Angle = azimAngle; + } + strucSym.AngleAlignment = SymbolAngleAlignment.Map; //Set to map else symbol will keep same direction or mapview is rotated + //Set offset + Tuple symOffset = placements.GetPositionOffsetFromPlacementPriority(strucPairs[sts.StructureID], ptStationLocationLong, ptStationLocationLat, 100.0); - //Set proper symbol - PictureMarkerSymbol strucSym = StrucPlaneSym.Clone() as PictureMarkerSymbol; - if (sts.StructureClass == DatabaseLiterals.KeywordLinear) - { - strucSym = StrucLinearSym.Clone() as PictureMarkerSymbol; - } + //Create Map Point for graphic + MapPoint geoStructPoint = new MapPoint(symOffset.Item1, symOffset.Item2, SpatialReferences.Wgs84); - //Set azim - double azimAngle = sts.StructureSymAng; - if (azimAngle != 0.0) - { - strucSym.Angle = azimAngle; - } - strucSym.AngleAlignment = SymbolAngleAlignment.Map; //Set to map else symbol will keep same direction or mapview is rotated + //Get if datum transformation is needed + if (epsg != 0 && epsg != 4326) + { + DatumTransformation datumTransfo = null; + SpatialReference outSR = null; - //Set offset - Tuple symOffset = placements.GetPositionOffsetFromPlacementPriority(strucPairs[sts.StructureID], ptStationLocationLong, ptStationLocationLat, 100.0); + if ((epsg > 26900 && epsg < 27000)) + { + outSR = SpatialReference.Create(4617); + datumTransfo = TransformationCatalog.GetTransformation(outSR, SpatialReferences.Wgs84); + } - //Create Map Point for graphic - MapPoint geoStructPoint = new MapPoint(symOffset.Item1, symOffset.Item2, SpatialReferences.Wgs84); + MapPoint proPoint = new MapPoint(ptStationLocationLong, ptStationLocationLat, outSR); - //Get if datum transformation is needed - if (epsg != 0 && epsg != 4326) - { - DatumTransformation datumTransfo = null; - SpatialReference outSR = null; + //Validate if transformation is needed. + if (datumTransfo != null) + { + //Replace geopoint + geoStructPoint = (MapPoint)Esri.ArcGISRuntime.Geometry.GeometryEngine.Project(proPoint, SpatialReferences.Wgs84, datumTransfo); + } - if ((epsg > 26900 && epsg < 27000)) - { - outSR = SpatialReference.Create(4617); - datumTransfo = TransformationCatalog.GetTransformation(outSR, SpatialReferences.Wgs84); } - MapPoint proPoint = new MapPoint(ptStationLocationLong, ptStationLocationLat, outSR); - - //Validate if transformation is needed. - if (datumTransfo != null) - { - //Replace geopoint - geoStructPoint = (MapPoint)Esri.ArcGISRuntime.Geometry.GeometryEngine.Project(proPoint, SpatialReferences.Wgs84, datumTransfo); - } + //TODO make up for a different way to measure azim (not right hand rule) + var Sgraphic = new Graphic(geoStructPoint, strucSym); + Sgraphic.Attributes.Add("Id", sts.StructureID.ToString()); + Sgraphic.Attributes.Add("Date", ptStationDate.ToString()); + Sgraphic.Attributes.Add("ParentID", sts.StructureParentID); + Sgraphic.Attributes.Add("StructureClass", sts.getClassTypeDetail); + Sgraphic.Attributes.Add("Azim", sts.StructureAzimuth.ToString()); + Sgraphic.Attributes.Add("Dip", sts.StructureDipPlunge.ToString()); + Sgraphic.Attributes.Add("Default", isDefaultDB); + Sgraphic.Attributes.Add("tableType", DatabaseLiterals.TableStructure); + Sgraphic.Attributes.Add(Dictionaries.DatabaseLiterals.FieldLocationID, ptStationLocationID.ToString()); + structureOverlay.Graphics.Add(Sgraphic); + + //Set station symbol to transparent so we clearly see the structures instead + //StationGraphic.IsVisible = false; } - //TODO make up for a different way to measure azim (not right hand rule) - var Sgraphic = new Graphic(geoStructPoint, strucSym); - Sgraphic.Attributes.Add("Id", sts.StructureID.ToString()); - Sgraphic.Attributes.Add("Date", ptStationDate.ToString()); - Sgraphic.Attributes.Add("ParentID", sts.StructureParentID); - Sgraphic.Attributes.Add("StructureClass", sts.getClassTypeDetail); - Sgraphic.Attributes.Add("Azim", sts.StructureAzimuth.ToString()); - Sgraphic.Attributes.Add("Dip", sts.StructureDipPlunge.ToString()); - Sgraphic.Attributes.Add("Default", isDefaultDB); - Sgraphic.Attributes.Add("tableType", DatabaseLiterals.TableStructure); - Sgraphic.Attributes.Add(Dictionaries.DatabaseLiterals.FieldLocationID, ptStationLocationID.ToString()); - structureOverlay.Graphics.Add(Sgraphic); - - //Set station symbol to transparent so we clearly see the structures instead - //StationGraphic.IsVisible = false; } + else + { - + } } else { - + //Set station symbol to transparent so we clearly see the structures instead + StationGraphic.IsVisible = true; + structureOverlay.Graphics.Clear(); } } - else + catch (Exception) { - //Set station symbol to transparent so we clearly see the structures instead - StationGraphic.IsVisible = true; - structureOverlay.Graphics.Clear(); + } + #endregion } @@ -3324,26 +3332,42 @@ public void SetQuickButtonEnable() { if (localSettings.GetSettingValue(DatabaseLiterals.TableSample) != null) { - if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TableSample)) + try { - _mapPageQuickSampleEnable = true; + if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TableSample)) + { + _mapPageQuickSampleEnable = true; + } + else + { + _mapPageQuickSampleEnable = false; + } } - else + catch (Exception) { - _mapPageQuickSampleEnable = false; + _mapPageQuickSampleEnable = true; } + } if (localSettings.GetSettingValue(DatabaseLiterals.TableDocument) != null) { - if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TableDocument)) + + try { - _mapPageQuickPhotoEnable = true; + if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TableDocument)) + { + _mapPageQuickPhotoEnable = true; + } + else + { + _mapPageQuickPhotoEnable = false; + } } - else + catch (Exception) { - _mapPageQuickPhotoEnable = false; + _mapPageQuickPhotoEnable = true; } } @@ -3356,14 +3380,22 @@ public void SetQuickButtonEnable() { if (localSettings.GetSettingValue(DatabaseLiterals.TableStructure) != null) { - if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TableStructure)) + try { - _mapPageQuickMeasurementEnable = true; + if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TableStructure)) + { + _mapPageQuickMeasurementEnable = true; + } + else + { + _mapPageQuickMeasurementEnable = false; + } } - else + catch (Exception) { - _mapPageQuickMeasurementEnable = false; + _mapPageQuickMeasurementEnable = true; } + } } @@ -3371,14 +3403,23 @@ public void SetQuickButtonEnable() { if (localSettings.GetSettingValue(DatabaseLiterals.TablePFlow) != null) { - if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TablePFlow)) + try { - _mapPageQuickMeasurementEnable = true; + + if ((bool)localSettings.GetSettingValue(DatabaseLiterals.TablePFlow)) + { + _mapPageQuickMeasurementEnable = true; + } + else + { + _mapPageQuickMeasurementEnable = false; + } } - else + catch (Exception) { - _mapPageQuickMeasurementEnable = false; + _mapPageQuickMeasurementEnable = true; } + } } } diff --git a/GSCFieldApp/Views/FieldNotesPage.xaml.cs b/GSCFieldApp/Views/FieldNotesPage.xaml.cs index 48882164..bde92199 100644 --- a/GSCFieldApp/Views/FieldNotesPage.xaml.cs +++ b/GSCFieldApp/Views/FieldNotesPage.xaml.cs @@ -83,11 +83,19 @@ protected override void OnNavigatedTo(NavigationEventArgs e) //field notes, from nav parameter when closing station dialog or setting when user has taken a waypoint that doesn't navigate to field notes. if (localSetting.GetSettingValue("forceNoteRefresh") != null) { - if ((bool)localSetting.GetSettingValue("forceNoteRefresh")) + try { - this.ViewModel.FillSummaryReportDateItems(); //Refill station based on new selected date - localSetting.SetSettingValue("forceNoteRefresh", false); + if ((bool)localSetting.GetSettingValue("forceNoteRefresh")) + { + this.ViewModel.FillSummaryReportDateItems(); //Refill station based on new selected date + localSetting.SetSettingValue("forceNoteRefresh", false); + } + } + catch (System.Exception) + { + } + } else { From 748c31fd34ed6b1484133030b1de2961692b5a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 24 Jul 2023 11:31:07 -0400 Subject: [PATCH 011/177] Fieldbook picker now being filled and save and default value auto-selected. --- GSCFieldApp/Package.appxmanifest | 2 +- GSCFieldApp/ViewModels/DocumentViewModel.cs | 26 ++++++++++++------- .../ViewModels/SettingsPageViewModel.cs | 11 +++++++- GSCFieldApp/ViewModels/ShellViewModel.cs | 10 ++++++- 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/GSCFieldApp/Package.appxmanifest b/GSCFieldApp/Package.appxmanifest index bfefad82..c188640a 100644 --- a/GSCFieldApp/Package.appxmanifest +++ b/GSCFieldApp/Package.appxmanifest @@ -1,6 +1,6 @@  - + Geological Survey Canada Field Application diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index 3ea8def4..7de13ad6 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -344,26 +344,34 @@ public void GetAllFileNumbers() /// private void SetFieldVisibility() { - - if (localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode) != null) + try { - if ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode)) + if (localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode) != null) { - _documentModeVisibility = Visibility.Collapsed; - _fileNameReadOnly = true; + if ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode)) + { + _documentModeVisibility = Visibility.Collapsed; + _fileNameReadOnly = true; + } + else + { + _documentModeVisibility = Visibility.Visible; + _fileNameReadOnly = false; + } + } else { - _documentModeVisibility = Visibility.Visible; - _fileNameReadOnly = false; + _documentModeVisibility = Visibility.Collapsed; + _fileNameReadOnly = true; } - } - else + catch (Exception) { _documentModeVisibility = Visibility.Collapsed; _fileNameReadOnly = true; } + RaisePropertyChanged("DocumentModeVisibility"); RaisePropertyChanged("FileNameReadOnly"); } diff --git a/GSCFieldApp/ViewModels/SettingsPageViewModel.cs b/GSCFieldApp/ViewModels/SettingsPageViewModel.cs index 9caa6fec..673a5c96 100644 --- a/GSCFieldApp/ViewModels/SettingsPageViewModel.cs +++ b/GSCFieldApp/ViewModels/SettingsPageViewModel.cs @@ -564,7 +564,16 @@ public bool UsePhotoModeDialogButton } else { - return (bool)currentSettings.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode); + try + { + return (bool)currentSettings.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode); + } + catch (Exception) + { + + return true; + } + } } diff --git a/GSCFieldApp/ViewModels/ShellViewModel.cs b/GSCFieldApp/ViewModels/ShellViewModel.cs index 320d6a77..273b0aaa 100644 --- a/GSCFieldApp/ViewModels/ShellViewModel.cs +++ b/GSCFieldApp/ViewModels/ShellViewModel.cs @@ -73,7 +73,15 @@ public async void QuickBackupAsync() string projectName = string.Empty; if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest) != null) { - inMemoryYoungestPhoto = (DateTimeOffset)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest); + try + { + inMemoryYoungestPhoto = (DateTimeOffset)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest); + } + catch (Exception) + { + + } + } if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoPName) != null) { From e4154699ac9c092f64709be9b482e682575d0263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 24 Jul 2023 11:35:28 -0400 Subject: [PATCH 012/177] Revert "Fieldbook picker now being filled and save and default value auto-selected." This reverts commit 748c31fd34ed6b1484133030b1de2961692b5a40. --- GSCFieldApp/Package.appxmanifest | 2 +- GSCFieldApp/ViewModels/DocumentViewModel.cs | 26 +++++++------------ .../ViewModels/SettingsPageViewModel.cs | 11 +------- GSCFieldApp/ViewModels/ShellViewModel.cs | 10 +------ 4 files changed, 12 insertions(+), 37 deletions(-) diff --git a/GSCFieldApp/Package.appxmanifest b/GSCFieldApp/Package.appxmanifest index c188640a..bfefad82 100644 --- a/GSCFieldApp/Package.appxmanifest +++ b/GSCFieldApp/Package.appxmanifest @@ -1,6 +1,6 @@  - + Geological Survey Canada Field Application diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index 7de13ad6..3ea8def4 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -344,34 +344,26 @@ public void GetAllFileNumbers() /// private void SetFieldVisibility() { - try + + if (localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode) != null) { - if (localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode) != null) + if ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode)) { - if ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordDocumentMode)) - { - _documentModeVisibility = Visibility.Collapsed; - _fileNameReadOnly = true; - } - else - { - _documentModeVisibility = Visibility.Visible; - _fileNameReadOnly = false; - } - + _documentModeVisibility = Visibility.Collapsed; + _fileNameReadOnly = true; } else { - _documentModeVisibility = Visibility.Collapsed; - _fileNameReadOnly = true; + _documentModeVisibility = Visibility.Visible; + _fileNameReadOnly = false; } + } - catch (Exception) + else { _documentModeVisibility = Visibility.Collapsed; _fileNameReadOnly = true; } - RaisePropertyChanged("DocumentModeVisibility"); RaisePropertyChanged("FileNameReadOnly"); } diff --git a/GSCFieldApp/ViewModels/SettingsPageViewModel.cs b/GSCFieldApp/ViewModels/SettingsPageViewModel.cs index 673a5c96..9caa6fec 100644 --- a/GSCFieldApp/ViewModels/SettingsPageViewModel.cs +++ b/GSCFieldApp/ViewModels/SettingsPageViewModel.cs @@ -564,16 +564,7 @@ public bool UsePhotoModeDialogButton } else { - try - { - return (bool)currentSettings.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode); - } - catch (Exception) - { - - return true; - } - + return (bool)currentSettings.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode); } } diff --git a/GSCFieldApp/ViewModels/ShellViewModel.cs b/GSCFieldApp/ViewModels/ShellViewModel.cs index 273b0aaa..320d6a77 100644 --- a/GSCFieldApp/ViewModels/ShellViewModel.cs +++ b/GSCFieldApp/ViewModels/ShellViewModel.cs @@ -73,15 +73,7 @@ public async void QuickBackupAsync() string projectName = string.Empty; if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest) != null) { - try - { - inMemoryYoungestPhoto = (DateTimeOffset)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest); - } - catch (Exception) - { - - } - + inMemoryYoungestPhoto = (DateTimeOffset)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest); } if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoPName) != null) { From 3a41aeb550cf33a2ddf815dcc2dbfb33afe93fdb Mon Sep 17 00:00:00 2001 From: Jamel Joseph Date: Wed, 26 Jul 2023 11:00:46 -0700 Subject: [PATCH 013/177] bug292: added catch to see if error message appears before it crashes for user --- GSCFieldApp/GSCFieldApp.csproj | 2 +- GSCFieldApp/Package.appxmanifest | 2 +- GSCFieldApp/Views/MapPage.xaml.cs | 10 +++++++++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/GSCFieldApp/GSCFieldApp.csproj b/GSCFieldApp/GSCFieldApp.csproj index 53407c9c..7719141a 100644 --- a/GSCFieldApp/GSCFieldApp.csproj +++ b/GSCFieldApp/GSCFieldApp.csproj @@ -28,7 +28,7 @@ x86|x64|arm False win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - 14CF0ECF911C8A37CF0E2EF4F8E06F25425B80C1 + 2BEF7CE5EC4647A64DCBB60C29D4EE6084BDFC6E C:\work data\datacollections\PublishedVersions\ False 100 diff --git a/GSCFieldApp/Package.appxmanifest b/GSCFieldApp/Package.appxmanifest index bfefad82..46cd139b 100644 --- a/GSCFieldApp/Package.appxmanifest +++ b/GSCFieldApp/Package.appxmanifest @@ -1,6 +1,6 @@  - + Geological Survey Canada Field Application diff --git a/GSCFieldApp/Views/MapPage.xaml.cs b/GSCFieldApp/Views/MapPage.xaml.cs index 3b72dfd1..c10a0ca1 100644 --- a/GSCFieldApp/Views/MapPage.xaml.cs +++ b/GSCFieldApp/Views/MapPage.xaml.cs @@ -152,7 +152,15 @@ private void MapInfoButtonClicked(object sender, RoutedEventArgs e) //MapPageViewModel.currentMapView = null; //mapsLoaded = false; //await MapPageViewModel.SetMapView(myMapView); - + try + { + // Code that might throw an exception + } + catch (Exception ex) + { + // Catch and handle any exception. + Console.WriteLine("An error occurred: " + ex.Message); + } } private void LatLongDMSButtonClicked(object sender, RoutedEventArgs e) From 490bb53a334a0e983378abb51aa6f1d7791387d3 Mon Sep 17 00:00:00 2001 From: Jamel Joseph Date: Thu, 27 Jul 2023 09:31:32 -0700 Subject: [PATCH 014/177] Issue 289: Can now select fieldbook by single clicking on the book --- GSCFieldApp/Views/FieldBooksPage.xaml | 4 +++- GSCFieldApp/Views/FieldBooksPage.xaml.cs | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/GSCFieldApp/Views/FieldBooksPage.xaml b/GSCFieldApp/Views/FieldBooksPage.xaml index fcaab787..d0abc134 100644 --- a/GSCFieldApp/Views/FieldBooksPage.xaml +++ b/GSCFieldApp/Views/FieldBooksPage.xaml @@ -147,7 +147,9 @@ IsSwipeEnabled="False" AllowDrop="False" ItemContainerStyle="{StaticResource ReportPageGridViewBookItems}" ItemTemplate="{StaticResource ProjectListTemplate}" ItemsSource="{x:Bind ViewModel.ProjectCollection, Mode=OneWay}" - SelectedIndex="{x:Bind ViewModel.SelectedProjectIndex, Mode=TwoWay}"> + SelectedIndex="{x:Bind ViewModel.SelectedProjectIndex, Mode=TwoWay}" + Tapped="{x:Bind ViewModel.projectOpenButton_Tapped}"> + diff --git a/GSCFieldApp/Views/FieldBooksPage.xaml.cs b/GSCFieldApp/Views/FieldBooksPage.xaml.cs index 67ad51f0..3fa50f78 100644 --- a/GSCFieldApp/Views/FieldBooksPage.xaml.cs +++ b/GSCFieldApp/Views/FieldBooksPage.xaml.cs @@ -27,5 +27,9 @@ protected override void OnNavigatedTo(NavigationEventArgs e) } + private void OnGridViewItemClicked(object sender, ItemClickEventArgs e) + { + + } } } From bea24150825b1cc3e3ca9438700fa6422a491da2 Mon Sep 17 00:00:00 2001 From: Jamel Joseph Date: Thu, 27 Jul 2023 09:48:12 -0700 Subject: [PATCH 015/177] bug 292: I put the block of code in a try bracket so it shouldnt crash the program if executed and there is an error. --- GSCFieldApp/Views/MapPage.xaml.cs | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/GSCFieldApp/Views/MapPage.xaml.cs b/GSCFieldApp/Views/MapPage.xaml.cs index c10a0ca1..114675d6 100644 --- a/GSCFieldApp/Views/MapPage.xaml.cs +++ b/GSCFieldApp/Views/MapPage.xaml.cs @@ -127,26 +127,7 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) /// private void MapInfoButtonClicked(object sender, RoutedEventArgs e) { - //Hide or show coordinates, accuracy, and projection info when clicked - MapScaleInfo.Visibility = (MapScaleInfo.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible); - - if (localSetting.GetSettingValue(ApplicationLiterals.KeywordMapViewGrid) != null) - { - localSetting.SetSettingValue(ApplicationLiterals.KeywordMapViewGrid, ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordMapViewGrid) == true ? false : true)); - - if (myMapView.Grid != null) - { - myMapView.Grid.IsVisible = ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordMapViewGrid) == false ? false : true); - } - } - else - { - localSetting.SetSettingValue(ApplicationLiterals.KeywordMapViewGrid, false); - } - MapCoordinateInfo2.Visibility = (MapCoordinateInfo2.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible); - MapCoordinateInfo3.Visibility = (MapCoordinateInfo3.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible); - //Try and enforce whole map view redraw see #176 //MapPageViewModel.esriMap = null; //MapPageViewModel.currentMapView = null; @@ -154,7 +135,26 @@ private void MapInfoButtonClicked(object sender, RoutedEventArgs e) //await MapPageViewModel.SetMapView(myMapView); try { - // Code that might throw an exception + //Hide or show coordinates, accuracy, and projection info when clicked + MapScaleInfo.Visibility = (MapScaleInfo.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible); + + if (localSetting.GetSettingValue(ApplicationLiterals.KeywordMapViewGrid) != null) + { + localSetting.SetSettingValue(ApplicationLiterals.KeywordMapViewGrid, ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordMapViewGrid) == true ? false : true)); + + if (myMapView.Grid != null) + { + myMapView.Grid.IsVisible = ((bool)localSetting.GetSettingValue(ApplicationLiterals.KeywordMapViewGrid) == false ? false : true); + } + } + else + { + localSetting.SetSettingValue(ApplicationLiterals.KeywordMapViewGrid, false); + } + + MapCoordinateInfo2.Visibility = (MapCoordinateInfo2.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible); + MapCoordinateInfo3.Visibility = (MapCoordinateInfo3.Visibility == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible); + } catch (Exception ex) { From 6a6e7efafbfe44b88598f48f20c199afad51067b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 31 Jul 2023 11:30:56 -0400 Subject: [PATCH 016/177] Another try catch to prevent failure on local setting. Photo this time. --- GSCFieldApp/ViewModels/ShellViewModel.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/GSCFieldApp/ViewModels/ShellViewModel.cs b/GSCFieldApp/ViewModels/ShellViewModel.cs index 320d6a77..26f2af57 100644 --- a/GSCFieldApp/ViewModels/ShellViewModel.cs +++ b/GSCFieldApp/ViewModels/ShellViewModel.cs @@ -73,7 +73,15 @@ public async void QuickBackupAsync() string projectName = string.Empty; if (localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest) != null) { - inMemoryYoungestPhoto = (DateTimeOffset)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest); + try + { + inMemoryYoungestPhoto = (DateTimeOffset)localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest); + } + catch (Exception) + { + inMemoryYoungestPhoto = DateTimeOffset.MinValue; + } + } if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoPName) != null) { From 8ef9ee85e71e6245e0509b7c5aa43b899f68e198 Mon Sep 17 00:00:00 2001 From: Jamel Joseph Date: Tue, 5 Sep 2023 22:39:10 -0700 Subject: [PATCH 017/177] Just addded a try and catch because I got some random error in the shell.xaml page but never got it since. --- GSCFieldApp/Views/FieldBooksPage.xaml.cs | 3 +++ GSCFieldApp/Views/Shell.xaml.cs | 19 +++++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/GSCFieldApp/Views/FieldBooksPage.xaml.cs b/GSCFieldApp/Views/FieldBooksPage.xaml.cs index 3fa50f78..8da5080a 100644 --- a/GSCFieldApp/Views/FieldBooksPage.xaml.cs +++ b/GSCFieldApp/Views/FieldBooksPage.xaml.cs @@ -1,6 +1,9 @@ using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; using GSCFieldApp.ViewModels; +using Esri.ArcGISRuntime.Portal; +using System.Collections.Generic; +using static GSCFieldApp.Views.FieldBooksPage; namespace GSCFieldApp.Views { diff --git a/GSCFieldApp/Views/Shell.xaml.cs b/GSCFieldApp/Views/Shell.xaml.cs index e603e3b6..fc9a8971 100644 --- a/GSCFieldApp/Views/Shell.xaml.cs +++ b/GSCFieldApp/Views/Shell.xaml.cs @@ -5,6 +5,8 @@ using Windows.UI.Xaml.Controls; using GSCFieldApp.ViewModels; using System.Threading.Tasks; +using Windows.UI.Popups; +using System; namespace GSCFieldApp.Views @@ -26,10 +28,19 @@ public Shell() private async void Shell_LoadedAsync(object sender, RoutedEventArgs e) { - //Navigate to map page - INavigationService navService = BootStrapper.Current.NavigationService; - navService.Navigate(typeof(Views.FieldBooksPage)); - await Task.CompletedTask; + try + { + // Navigate to map page + INavigationService navService = BootStrapper.Current.NavigationService; + navService.Navigate(typeof(Views.FieldBooksPage)); + await Task.CompletedTask; + } + catch (Exception ex) + { + // Show an error message using MessageDialog + var dialog = new MessageDialog("An error occurred: " + ex.Message, "Error"); + await dialog.ShowAsync(); + } } public Shell(INavigationService navigationService) : this() From 87cdcac2606e929012dfc4cdfb849810372ceebc Mon Sep 17 00:00:00 2001 From: Jamel Joseph Date: Thu, 7 Sep 2023 10:49:53 -0700 Subject: [PATCH 018/177] bug 295: map now refreshes when entry is changed or deleted and new one added with same station number --- GSCFieldApp/ViewModels/MapPageViewModel.cs | 2 +- GSCFieldApp/Views/MapPage.xaml.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/GSCFieldApp/ViewModels/MapPageViewModel.cs b/GSCFieldApp/ViewModels/MapPageViewModel.cs index 2f436566..ac566449 100644 --- a/GSCFieldApp/ViewModels/MapPageViewModel.cs +++ b/GSCFieldApp/ViewModels/MapPageViewModel.cs @@ -1735,7 +1735,7 @@ public void AddStationWaypoint(FieldLocation stationWaypointMapPoint) /// Mainly used to refresh the map, after some data entry, example waypoint addition. /// /// - private void RefreshMap(bool forceRefresh = false) + public void RefreshMap(bool forceRefresh = false) { if (forceRefresh) { diff --git a/GSCFieldApp/Views/MapPage.xaml.cs b/GSCFieldApp/Views/MapPage.xaml.cs index 114675d6..b6f2b42a 100644 --- a/GSCFieldApp/Views/MapPage.xaml.cs +++ b/GSCFieldApp/Views/MapPage.xaml.cs @@ -84,10 +84,10 @@ private void MapPage_Loaded(object sender, RoutedEventArgs e) //Refresh //SetBackgroundGrid(); + MapPageViewModel.RefreshMap(true); MapPageViewModel.DisplayPointAndLabelsAsync(myMapView); - - + //DisplayLatLongGrid(); //UpdateGrid(); From 3b706039b12a43ffbdec8c2bfb908d442ad6d912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 15 Sep 2023 14:08:24 -0400 Subject: [PATCH 019/177] #255 updated dictionaries with bedrock demands. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 761856 -> 774144 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index af05c953d780af32923d940453b07711fe4a6b87..4e670768ba4553df4422e707b95fc767668c21e3 100644 GIT binary patch delta 1356 zcmY*Y4NO&K82{K2-aSownsOwcqJ7%L>fAVU;~a?1vG zFF#kJ&rML6PFLE})IQ6A+-h^RHE(k@wGy>j%YG=!%%$~R)>eII?{m)g?S0<&JkNVh z%X{~>^k;RY#9u}T4XXHO;f~1kTzolLal8T#6vykIA`Krx_CuOrizvm1WI_pkUuRB( zUMJ5l!_y4fZAAoB;I)?3=R}>4oDZB~ONgclywhhz>=ZlEc5TC^)-CII>u2ktb=CUX zI%yr3IjeEGCqcE%=}lDF7+#}rbErz}t-+h!!QQ*nHhb4rh5lVtGP4$U;wkTjH>v%G zaIwOMaIV6Q;qeMjh8h(%g&tP8DU{QCWgV7R){*oe^^(~V;^GHCJ&9sO zaSx|ihC^N=4C`onPa&PJa%ixpo!(Fn>c_!Z;=o_reZv^fv9N zmdB*vqvTGJH%hiE4n*atQF5Kqre0kHZxe6N9{PIg$-HDu*__IW0lJ4}zUh5rd7uv8z?XKTl_9QHc%(H>PIh_B&F^cgCWfjE}Q z)vKb;*7_u-LQ|p3`XuNY&)^uEC^SDz7MXtV;XU2i{^fFy9}*$PSR+r&gvFft@Q-TX z@U%L^&9b2a!mh1dKt580m`>Yhg5V`E?G93;)v{ZxlN8}|xC-4w?WkQ9oXfNejL1j{ zyo0^LdEv#%nu)1n)})MC^FtZj_kU~3M5K}5GvTv@R~)>l9?mYt=rI5t;QFE5rs zhB3WX_T(818%3A==3?$?Bk@v`q*0O`PNfs-Y~bB#ON}T z`963RGWCP{RPBiBdx|Y&3yF(&;~aDfm8eTCJ3#-CrCm@!yutaQIWgrK|55%(9|T0) zFtc&#zl!;o;)YP3h}M8t_y*v-T=+7K(3tSeVu{JU2Ld}mqtAr$MYLC?yw(q^xFd~W^vSqr=U+zvl?rzY(5M@C&p-KCBvYCt1u)P zHvdYC{osK1BWr<^Zj6#1_>c*-U(veg3pK^^+%g=&c$QfEC|)TyUNQ-h;w!WIdkeH@+{=G mx~B8I{i|JPeP=!8`O;Hro;DvahKxLZm}e=5!R6p6iNfDvm~Wi` delta 1008 zcmXYw4@}in6vywm_x^t8_kRE0lLvti@Nf}>K|G)`ZLLR3Q(^OM3c70Rsk4xTfJ`13 zju$qD?-75LT{aO{07( zjqOEsvWpCutk~*dEKC8duVkblI4Oy{TL! z4+t%Y55hT75X8(wrNL@>G>9q4cXnHTd445U8a#)bA|gG4fh3&AIHv2PdWm*ftKzqK zRIH9*Bj1x~@ymB3c%I3{NsDs1s|JrCUqQNwaKl)Tu6?J~@de()GuRkgNk60&@D02~ z=1KRVl3+QnO>FhczA#<@nfoF>O=Zt!tOQ=4sPxP0RhVnCY|ERrg%ehc32hYfB%ZeZW-|8#&f-SZ z{R$E$-X3p?JM0!X6Hds!WGh-=qeecS#3KEap0B;9mGet{J)2=W z>0R1Mz3?`al1nOy3Q;(UH)LraJ`bYy9h_mW#KU5G2>oKq7+#a>591tT(fC>sHjU)5 z&>(6_P4UP5q$)c%JDUK>$RWfL$NDiO@~hDco5lBYMzZ{17%S+~FbBwCf$i8WLc`c3 z^%(x+T53Cs3={9G?xHZq@i86p$QPtdU22(Z8^@T-n+~@4JLwcE8A={Wr_6r?sjOA~ w$0)JaxjCNO5XH~9AOsrDmIR*z%~)zj4%{#)RU-nK^7Ajv Date: Fri, 15 Sep 2023 14:16:30 -0400 Subject: [PATCH 020/177] #296 added french translation for sample purposes. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 774144 -> 786432 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 4e670768ba4553df4422e707b95fc767668c21e3..841d0a256f66e458a483c277b10ef2701151db35 100644 GIT binary patch delta 5794 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 From a1d405c8ae52478bbe7de87358dbb55f273b8fb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 15 Sep 2023 14:34:49 -0400 Subject: [PATCH 021/177] #285 changed photo type value for DSCN. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 786432 -> 786432 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 841d0a256f66e458a483c277b10ef2701151db35..9c7332bb1cd9cb0694e94a2bb98c3cba3b2ea0bd 100644 GIT binary patch delta 196 zcmZo@FlcBnm>|vgWTK2S|vgc%qCmJ7)(cCr1YdH+vU56LU1vY&JK>8?5b& z;*$*x61FRTWXoa^s_M-bW(bvLkhf=GWKdURVBnpe@PW;kF@E~w4{WB}JHN7hXJuhv bU|?x)_{|2y>_E%`#GF9PwY}jtcLNImVCXd2 From 08b06d9de41efb2aa794796b0f7f1ebbcc904a8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 15 Sep 2023 15:58:12 -0400 Subject: [PATCH 022/177] #185 added new is blank checkbox in surficial sample. --- GSCFieldApp/Dictionaries/DatabaseLiterals.cs | 4 +- GSCFieldApp/GSCFieldApp.csproj | 2 +- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 786432 -> 786432 bytes GSCFieldApp/Models/Sample.cs | 10 ++- GSCFieldApp/Package.appxmanifest | 2 +- GSCFieldApp/Resources/en-US/Resources.resw | 3 + GSCFieldApp/Resources/fr/Resources.resw | 3 + .../Services/DatabaseServices/DataAccess.cs | 80 +++++++++++++----- .../ViewModels/FieldBooksPageViewModel.cs | 6 +- GSCFieldApp/ViewModels/SampleViewModel.cs | 29 ++++++- GSCFieldApp/Views/SampleDialog.xaml | 15 +++- 11 files changed, 123 insertions(+), 31 deletions(-) diff --git a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs index ff58ff78..8fe9ce0f 100644 --- a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs +++ b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs @@ -6,7 +6,8 @@ namespace GSCFieldApp.Dictionaries public static class DatabaseLiterals { #region Database version - public const double DBVersion = 1.7; //Will be used to verify loaded projects. + public const double DBVersion = 1.8; //Will be used to verify loaded projects. + public const double DBVersion180 = 1.8; //Will be used to verify loaded projects. public const double DBVersion170 = 1.7; //Will be used to verify loaded projects. public const double DBVersion160 = 1.6; //Will be used to verify loaded projects. public const double DBVersion150 = 1.5; //Will be used to verify and upgrade loaded projects @@ -154,6 +155,7 @@ public static class DatabaseLiterals public const string FieldCurationID = "CURATIONID"; public const string FieldSampleWarehouseLocation= "WAREHOUSE_LOCATION"; //Version 1.7 public const string FieldSampleBucketTray = "BUCKET_OR_TRAY_NO"; //Version 1.7 + public const string FieldSampleIsBlank = "ISBLANK"; //Version 1.8 public const string FieldSampleManagementID = "SMID"; public const string FieldDictionaryTermID = "TERMID";//Version 1.0 diff --git a/GSCFieldApp/GSCFieldApp.csproj b/GSCFieldApp/GSCFieldApp.csproj index 7719141a..53407c9c 100644 --- a/GSCFieldApp/GSCFieldApp.csproj +++ b/GSCFieldApp/GSCFieldApp.csproj @@ -28,7 +28,7 @@ x86|x64|arm False win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - 2BEF7CE5EC4647A64DCBB60C29D4EE6084BDFC6E + 14CF0ECF911C8A37CF0E2EF4F8E06F25425B80C1 C:\work data\datacollections\PublishedVersions\ False 100 diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 9c7332bb1cd9cb0694e94a2bb98c3cba3b2ea0bd..50c8c15cf3c7b98ae35af7054761660ec575a7ee 100644 GIT binary patch delta 171 zcmZo@FlcBnm>@0ql!1Za01!g~xFy65D&Gf71gJSga>I7&vpaWCpN{%gQo#s&4=Fl4}m5 z94{AVxMPs3hkt0WYrK!Yvtx*-zn?;gYea|+P-^;y*IZKUp21E&j(*5H%@0qgn@zK01!g~W8Xv_W5y?q39Si?tqDx63CyhtEUgKwtqE+c3GA&2 z9IXkQTNAjJ-4|HKz~jNE$oYY3D*Gvx=?u#z8yZa5{_hc&7bjOss5iT~tSnc>4P(gt$h8=qNaaI(xf@#QO)uhXgrB#{2nCFMq_< P(eC+%YrE$g?(M<=f88}^ diff --git a/GSCFieldApp/Models/Sample.cs b/GSCFieldApp/Models/Sample.cs index 3d1ea7dc..53b152c3 100644 --- a/GSCFieldApp/Models/Sample.cs +++ b/GSCFieldApp/Models/Sample.cs @@ -72,6 +72,8 @@ public class Sample [Column(DatabaseLiterals.FieldSampleBucketTray)] public string SampleBucket { get; set; } + [Column(DatabaseLiterals.FieldSampleIsBlank)] + public string SampleBlank { get; set; } //Hierarchy public string ParentName = DatabaseLiterals.TableEarthMat; @@ -122,9 +124,15 @@ public Dictionary> getFieldList sampleFieldList[DatabaseLiterals.DBVersion] = sampleFieldListDefault; + //Revert shcema 1. changes + List sampleFieldList170 = new List(); + sampleFieldList170.AddRange(sampleFieldListDefault); + sampleFieldList170.Remove(DatabaseLiterals.FieldSampleIsBlank); + sampleFieldList[DatabaseLiterals.DBVersion170] = sampleFieldList170; + //Revert shcema 1.7 changes List sampleFieldList160 = new List(); - sampleFieldList160.AddRange(sampleFieldListDefault); + sampleFieldList160.AddRange(sampleFieldList170); sampleFieldList160.Remove(DatabaseLiterals.FieldSampleBucketTray); sampleFieldList160.Remove(DatabaseLiterals.FieldSampleWarehouseLocation); sampleFieldList[DatabaseLiterals.DBVersion160] = sampleFieldList160; diff --git a/GSCFieldApp/Package.appxmanifest b/GSCFieldApp/Package.appxmanifest index 46cd139b..462caca7 100644 --- a/GSCFieldApp/Package.appxmanifest +++ b/GSCFieldApp/Package.appxmanifest @@ -1,6 +1,6 @@  - + Geological Survey Canada Field Application diff --git a/GSCFieldApp/Resources/en-US/Resources.resw b/GSCFieldApp/Resources/en-US/Resources.resw index fdf3f4d6..dad33444 100644 --- a/GSCFieldApp/Resources/en-US/Resources.resw +++ b/GSCFieldApp/Resources/en-US/Resources.resw @@ -1761,4 +1761,7 @@ Shimamura, Kaz – Senior Advisor Search + + Is Blank? + \ No newline at end of file diff --git a/GSCFieldApp/Resources/fr/Resources.resw b/GSCFieldApp/Resources/fr/Resources.resw index e0347775..57c1d6dc 100644 --- a/GSCFieldApp/Resources/fr/Resources.resw +++ b/GSCFieldApp/Resources/fr/Resources.resw @@ -1759,4 +1759,7 @@ Shimamura, Kaz – Conseiller Recherche + + Est-ce un blanc? + \ No newline at end of file diff --git a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs index feb66a78..09509b2f 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs @@ -813,6 +813,13 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne newVersionNumber = DatabaseLiterals.DBVersion170; } + if (inDBVersion == DBVersion170) + { + queryList.AddRange(GetUpgradeQueryVersion1_8(attachDBName)); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableSample); + newVersionNumber = DatabaseLiterals.DBVersion180; + } + //Insert remaining tables foreach (string t in upgradeUntouchedTables) { @@ -2509,7 +2516,7 @@ public List GetUpgradeQueryVersion1_6(string attachedDBName) } /// - /// Will output a query to update database to version 1.6 + /// Will output a query to update database to version 1.7 /// /// public List GetUpgradeQueryVersion1_7(string attachedDBName) @@ -2595,7 +2602,7 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) #region F_SAMPLE Sample modelSample = new Sample(); - List sampleFieldList = modelSample.getFieldList[DBVersion]; + List sampleFieldList = modelSample.getFieldList[DBVersion170]; //Get view creation queries to mitigate GUID ids to integer ids. insertQuery_17.Add(GenerateLegacyFormatViews(attachedDBName, TableSample, FieldSampleID, @@ -2731,24 +2738,6 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) #endregion - //#region M_DICTIONARY - - //Vocabularies modelVocab = new Vocabularies(); - //List vocabFieldList = modelVocab.getFieldList[DBVersion]; - - //insertQuery_17.Add(GenerateInsertQueriesFromModel(vocabFieldList, nullFieldList, TableDictionary, null, null, attachedDBName)); - - //#endregion - - //#region M_DICTIONARY_MANAGER - - //VocabularyManager modelVocabManager = new VocabularyManager(); - //List vocabManagerFieldList = modelVocabManager.getFieldList[DBVersion]; - - //insertQuery_17.Add(GenerateInsertQueriesFromModel(vocabManagerFieldList, nullFieldList, TableDictionaryManager, null, null, attachedDBName)); - - //#endregion - #region F_DOCUMENT ///Warning: We assumed that by default records will be linked with station @@ -2773,6 +2762,57 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) return insertQuery_17; } + /// + /// Will output a query to update database to version 1.8 + /// + /// + /// + public List GetUpgradeQueryVersion1_8(string attachedDBName) + { + ///Schema v 1.7: + ///https://github.com/NRCan/GSC-Field-Application/milestone/8 + List insertQuery_18 = new List(); + + #region F_SAMPLE + + Sample modelSample = new Sample(); + List sampleFieldList = modelSample.getFieldList[DBVersion]; + string sample_querySelect = string.Empty; + + foreach (string sampleFields in sampleFieldList) + { + //Get all fields except alias + + if (sampleFields != sampleFieldList.First()) + { + if (sampleFields == DatabaseLiterals.FieldSampleIsBlank) + { + sample_querySelect = sample_querySelect + + ", NULL as " + DatabaseLiterals.FieldSampleHorizon; + } + else + { + sample_querySelect = sample_querySelect + ", sm." + sampleFields + " as " + sampleFields; + } + + } + else + { + sample_querySelect = " sm." + sampleFields + " as " + sampleFields; + } + + } + sample_querySelect = sample_querySelect.Replace(", ,", ""); + + string insertQuery_18_sample = "INSERT INTO " + DatabaseLiterals.TableSample + " SELECT " + sample_querySelect; + insertQuery_18_sample = insertQuery_18_sample + " FROM " + attachedDBName + "." + DatabaseLiterals.TableSample + " as sm"; + insertQuery_18.Add(insertQuery_18_sample); + + #endregion + + return insertQuery_18; + } + /// /// Will return a related structure record as an object /// diff --git a/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs b/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs index b35e8232..897098e9 100644 --- a/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs @@ -937,9 +937,13 @@ public async void ProjectUpgrade_Tapped(object sender, Windows.UI.Xaml.Input.Tap versionFileName = versionFileName + "_v" + DatabaseLiterals.DBVersion160.ToString().Replace(".", "") + "0" + DatabaseLiterals.DBTypeSqliteDeprecated; } else if (processedDBVersion == 1.6) + { + versionFileName = versionFileName + "_v" + DatabaseLiterals.DBVersion170.ToString().Replace(".", "") + "0" + DatabaseLiterals.DBTypeSqlite; + } + else if (processedDBVersion == 1.7) { - //Current defaulting to 1.7 + //Current defaulting to 1.8 versionFileName = versionFileName + DatabaseLiterals.DBTypeSqlite; } diff --git a/GSCFieldApp/ViewModels/SampleViewModel.cs b/GSCFieldApp/ViewModels/SampleViewModel.cs index 80293c2c..f9c5a456 100644 --- a/GSCFieldApp/ViewModels/SampleViewModel.cs +++ b/GSCFieldApp/ViewModels/SampleViewModel.cs @@ -30,8 +30,9 @@ public class SampleViewModel: ViewModelBase private Visibility _surficialVisibility = Visibility.Collapsed; //Visibility for extra fields private Visibility _bedrockVisibility = Visibility.Visible; //Visibility for extra fields - private bool _isSampleDuplicate = false; //Wheter checkbox is checked (true) or uncheck (false) - private bool _isSampleDuplicateEnabled = false; //Wheter duplicate name box is enabled or disabled + private bool _isSampleDuplicate = false; //Whether checkbox is checked (true) or uncheck (false) + private bool _isSampleBlank = false; //Whether checkbox is checked or uncheck + private bool _isSampleDuplicateEnabled = false; //Whether duplicate name box is enabled or disabled //Local settings readonly DataLocalSettings localSetting = new DataLocalSettings(); @@ -85,6 +86,7 @@ public class SampleViewModel: ViewModelBase public string SampleDuplicateName { get { return _sampleDuplicateName; } set { _sampleDuplicateName = value; } } public bool IsSampleDuplicate { get { return _isSampleDuplicate; } set { _isSampleDuplicate = value; } } + public bool IsSampleBlank { get { return _isSampleBlank; } set { _isSampleBlank = value; } } public bool IsSampleDuplicateEnabled { get { return _isSampleDuplicateEnabled; } set { _isSampleDuplicateEnabled = value; } } public Visibility SurficialVisibility { get { return _surficialVisibility; } set { _surficialVisibility = value; } } public Visibility BedrockVisibility { get { return _bedrockVisibility; } set { _bedrockVisibility = value; } } @@ -292,6 +294,20 @@ public void AutoFillDialog(FieldNotes incomingData) RaisePropertyChanged("IsSampleDuplicate"); } + if (existingDataDetailSample.sample.SampleBlank != String.Empty) + { + if (existingDataDetailSample.sample.SampleBlank == DatabaseLiterals.boolYes) + { + _isSampleBlank = true; + RaisePropertyChanged("IsSampleBlank"); + } + else + { + _isSampleBlank = false; + RaisePropertyChanged("IsSampleBlank"); + } + } + //Update UI RaisePropertyChanged("SampleID"); RaisePropertyChanged("SampleAlias"); @@ -347,6 +363,15 @@ public void SaveDialogInfo() sampleModel.SampleDuplicateName = _sampleDuplicateName; + if (IsSampleBlank) + { + sampleModel.SampleBlank = DatabaseLiterals.boolYes; + } + else if (!IsSampleBlank) + { + sampleModel.SampleBlank = DatabaseLiterals.boolNo; + } + if (SelectedSampleType != null) { sampleModel.SampleType = SelectedSampleType; diff --git a/GSCFieldApp/Views/SampleDialog.xaml b/GSCFieldApp/Views/SampleDialog.xaml index 7cffd8c5..7822520f 100644 --- a/GSCFieldApp/Views/SampleDialog.xaml +++ b/GSCFieldApp/Views/SampleDialog.xaml @@ -71,13 +71,20 @@ ItemTemplate="{StaticResource PurposeValueTemplate}" ItemsSource="{x:Bind ViewModel.PurposeValues}" IsTabStop="True" TabIndex="3"/> - + + + IsChecked="{x:Bind ViewModel.IsSampleDuplicate, Mode=TwoWay}" + RelativePanel.RightOf="isSampleBlank" + RelativePanel.Below="samplePurposesValues" TabIndex="5"/> + RelativePanel.RightOf="isSampleDuplicate" RelativePanel.AlignBottomWith="isSampleDuplicate" Header="" Visibility="{x:Bind ViewModel.SurficialVisibility}" + Text ="{x:Bind ViewModel.SampleDuplicateName, Mode=TwoWay}" TabIndex="6"/> + + From 903b188f4366cf145741f9330c68242a0518a041 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 15 Sep 2023 16:06:49 -0400 Subject: [PATCH 023/177] #270 new remote ground observation for surficial station type. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 786432 -> 786432 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 50c8c15cf3c7b98ae35af7054761660ec575a7ee..9878df1edb6ae9e0cf4523d6ee4b67762214349f 100644 GIT binary patch delta 218 zcmZo@FlcBnm>|vgY@&=aDK+FQftU$~L#Oy%K0mPg@ z%(cBho_mUe0w3!e27Y(GIlNDK^>|vik8%re#d0p?c*bGO-o$o__048OgA=UIjZyR5 zg&9I+8SL$O*%?d~85rsr`1#o_Ow3FjEuEcp-JHxVbWL0xU3HxtoeXr%O`QxZj2+F* z4PDIroq|Im16+fr2jnpsvD<$(27&1te{e}pmzvCO&0}s58EOCL3<#XvekzUIY$gDr CYe3up delta 135 zcmZo@FlcBnm>|vgbfSziDK+FQftU$~L#Oy%K0mPg@ z%(cBho_mUe9534`27Y(GIlNDK^>|vik8%re#d0p?c*bGO-o$olv!OvDo8Tv5hEQcm bWo2GQUQI<_-g@5Y_tLo4wx3GlHk%0mwNEDY From 1702e795a45dd370fa411e3c841ff8531537fcd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 15 Sep 2023 16:08:07 -0400 Subject: [PATCH 024/177] #270 new creator name for last commit picklist value. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 786432 -> 786432 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 9878df1edb6ae9e0cf4523d6ee4b67762214349f..37a278f7e43a5a54c6cc5e23234725fbce282d2c 100644 GIT binary patch delta 133 zcmZo@FlcBnm>|vge4>mq@=N8ycKu6~8CU5Gu=HZ{O%Y h&mGF-WoM9|{yUXBk25GgMIkshvm|4CZ5ns;OaNkBDwY5M delta 125 zcmV-@0D}L3fG~i7FpwJo=8+sj0p@{Vg3;1BGA&g;Ml(4xA0;4K56X3&jf%3S9}M2<8Yg2Z9F51?;miFvtZDfm)tN6982m f06#ws2LLsf24)Lxm$LW@8kZWA2RpaEW(z`@A$cfQ From 02fefe7ef075d8bb82cb194f2b3cbd0b6500348c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 15 Sep 2023 16:10:26 -0400 Subject: [PATCH 025/177] #270 change value to only remote. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 786432 -> 786432 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 37a278f7e43a5a54c6cc5e23234725fbce282d2c..2441465bd314cf55f56f746570a8e595f569e4b0 100644 GIT binary patch delta 134 zcmV;10D1p_fG~i7FpwJo=#d;l0qB8Xg3;1BGA&g?F)+&om+xf@2m}BC o0MnQIWeXw;fhnFx6982m02vvV0%i+726AO>Z**n1Y-S6TnJyA3X#fBK delta 120 zcmV-;0Ehp8fG~i7FpwJo=aC#k0q22Wg3;1BGA&g Date: Fri, 15 Sep 2023 17:31:42 -0400 Subject: [PATCH 026/177] #279 brought back contact up and low from version 2.1. --- GSCFieldApp/Resources/en-US/Resources.resw | 15 +++- GSCFieldApp/Resources/fr/Resources.resw | 12 +++- GSCFieldApp/ViewModels/EarthmatViewModel.cs | 76 ++++++++++++++++++++- GSCFieldApp/Views/EarthmatDialog.xaml | 16 ++++- 4 files changed, 109 insertions(+), 10 deletions(-) diff --git a/GSCFieldApp/Resources/en-US/Resources.resw b/GSCFieldApp/Resources/en-US/Resources.resw index dad33444..c0c5dcc1 100644 --- a/GSCFieldApp/Resources/en-US/Resources.resw +++ b/GSCFieldApp/Resources/en-US/Resources.resw @@ -381,9 +381,6 @@ Related to - - Description - Type @@ -1764,4 +1761,16 @@ Shimamura, Kaz – Senior Advisor Is Blank? + + Lower + + + Note + + + Upper + + + Relation description + \ No newline at end of file diff --git a/GSCFieldApp/Resources/fr/Resources.resw b/GSCFieldApp/Resources/fr/Resources.resw index 57c1d6dc..b529d789 100644 --- a/GSCFieldApp/Resources/fr/Resources.resw +++ b/GSCFieldApp/Resources/fr/Resources.resw @@ -381,9 +381,6 @@ En relation avec - - Description - Type @@ -1762,4 +1759,13 @@ Shimamura, Kaz – Conseiller Est-ce un blanc? + + Contact Inférieur + + + Contact Supérieur + + + Description de la relation + \ No newline at end of file diff --git a/GSCFieldApp/ViewModels/EarthmatViewModel.cs b/GSCFieldApp/ViewModels/EarthmatViewModel.cs index 15b558aa..376dbf53 100644 --- a/GSCFieldApp/ViewModels/EarthmatViewModel.cs +++ b/GSCFieldApp/ViewModels/EarthmatViewModel.cs @@ -112,6 +112,12 @@ public class EarthmatViewModel: ViewModelBase private ObservableCollection _earthmatMagQualifier = new ObservableCollection(); private string _selectedEarthmatMagQualifier = string.Empty; + private ObservableCollection _earthmatCU = new ObservableCollection(); + private string _selectedEarthmatCU = string.Empty; + + private ObservableCollection _earthmatCL = new ObservableCollection(); + private string _selectedEarthmatCL = string.Empty; + //Surficial version 1.7 new fields private ObservableCollection _earthmatSorting = new ObservableCollection(); private string _selectedEarthmatSorting = string.Empty; @@ -204,6 +210,11 @@ public string ColourIndex { public Models.Colour EarthColourF { get { return _earthColourF; } set { _earthColourF = value; } } public Models.Colour EarthColourW { get { return _earthColourW; } set { _earthColourW = value; } } public Models.Contacts EartContact { get { return _earthContact; } set { _earthContact = value; } } + public ObservableCollection EarthmatCU { get { return _earthmatCU; } set { _earthmatCU = value; } } + public string SelectedEarthmatCU { get { if (_selectedEarthmatCU == null) { return string.Empty; } else { return _selectedEarthmatCU; } } set { _selectedEarthmatCU = value; } } + public ObservableCollection EarthmatCL { get { return _earthmatCL; } set { _earthmatCL = value; } } + public string SelectedEarthmatCL { get { if (_selectedEarthmatCL == null) { return string.Empty; } else { return _selectedEarthmatCL; } } set { _selectedEarthmatCL = value; } } + public int? Percent { get @@ -338,7 +349,9 @@ public EarthmatViewModel(FieldNotes inDetailModel) //Fill some first order comboboxes FillDefFabric(); FillBedthick(); + FillContactTypes(); FillContactU(); + FillContactL(); FillRelatedEarthmat(); FillMineral(); @@ -449,6 +462,8 @@ public void AutoFillDialog(FieldNotes incomingData) _selectedEarthmatMagQualifier = existingDataDetail.earthmat.EarthMatMagQualifier; _selectedEarthmatMI = existingDataDetail.earthmat.EarthMatMetaIntensity; _selectedEarthmatMF = existingDataDetail.earthmat.EarthMatMetaIFacies; + _selectedEarthmatCU = existingDataDetail.earthmat.EarthMatContactUp; + _selectedEarthmatCL = existingDataDetail.earthmat.EarthMatContactLow; //Update UI RaisePropertyChanged("EarthmatID"); @@ -484,7 +499,14 @@ public void AutoFillDialog(FieldNotes incomingData) { RaisePropertyChanged("SelectedEarthmatMF"); } - + if (_selectedEarthmatCL != null) + { + RaisePropertyChanged("SelectedEarthmatCL"); + } + if (_selectedEarthmatCU != null) + { + RaisePropertyChanged("SelectedEarthmatCU"); + } //Surficial if (_surficialVisibility == Visibility.Visible) { @@ -632,7 +654,14 @@ public void SaveDialogInfo() { earthmodel.EarthMatClastForm = _selectedEarthmatClast; } - + if (SelectedEarthmatCL != null) + { + earthmodel.EarthMatContactLow = SelectedEarthmatCL; + } + if (SelectedEarthmatCU != null) + { + earthmodel.EarthMatContactUp = SelectedEarthmatCU; + } if (_groupTypeDetail != string.Empty) { //Get group @@ -728,6 +757,47 @@ public void InitFill2ndRound(string fullLithoText) FillOccur(); } + /// + /// Will fill the material contact combobox + /// + public void FillContactU() + { + + //Init. + string fieldName = Dictionaries.DatabaseLiterals.FieldEarthMatContactUp; + string tableName = Dictionaries.DatabaseLiterals.TableEarthMat; + foreach (var itemCU in accessData.GetComboboxListWithVocab(tableName, fieldName, out _selectedEarthmatCU)) + { + _earthmatCU.Add(itemCU); + } + + + //Update UI + RaisePropertyChanged("EarthmatCU"); + RaisePropertyChanged("SelectedEarthmatCU"); + + } + /// + /// Will fill the material contact combobox + /// + public void FillContactL() + { + + //Init. + string fieldName = Dictionaries.DatabaseLiterals.FieldEarthMatContactLow; + string tableName = Dictionaries.DatabaseLiterals.TableEarthMat; + foreach (var itemCL in accessData.GetComboboxListWithVocab(tableName, fieldName, out _selectedEarthmatCL)) + { + _earthmatCL.Add(itemCL); + } + + + //Update UI + RaisePropertyChanged("EarthmatCL"); + RaisePropertyChanged("SelectedEarthmatCL"); + + } + private void FillMineral() { //Init. @@ -1093,7 +1163,7 @@ public void FillColourQ() /// /// Will fill the material contact combobox /// - public void FillContactU() + public void FillContactTypes() { //Init. diff --git a/GSCFieldApp/Views/EarthmatDialog.xaml b/GSCFieldApp/Views/EarthmatDialog.xaml index 78bfdb11..e8b387f9 100644 --- a/GSCFieldApp/Views/EarthmatDialog.xaml +++ b/GSCFieldApp/Views/EarthmatDialog.xaml @@ -344,7 +344,7 @@ - + + + + + + + + + From 0a3f70403f171ee7506f336fe8064b861f8d8efb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 15 Sep 2023 17:45:26 -0400 Subject: [PATCH 027/177] #254 added back a contact note field. --- GSCFieldApp/Dictionaries/DatabaseLiterals.cs | 1 + GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 786432 -> 786432 bytes GSCFieldApp/Models/EarthMaterial.cs | 11 ++++++++++- GSCFieldApp/ViewModels/EarthmatViewModel.cs | 5 +++-- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs index 8fe9ce0f..fc21913d 100644 --- a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs +++ b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs @@ -133,6 +133,7 @@ public static class DatabaseLiterals public const string FieldEarthMatH2O = "H2OCONTENT"; //Version 1.7 public const string FieldEarthMatOxidation = "OXIDATION"; //Version 1.7 public const string FieldEarthMatClastForm = "CLASTFORM"; //Version 1.7 + public const string FieldEarthMatContactNote = "CONTACT_NOTE"; //Version 1.8 public const string FieldSampleID = "SAMPLEID"; //Version 1.0 public const string FieldSampleName = "SAMPLEIDNAME"; //Version 1.5 diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 2441465bd314cf55f56f746570a8e595f569e4b0..1a926bd26d69d9787204c291b4a8d291edcb88b9 100644 GIT binary patch delta 142 zcmZo@FlcBnm>@0ql7WHY01!g~LKhuei1=z2d$n3IOV`D&znF delta 127 zcmZo@FlcBnm>@0qf`NhI01!g~xFy65D&Gf71gJSga>I7&vb~`j{)0jjPSTk6m0>m$659 ayWVZC5T@xL9&uf3SANB{UHKLFT~PowGbpJ5 diff --git a/GSCFieldApp/Models/EarthMaterial.cs b/GSCFieldApp/Models/EarthMaterial.cs index dd3ed9e3..cf4196a2 100644 --- a/GSCFieldApp/Models/EarthMaterial.cs +++ b/GSCFieldApp/Models/EarthMaterial.cs @@ -82,6 +82,9 @@ public class EarthMaterial [Column(DatabaseLiterals.FieldEarthMatContactLow)] public string EarthMatContactLow { get; set; } + [Column(DatabaseLiterals.FieldEarthMatContactNote)] + public string EarthMatContactNote{ get; set; } + [Column(DatabaseLiterals.FieldEarthMatInterp)] public string EarthMatInterp { get; set; } @@ -194,9 +197,15 @@ public Dictionary> getFieldList earthmatFieldList[DatabaseLiterals.DBVersion] = earthmatFieldListDefault; + //Revert shcema 1.8 changes + List earthmatFieldList170 = new List(); + earthmatFieldList170.AddRange(earthmatFieldListDefault); + earthmatFieldList170.Remove(DatabaseLiterals.FieldEarthMatContactNote); + earthmatFieldList[DatabaseLiterals.DBVersion170] = earthmatFieldList170; + //Revert shcema 1.7 changes List earthmatFieldList160 = new List(); - earthmatFieldList160.AddRange(earthmatFieldListDefault); + earthmatFieldList160.AddRange(earthmatFieldList170); earthmatFieldList160.Remove(DatabaseLiterals.FieldEarthMatSorting); earthmatFieldList160.Remove(DatabaseLiterals.FieldEarthMatH2O); earthmatFieldList160.Remove(DatabaseLiterals.FieldEarthMatOxidation); diff --git a/GSCFieldApp/ViewModels/EarthmatViewModel.cs b/GSCFieldApp/ViewModels/EarthmatViewModel.cs index 376dbf53..83853c55 100644 --- a/GSCFieldApp/ViewModels/EarthmatViewModel.cs +++ b/GSCFieldApp/ViewModels/EarthmatViewModel.cs @@ -42,6 +42,7 @@ public class EarthmatViewModel: ViewModelBase private Models.Colour _earthColourF = new Models.Colour(); private Models.Contacts _earthContact = new Contacts(); + private Visibility _bedrockVisibility = Visibility.Visible; //Visibility for extra fields private Visibility _surficialVisibility = Visibility.Collapsed; //visibility for extra fields public string projectType = string.Empty; //Will hold project type for list parsing. @@ -438,7 +439,7 @@ public void AutoFillDialog(FieldNotes incomingData) _stationid = existingDataDetail.ParentID; _alias = existingDataDetail.earthmat.EarthMatName; _interpretation = existingDataDetail.earthmat.EarthMatInterp; - //_contactNote = existingDataDetail.earthmat.EarthMatContact; + _contactNote = existingDataDetail.earthmat.EarthMatContactNote; _colourindex = existingDataDetail.earthmat.EarthMatColourInd.ToString(); _mag = existingDataDetail.earthmat.EarthMatMagSuscept; _groupTypeDetail = existingDataDetail.earthmat.getGroupTypeDetail; @@ -601,7 +602,7 @@ public void SaveDialogInfo() earthmodel.EarthMatName = _alias; earthmodel.EarthMatMagSuscept = _mag; earthmodel.EarthMatColourInd = int.Parse(_colourindex); - //earthmodel.EarthMatContact = _contactNote; + earthmodel.EarthMatContactNote = _contactNote; earthmodel.EarthMatInterp = _interpretation; earthmodel.EarthMatNotes = _notes; earthmodel.EarthMatPercent = _percent; From 894ea0c4b398f40c6e141c0a68bba2a39a4d6ed1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 18 Sep 2023 13:03:36 -0400 Subject: [PATCH 028/177] Edited some lithdetails for metamorphic group #264 --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 786432 -> 794624 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index 1a926bd26d69d9787204c291b4a8d291edcb88b9..db6ec67455d67476aab7d358d53f8b6e778ef4dc 100644 GIT binary patch delta 2010 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 From dee9c102f3f6c2c6a62d0f6606209558dc2f05ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 18 Sep 2023 16:08:31 -0400 Subject: [PATCH 029/177] #293 explicit foreign key usage in data model. --- GSCFieldApp/Dictionaries/DatabaseLiterals.cs | 6 +++-- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 794624 -> 794624 bytes GSCFieldApp/Models/MineralAlteration.cs | 22 +++++++++++++----- GSCFieldApp/Models/Sample.cs | 2 +- .../Services/DatabaseServices/DataAccess.cs | 8 +++++-- .../DatabaseServices/DataIDCalculation.cs | 4 ++-- GSCFieldApp/ViewModels/DocumentViewModel.cs | 2 +- GSCFieldApp/ViewModels/FieldNotesViewModel.cs | 6 ++--- .../MineralizationAlterationViewModel.cs | 3 +-- 9 files changed, 34 insertions(+), 19 deletions(-) diff --git a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs index fc21913d..a1262f53 100644 --- a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs +++ b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs @@ -274,11 +274,13 @@ public static class DatabaseLiterals public const string FieldMineralAlterationModeDeprecated = "M_MODE";//Version 1.0 deprecated public const string FieldMineralAlterationDistrubute = "DISTRIBUTE";//Version 1.0 public const string FieldMineralAlterationNotes = "NOTES";//Version 1.0 - public const string FieldMineralAlterationRelTable = "RELATIONTABLE";//Version 1.0 - public const string FieldMineralAlterationRelID = "RELATIONID";//Version 1.0 + public const string FieldMineralAlterationRelTableDeprecated = "RELATIONTABLE";//Version 1.0 deprecated + public const string FieldMineralAlterationRelIDDeprecated = "RELATIONID";//Version 1.0 deprecated public const string FieldMineralAlterationPhase = "PHASE"; //Version 1.6 public const string FieldMineralAlterationTexture = "TEXTSTRUC"; //Version 1.6 public const string FieldMineralAlterationFacies = "ALTERATION_FACIES"; //Version 1.6 + public const string FieldMineralAlterationStationID = "STATIONID"; //Version 1.8 + public const string FieldMineralAlterationEarthmatID = "EARTHMATID"; //Version 1.8 public const string FieldEnvID = "ENVIRONID"; //Version 1.6 public const string FieldEnvName = "ENVIRONIDNAME"; //Version 1.6 diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index db6ec67455d67476aab7d358d53f8b6e778ef4dc..e545b079d89dfb6863cbf7badfa29f4186f22e25 100644 GIT binary patch delta 377 zcmYk%ze_?<6bJBo&-1XM7+BJic3tf$_rOWv#0@E1PMc*SUdLt1jRuxP z`4N*!zNdop(`}L}X%ds{k}i5Gsx_09iKbMEx@%;Ws^dbhu_}o=+($ucPDJatLT#)J z!~fEOl|`k2eMOgN>88g+bHdj|0O5bfS1Lj+e4--zf;(W^eMBW`f&ne4+>x|#`upsr z43AN}*m}crh65o0)9a=A$VmaN#6uHPij5GuD8em_P-iZ&#LSr)y1%dyUt3S|gBx`5 s1cguDf5K6|%^<*!0mk{I3iI6mjAQ%^V1!Qc>1RylzuG9i+789~23~)4!2kdN delta 349 zcmZoTV9;>DV1l&ZX9fm_LqH4#jFTqn7&Cs}m@t8#%>yW==-B*?fBQFnM(z*N%mNG? zj8+VMTX`dSc)2!mrgCty{$aEN3NcKTVJe!g^@3{+e{--SySTG6W1DVCVp2}(^bha2 zq^BQ#%k_Qw&0AbL)BD+(c&Ast=aQMu_nwPydiZUwAT9<5rZ?icx{Ted+uI*-nKDhk z_=rnsy47Q@p7y`2OhC*G#4JF}3dC$c%nrmHK+L)QFDnB88|+&?`Pb~ z+Q{3)e1ajCTV}GMf$R3z3tSP5Tl<(enV7g$wja36^`CkBbS9=$W{|aU=+??_Z@SA> z&m;=;IXgow1CIxvB8LK(5}P6OQHENedFk70A8;*Z-+tmc7ZcNVrB_^POxsu9=DNwa S{nSma`;2WLxR!n3HUI$arEvrR diff --git a/GSCFieldApp/Models/MineralAlteration.cs b/GSCFieldApp/Models/MineralAlteration.cs index c4d54839..af79f630 100644 --- a/GSCFieldApp/Models/MineralAlteration.cs +++ b/GSCFieldApp/Models/MineralAlteration.cs @@ -37,11 +37,12 @@ public class MineralAlteration [Column(DatabaseLiterals.FieldMineralAlterationNotes)] public string MANotes { get; set; } - [Column(DatabaseLiterals.FieldMineralAlterationRelTable)] - public string MAParentTable { get; set; } + [Column(DatabaseLiterals.FieldMineralAlterationEarthmatID)] + public int? MAEarthmatID { get; set; } + + [Column(DatabaseLiterals.FieldMineralAlterationStationID)] + public int MAStationID { get; set; } - [Column(DatabaseLiterals.FieldMineralAlterationRelID)] - public int MAParentID { get; set; } //Hierarchy public string ParentName = DatabaseLiterals.TableStation; @@ -93,16 +94,25 @@ public Dictionary> getFieldList maFieldList[DatabaseLiterals.DBVersion] = maFieldListDefault; + //Revert schema 1.8 changes + List maFieldList170 = new List(); + maFieldList170.AddRange(maFieldListDefault); + maFieldList170.Remove(DatabaseLiterals.FieldMineralAlterationEarthmatID); + maFieldList170.Remove(DatabaseLiterals.FieldMineralAlterationStationID); + maFieldList170.Remove(DatabaseLiterals.FieldMineralAlterationRelIDDeprecated); + maFieldList170.Remove(DatabaseLiterals.FieldMineralAlterationRelTableDeprecated); + maFieldList[DatabaseLiterals.DBVersion170] = maFieldList170; + //Revert shcema 1.7 changes //List maFieldList160 = new List(); //maFieldList160.AddRange(maFieldListDefault); //maFieldList160.Remove(DatabaseLiterals.FieldGenericRowID); - maFieldList[DatabaseLiterals.DBVersion160] = maFieldListDefault; + maFieldList[DatabaseLiterals.DBVersion160] = maFieldList170; //Revert schema 1.6 changes. List maFieldList150 = new List(); - maFieldList150.AddRange(maFieldListDefault); + maFieldList150.AddRange(maFieldList170); int unitIndex = maFieldList150.IndexOf(DatabaseLiterals.FieldMineralAlterationUnit); maFieldList150.Insert(unitIndex + 1, DatabaseLiterals.FieldMineralAlterationMineralDeprecated); diff --git a/GSCFieldApp/Models/Sample.cs b/GSCFieldApp/Models/Sample.cs index 53b152c3..8806bb46 100644 --- a/GSCFieldApp/Models/Sample.cs +++ b/GSCFieldApp/Models/Sample.cs @@ -124,7 +124,7 @@ public Dictionary> getFieldList sampleFieldList[DatabaseLiterals.DBVersion] = sampleFieldListDefault; - //Revert shcema 1. changes + //Revert shcema 1.8 changes List sampleFieldList170 = new List(); sampleFieldList170.AddRange(sampleFieldListDefault); sampleFieldList170.Remove(DatabaseLiterals.FieldSampleIsBlank); diff --git a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs index 09509b2f..cd1100c4 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs @@ -817,6 +817,7 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne { queryList.AddRange(GetUpgradeQueryVersion1_8(attachDBName)); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableSample); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableMineralAlteration); newVersionNumber = DatabaseLiterals.DBVersion180; } @@ -2681,11 +2682,11 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) //Get view creation queries to mitigate GUID ids to integer ids. insertQuery_17.Add(GenerateLegacyFormatViews(attachedDBName, TableMineralAlteration, FieldMineralAlterationID, - FieldMineralAlterationRelID, statView, FieldStationID)); + FieldMineralAlterationRelIDDeprecated, statView, FieldStationID)); //Get insert query Tuple primeMA= new Tuple(FieldMineralAlterationID, ViewGenericLegacyPrimeKey); - Tuple foreignMA = new Tuple(FieldMineralAlterationRelID, ViewGenericLegacyForeignKey); + Tuple foreignMA = new Tuple(FieldMineralAlterationRelIDDeprecated, ViewGenericLegacyForeignKey); string MAView = ViewPrefix + TableMineralAlteration; insertQuery_17.Add(GenerateInsertQueriesFromModel(maFieldList, nullFieldList, TableMineralAlteration, @@ -2810,6 +2811,9 @@ public List GetUpgradeQueryVersion1_8(string attachedDBName) #endregion + #region F_MINERALIZATION_ALTERATION + #endregion + return insertQuery_18; } diff --git a/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs b/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs index 689e61bc..fea0022c 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataIDCalculation.cs @@ -805,7 +805,7 @@ public string CalculateMineralAlterationAlias(int parentID, string parentAlias) //Querying with Linq List maTableRaw = dAccess.ReadTable(minAlterationModel.GetType(), null); IEnumerable maTable = maTableRaw.Cast(); //Cast to proper list type - IEnumerable maParentStations = from ma in maTable where ma.MAParentID == parentID orderby ma.MAName descending select ma.MAName; + IEnumerable maParentStations = from ma in maTable where ma.MAStationID == parentID orderby ma.MAName descending select ma.MAName; int startingNumber = 1; string startingNumberStr = string.Empty; @@ -833,7 +833,7 @@ public string CalculateMineralAlterationAlias(int parentID, string parentAlias) finaleMAString = parentAlias + prefix + startingNumberStr; //Find existing - IEnumerable existingMA = from ma2 in maTable where ma2.MAParentID == parentID && ma2.MAName == finaleMAString select ma2; + IEnumerable existingMA = from ma2 in maTable where ma2.MAStationID == parentID && ma2.MAName == finaleMAString select ma2; if (existingMA.Count() == 0 || existingMA == null) { diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index 3ea8def4..767edd8a 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -924,7 +924,7 @@ private void FillRelatedIDs() if (_selectedRelatedTable == DatabaseLiterals.TableMineralAlteration) { string filterMASelectJoin = "Select * from " + DatabaseLiterals.TableMineralAlteration + " join " + DatabaseLiterals.TableStation; - string filterMAWhere = " on " + DatabaseLiterals.TableMineralAlteration + "." + DatabaseLiterals.FieldMineralAlterationRelID + " = " + DatabaseLiterals.TableStation + "." + DatabaseLiterals.FieldStationID + " where " + DatabaseLiterals.TableStation + "." + DatabaseLiterals.FieldStationID + " = " + processedStationID; + string filterMAWhere = " on " + DatabaseLiterals.TableMineralAlteration + "." + DatabaseLiterals.FieldMineralAlterationStationID + " = " + DatabaseLiterals.TableStation + "." + DatabaseLiterals.FieldStationID + " where " + DatabaseLiterals.TableStation + "." + DatabaseLiterals.FieldStationID + " = " + processedStationID; List relatedMA = dataAcess.ReadTable(maModel.GetType(), filterMASelectJoin + filterMAWhere); IEnumerable mineralizationAlterations = relatedMA.Cast(); foreach (MineralAlteration ma in mineralizationAlterations) diff --git a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs index ace28d2d..6c77ef0e 100644 --- a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs @@ -1030,7 +1030,7 @@ public void FillMineralAltFromStation() //Querying with Linq List maTableRaw = dAccess.ReadTable(mineralAltModel.GetType(), null); IEnumerable maTable = maTableRaw.Cast(); //Cast to proper list type - IEnumerable maParentStations = from ma in maTable where ma.MAParentID == statID select ma; + IEnumerable maParentStations = from ma in maTable where ma.MAStationID == statID select ma; if (maParentStations.Count() != 0) { @@ -1053,7 +1053,7 @@ public void FillMineralAltFromStation() GenericFieldID = DatabaseLiterals.FieldMineralAlterationID, GenericAliasName = currentMinealAlt.MAName, - ParentID = currentMinealAlt.MAParentID, //TO keep the link with location table + ParentID = currentMinealAlt.MAStationID, //TO keep the link with location table ParentTableName = DatabaseLiterals.TableStation, //To keep the link with location table. MainID = currentReport.ParentID @@ -2137,7 +2137,7 @@ private void FillMineral() //Get a list of minerals from parent IEnumerable earthFromStation = from e in earthTable join stat in stationTable on e.EarthMatStatID equals stat.StationID where stat.StationID == _reportDetailedStation[_reportStationIndex].GenericID select e.EarthMatID; - IEnumerable mineralizationAlterationFromStation = from ma in maTable join stat in stationTable on ma.MAParentID equals stat.StationID where stat.StationID == _reportDetailedStation[_reportStationIndex].GenericID select ma.MAID; + IEnumerable mineralizationAlterationFromStation = from ma in maTable join stat in stationTable on ma.MAStationID equals stat.StationID where stat.StationID == _reportDetailedStation[_reportStationIndex].GenericID select ma.MAID; //Get resulting sample class from previous list of earthmat ids IEnumerable minParent = from smp in mineralTable join e2 in earthTable on smp.MineralEMID equals e2.EarthMatID where earthFromStation.Contains(e2.EarthMatID) select smp; diff --git a/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs b/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs index 2608d96c..1b17c518 100644 --- a/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs +++ b/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs @@ -176,8 +176,7 @@ public void SaveDialogInfo() mineralAltModel.MAID = _mineralAltID; //Prime key mineralAltModel.MAName = _mineralAltAlias; mineralAltModel.MANotes = _mineralAltNote; - mineralAltModel.MAParentTable = Dictionaries.DatabaseLiterals.TableStation; - mineralAltModel.MAParentID = _mineralAltParentID; + mineralAltModel.MAStationID = _mineralAltParentID; //process list of values so they are concatenated. ConcatenatedCombobox ccBox = new ConcatenatedCombobox(); From cc0d1ba17c1eec0455fb9be64dd3b19070f63dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 18 Sep 2023 16:13:56 -0400 Subject: [PATCH 030/177] #293 finalized upgrade code for mineralization alteration --- .../Services/DatabaseServices/DataAccess.cs | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs index cd1100c4..26c990a6 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs @@ -2789,7 +2789,7 @@ public List GetUpgradeQueryVersion1_8(string attachedDBName) if (sampleFields == DatabaseLiterals.FieldSampleIsBlank) { sample_querySelect = sample_querySelect + - ", NULL as " + DatabaseLiterals.FieldSampleHorizon; + ", NULL as " + DatabaseLiterals.FieldSampleIsBlank; } else { @@ -2812,6 +2812,45 @@ public List GetUpgradeQueryVersion1_8(string attachedDBName) #endregion #region F_MINERALIZATION_ALTERATION + + MineralAlteration modelMA = new MineralAlteration(); + List maFieldList = modelMA.getFieldList[DBVersion]; + string ma_querySelect = string.Empty; + + foreach (string maFields in maFieldList) + { + //Get all fields except alias + + if (maFields != maFieldList.First()) + { + if (maFields == DatabaseLiterals.FieldMineralAlterationEarthmatID) + { + ma_querySelect = ma_querySelect + + ", NULL as " + DatabaseLiterals.FieldMineralAlterationEarthmatID; + } + else if (maFields == DatabaseLiterals.FieldMineralAlterationStationID) + { + ma_querySelect = ma_querySelect + + ", " + DatabaseLiterals.FieldMineralAlterationRelIDDeprecated + " as " + DatabaseLiterals.FieldMineralAlterationStationID; + } + else + { + ma_querySelect = ma_querySelect + ", ma." + maFields + " as " + maFields; + } + + } + else + { + ma_querySelect = " ma." + maFields + " as " + maFields; + } + + } + ma_querySelect = ma_querySelect.Replace(", ,", ""); + + string insertQuery_18_ma = "INSERT INTO " + DatabaseLiterals.TableMineralAlteration + " SELECT " + ma_querySelect; + insertQuery_18_ma = insertQuery_18_ma + " FROM " + attachedDBName + "." + DatabaseLiterals.TableMineralAlteration + " as ma"; + insertQuery_18.Add(insertQuery_18_ma); + #endregion return insertQuery_18; From 8015ace78a31c17af21cfe85ca300c3cd5a7215f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Mon, 18 Sep 2023 17:10:03 -0400 Subject: [PATCH 031/177] #282 added new scale direction field in document/photo form. --- GSCFieldApp/Dictionaries/DatabaseLiterals.cs | 3 +- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 794624 -> 798720 bytes GSCFieldApp/Models/Document.cs | 4 ++- GSCFieldApp/Resources/en-US/Resources.resw | 3 ++ GSCFieldApp/Resources/fr/Resources.resw | 3 ++ GSCFieldApp/ViewModels/DocumentViewModel.cs | 29 ++++++++++++++++++- GSCFieldApp/Views/DocumentDialog.xaml | 28 ++++++++++-------- 7 files changed, 55 insertions(+), 15 deletions(-) diff --git a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs index a1262f53..432ffef6 100644 --- a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs +++ b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs @@ -203,7 +203,8 @@ public static class DatabaseLiterals public const string FieldDocumentType = "DOCUMENTTYPE";//Version 1.0 public const string FieldDocumentHyperlink = "HYPERLINK"; public const string FieldDocumentObjLocX = "OBJECTLOCX"; - public const string FIeldDocumentObjLocY = "OBJECTLOCY"; + public const string FieldDocumentObjLocY = "OBJECTLOCY"; + public const string FieldDocumentScaleDirection = "SCALE_DIRECTION"; //Version 1.8 public const string FieldStructureID = "STRUCID";//Version 1.0 public const string FieldStructureName = "STRUCIDNAME";//Version 1.5 diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index e545b079d89dfb6863cbf7badfa29f4186f22e25..d9d5d51d0428132cc9019b6625398d886afc9293 100644 GIT binary patch delta 1558 zcmaiz&2Jk;7{+I8#~*8NtSC)$D9Cm>^w197-Psw>^3is8b`}MaO!s^9$I3ZQ(B5?slR1r!L2c)XyKm{lG6DlMaJ5jOgR*dwlc1OGW z{N{Pz_x5+%?Z?`ur$(Lt0QRJg7yM%99EMMt^Skpfn}b(cYdQEyWKO*czy2q8?-GpV zlXo&JotO8*%skX!B(oA;D8uvVxZDfd{&syCN=2liQZcC^skl@^Dk+r;>&wbc>0~Oi z0kR)wUmyN+cxRZXzo<7=klDDaYqOcnW_&IUbX_fMsAsbYZeMjLe0y@vowzFawTWqe zaL1c-r}_0M;a}tB^~%y}c{yKMTCXkyOSRQ}?Y(@kSk2cL%FETfeC|A~E!KkC`ATh} zu~JD~4wYE+#87k}3^mmcqx>%y=%Iv6Ru48fTK0GlA2O_-i53{DK>dai{`-DHSi;Udah*KjN> zgl-H*>I=WN9xNhJt_Sk2f7(tHV2xMxMB4!W`aYl+ZHL+*9_8@@hI7`#mpy_6>>A_+1)%N7E?RbwZ*G!jS zLq|^0lIJEw0&txn9b@89qi9+h9kiX9sn&z(hP*`kj1A4eNVAa67K7FlRLHXssQu0n z#CY%7U8V_FV2b1s4P;taM;37mWY{M27^W6?%t44!sn!SI|$)-8=zDB|A83pFGu)hCB66U=c$+y zRqw~Lmxj00`*N_qQ8$}b`$`vYq>$?=6v32Ow(BC@5i%pf+sUDzW5nGy}d&n@1PF^NP4ihHgrsEQW zn~bsN0f{4^PTzKbWbY;haatZ!-sppn4g6Yr`WU0ogJCl6Ib2SvU|8m&Q;e8hw2&(- g&IG}xV?1YW{F$S{?c~xO+-@-OK9cU}K2x@T0fU3bpa1{> delta 279 zcmZp8V9;>DV1l&Z7X}7~LqH4#j8i7+7&CrpOxT*h$S=?6IlVxhv7af9cQfOL|MJ@$ z7+DlJX7Ch)6mQ?olfY=e$fWDE-7b+)pPS9h%tF_~vAsBl5r~<9m>Gy!fS47C*?^cG zh&h0mb9-?P*Ti694qgTZ{%(G2zL$Ix`Am7Q@MiOFHZ*w2v+XPw3$q9t^9cslM&2go z6Wl8~PqCk1h~<`aUwEfI=u78Z%m0oc@DrFI1v1ORfk-)70v{aO3yKM^h G;oSiL6Hvwg diff --git a/GSCFieldApp/Models/Document.cs b/GSCFieldApp/Models/Document.cs index 869b4d33..078c6e2c 100644 --- a/GSCFieldApp/Models/Document.cs +++ b/GSCFieldApp/Models/Document.cs @@ -49,9 +49,11 @@ public class Document [Column(DatabaseLiterals.FieldDocumentObjLocX)] public double? ObjectX { get; set; } - [Column(DatabaseLiterals.FIeldDocumentObjLocY)] + [Column(DatabaseLiterals.FieldDocumentObjLocY)] public double? ObjectY { get; set; } + [Column(DatabaseLiterals.FieldDocumentScaleDirection)] + public string ScaleDirection { get; set; } /// /// Soft mandatory field check. User can still create record even if fields are not filled. diff --git a/GSCFieldApp/Resources/en-US/Resources.resw b/GSCFieldApp/Resources/en-US/Resources.resw index c0c5dcc1..27c79e23 100644 --- a/GSCFieldApp/Resources/en-US/Resources.resw +++ b/GSCFieldApp/Resources/en-US/Resources.resw @@ -1773,4 +1773,7 @@ Shimamura, Kaz – Senior Advisor Relation description + + Scale Direction + \ No newline at end of file diff --git a/GSCFieldApp/Resources/fr/Resources.resw b/GSCFieldApp/Resources/fr/Resources.resw index b529d789..a94dc731 100644 --- a/GSCFieldApp/Resources/fr/Resources.resw +++ b/GSCFieldApp/Resources/fr/Resources.resw @@ -1768,4 +1768,7 @@ Shimamura, Kaz – Conseiller Description de la relation + + Direction de l'échelle sur la photo + \ No newline at end of file diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index 767edd8a..51a5f8bc 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -43,6 +43,8 @@ public class DocumentViewModel : ViewModelBase private ObservableCollection _docType = new ObservableCollection(); private string _selectedDocType = string.Empty; private ObservableCollection _category = new ObservableCollection(); + private ObservableCollection _scaledir = new ObservableCollection(); + private string _selectedScaleDir = string.Empty; private ObservableCollection _categoryValues = new ObservableCollection(); private string _selectedCategory = string.Empty; private ObservableCollection _relatedTable = new ObservableCollection(); @@ -229,6 +231,8 @@ public string FileToNumber public ObservableCollection DocType { get { return _docType; } set { _docType = value; } } public string SelectedDocType { get { return _selectedDocType; } set { _selectedDocType = value; } } + public ObservableCollection ScaleDirection { get { return _scaledir; } set { _scaledir = value; } } + public string SelectedScaleDir { get { return _selectedScaleDir; } set { _selectedScaleDir = value; } } public ObservableCollection Category { get { return _category; } set { _category = value; } } public ObservableCollection CategoryValues { get { return _categoryValues; } set { _categoryValues = value; } } public string SelectedCategory { get { return _selectedCategory; } set { _selectedCategory = value; } } @@ -291,6 +295,7 @@ public DocumentViewModel(FieldNotes inDetailModel, FieldNotes stationSummaryID) FillDocumentType(); FillRelatedTable(); FillRelatedIDs(); + FillScaleDirections(); RaisePropertyChanged("SelectedRelatedID"); RaisePropertyChanged("SelectedRelatedTable"); @@ -400,7 +405,10 @@ public bool SaveDialogInfoAsync() { documentModel.Category = SelectedCategory; } - + if (SelectedScaleDir != null) + { + documentModel.ScaleDirection = SelectedScaleDir; + } if (SelectedCategory != null) { documentModel.Category = concat.PipeValues(_categoryValues); //process list of values so they are concatenated. @@ -701,6 +709,23 @@ private void FillCategory() RaisePropertyChanged("SelectedCategory"); + } + + /// + /// Will fill the document type combobox + /// + private void FillScaleDirections() + { + //Init. + string fieldName = Dictionaries.DatabaseLiterals.FieldDocumentScaleDirection; + string tableName = Dictionaries.DatabaseLiterals.TableDocument; + _scaledir = new ObservableCollection(accessData.GetComboboxListWithVocab(tableName, fieldName, out _selectedScaleDir)); + + //Update UI + RaisePropertyChanged("ScaleDirection"); + RaisePropertyChanged("SelectedScaleDir"); + + } /// @@ -970,6 +995,7 @@ public async void AutoFillDialogAsync(FieldNotes incomingData) //_selectedCategory = existingDataDetailDocument.document.Category; _selectedDocType = existingDataDetailDocument.document.DocumentType; _selectedRelatedTable = existingDataDetailDocument.document.RelatedTable; + _selectedScaleDir = existingDataDetailDocument.document.ScaleDirection; //Create thumbnail if needed if (existingDataDetailDocument.document.PhotoFileExists) @@ -1006,6 +1032,7 @@ public async void AutoFillDialogAsync(FieldNotes incomingData) //RaisePropertyChanged("SelectedCategory"); RaisePropertyChanged("SelectedDocType"); + RaisePropertyChanged("SelectedScaleDir"); if (_documentModeVisibility == Visibility.Visible) { diff --git a/GSCFieldApp/Views/DocumentDialog.xaml b/GSCFieldApp/Views/DocumentDialog.xaml index cd95483c..76cd9398 100644 --- a/GSCFieldApp/Views/DocumentDialog.xaml +++ b/GSCFieldApp/Views/DocumentDialog.xaml @@ -93,10 +93,14 @@ - + + + + RelativePanel.Below="DocumentScaleDirectionCombobox" + Text ="{x:Bind DocViewModel.Description, Mode=TwoWay}" TabIndex="5"/> - public class MediaBrushConverter: IValueConverter + public class MediaBrushConverter : IValueConverter { public Brush defaultBrush = new SolidColorBrush(); diff --git a/GSCFieldApp/Converters/PicklistDefaultValueConverter.cs b/GSCFieldApp/Converters/PicklistDefaultValueConverter.cs index 2b1ab714..b08336ef 100644 --- a/GSCFieldApp/Converters/PicklistDefaultValueConverter.cs +++ b/GSCFieldApp/Converters/PicklistDefaultValueConverter.cs @@ -6,7 +6,7 @@ namespace GSCFieldApp.Converters { class PicklistDefaultValueConverter : IValueConverter { - + public PicklistDefaultValueConverter() { diff --git a/GSCFieldApp/Converters/PicklistDescriptionConverter.cs b/GSCFieldApp/Converters/PicklistDescriptionConverter.cs index 85bdb88a..d03dc2a6 100644 --- a/GSCFieldApp/Converters/PicklistDescriptionConverter.cs +++ b/GSCFieldApp/Converters/PicklistDescriptionConverter.cs @@ -13,7 +13,7 @@ public object Convert(object value, Type targetType, object parameter, string la } else if (value.ToString() != "") { - return "(" + value.ToString() + ")"; + return "(" + value.ToString() + ")"; } else { diff --git a/GSCFieldApp/Converters/ReverseBoolConverter.cs b/GSCFieldApp/Converters/ReverseBoolConverter.cs index c306d652..134349a3 100644 --- a/GSCFieldApp/Converters/ReverseBoolConverter.cs +++ b/GSCFieldApp/Converters/ReverseBoolConverter.cs @@ -3,7 +3,7 @@ namespace GSCFieldApp.Converters { - public class ReverseBoolConverter: IValueConverter + public class ReverseBoolConverter : IValueConverter { public ReverseBoolConverter() diff --git a/GSCFieldApp/Converters/SecondOrderPicklistConverter.cs b/GSCFieldApp/Converters/SecondOrderPicklistConverter.cs index 30a69ab0..95f9b5d5 100644 --- a/GSCFieldApp/Converters/SecondOrderPicklistConverter.cs +++ b/GSCFieldApp/Converters/SecondOrderPicklistConverter.cs @@ -3,7 +3,7 @@ namespace GSCFieldApp.Converters { - public class SecondOrderPicklistConverter:IValueConverter + public class SecondOrderPicklistConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, string language) { diff --git a/GSCFieldApp/Converters/SolidColorBrushConverter.cs b/GSCFieldApp/Converters/SolidColorBrushConverter.cs index 6f4e3db3..04a8bfea 100644 --- a/GSCFieldApp/Converters/SolidColorBrushConverter.cs +++ b/GSCFieldApp/Converters/SolidColorBrushConverter.cs @@ -9,7 +9,7 @@ namespace GSCFieldApp.Converters /// A converter that takes a solidcolorbrush and outputs a solidcolorbrush, /// with a default if value is null. Used for control colors. /// - public class SolidColorBrushConverter: IValueConverter + public class SolidColorBrushConverter : IValueConverter { readonly SolidColorBrush defaultBrush = new SolidColorBrush(); diff --git a/GSCFieldApp/Converters/String2Double.cs b/GSCFieldApp/Converters/String2Double.cs index f5b23c4a..77aa59a1 100644 --- a/GSCFieldApp/Converters/String2Double.cs +++ b/GSCFieldApp/Converters/String2Double.cs @@ -1,7 +1,5 @@ using System; using Windows.UI.Xaml.Data; -using System.Diagnostics; -using System.Globalization; namespace GSCFieldApp.Converters { diff --git a/GSCFieldApp/Converters/String2Integer.cs b/GSCFieldApp/Converters/String2Integer.cs index 8372366e..c089a8d7 100644 --- a/GSCFieldApp/Converters/String2Integer.cs +++ b/GSCFieldApp/Converters/String2Integer.cs @@ -1,7 +1,5 @@ using System; using Windows.UI.Xaml.Data; -using System.Diagnostics; -using System.Globalization; namespace GSCFieldApp.Converters { diff --git a/GSCFieldApp/Converters/TextWithAzimDegreeConverter.cs b/GSCFieldApp/Converters/TextWithAzimDegreeConverter.cs index 628d3972..dace8fbf 100644 --- a/GSCFieldApp/Converters/TextWithAzimDegreeConverter.cs +++ b/GSCFieldApp/Converters/TextWithAzimDegreeConverter.cs @@ -19,7 +19,7 @@ public object Convert(object value, Type targetType, object parameter, string la return string.Format("{0}°", value); } - + } public object ConvertBack(object value, Type targetType, object parameter, string language) diff --git a/GSCFieldApp/Converters/TextWithDegreeConverter.cs b/GSCFieldApp/Converters/TextWithDegreeConverter.cs index 9a5d02b7..c08d7799 100644 --- a/GSCFieldApp/Converters/TextWithDegreeConverter.cs +++ b/GSCFieldApp/Converters/TextWithDegreeConverter.cs @@ -11,15 +11,15 @@ public object Convert(object value, Type targetType, object parameter, string la { return value; } - - else + + else { double inDegree = double.Parse(value.ToString()); inDegree = Math.Round(inDegree, 8); return string.Format("{0}°", inDegree.ToString()); } - + } public object ConvertBack(object value, Type targetType, object parameter, string language) diff --git a/GSCFieldApp/Converters/VisibilityFromReverseBoolConverter.cs b/GSCFieldApp/Converters/VisibilityFromReverseBoolConverter.cs index 5a15460d..2584b5de 100644 --- a/GSCFieldApp/Converters/VisibilityFromReverseBoolConverter.cs +++ b/GSCFieldApp/Converters/VisibilityFromReverseBoolConverter.cs @@ -4,7 +4,7 @@ namespace GSCFieldApp.Converters { - public class VisibilityFromReverseBoolConverter: IValueConverter + public class VisibilityFromReverseBoolConverter : IValueConverter { public VisibilityFromReverseBoolConverter() diff --git a/GSCFieldApp/Converters/WidthFromVisibility.cs b/GSCFieldApp/Converters/WidthFromVisibility.cs index e0712189..a31f7d11 100644 --- a/GSCFieldApp/Converters/WidthFromVisibility.cs +++ b/GSCFieldApp/Converters/WidthFromVisibility.cs @@ -1,11 +1,6 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; using Windows.UI.Xaml; using Windows.UI.Xaml.Data; -using Windows.UI; namespace GSCFieldApp.Converters { diff --git a/GSCFieldApp/Dictionaries/ApplicationLiterals.cs b/GSCFieldApp/Dictionaries/ApplicationLiterals.cs index 09adff9a..fa511459 100644 --- a/GSCFieldApp/Dictionaries/ApplicationLiterals.cs +++ b/GSCFieldApp/Dictionaries/ApplicationLiterals.cs @@ -7,7 +7,7 @@ public static class ApplicationLiterals //Will be use to keep track of user header expansion value in local settings. public const string KeyworkdExpandLocation = "expandLocation"; public const string KeyworkdExpandStation = "expandStation"; - public const string KeyworkdExpandEarthmat= "expandEarthmat"; + public const string KeyworkdExpandEarthmat = "expandEarthmat"; public const string KeyworkdExpandSample = "expandSample"; public const string KeywordExpandDocument = "expandDocument"; public const string KeywordExpandStructure = "expandStructure"; diff --git a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs index ff58ff78..b002c6ee 100644 --- a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs +++ b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs @@ -1,7 +1,4 @@ -using Windows.ApplicationModel.Contacts; -using Windows.Devices.Bluetooth.Advertisement; - -namespace GSCFieldApp.Dictionaries +namespace GSCFieldApp.Dictionaries { public static class DatabaseLiterals { @@ -152,7 +149,7 @@ public static class DatabaseLiterals public const string FieldSampleDuplicateName = "DUPLICATENAME";//Version 1.5 public const string FieldSampleState = "STATE";//Version 1.5 public const string FieldCurationID = "CURATIONID"; - public const string FieldSampleWarehouseLocation= "WAREHOUSE_LOCATION"; //Version 1.7 + public const string FieldSampleWarehouseLocation = "WAREHOUSE_LOCATION"; //Version 1.7 public const string FieldSampleBucketTray = "BUCKET_OR_TRAY_NO"; //Version 1.7 public const string FieldSampleManagementID = "SMID"; @@ -174,7 +171,7 @@ public static class DatabaseLiterals public const string FieldDictionaryRemarks = "USERREMARKS"; public const string FieldDictionarySymbol = "SYMBOL"; - + public const string FieldDictionaryManagerLinkID = "LINKID";//Version 1.0 public const string FieldDictionaryManagerCodedTheme = "CODETHEME";//Version 1.0 public const string FieldDictionaryManagerAssignTable = "ASSIGNTABLE";//Version 1.0 @@ -366,7 +363,7 @@ public static class DatabaseLiterals public const string KeywordStructure = "struc"; public const string KeywordPhoto = "photo"; public const string KeywordDocument = "document"; - public const string KeywordMA = "alteration"; + public const string KeywordMA = "alteration"; public const string KeywordMineral = "mineral"; public const string KeywordFossil = "fossil"; public const string KeywordEnvironment = "environ"; diff --git a/GSCFieldApp/GSCFieldApp.csproj b/GSCFieldApp/GSCFieldApp.csproj index 7719141a..b936f446 100644 --- a/GSCFieldApp/GSCFieldApp.csproj +++ b/GSCFieldApp/GSCFieldApp.csproj @@ -28,7 +28,7 @@ x86|x64|arm False win10-arm;win10-arm-aot;win10-x86;win10-x86-aot;win10-x64;win10-x64-aot - 2BEF7CE5EC4647A64DCBB60C29D4EE6084BDFC6E + CBA022198618BD0066C96B0C29C90B9E29CC85A4 C:\work data\datacollections\PublishedVersions\ False 100 diff --git a/GSCFieldApp/Models/Colour.cs b/GSCFieldApp/Models/Colour.cs index 9a479292..34de703d 100644 --- a/GSCFieldApp/Models/Colour.cs +++ b/GSCFieldApp/Models/Colour.cs @@ -1,9 +1,6 @@ using GSCFieldApp.Dictionaries; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace GSCFieldApp.Models { @@ -43,7 +40,7 @@ public override string ToString() } foreach (string c in colours) - { + { if (colours.IndexOf(c) == 0) { colourString = c; @@ -70,7 +67,7 @@ public Colour fromString(string inColourString = "") //Vars Colour outputColour = new Colour(); - if (inColourString!= null ) + if (inColourString != null) { List splittedColour = inColourString.Split(DatabaseLiterals.KeywordConcatCharacter).ToList(); diff --git a/GSCFieldApp/Models/Contacts.cs b/GSCFieldApp/Models/Contacts.cs index 5910b2db..60024317 100644 --- a/GSCFieldApp/Models/Contacts.cs +++ b/GSCFieldApp/Models/Contacts.cs @@ -1,9 +1,6 @@ using GSCFieldApp.Dictionaries; -using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace GSCFieldApp.Models { @@ -39,7 +36,7 @@ public override string ToString() foreach (string c in contacts) - { + { if (contacts.IndexOf(c) == 0) { contactDefinition = c; @@ -66,7 +63,7 @@ public Contacts fromString(string inContactString = "") //Vars Contacts outputContact = new Contacts(); - if (inContactString != null ) + if (inContactString != null) { List splittedContact = inContactString.Split(DatabaseLiterals.KeywordConcatCharacter2nd).ToList(); diff --git a/GSCFieldApp/Models/Document.cs b/GSCFieldApp/Models/Document.cs index 869b4d33..5de02aa8 100644 --- a/GSCFieldApp/Models/Document.cs +++ b/GSCFieldApp/Models/Document.cs @@ -1,9 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using GSCFieldApp.Dictionaries; using SQLite; -using GSCFieldApp.Dictionaries; +using System; +using System.Collections.Generic; using System.IO; +using System.Linq; namespace GSCFieldApp.Models { @@ -90,8 +90,8 @@ public string PhotoPath { _fieldbookPath = Path.Combine(localSetting.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordFieldProject).ToString(), DocumentName + ".jpg"); } - - + + return _fieldbookPath; } set { } @@ -159,7 +159,7 @@ public Dictionary> getFieldList documentFieldList144.AddRange(documentFieldList[DatabaseLiterals.DBVersion150]); int removeIndex = documentFieldList144.IndexOf(DatabaseLiterals.FieldDocumentName); documentFieldList144.Remove(DatabaseLiterals.FieldDocumentName); - documentFieldList144.Insert(removeIndex,DatabaseLiterals.FieldDocumentNameDeprecated); + documentFieldList144.Insert(removeIndex, DatabaseLiterals.FieldDocumentNameDeprecated); documentFieldList[DatabaseLiterals.DBVersion144] = documentFieldList144; return documentFieldList; diff --git a/GSCFieldApp/Models/EarthMaterial.cs b/GSCFieldApp/Models/EarthMaterial.cs index dd3ed9e3..0bdf760b 100644 --- a/GSCFieldApp/Models/EarthMaterial.cs +++ b/GSCFieldApp/Models/EarthMaterial.cs @@ -1,9 +1,8 @@ -using System; +using GSCFieldApp.Dictionaries; +using SQLite; +using System; using System.Collections.Generic; using System.Linq; -using SQLite; -using GSCFieldApp.Dictionaries; -using Newtonsoft.Json.Linq; namespace GSCFieldApp.Models { @@ -32,10 +31,10 @@ public class EarthMaterial public string EarthMatModComp { get; set; } [Column(DatabaseLiterals.FieldEarthMatMetaFacies)] - public string EarthMatMetaIFacies{ get; set; } + public string EarthMatMetaIFacies { get; set; } [Column(DatabaseLiterals.FieldEarthMatMetaIntensity)] - public string EarthMatMetaIntensity{ get; set; } + public string EarthMatMetaIntensity { get; set; } [Column(DatabaseLiterals.FieldEarthMatMapunit)] public string EarthMatMapunit { get; set; } @@ -98,10 +97,10 @@ public class EarthMaterial public string EarthMatOxidation { get; set; } [Column(DatabaseLiterals.FieldEarthMatClastForm)] - public string EarthMatClastForm{ get; set; } + public string EarthMatClastForm { get; set; } [Column(DatabaseLiterals.FieldEarthMatNotes)] - public string EarthMatNotes{ get; set; } + public string EarthMatNotes { get; set; } //Hierarchy public string ParentName = DatabaseLiterals.TableStation; @@ -176,7 +175,8 @@ public string getGroupTypeDetail [Ignore] public Dictionary> getFieldList { - get { + get + { //Create a new list of all current columns in current class. This will act as the most recent //version of the class Dictionary> earthmatFieldList = new Dictionary>(); @@ -189,7 +189,7 @@ public Dictionary> getFieldList { earthmatFieldListDefault.Add(item.CustomAttributes.First().ConstructorArguments[0].ToString().Replace("\\", "").Replace("\"", "")); } - + } earthmatFieldList[DatabaseLiterals.DBVersion] = earthmatFieldListDefault; @@ -264,11 +264,11 @@ public string GetIDLetter strOnlyID = strOnlyID + c; } } - return strOnlyID; + return strOnlyID; } - - set{ } - + + set { } + } } } diff --git a/GSCFieldApp/Models/EnvironmentModel.cs b/GSCFieldApp/Models/EnvironmentModel.cs index e618ad45..0821a5ae 100644 --- a/GSCFieldApp/Models/EnvironmentModel.cs +++ b/GSCFieldApp/Models/EnvironmentModel.cs @@ -1,10 +1,8 @@ -using System; +using GSCFieldApp.Dictionaries; +using SQLite; +using System; using System.Collections.Generic; using System.Linq; -using System.Text; -using System.Threading.Tasks; -using GSCFieldApp.Dictionaries; -using SQLite; namespace GSCFieldApp.Models { @@ -26,9 +24,9 @@ public class EnvironmentModel [Column(DatabaseLiterals.FieldEnvAzim)] public int EnvAzim { get; set; } [Column(DatabaseLiterals.FieldEnvDrainage)] - public string EnvDrainage{ get; set; } + public string EnvDrainage { get; set; } [Column(DatabaseLiterals.FieldEnvPermIndicator)] - public string EnvPermIndicator{ get; set; } + public string EnvPermIndicator { get; set; } [Column(DatabaseLiterals.FieldEnvGroundPattern)] public string EnvGroundPattern { get; set; } [Column(DatabaseLiterals.FieldEnvGroundIce)] diff --git a/GSCFieldApp/Models/FieldLocation.cs b/GSCFieldApp/Models/FieldLocation.cs index 5019db96..e0e69183 100644 --- a/GSCFieldApp/Models/FieldLocation.cs +++ b/GSCFieldApp/Models/FieldLocation.cs @@ -1,16 +1,14 @@ -using System; +using GSCFieldApp.Dictionaries; +using SQLite; +using System; using System.Collections.Generic; using System.Linq; using Template10.Mvvm; -using SQLite; -using GSCFieldApp.Dictionaries; -using System.Globalization; -using Windows.Foundation.Collections; namespace GSCFieldApp.Models { [Table(DatabaseLiterals.TableLocation)] - public class FieldLocation: BindableBase + public class FieldLocation : BindableBase { /// /// Gets or sets the identifier. @@ -166,7 +164,7 @@ public Dictionary> getFieldList locationFieldList144.Remove(DatabaseLiterals.FieldLocationAlias); locationFieldList144.Insert(removeIndex, DatabaseLiterals.FieldLocationAliasDeprecated); locationFieldList144.Insert(locationFieldList144.Count() - 2, DatabaseLiterals.FieldLocationReportLink); - + locationFieldList[DatabaseLiterals.DBVersion144] = locationFieldList144; //Revert schema 1.4.4 @@ -174,7 +172,7 @@ public Dictionary> getFieldList locationFieldList143.AddRange(locationFieldList144); int removeIndex2 = locationFieldList143.IndexOf(DatabaseLiterals.FieldLocationDatum); locationFieldList143.Remove(DatabaseLiterals.FieldLocationDatum); - locationFieldList143.Insert(removeIndex2,DatabaseLiterals.FieldLocationDatumZone); + locationFieldList143.Insert(removeIndex2, DatabaseLiterals.FieldLocationDatumZone); locationFieldList[DatabaseLiterals.DBVersion143] = locationFieldList143; //Revert schema 1.4.3 changes diff --git a/GSCFieldApp/Models/FieldNotes.cs b/GSCFieldApp/Models/FieldNotes.cs index 00001974..a3ce8ca1 100644 --- a/GSCFieldApp/Models/FieldNotes.cs +++ b/GSCFieldApp/Models/FieldNotes.cs @@ -13,7 +13,7 @@ public class FieldNotes public Models.Station station { get; set; } - public Models.Metadata metadata { get; set; } + public Models.Metadata metadata { get; set; } public Models.EarthMaterial earthmat { get; set; } @@ -55,7 +55,7 @@ public bool isValid { return _isValid; } - set { _isValid = value;} + set { _isValid = value; } } #endregion @@ -63,11 +63,11 @@ public bool isValid public FieldNotes() { location = new Models.FieldLocation(); //Init as a new class - station = new Models.Station(); - metadata = new Models.Metadata(); - earthmat = new Models.EarthMaterial(); - sample = new Models.Sample(); - document = new Models.Document(); + station = new Models.Station(); + metadata = new Models.Metadata(); + earthmat = new Models.EarthMaterial(); + sample = new Models.Sample(); + document = new Models.Document(); structure = new Models.Structure(); paleoflow = new Models.Paleoflow(); fossil = new Models.Fossil(); diff --git a/GSCFieldApp/Models/GraphicPlacement.cs b/GSCFieldApp/Models/GraphicPlacement.cs index 1c4e35c8..1ca2f45b 100644 --- a/GSCFieldApp/Models/GraphicPlacement.cs +++ b/GSCFieldApp/Models/GraphicPlacement.cs @@ -1,7 +1,7 @@ -using System; +using Esri.ArcGISRuntime.Geometry; +using System; using System.Collections.Generic; using System.Linq; -using Esri.ArcGISRuntime.Geometry; namespace GSCFieldApp.Models { @@ -39,7 +39,7 @@ public struct PlacementsStruct /// Some default offsets to start with /// public PlacementsStruct PlacementOffsets - { + { get { _placementOffsets.north = new Tuple(0, 10.0); @@ -207,7 +207,7 @@ public int GetOrientationPlacement(int order) { return defaultAzimuthPlacement[3]; } - + } /// /// From a given placement enumeration value, will return it's associated priority diff --git a/GSCFieldApp/Models/Metadata.cs b/GSCFieldApp/Models/Metadata.cs index 29ef9153..cd7f4521 100644 --- a/GSCFieldApp/Models/Metadata.cs +++ b/GSCFieldApp/Models/Metadata.cs @@ -1,9 +1,9 @@ -using System; +using GSCFieldApp.Dictionaries; +using SQLite; +using System; using System.Collections.Generic; using System.Linq; using Template10.Mvvm; -using SQLite; -using GSCFieldApp.Dictionaries; namespace GSCFieldApp.Models { @@ -74,8 +74,8 @@ public bool isValid { get { - if (UserCode != string.Empty && FieldworkType != string.Empty && MetadataActivity != string.Empty && - ProjectUser_FN != string.Empty && ProjectUser_LN != string.Empty && Version != string.Empty && + if (UserCode != string.Empty && FieldworkType != string.Empty && MetadataActivity != string.Empty && + ProjectUser_FN != string.Empty && ProjectUser_LN != string.Empty && Version != string.Empty && VersionSchema != string.Empty && StationStartNumber != string.Empty && Convert.ToInt16(StationStartNumber) < 9999) { return true; @@ -104,7 +104,7 @@ public string Geologist { return ProjectUser_LN + ", " + ProjectUser_FN; } - + } set { } diff --git a/GSCFieldApp/Models/Paleoflow.cs b/GSCFieldApp/Models/Paleoflow.cs index 76d24f6c..1738198e 100644 --- a/GSCFieldApp/Models/Paleoflow.cs +++ b/GSCFieldApp/Models/Paleoflow.cs @@ -19,7 +19,7 @@ public class Paleoflow public string PFlowClass { get; set; } [Column(DatabaseLiterals.FieldPFlowSense)] - public string PFlowSense{ get; set; } + public string PFlowSense { get; set; } [Column(DatabaseLiterals.FieldPFlowFeature)] public string PFlowFeature { get; set; } diff --git a/GSCFieldApp/Models/Sample.cs b/GSCFieldApp/Models/Sample.cs index 3d1ea7dc..0b70f8f1 100644 --- a/GSCFieldApp/Models/Sample.cs +++ b/GSCFieldApp/Models/Sample.cs @@ -1,8 +1,8 @@ -using System; +using GSCFieldApp.Dictionaries; +using SQLite; +using System; using System.Collections.Generic; using System.Linq; -using SQLite; -using GSCFieldApp.Dictionaries; namespace GSCFieldApp.Models { @@ -136,7 +136,7 @@ public Dictionary> getFieldList sampleFieldList144.AddRange(sampleFieldList[DatabaseLiterals.DBVersion150]); int removeIndex = sampleFieldList144.IndexOf(DatabaseLiterals.FieldSampleName); sampleFieldList144.Remove(DatabaseLiterals.FieldSampleName); - sampleFieldList144.Insert(removeIndex,DatabaseLiterals.FieldSampleNameDeprecated); + sampleFieldList144.Insert(removeIndex, DatabaseLiterals.FieldSampleNameDeprecated); sampleFieldList144.Remove(DatabaseLiterals.FieldSampleHorizon); sampleFieldList144.Remove(DatabaseLiterals.FieldSampleDepthMin); sampleFieldList144.Remove(DatabaseLiterals.FieldSampleDepthMax); diff --git a/GSCFieldApp/Models/SemanticZoomDataGenerator.cs b/GSCFieldApp/Models/SemanticZoomDataGenerator.cs index 3c02a529..aab19228 100644 --- a/GSCFieldApp/Models/SemanticZoomDataGenerator.cs +++ b/GSCFieldApp/Models/SemanticZoomDataGenerator.cs @@ -34,9 +34,9 @@ public static List GetGroupedData(bool refresh, string inAssi //Update past table lastAssignTable = inAssignTable; } - - return _data.GroupBy(d => d.Title, + + return _data.GroupBy(d => d.Title, (key, items) => new SemanticDataGroup() { Name = key, Items = items.ToList() }).ToList(); } @@ -61,11 +61,11 @@ private static void GenerateData(string inAssignTable, string inParentFieldName, //Get a list of parent (title) Vocabularies voc = new Vocabularies(); - + string finalQueryTitle = string.Empty; string querySelect = "SELECT * FROM " + TableDictionary; - string queryJoin = " JOIN " + TableDictionaryManager + " ON " + TableDictionary + "." + + string queryJoin = " JOIN " + TableDictionaryManager + " ON " + TableDictionary + "." + FieldDictionaryCodedTheme + " = " + TableDictionaryManager + "." + FieldDictionaryManagerCodedTheme; string queryAssignTable = " WHERE " + TableDictionaryManager + "." + FieldDictionaryManagerAssignTable + " = '" + inAssignTable + "'"; string queryAssignFieldChild = " WHERE " + TableDictionaryManager + "." + FieldDictionaryManagerAssignField + " = '" + inChildFieldName + "'"; @@ -85,11 +85,11 @@ private static void GenerateData(string inAssignTable, string inParentFieldName, string queryProjectType = " AND " + TableDictionaryManager + "." + FieldDictionaryManagerSpecificTo + " = '" + ScienceLiterals.ApplicationThemeSurficial + "'"; - finalQueryTitle = querySelect + queryJoin + queryAssignTable + queryAssignFieldChild.Replace("WHERE", "AND") + + finalQueryTitle = querySelect + queryJoin + queryAssignTable + queryAssignFieldChild.Replace("WHERE", "AND") + queryProjectType + queryVisibility + queryOrder; } - - + + List vocRaw = dAccess.ReadTable(voc.GetType(), finalQueryTitle); IEnumerable vocTable = vocRaw.Cast(); diff --git a/GSCFieldApp/Models/Station.cs b/GSCFieldApp/Models/Station.cs index cd3136f3..9fb9259d 100644 --- a/GSCFieldApp/Models/Station.cs +++ b/GSCFieldApp/Models/Station.cs @@ -1,8 +1,8 @@ -using System; +using GSCFieldApp.Dictionaries; +using SQLite; +using System; using System.Collections.Generic; using System.Linq; -using GSCFieldApp.Dictionaries; -using SQLite; namespace GSCFieldApp.Models { @@ -132,7 +132,7 @@ public Dictionary> getFieldList stationFieldList144.AddRange(stationFieldListDefault); int removeIndex = stationFieldList144.IndexOf(DatabaseLiterals.FieldStationAlias); stationFieldList144.Remove(DatabaseLiterals.FieldStationAlias); - stationFieldList144.Insert(removeIndex,DatabaseLiterals.FieldStationAliasDeprecated); + stationFieldList144.Insert(removeIndex, DatabaseLiterals.FieldStationAliasDeprecated); stationFieldList[DatabaseLiterals.DBVersion144] = stationFieldList144; return stationFieldList; diff --git a/GSCFieldApp/Models/Structure.cs b/GSCFieldApp/Models/Structure.cs index 241775b0..c7708589 100644 --- a/GSCFieldApp/Models/Structure.cs +++ b/GSCFieldApp/Models/Structure.cs @@ -132,7 +132,7 @@ public bool isValid { return false; } - + } } set { } @@ -224,7 +224,7 @@ public bool? isRelatedStructuresAzimuthValid { azimuthLinear = StructureAzimuth; } - else if (relatedStructure != null && + else if (relatedStructure != null && relatedStructure.StructureClass != null && relatedStructure.StructureClass.Contains(DatabaseLiterals.KeywordLinear)) { @@ -377,7 +377,7 @@ public Dictionary> getFieldList } structureFieldList[DatabaseLiterals.DBVersion] = structureFieldListDefault; - + //Revert shcema 1.7 changes //List strucFieldList160 = new List(); @@ -392,7 +392,7 @@ public Dictionary> getFieldList structureFieldList144.AddRange(structureFieldListDefault); int removeIndex = structureFieldList144.IndexOf(DatabaseLiterals.FieldStructureName); structureFieldList144.Remove(DatabaseLiterals.FieldStructureName); - structureFieldList144.Insert(removeIndex,DatabaseLiterals.FieldStructureNameDeprecated); + structureFieldList144.Insert(removeIndex, DatabaseLiterals.FieldStructureNameDeprecated); structureFieldList[DatabaseLiterals.DBVersion144] = structureFieldList144; return structureFieldList; diff --git a/GSCFieldApp/Models/Vocabularies.cs b/GSCFieldApp/Models/Vocabularies.cs index 3773f0b2..b54ab683 100644 --- a/GSCFieldApp/Models/Vocabularies.cs +++ b/GSCFieldApp/Models/Vocabularies.cs @@ -1,9 +1,9 @@ -using System; -using System.Collections.Generic; -using System.Linq; +using GSCFieldApp.Dictionaries; using SQLite; -using GSCFieldApp.Dictionaries; +using System; +using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; namespace GSCFieldApp.Models { @@ -14,7 +14,7 @@ static class Extensions /// /// /// - public static void Sort(this ObservableCollection vocabCollection) where Vocabularies: IComparable + public static void Sort(this ObservableCollection vocabCollection) where Vocabularies : IComparable { List sorted = vocabCollection.OrderBy(x => x).ToList(); for (int i = 0; i < sorted.Count; i++) @@ -22,7 +22,7 @@ public static void Sort(this ObservableCollection vo vocabCollection.Move(vocabCollection.IndexOf(sorted[i]), i); } } - + } /// @@ -30,7 +30,7 @@ public static void Sort(this ObservableCollection vo /// changed it to vocabularies /// [Table(DatabaseLiterals.TableDictionary)] - public class Vocabularies: IComparable + public class Vocabularies : IComparable { [PrimaryKey, AutoIncrement, Column(DatabaseLiterals.FieldGenericRowID)] public int rowid { get; set; } diff --git a/GSCFieldApp/Models/VocabularyManager.cs b/GSCFieldApp/Models/VocabularyManager.cs index c1f0d1e9..fd00328c 100644 --- a/GSCFieldApp/Models/VocabularyManager.cs +++ b/GSCFieldApp/Models/VocabularyManager.cs @@ -1,8 +1,8 @@ -using System; +using GSCFieldApp.Dictionaries; +using SQLite; +using System; using System.Collections.Generic; using System.Linq; -using SQLite; -using GSCFieldApp.Dictionaries; namespace GSCFieldApp.Models { diff --git a/GSCFieldApp/Package.appxmanifest b/GSCFieldApp/Package.appxmanifest index 46cd139b..2eef3141 100644 --- a/GSCFieldApp/Package.appxmanifest +++ b/GSCFieldApp/Package.appxmanifest @@ -1,6 +1,6 @@  - + Geological Survey Canada Field Application diff --git a/GSCFieldApp/Services/ContentDialogMaker.cs b/GSCFieldApp/Services/ContentDialogMaker.cs index dce94a32..7e368647 100644 --- a/GSCFieldApp/Services/ContentDialogMaker.cs +++ b/GSCFieldApp/Services/ContentDialogMaker.cs @@ -22,7 +22,7 @@ static Task> CreateDialog(ContentDialog d, switch (Info.Status) { case AsyncStatus.Canceled: - + break; case AsyncStatus.Completed: Info.Close(); @@ -53,7 +53,7 @@ private static void ActiveDialog_Closing(ContentDialog sender, ContentDialogClos } public static IAsyncOperation Info; - + public static ContentDialog ActiveDialog; } } diff --git a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs index feb66a78..d6284991 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs @@ -1,22 +1,18 @@ -using System; +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using SQLite; +using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Threading.Tasks; +using Windows.ApplicationModel.Resources; using Windows.Storage; -using GSCFieldApp.Models; -using static GSCFieldApp.Dictionaries.DatabaseLiterals; -using Windows.UI.Xaml.Controls; -using GSCFieldApp.Dictionaries; -using Windows.UI.Xaml; -using SQLite; using Windows.UI.Core; -using Windows.ApplicationModel.Resources; -using System.Diagnostics; -using SpatialiteSharp; -using System.Reflection; -using Esri.ArcGISRuntime.Location; -using Esri.ArcGISRuntime.Data; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using static GSCFieldApp.Dictionaries.DatabaseLiterals; // Based on code sample from: http://blogs.u2u.be/diederik/post/2015/09/08/Using-SQLite-on-the-Universal-Windows-Platform.aspx -Kaz namespace GSCFieldApp.Services.DatabaseServices @@ -271,7 +267,7 @@ public async Task PrepNewFieldBookDatabase(string outFileNameWithExt, string inA /// public void SaveFromSQLTableObject(ref object tableObject, bool doUpdate) { - SaveSQLTableObjectFromDB(ref tableObject, doUpdate, DbConnection); + SaveSQLTableObjectFromDB(ref tableObject, doUpdate, DbConnection); } /// @@ -297,7 +293,7 @@ public void SaveSQLTableObjectFromDB(ref object tableObject, bool doUpdate, SQLi if (doUpdate) { - + // update - Not working version 3.13 SQLite-Net UWP int sucess = inDB.Update(newTableObject); @@ -312,7 +308,7 @@ public void SaveSQLTableObjectFromDB(ref object tableObject, bool doUpdate, SQLi int success = inDB.Insert(newTableObject); } - + }); inDB.Commit(); @@ -498,7 +494,7 @@ public void DeleteRecord(string tableName, string tableFieldName, int recordIDTo SQLiteCommand delCommand = dbConnect.CreateCommand("PRAGMA foreign_keys=ON"); delCommand.ExecuteNonQuery(); delCommand.CommandText = "DELETE FROM " + tableName + " WHERE " + tableFieldName + " = " + recordIDToDelete + ";"; - + delCommand.ExecuteNonQuery(); dbConnect.Close(); @@ -615,7 +611,7 @@ public async void GetLatestVocab(string vocabFromDBPath, SQLiteConnection vocabT { vocab_querySelect = " v." + vocabFields + " as " + vocabFields; } - + } } @@ -626,10 +622,10 @@ public async void GetLatestVocab(string vocabFromDBPath, SQLiteConnection vocabT insertQuery_vocab = insertQuery_vocab + " FROM " + attachDBName + "." + DatabaseLiterals.TableDictionary + " as v"; string defaultCreatorsEditors = "'Bedrock Committee', 'GSC Field App', 'Gabriel Huot-Vézina', 'Microsoft default', 'GanFeld', 'Ganfeld', " + - "'Janet Campbell', 'Jessey Rice', 'New term', 'Jessey Rice/Janet Campbell', 'Microsoft', " + + "'Janet Campbell', 'Jessey Rice', 'New term', 'Jessey Rice/Janet Campbell', 'Microsoft', " + "'Pierre Brouillette', 'Surficial Committee', 'Surficial Commitee'"; - - insertQuery_vocab = insertQuery_vocab + " WHERE (v." + FieldDictionaryCreator + " not in (" + defaultCreatorsEditors + + + insertQuery_vocab = insertQuery_vocab + " WHERE (v." + FieldDictionaryCreator + " not in (" + defaultCreatorsEditors + ") or v." + FieldDictionaryEditor + " not in (" + defaultCreatorsEditors + ") AND (v." + FieldDictionaryTermID + " NOT IN (SELECT v2." + FieldDictionaryTermID + " FROM " + TableDictionary + " as v2))); "; queryList.Add(insertQuery_vocab); @@ -2514,7 +2510,7 @@ public List GetUpgradeQueryVersion1_6(string attachedDBName) /// public List GetUpgradeQueryVersion1_7(string attachedDBName) { - + ///Schema v 1.7: ///https://github.com/NRCan/GSC-Field-Application/milestone/8 List insertQuery_17 = new List(); @@ -2548,10 +2544,10 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) FieldLocationMetaID, metaView, FieldUserInfoID)); //Get insert query - Tuple primeLocation = new Tuple(FieldLocationID, ViewGenericLegacyPrimeKey) ; + Tuple primeLocation = new Tuple(FieldLocationID, ViewGenericLegacyPrimeKey); Tuple foreignLocation = new Tuple(FieldUserInfoID, ViewGenericLegacyForeignKey); - insertQuery_17.Add(GenerateInsertQueriesFromModel(locationFieldList, nullFieldList, TableLocation, + insertQuery_17.Add(GenerateInsertQueriesFromModel(locationFieldList, nullFieldList, TableLocation, primeLocation, foreignLocation, attachedDBName, locationView)); #endregion @@ -2623,7 +2619,7 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) Tuple primeStructure = new Tuple(FieldStructureID, ViewGenericLegacyPrimeKey); Tuple foreignStructure = new Tuple(FieldStructureParentID, ViewGenericLegacyForeignKey); string strucView = ViewPrefix + TableStructure; - insertQuery_17.Add(GenerateInsertQueriesFromModel(structureFieldList, nullFieldList, TableStructure, + insertQuery_17.Add(GenerateInsertQueriesFromModel(structureFieldList, nullFieldList, TableStructure, primeStructure, foreignStructure, attachedDBName, strucView)); #endregion @@ -2638,7 +2634,7 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) FieldPFlowParentID, earthView, FieldPFlowParentID)); //Get insert query - Tuple primePflow= new Tuple(FieldPFlowID, ViewGenericLegacyPrimeKey); + Tuple primePflow = new Tuple(FieldPFlowID, ViewGenericLegacyPrimeKey); Tuple foreignPflow = new Tuple(FieldPFlowParentID, ViewGenericLegacyForeignKey); string pflowView = ViewPrefix + TablePFlow; insertQuery_17.Add(GenerateInsertQueriesFromModel(pflowFieldList, nullFieldList, TablePFlow, @@ -2668,7 +2664,7 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) #region F_MINERALIZATION_ALTERAION ///Warning: We assumed that by default records will be linked with station - + MineralAlteration modelMA = new MineralAlteration(); List maFieldList = modelMA.getFieldList[DBVersion]; @@ -2677,7 +2673,7 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) FieldMineralAlterationRelID, statView, FieldStationID)); //Get insert query - Tuple primeMA= new Tuple(FieldMineralAlterationID, ViewGenericLegacyPrimeKey); + Tuple primeMA = new Tuple(FieldMineralAlterationID, ViewGenericLegacyPrimeKey); Tuple foreignMA = new Tuple(FieldMineralAlterationRelID, ViewGenericLegacyForeignKey); string MAView = ViewPrefix + TableMineralAlteration; @@ -2703,7 +2699,7 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) Tuple primeMineral = new Tuple(FieldMineralID, ViewGenericLegacyPrimeKey); Tuple foreignMineral = new Tuple(FieldMineralMAID, ViewGenericLegacyForeignKey); Tuple foreignMineral2 = new Tuple(FieldEarthMatID, ViewGenericLegacyForeignKey); - + insertQuery_17.Add(GenerateInsertQueriesFromModel(mineralFieldList, nullFieldList, TableMineral, primeMineral, foreignMineral, attachedDBName, MineralView)); @@ -2726,7 +2722,7 @@ public List GetUpgradeQueryVersion1_7(string attachedDBName) Tuple foreignFossil = new Tuple(FieldFossilParentID, ViewGenericLegacyForeignKey); string fossilView = ViewPrefix + TableFossil; - insertQuery_17.Add(GenerateInsertQueriesFromModel(fossilFieldList, nullFieldList, TableFossil, + insertQuery_17.Add(GenerateInsertQueriesFromModel(fossilFieldList, nullFieldList, TableFossil, primeFossil, foreignFossil, attachedDBName, fossilView)); #endregion @@ -2895,7 +2891,7 @@ public string GetGeopackageUpdateQuery(string tableName) if (tableName == DatabaseLiterals.TableLocation) { upQuery = @"UPDATE " + tableName + " SET " + FieldGenericGeometry + " = " + - " gpkgMakePoint( " + FieldLocationLongitude + ", " + FieldLocationLatitude + ", cast(" + + " gpkgMakePoint( " + FieldLocationLongitude + ", " + FieldLocationLatitude + ", cast(" + FieldLocationDatum + " as integer));"; } @@ -2924,7 +2920,7 @@ public string GenerateInsertQueriesFromModel(List fieldList, List fieldList, List fieldList, List fieldList, List 0) { - string lastAlias = eartmatParentStations.ToList()[eartmatParentStations.Count() - 1].ToString(); + string lastAlias = eartmatParentStations.ToList()[eartmatParentStations.Count() - 1].ToString(); string lastCharacter = lastAlias.ToList()[lastAlias.Length - 1].ToString(); //Find if last two are characters @@ -392,7 +391,7 @@ public string CalculateSampleAlias(int parentID, string parentAlias) finaleSampleString = parentAlias + newAlias; //Find existing - IEnumerable existingSamples= from s in sampleTable where s.SampleEarthmatID == parentID && s.SampleName == finaleSampleString select s; + IEnumerable existingSamples = from s in sampleTable where s.SampleEarthmatID == parentID && s.SampleName == finaleSampleString select s; if (existingSamples.Count() == 0 || existingSamples == null) { breaker = false; @@ -669,7 +668,7 @@ public string CalculateFossilAlias(int parentID, string parentAlias) { //Querying with Linq List fossilTableRaw = dAccess.ReadTable(fossilModel.GetType(), null); - IEnumerablefossilTable = fossilTableRaw.Cast(); //Cast to proper list type + IEnumerable fossilTable = fossilTableRaw.Cast(); //Cast to proper list type IEnumerable fossilParentEarth = from e in fossilTable where e.FossilParentID == parentID orderby e.FossilIDName descending select e.FossilIDName; int newID = 1; //Incrementing step @@ -736,7 +735,7 @@ public string CalculateMineralAlias(int? parentID, string parentAlias, int idAdd string finaleMineralString = parentAlias + DatabaseLiterals.TableMineralAliasPrefix; //Detect last sample number and add 1 to it. - if (mineralParentEarth.Count() > 0 && mineralParentEarth.ElementAt(0) !=null) + if (mineralParentEarth.Count() > 0 && mineralParentEarth.ElementAt(0) != null) { string lastAlias = mineralParentEarth.ToList()[0].ToString(); //Select first element since the list has been sorted in descending order string lastNumberString = lastAlias.Substring(lastAlias.Length - 2); //Sample only has two digits id in the alias @@ -966,7 +965,7 @@ public string CalculateAlphabeticID(bool overload, int startingNumber) { id = alphaList[numID - 1]; } - + } else { @@ -1022,10 +1021,10 @@ public int CalculateNumberFromAlpha(string alphaCharacter) int equivalentNumber = -1; string iterativeString = string.Empty; - while (alphaCharacter!= iterativeString) + while (alphaCharacter != iterativeString) { equivalentNumber++; - iterativeString = CalculateAlphabeticID(true, equivalentNumber); + iterativeString = CalculateAlphabeticID(true, equivalentNumber); } return equivalentNumber; @@ -1056,7 +1055,7 @@ public int GetHashCodeFromGUID(string inGUID = "") { return Guid.NewGuid().GetHashCode(); } - + } #endregion } diff --git a/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs b/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs index 2f935ced..224d89c5 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataLocalSettings.cs @@ -1,9 +1,9 @@ -using System; -using System.Collections.Generic; -using Windows.Storage; +using GSCFieldApp.Dictionaries; using GSCFieldApp.Models; -using GSCFieldApp.Dictionaries; +using System; +using System.Collections.Generic; using System.Diagnostics; +using Windows.Storage; namespace GSCFieldApp.Services.DatabaseServices { @@ -11,14 +11,14 @@ public class DataLocalSettings { readonly ApplicationDataContainer currentLocalSettings = ApplicationData.Current.LocalSettings; public const string containerName = Dictionaries.ApplicationLiterals.LocalSettingMainContainer; - + public DataLocalSettings() { if (!currentLocalSettings.Containers.ContainsKey(containerName)) { currentLocalSettings.CreateContainer(containerName, ApplicationDataCreateDisposition.Always); } - + } /// @@ -47,7 +47,7 @@ public void WipeUserInfoSettings() { try { - IEnumerator> containerList = currentLocalSettings.Containers.GetEnumerator(); + IEnumerator> containerList = currentLocalSettings.Containers.GetEnumerator(); while (containerList.MoveNext()) { currentLocalSettings.DeleteContainer(containerList.Current.Key); @@ -57,7 +57,7 @@ public void WipeUserInfoSettings() { } - + } @@ -99,7 +99,7 @@ public void WipeUserMapSettings() /// /// /// - public object GetSettingValue(string keyName, string inContainerName="") + public object GetSettingValue(string keyName, string inContainerName = "") { //Variable object output = ""; @@ -109,7 +109,7 @@ public object GetSettingValue(string keyName, string inContainerName="") { wantedContainer = inContainerName; } - + if (currentLocalSettings.Containers[containerName].Values.ContainsKey(keyName)) { @@ -124,7 +124,7 @@ public object GetSettingValue(string keyName, string inContainerName="") /// Will set a given container key with given object /// /// - public void SetSettingValue(string inKey, object inKeyValue, string inContainerName="") + public void SetSettingValue(string inKey, object inKeyValue, string inContainerName = "") { //Variables string updateContainer = containerName; @@ -136,10 +136,10 @@ public void SetSettingValue(string inKey, object inKeyValue, string inContainerN { currentLocalSettings.Containers[updateContainer].Values[inKey] = inKeyValue; } - + } - public bool DeleteSetting(string inKey, string inContainerName="") + public bool DeleteSetting(string inKey, string inContainerName = "") { //Variables string updateContainer = containerName; @@ -161,7 +161,7 @@ public bool DeleteSetting(string inKey, string inContainerName="") public void InitializeHeaderVisibility() { #region Header toggles - + //Default common if (currentLocalSettings.Containers[containerName].Values.ContainsKey(Dictionaries.DatabaseLiterals.FieldUserInfoFWorkType)) { diff --git a/GSCFieldApp/Services/DatabaseServices/GeopackageService.cs b/GSCFieldApp/Services/DatabaseServices/GeopackageService.cs index 9d6ddce3..ddd98ea3 100644 --- a/GSCFieldApp/Services/DatabaseServices/GeopackageService.cs +++ b/GSCFieldApp/Services/DatabaseServices/GeopackageService.cs @@ -1,15 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using GSCFieldApp.Services.DatabaseServices; +using SpatialiteSharp; using System.Data.SQLite; -using System.Data.Common; -using System.Data.SqlClient; -using System.Collections.ObjectModel; -using SpatialiteSharp; -using System.Transactions; namespace GSCFieldApp.Services.DatabaseServices { @@ -22,7 +12,7 @@ public class GeopackageService /// along with sqlite-net-pcl. /// public GeopackageService() - { + { } @@ -79,7 +69,7 @@ public int DoSpatialiteQueryInGeopackage(string in_query, bool doScalar = true) transaction.Commit(); } - + db.Close(); } diff --git a/GSCFieldApp/Services/FileServices/FileServices.cs b/GSCFieldApp/Services/FileServices/FileServices.cs index 24e09657..0f35500f 100644 --- a/GSCFieldApp/Services/FileServices/FileServices.cs +++ b/GSCFieldApp/Services/FileServices/FileServices.cs @@ -1,16 +1,16 @@ -using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Services.DatabaseServices; using System; using System.Collections.Generic; using System.IO; +using System.IO.Compression; using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; using System.Threading.Tasks; using Windows.Storage; using Windows.Storage.Streams; -using Windows.UI.Xaml.Controls; -using System.Runtime.InteropServices.WindowsRuntime; -using System.IO.Compression; using Windows.UI.Xaml; -using GSCFieldApp.Dictionaries; +using Windows.UI.Xaml.Controls; namespace GSCFieldApp.Services.FileServices { @@ -26,7 +26,7 @@ public class FileServices /// public async void DeleteLocalStateFile(string filePath) { - if (filePath!=string.Empty) + if (filePath != string.Empty) { try { @@ -61,8 +61,8 @@ public async Task DeleteLocalStateFileAll() { } - - + + } } @@ -82,7 +82,7 @@ public string CalculateDBCopyName(string userCode = "") string currentDate = String.Format("{0:yyyy_MM_dd_HH'h'mm}", DateTime.Now); //Get currennt geolcode - if (userCode == string.Empty && localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoUCode)!=null) + if (userCode == string.Empty && localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoUCode) != null) { userCode = localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoUCode).ToString(); } @@ -93,7 +93,7 @@ public string CalculateDBCopyName(string userCode = "") } //Calculate new output database name - outputName = projectName + "_" + currentDate + "_" + userCode ; + outputName = projectName + "_" + currentDate + "_" + userCode; return outputName; @@ -126,7 +126,7 @@ public async Task SaveDBCopy(string currentDBPath = "", string currentUs } StorageFile fileToRead = await StorageFile.GetFileFromPathAsync(currentDBPath); - if (fileToRead!=null) + if (fileToRead != null) { IBuffer currentDBBuffer = await Windows.Storage.FileIO.ReadBufferAsync(fileToRead as IStorageFile); byte[] currentDBByteArray = currentDBBuffer.ToArray(); @@ -183,14 +183,14 @@ public async Task SaveDBCopy(string currentDBPath = "", string currentUs ContentDialogResult cdr = await endProcessDialog.ShowAsync(); } - + } } if (savefile != null && savefile.Path != null) { outputSaveFilePath = savefile.Path; - } + } return outputSaveFilePath; @@ -308,7 +308,7 @@ public Task AddFilesToZip(List files, string fieldbookpath { archive.CreateEntryFromFile(f.Path, f.Name); } - + } } diff --git a/GSCFieldApp/Services/IgnorePropertiesResolver.cs b/GSCFieldApp/Services/IgnorePropertiesResolver.cs index df5df453..512f2f93 100644 --- a/GSCFieldApp/Services/IgnorePropertiesResolver.cs +++ b/GSCFieldApp/Services/IgnorePropertiesResolver.cs @@ -1,7 +1,7 @@ -using Newtonsoft.Json.Serialization; -using System.Reflection; -using Newtonsoft.Json; +using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; using System.Collections.Generic; +using System.Reflection; namespace GSCFieldApp.Services { diff --git a/GSCFieldApp/Themes/EasterEgg.cs b/GSCFieldApp/Themes/EasterEgg.cs index 304ac440..12be5010 100644 --- a/GSCFieldApp/Themes/EasterEgg.cs +++ b/GSCFieldApp/Themes/EasterEgg.cs @@ -1,11 +1,11 @@ using System; using System.Linq; using System.Threading.Tasks; +using Windows.UI; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media; using Windows.UI.Xaml.Media.Imaging; -using Windows.UI; namespace GSCFieldApp.Themes { @@ -163,7 +163,7 @@ public SolidColorBrush GetSolidColorBrush(string hex) return null; } - + } /// diff --git a/GSCFieldApp/Themes/ExpandPanel.cs b/GSCFieldApp/Themes/ExpandPanel.cs index 34e5201a..32597b14 100644 --- a/GSCFieldApp/Themes/ExpandPanel.cs +++ b/GSCFieldApp/Themes/ExpandPanel.cs @@ -68,7 +68,7 @@ public bool IsExpanded { ExpandedChanged(); setExpandState(value); - + } } @@ -116,7 +116,7 @@ protected override void OnApplyTemplate() //Single click/tap on header relMainPanel = (Windows.UI.Xaml.Controls.RelativePanel)GetTemplateChild("HeaderPanel"); - if (relMainPanel!=null) + if (relMainPanel != null) { relMainPanel.Tapped += (object sender, TappedRoutedEventArgs e) => { @@ -174,13 +174,13 @@ protected override void OnApplyTemplate() } public void setExpandState(bool state) { - if (toggleExpander!=null) + if (toggleExpander != null) { toggleExpander.IsChecked = state; changeVisualState(_useTransitions); } - - + + } } diff --git a/GSCFieldApp/Themes/GridViewItemPanel.cs b/GSCFieldApp/Themes/GridViewItemPanel.cs index 3713d3db..334c495f 100644 --- a/GSCFieldApp/Themes/GridViewItemPanel.cs +++ b/GSCFieldApp/Themes/GridViewItemPanel.cs @@ -48,7 +48,7 @@ protected override Size ArrangeOverride(Size finalSize) { lastItemHeight = child.DesiredSize.Height; } - + child.Arrange(newpos); x += child.DesiredSize.Width; } @@ -81,7 +81,7 @@ protected override Size ArrangeOverride(Size finalSize) lastItemHeight = child.DesiredSize.Height; } - + child.Arrange(newpos); x += child.DesiredSize.Width; } @@ -142,7 +142,7 @@ protected override Size MeasureOverride(Size availableSize) { child.Measure(new Size(availableSize.Width, availableSize.Width)); } - + //Keep child width and height and add to list double currentWidth = child.DesiredSize.Width; @@ -186,7 +186,7 @@ protected override Size MeasureOverride(Size availableSize) { //If not wider, replace last item with a sum of last item and current width (so it makes the theorical row width) lastWidth = processedWidthList.Last(); - processedWidthList.RemoveAt(processedWidthList.Count -1); + processedWidthList.RemoveAt(processedWidthList.Count - 1); processedWidthList.Add(lastWidth + currentWidth); } @@ -205,7 +205,7 @@ protected override Size MeasureOverride(Size availableSize) var desiredheight = child.DesiredSize.Height; if (desiredheight > _maxHeight) _maxHeight = desiredheight; - + } //Find larger row @@ -221,7 +221,7 @@ protected override Size MeasureOverride(Size availableSize) double rows = processedWidthList.Count; //Set size and height to maximum item height if there is only one row - Size newSize = new Size(finalWidth, (_maxHeight * rows) + headerHeight ); + Size newSize = new Size(finalWidth, (_maxHeight * rows) + headerHeight); //If there is more then one row set height as the sum of height for all rows. if (rows > 1 && !hasHeader) diff --git a/GSCFieldApp/ViewModels/ContentDialogSemanticZoomViewModel.cs b/GSCFieldApp/ViewModels/ContentDialogSemanticZoomViewModel.cs index 0e0cdc37..47e7e698 100644 --- a/GSCFieldApp/ViewModels/ContentDialogSemanticZoomViewModel.cs +++ b/GSCFieldApp/ViewModels/ContentDialogSemanticZoomViewModel.cs @@ -1,11 +1,11 @@ -using System.Collections.ObjectModel; +using GSCFieldApp.Models; +using System.Collections.ObjectModel; using Template10.Mvvm; -using GSCFieldApp.Models; using Windows.UI.Xaml; namespace GSCFieldApp.ViewModels { - public class ContentDialogSemanticZoomViewModel: ViewModelBase + public class ContentDialogSemanticZoomViewModel : ViewModelBase { private ObservableCollection _Groups; @@ -43,7 +43,7 @@ public void MakeGroup() //Build list - if (inAssignTable!=null && inParentFieldName!=null && inChildFieldName!=null) + if (inAssignTable != null && inParentFieldName != null && inChildFieldName != null) { //On init for new earthmats calculate values so UI shows stuff. diff --git a/GSCFieldApp/ViewModels/DocumentViewModel.cs b/GSCFieldApp/ViewModels/DocumentViewModel.cs index 3ea8def4..cedce81f 100644 --- a/GSCFieldApp/ViewModels/DocumentViewModel.cs +++ b/GSCFieldApp/ViewModels/DocumentViewModel.cs @@ -1,19 +1,18 @@ -using System; +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Globalization; using System.Linq; using Template10.Mvvm; -using GSCFieldApp.Models; -using GSCFieldApp.Services.DatabaseServices; -using Windows.UI.Xaml.Input; +using Windows.Media.Capture; using Windows.Storage; +using Windows.UI.Core; using Windows.UI.Xaml; -using GSCFieldApp.Dictionaries; using Windows.UI.Xaml.Controls; -using System.Globalization; -using System.Collections.ObjectModel; -using Windows.Media.Capture; -using System.Reflection; -using Windows.UI.Core; +using Windows.UI.Xaml.Input; namespace GSCFieldApp.ViewModels { @@ -583,7 +582,7 @@ private string GetOlympusPrefix() /// private string CalculateFileName() { - if (existingDataDetailDocument!= null && existingDataDetailDocument.document.DocumentType != DatabaseLiterals.documentTableFileSuffix) + if (existingDataDetailDocument != null && existingDataDetailDocument.document.DocumentType != DatabaseLiterals.documentTableFileSuffix) { _fileName = string.Empty; string _noOlympusFileNumber = string.Empty; diff --git a/GSCFieldApp/ViewModels/EarthmatViewModel.cs b/GSCFieldApp/ViewModels/EarthmatViewModel.cs index 15b558aa..15a14e1c 100644 --- a/GSCFieldApp/ViewModels/EarthmatViewModel.cs +++ b/GSCFieldApp/ViewModels/EarthmatViewModel.cs @@ -1,20 +1,20 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Collections.ObjectModel; -using Template10.Mvvm; +using GSCFieldApp.Dictionaries; using GSCFieldApp.Models; using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.Themes; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; using System.Text.RegularExpressions; +using Template10.Mvvm; +using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using GSCFieldApp.Dictionaries; using Windows.UI.Xaml.Input; -using Windows.UI.Xaml; -using GSCFieldApp.Themes; namespace GSCFieldApp.ViewModels { - public class EarthmatViewModel: ViewModelBase + public class EarthmatViewModel : ViewModelBase { #region INITIALIZATION private EarthMaterial earthmodel = new EarthMaterial(); @@ -50,7 +50,7 @@ public class EarthmatViewModel: ViewModelBase private Dictionary _earthResidualPercent = new Dictionary(); //Will contain earth material Id and it's percent, for residual percent calculation public FieldNotes existingDataDetail; - + //UI Combobox depandant on lithology selection private ObservableCollection _earthmatModStruc = new ObservableCollection(); private ObservableCollection _earthmatModStrucValues = new ObservableCollection(); @@ -65,10 +65,10 @@ public class EarthmatViewModel: ViewModelBase private string _selectedEarthmatModComp = string.Empty; private ObservableCollection _earthmatGrSize = new ObservableCollection(); - private ObservableCollection _earthmatGrSizeValues = new ObservableCollection() ; + private ObservableCollection _earthmatGrSizeValues = new ObservableCollection(); private string _selectedEarthmatGrSize = string.Empty; - private ObservableCollection_earthmatOccurAs = new ObservableCollection(); + private ObservableCollection _earthmatOccurAs = new ObservableCollection(); private string _selectedEarthmatOccurAs = string.Empty; private ObservableCollection _earthmatMI = new ObservableCollection(); @@ -77,8 +77,8 @@ public class EarthmatViewModel: ViewModelBase private ObservableCollection _earthmatMF = new ObservableCollection(); private string _selectedEarthmatMF = string.Empty; - private ObservableCollection _earthmatMU= new ObservableCollection(); - private string _selectedEarthmatMU= string.Empty; + private ObservableCollection _earthmatMU = new ObservableCollection(); + private string _selectedEarthmatMU = string.Empty; private ObservableCollection _earthmatContactTypes = new ObservableCollection(); private ObservableCollection _earthmatContactNoteTypes = new ObservableCollection(); @@ -92,7 +92,7 @@ public class EarthmatViewModel: ViewModelBase private string _selectedEarthmatMineral = string.Empty; //UI Combobox NOT dependant on lithology - private ObservableCollection_earthmatDefFabric = new ObservableCollection(); + private ObservableCollection _earthmatDefFabric = new ObservableCollection(); private ObservableCollection _earthmatDefFabricValues = new ObservableCollection(); private string _selectedEarthmatDefFabric = string.Empty; private ObservableCollection _earthmatBedthick = new ObservableCollection(); @@ -170,7 +170,8 @@ public double? MagSusceptibility } } - public string ColourIndex { + public string ColourIndex + { get { return _colourindex; @@ -190,7 +191,7 @@ public string ColourIndex { _colourindex = value = "0"; RaisePropertyChanged("ColourIndex"); } - + } else { @@ -198,10 +199,10 @@ public string ColourIndex { RaisePropertyChanged("ColourIndex"); } - + } } - public Models.Colour EarthColourF { get { return _earthColourF; } set { _earthColourF = value; } } + public Models.Colour EarthColourF { get { return _earthColourF; } set { _earthColourF = value; } } public Models.Colour EarthColourW { get { return _earthColourW; } set { _earthColourW = value; } } public Models.Contacts EartContact { get { return _earthContact; } set { _earthContact = value; } } public int? Percent @@ -250,7 +251,7 @@ public int? Percent public ObservableCollection EarthmatModTexture { get { return _earthmatModTexture; } set { _earthmatModTexture = value; } } public ObservableCollection EarthmatModTextureValues { get { return _earthmatModTextureValues; } set { _earthmatModTextureValues = value; } } public string SelectedEarthmatModTexture { get { if (_selectedEarthmatModTexture == null) { return string.Empty; } else { return _selectedEarthmatModTexture; } } set { _selectedEarthmatModTexture = value; } } - public ObservableCollection EarthmatModComp { get { return _earthmatModComp; } set { _earthmatModComp = value;} } + public ObservableCollection EarthmatModComp { get { return _earthmatModComp; } set { _earthmatModComp = value; } } public ObservableCollection EarthmatModCompValues { get { return _earthmatModCompValues; } set { _earthmatModCompValues = value; } } public string SelectedEarthmatModComp { get { if (_selectedEarthmatModComp == null) { return string.Empty; } else { return _selectedEarthmatModComp; } } set { _selectedEarthmatModComp = value; } } public ObservableCollection EarthmatGrSize { get { return _earthmatGrSize; } set { _earthmatGrSize = value; } } @@ -324,7 +325,7 @@ public EarthmatViewModel(FieldNotes inDetailModel) //On init for new earthmats calculate values so UI shows stuff. _earthmatid = idCalculator.CalculateEarthmatID(); - if (inDetailModel!= null) //detail model could be null if a quick earthmat is asked + if (inDetailModel != null) //detail model could be null if a quick earthmat is asked { _stationid = inDetailModel.GenericID; _alias = idCalculator.CalculateEarthmatnAlias(_stationid, inDetailModel.GenericAliasName); @@ -464,7 +465,7 @@ public void AutoFillDialog(FieldNotes incomingData) RaisePropertyChanged("EarthColourF"); RaisePropertyChanged("EarthColourW"); - if (_selectedEarthmatMU!=null) + if (_selectedEarthmatMU != null) { RaisePropertyChanged("SelectedEarthmatMU"); } @@ -537,7 +538,7 @@ public void AutoFillDialog2ndRound(FieldNotes incomingData) { FillModTextureStructure(); } - + FillModComp(); FillGrSize(); FillOccur(); @@ -626,7 +627,7 @@ public void SaveDialogInfo() } if (_selectedEarthmatOxi != null) { - earthmodel.EarthMatOxidation= _selectedEarthmatOxi; + earthmodel.EarthMatOxidation = _selectedEarthmatOxi; } if (_selectedEarthmatClast != null) { @@ -659,7 +660,7 @@ public void SaveDialogInfo() { earthmodel.EarthMatLithdetail = string.Empty; } - + } if (_selectedEarthmatMagQualifier != null && _selectedEarthmatMagQualifier != string.Empty) { @@ -768,7 +769,7 @@ public void FillModTextureStructure(bool withParents = true) _earthmatModTexture.Clear(); RaisePropertyChanged("EarthmatModTexture"); _earthmatModTextureValues.Clear(); - RaisePropertyChanged("EarthmatModTextureValues"); + RaisePropertyChanged("EarthmatModTextureValues"); //Init. string fieldName = Dictionaries.DatabaseLiterals.FieldEarthMatModTextStruc; @@ -816,7 +817,7 @@ public void FillModTextureStructure(bool withParents = true) - + //Update UI RaisePropertyChanged("EarthmatModTexture"); @@ -849,11 +850,11 @@ public void FillModComp() { eComp = Regex.Split(_groupTypeDetail, level1Sep)[0]; } - else if(_groupTypeDetail.Contains(level2Sep)) + else if (_groupTypeDetail.Contains(level2Sep)) { eComp = Regex.Split(_groupTypeDetail, level2Sep)[0]; } - + List mComp = new List(); if (eComp != string.Empty && eComp != " " && eComp != "") @@ -870,7 +871,7 @@ public void FillModComp() { _earthmatModComp.Add(itemModComp); } - + //Update UI RaisePropertyChanged("EarthmatModComp"); @@ -923,7 +924,7 @@ public void FillGrSize() { _earthmatGrSize.Add(itemGrSize); } - + //Update UI RaisePropertyChanged("EarthmatGrSize"); @@ -974,7 +975,7 @@ public void FillOccur() { _earthmatOccurAs.Add(itemOccur); } - + //Update UI RaisePropertyChanged("EarthmatOccurAs"); @@ -998,7 +999,7 @@ public void FillDefFabric() { _earthmatDefFabric.Add(itemFabric); } - + //Update UI RaisePropertyChanged("EarthmatDefFabric"); @@ -1019,7 +1020,7 @@ public void FillBedthick() { _earthmatBedthick.Add(itemBedthick); } - + //Update UI RaisePropertyChanged("EarthmatBedthick"); @@ -1103,7 +1104,7 @@ public void FillContactU() { _earthmatContactTypes.Add(itemCU); } - + //Update UI RaisePropertyChanged("EarthmatContactTypes "); @@ -1115,7 +1116,7 @@ public void FillContactU() /// public void FillRelatedEarthmat() { - if (existingDataDetail != null && existingDataDetail.station !=null) + if (existingDataDetail != null && existingDataDetail.station != null) { //Init. string filterEarthmats = "Select * from " + DatabaseLiterals.TableEarthMat + " where " + DatabaseLiterals.TableEarthMat + "." + DatabaseLiterals.FieldEarthMatStatID + " = '" + existingDataDetail.station.StationID + "'"; @@ -1150,7 +1151,7 @@ public void FillInterConfidence() //Update UI RaisePropertyChanged("EarthmatInterConfidence"); - RaisePropertyChanged("SelectedEarthmatInterConfidence"); + RaisePropertyChanged("SelectedEarthmatInterConfidence"); } /// @@ -1188,7 +1189,7 @@ public void FillMetaIntensity() //Update UI RaisePropertyChanged("EarthmatMI"); - RaisePropertyChanged("SelectedEarthmatMI"); + RaisePropertyChanged("SelectedEarthmatMI"); } /// @@ -1385,7 +1386,7 @@ public void ConcatComboBox_SelectionChanged(object sender, SelectionChangedEvent { AddAConcatenatedValue(senderBox.SelectedValue.ToString(), senderBox.Name); } - + } /// @@ -1609,7 +1610,7 @@ public void UnPipeValues(string inValue, string databaseTableField) public void EarthPercent_TextChanged(object sender, TextBoxTextChangingEventArgs e) { TextBox senderBox = sender as TextBox; - if (senderBox!= null && senderBox.Text != string.Empty) + if (senderBox != null && senderBox.Text != string.Empty) { CalculateResidual(senderBox.Text); } @@ -1641,7 +1642,7 @@ public void ColourSetWeathered_Tapped(object sender, TappedRoutedEventArgs e) _earthColourW.qualifier = _selectedEarthmatColourQ; RaisePropertyChanged("EarthColourW"); - + } /// @@ -1724,7 +1725,7 @@ public void CalculateResidual(string newMode = "") } } - + } diff --git a/GSCFieldApp/ViewModels/EnvironmentViewModel.cs b/GSCFieldApp/ViewModels/EnvironmentViewModel.cs index 8c45d364..8186fe28 100644 --- a/GSCFieldApp/ViewModels/EnvironmentViewModel.cs +++ b/GSCFieldApp/ViewModels/EnvironmentViewModel.cs @@ -1,16 +1,12 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Template10.Mvvm; +using GSCFieldApp.Dictionaries; using GSCFieldApp.Models; using GSCFieldApp.Services.DatabaseServices; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using System.Collections.ObjectModel; -using GSCFieldApp.Dictionaries; -using System.Runtime.ConstrainedExecution; using GSCFieldApp.Themes; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using Template10.Mvvm; +using Windows.UI.Xaml.Controls; namespace GSCFieldApp.ViewModels { @@ -46,7 +42,7 @@ public class EnvironmentViewModel : ViewModelBase private string _selectedEnvironmentGroundCover = string.Empty; private ObservableCollection _environmentGroundIce = new ObservableCollection(); - private string _selectedEnvironmentGroundIce= string.Empty; + private string _selectedEnvironmentGroundIce = string.Empty; private ObservableCollection _environmentGroundPattern = new ObservableCollection(); private ObservableCollection _environmentGroundPatternValues = new ObservableCollection(); @@ -81,7 +77,7 @@ public EnvironmentViewModel(FieldNotes inReportModel) FillGroundIce(); FillGroundPattern(); - _environmentAlias = idCalculator.CalculateEnvironmentAlias(inReportModel.station.StationID,inReportModel.station.StationAlias); + _environmentAlias = idCalculator.CalculateEnvironmentAlias(inReportModel.station.StationID, inReportModel.station.StationAlias); } @@ -91,7 +87,7 @@ public EnvironmentViewModel(FieldNotes inReportModel) public int EnvironmentID { get { return _environmentid; } set { _environmentid = value; } } public string Alias { get { return _environmentAlias; } set { _environmentAlias = value; } } public string Notes { get { return _notes; } set { _notes = value; } } - public string Slope + public string Slope { get { @@ -167,7 +163,7 @@ public string Depth if (result) { - + _depth = value; RaisePropertyChanged("Depth"); @@ -189,11 +185,11 @@ public string Depth public ObservableCollection EnvironmentDrainage { get { return _environmentDrainage; } set { _environmentDrainage = value; } } public string SelectedEnvironmentDrainage { get { return _selectedEnvironmentDrainage; } set { _selectedEnvironmentDrainage = value; } } - public ObservableCollection EnvironmentPermafrost{ get { return _environmentPermafrost; } set { _environmentPermafrost = value; } } + public ObservableCollection EnvironmentPermafrost { get { return _environmentPermafrost; } set { _environmentPermafrost = value; } } public string SelectedEnvironmentPermafrost { get { return _selectedEnvironmentPermafrost; } set { _selectedEnvironmentPermafrost = value; } } public ObservableCollection EnvironmentExposureType { get { return _environmentExposureType; } set { _environmentExposureType = value; } } public string SelectedEnvironmentExposureType { get { return _selectedEnvironmentExposureType; } set { _selectedEnvironmentExposureType = value; } } - public ObservableCollection EnvironmentGroundCover{ get { return _environmentGroundCover; } set { _environmentGroundCover = value; } } + public ObservableCollection EnvironmentGroundCover { get { return _environmentGroundCover; } set { _environmentGroundCover = value; } } public string SelectedEnvironmentGroundCover { get { return _selectedEnvironmentGroundCover; } set { _selectedEnvironmentGroundCover = value; } } public ObservableCollection EnvironmentGroundIce { get { return _environmentGroundIce; } set { _environmentGroundIce = value; } } public string SelectedEnvironmentGroundIce { get { return _selectedEnvironmentGroundIce; } set { _selectedEnvironmentGroundIce = value; } } diff --git a/GSCFieldApp/ViewModels/FieldBookDialogViewModel.cs b/GSCFieldApp/ViewModels/FieldBookDialogViewModel.cs index 303c0182..79b5839c 100644 --- a/GSCFieldApp/ViewModels/FieldBookDialogViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldBookDialogViewModel.cs @@ -1,15 +1,15 @@ -using System; +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using SQLite; +using System; using System.Collections.Generic; using System.Threading.Tasks; +using Template10.Common; using Template10.Mvvm; -using GSCFieldApp.Models; -using GSCFieldApp.Services.DatabaseServices; -using Windows.Storage; using Template10.Services.NavigationService; -using Template10.Common; -using GSCFieldApp.Dictionaries; -using SQLite; using Windows.ApplicationModel; +using Windows.Storage; namespace GSCFieldApp.ViewModels { diff --git a/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs b/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs index 3aa2a7a9..ba4b46b3 100644 --- a/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldBooksPageViewModel.cs @@ -1,27 +1,25 @@ +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.Services.FileServices; +using SQLite; using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Diagnostics; +using System.IO; using System.Linq; using System.Threading.Tasks; -using Template10.Mvvm; -using Windows.Storage; -using Windows.UI.Xaml; -using GSCFieldApp.Models; using Template10.Common; -using Windows.UI.Xaml.Controls; -using GSCFieldApp.Services.DatabaseServices; -using GSCFieldApp.Dictionaries; -using Windows.ApplicationModel.Resources; -using SQLite; -using Template10.Services.NavigationService; using Template10.Controls; -using System.IO; -using GSCFieldApp.Services.FileServices; +using Template10.Mvvm; +using Template10.Services.NavigationService; +using Windows.ApplicationModel.Resources; +using Windows.Storage; using Windows.Storage.Pickers; using Windows.UI.Core; -using Template10.Utils; -using System.Diagnostics; -using System.Runtime.ConstrainedExecution; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; //Added By jamel //using OSGeo.GDAL; //using OSGeo.OGR; @@ -135,7 +133,7 @@ private async void FillProjectCollectionAsync() foreach (StorageFile sfi in localFiles) { //Get the database - if ((sfi.FileType.Contains(DatabaseLiterals.DBTypeSqlite) || sfi.FileType.Contains(DatabaseLiterals.DBTypeSqliteDeprecated)) + if ((sfi.FileType.Contains(DatabaseLiterals.DBTypeSqlite) || sfi.FileType.Contains(DatabaseLiterals.DBTypeSqliteDeprecated)) && sfi.DisplayName == DatabaseLiterals.DBName) { FieldBooks currentDB = new FieldBooks(); @@ -364,7 +362,7 @@ public async void DeleteFieldBook() DataAccess.DbPath = _projectCollection[newIndex].ProjectDBPath; ApplicationData.Current.SignalDataChanged(); - + } @@ -392,7 +390,7 @@ public async void DeleteFieldBook() //Refresh page FillProjectCollectionAsync(); - + } /// @@ -448,8 +446,8 @@ public async Task AddNewProject() /// /// /// - public async void OpenFieldBook(string projectPath, string fieldworkType, - string userCode, int metaID, string dbPath, string dbVersion, + public async void OpenFieldBook(string projectPath, string fieldworkType, + string userCode, int metaID, string dbPath, string dbVersion, string projectName, string activityName, bool withNavigateToMap = true) { //Clear previous field book settings @@ -533,8 +531,8 @@ public async Task BackupFieldBook() FilesToBackup.Add(newFile); //Zip and Copy - - await fs.SaveArchiveCopy(FilesToBackup, selectedBook.ProjectPath, + + await fs.SaveArchiveCopy(FilesToBackup, selectedBook.ProjectPath, selectedBook.metadataForProject.UserCode); await newFile.DeleteAsync(); @@ -584,11 +582,11 @@ await fs.SaveArchiveCopy(FilesToBackup, selectedBook.ProjectPath, // Driver driver = Ogr.GetDriverByName("GPKG"); // driver.CopyDataSource(inputDataSource, outputFilename, null); - + // Console.WriteLine("Data copied successfully."); // Console.ReadLine(); - + //} public void projectOpenButton_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e) @@ -664,30 +662,30 @@ public void ProjectEditButton_Tapped(object sender, Windows.UI.Xaml.Input.Tapped //public void DeleteButton_Click() //{ - //if (_projectCollection != null && _selectedProjectIndex != -1) - //{ - //FieldBooks selectedBook = _projectCollection[_selectedProjectIndex]; - //int selectedId = selectedBook.metadataForProject.MetaID; - //int bookToDelete = _projectCollection.IndexOf(_projectCollection.FirstOrDefault(item => item.metadataForProject.MetaID == selectedId)); + //if (_projectCollection != null && _selectedProjectIndex != -1) + //{ + //FieldBooks selectedBook = _projectCollection[_selectedProjectIndex]; + //int selectedId = selectedBook.metadataForProject.MetaID; + //int bookToDelete = _projectCollection.IndexOf(_projectCollection.FirstOrDefault(item => item.metadataForProject.MetaID == selectedId)); - //if (bookToDelete != -1) - //{ - // _projectCollection.RemoveAt(bookToDelete); - //} - //else - //{ + //if (bookToDelete != -1) + //{ + // _projectCollection.RemoveAt(bookToDelete); + //} + //else + //{ - //} - // ValidateDeleteProject(this); + //} + // ValidateDeleteProject(this); - //} + //} //} //public void EditButton_Click() //{ - + //} /// @@ -768,7 +766,7 @@ public async void ProjectRestore_Tapped(object sender, Windows.UI.Xaml.Input.Tap openPicker.FileTypeFilter.Add(DatabaseLiterals.DBTypeSqlite); openPicker.FileTypeFilter.Add(DatabaseLiterals.DBTypeSqliteDeprecated); openPicker.FileTypeFilter.Add(".zip"); - + StorageFile inFile = await openPicker.PickSingleFileAsync(); if (inFile != null) { @@ -850,7 +848,7 @@ public async void ProjectRestore_Tapped(object sender, Windows.UI.Xaml.Input.Tap { await wantedDB.RenameAsync(Dictionaries.DatabaseLiterals.DBName + extension); } - + SQLiteConnection loadedDBConnection = accessData.GetConnectionFromPath(wantedDB.Path); @@ -878,9 +876,9 @@ await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatch }).AsTask(); - } + } - OpenFieldBook(fieldProjectPath, metItem.FieldworkType, metItem.UserCode, + OpenFieldBook(fieldProjectPath, metItem.FieldworkType, metItem.UserCode, metItem.MetaID, wantedDB.Path, metItem.VersionSchema, metItem.ProjectName, metItem.MetadataActivity, false); FillProjectCollectionAsync(); } @@ -921,7 +919,7 @@ await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatch /// /// /// - + public async void ProjectUpgrade_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e) { if (System.IO.Directory.Exists(accessData.ProjectPath)) @@ -943,7 +941,7 @@ public async void ProjectUpgrade_Tapped(object sender, Windows.UI.Xaml.Input.Tap { //Keep current database path before creating the new one string dbFolderToUpgrade = Path.GetDirectoryName(localFolder.Path); - + //Create new fieldbook with embeded resource of legacy schema string versionFileName = DatabaseLiterals.DBName; //string OldVersionFileName = DatabaseLiterals.DBName; diff --git a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs index ace28d2d..0b41d546 100644 --- a/GSCFieldApp/ViewModels/FieldNotesViewModel.cs +++ b/GSCFieldApp/ViewModels/FieldNotesViewModel.cs @@ -1,21 +1,18 @@ -using System; +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml; +using Template10.Controls; using Template10.Mvvm; -using GSCFieldApp.Models; -using GSCFieldApp.Dictionaries; -using GSCFieldApp.Services.DatabaseServices; using Windows.Storage; -using Windows.UI.Xaml.Media; -using Template10.Controls; using Windows.UI; -using Windows.Foundation.Collections; -using System.Reflection; -using Newtonsoft.Json.Linq; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Media; namespace GSCFieldApp.ViewModels { @@ -71,7 +68,7 @@ public class FieldNotesViewModel : ViewModelBase //ViewModelBase already contain private FieldLocation locationModel = new FieldLocation(); private Mineral mineralModel = new Mineral(); private MineralAlteration mineralAltModel = new MineralAlteration(); - private EnvironmentModel environmentModel = new EnvironmentModel(); + private EnvironmentModel environmentModel = new EnvironmentModel(); //UI interaction private string deleteRequestFromTable = string.Empty; @@ -211,7 +208,7 @@ public class FieldNotesViewModel : ViewModelBase //ViewModelBase already contain #region Will enable or disable expansion for tables that are below stations - public bool LocationHeaderExpansion { get { return _locationHeaderExpansion; } set { _locationHeaderExpansion = value; localSetting.SetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandLocation,value); } } + public bool LocationHeaderExpansion { get { return _locationHeaderExpansion; } set { _locationHeaderExpansion = value; localSetting.SetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandLocation, value); } } public bool SampleHeaderExpansion { get { return _sampleHeaderExpansion; } set { _sampleHeaderExpansion = value; localSetting.SetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandSample, value); } } public bool StationHeaderExpansion { get { return _stationHeaderExpansion; } set { _stationHeaderExpansion = value; localSetting.SetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandStation, value); } } public bool EarthmatHeaderExpansion { get { return _earthmatHeaderExpansion; } set { _earthmatHeaderExpansion = value; localSetting.SetSettingValue(Dictionaries.ApplicationLiterals.KeyworkdExpandEarthmat, value); } } @@ -342,7 +339,7 @@ public int ReportListViewDateIndex public int ReportStationListIndex { get { return _reportStationIndex; } - set { _reportStationIndex = value; } + set { _reportStationIndex = value; } } //Same thing as ReportListViewIndex, but for station list view refresh public int ReportEarhtmatIndex { @@ -435,7 +432,7 @@ public int ReportEnvironmentIndex public double LocationIconColorOpacity { get { return _locationIconColorOpacity; } set { _locationIconColorOpacity = value; } } public double DocumentAddIconOpacity { get { return _documentAddIconOpacity; } set { _documentAddIconOpacity = value; } } - public double DocumentIconOpacity { get { return _documentIconOpacity; } set { _documentIconOpacity = value; }} + public double DocumentIconOpacity { get { return _documentIconOpacity; } set { _documentIconOpacity = value; } } public double DocumentIconColorOpacity { get { return _documentIconColorOpacity; } set { _documentIconColorOpacity = value; } } public double StructureIconOpacity { get { return _structureIconOpacity; } set { _structureIconOpacity = value; } } @@ -626,7 +623,7 @@ public void FillSummaryReportDateItems() { visitDateWhere = visitDateWhere + "AND " + where_raw; } - + } visitDateQuery = visitDateSelectFrom + visitDateWhere + visitDateOrderBy; @@ -685,7 +682,7 @@ public void FillSummaryReportDateItems() //} - if (summaryDone!=null) + if (summaryDone != null) { summaryDone(this); } @@ -729,7 +726,7 @@ public void FillStationFromList() { userTempSelection = _reportDetailedStation[_reportStationIndex].GenericAliasName; } - + #region Conditional to user having selected a station EmptyAll(); @@ -846,7 +843,7 @@ public void EmptyAll() _reportDetailedMineralAlt.Clear(); _reportDetailEnvironment.Clear(); RaisePropertyChanged("ReportDetailedLocation"); - RaisePropertyChanged("ReportDetailedDocument"); + RaisePropertyChanged("ReportDetailedDocument"); RaisePropertyChanged("ReportDetailedEarthmat"); RaisePropertyChanged("ReportDetailedFossil"); RaisePropertyChanged("ReportDetailedMineral"); @@ -933,7 +930,7 @@ public void FillEarthmatFromStation() #region Conditional to user having selected a station - if(_reportStationIndex != -1) + if (_reportStationIndex != -1) { if (_reportDetailedEarthmat.Count() > 0) { @@ -1275,7 +1272,7 @@ public void FillDocument() foreach (FieldNotes reportCollection in collectionOfSelectedItems) { - if (whereDefault!=string.Empty) + if (whereDefault != string.Empty) { whereDefault = whereDefault + " OR " + DatabaseLiterals.TableDocument + "." + DatabaseLiterals.FieldDocumentName + " LIKE '" + reportCollection.GenericAliasName + "%'"; } @@ -1374,7 +1371,7 @@ public void FillSample() { #region Conditional to have a selected earthmat foundParentOrSibling = true; - + //Get a list of related samples from selected earthmat //Querying with Linq @@ -1597,7 +1594,7 @@ public void FillStructure() //Manager header color opacity (transparent if no items) SetHeaderColorOpacity(Dictionaries.DatabaseLiterals.TableStructure); - RaisePropertyChanged("ReportDetailedStructure"); + RaisePropertyChanged("ReportDetailedStructure"); } //If the selection is already a sample, coming form an edit @@ -1648,7 +1645,7 @@ public void FillStructure() RaisePropertyChanged("ReportDetailedStructure"); } - + if (!foundParentOrSibling && _reportStationIndex != -1) { @@ -1703,7 +1700,7 @@ public void FillStructure() //Manager header color opacity (transparent if no items) SetHeaderColorOpacity(Dictionaries.DatabaseLiterals.TableStructure); - RaisePropertyChanged("ReportDetailedStructure"); + RaisePropertyChanged("ReportDetailedStructure"); } @@ -1822,7 +1819,7 @@ private void FillFossil() RaisePropertyChanged("ReportDetailedFossil"); } - + if (!foundParentOrSibling && _reportStationIndex != -1) { @@ -1993,7 +1990,7 @@ private void FillPflow() RaisePropertyChanged("ReportDetailedPflow"); } - + if (!foundParentOrSibling && _reportStationIndex != -1) { @@ -2198,8 +2195,8 @@ private void FillMineralFromParent(IEnumerable parentCollection, int pa { currentDetailReport.ParentID = parentID; //TO keep the link with earthmat table } - - + + currentDetailReport.MainID = _reportDetailedStation[ReportStationListIndex].station.LocationID; _reportDetailedMinerals.Add(currentDetailReport); @@ -2293,7 +2290,7 @@ public async void DeleteIcon_TappedAsync(object sender, Windows.UI.Xaml.Input.Ta //Keep info collectionToUpdate = _reportDetailedMinerals; indexToPop = _reportMineralIndex; - collectionNameToRefresh = "ReportDetailedMineral"; + collectionNameToRefresh = "ReportDetailedMineral"; } if (DatabaseLiterals.TableMineralAlteration.ToLower().Contains(senderName) && _reportMineralizationAlterationIndex != -1) { @@ -2366,7 +2363,7 @@ public async void DeleteIcon_TappedAsync(object sender, Windows.UI.Xaml.Input.Ta StorageFile photoToDelete = await StorageFile.GetFileFromPathAsync(noteToDelete.document.PhotoPath); await photoToDelete.DeleteAsync(); } - + } //Delete any related photos @@ -2590,7 +2587,7 @@ public void SetHeadersVisibility() /// /// /// - public void SetHeaderVisibility(string tableName, Visibility inTableVisibility, string propertyName ) + public void SetHeaderVisibility(string tableName, Visibility inTableVisibility, string propertyName) { try { @@ -2683,7 +2680,7 @@ public void SetHeaderVisibility(string tableName, Visibility inTableVisibility, { } - + RaisePropertyChanged("SamplePanelVisibility"); RaisePropertyChanged("EarthmatPanelVisibility"); RaisePropertyChanged("MineralPanelVisibility"); @@ -2954,9 +2951,9 @@ public void SetHeaderIconOpacity() RaisePropertyChanged("DocumentIconOpacity"); RaisePropertyChanged("DocumentAddIconOpacity"); - RaisePropertyChanged("DocumentAddIconColor"); + RaisePropertyChanged("DocumentAddIconColor"); - RaisePropertyChanged("StructureIconOpacity"); + RaisePropertyChanged("StructureIconOpacity"); RaisePropertyChanged("StructureAddIconOpacity"); RaisePropertyChanged("StructAddIconColor"); @@ -3005,7 +3002,7 @@ public void SetHeaderColorOpacity(string tableToUpdateHeader) if (_reportDetailedStation.Count != 0) { - + _stationIconColorOpacity = enableOpacity; Color stc = new Color(); @@ -3047,7 +3044,7 @@ public void SetHeaderColorOpacity(string tableToUpdateHeader) _locationIconColorOpacity = fullDisableOpacity; _locationColor.Color = dc; } - RaisePropertyChanged("LocationIconColorOpacity"); + RaisePropertyChanged("LocationIconColorOpacity"); RaisePropertyChanged("LocationColor"); } @@ -3099,7 +3096,7 @@ public void SetHeaderColorOpacity(string tableToUpdateHeader) _sampleColor.Color = dc; } RaisePropertyChanged("SampleIconColorOpacity"); - RaisePropertyChanged("SampleColor"); + RaisePropertyChanged("SampleColor"); } //Document records @@ -3408,7 +3405,7 @@ public void EditLocation() { PopLocation(_reportDetailedStation[ReportStationListIndex], true); } - + } public void ViewModel_newLocationEdit(object sender) @@ -3443,12 +3440,12 @@ public void ReportStationList_DoubleTapped(object sender, Windows.UI.Xaml.Input. /// public void EditStation() { - + if (_reportStationIndex != -1) { PopStation(_reportDetailedStation[_reportStationIndex]); } - + } #endregion @@ -3460,7 +3457,7 @@ public void EarthMatAddIcon_Tapped(object sender, Windows.UI.Xaml.Input.TappedRo { PopEarthmat(_reportDetailedStation[_reportStationIndex], false); } - + } /// @@ -3790,7 +3787,7 @@ public void MineralAltAddIcon_Tapped(object sender, Windows.UI.Xaml.Input.Tapped { PopMineralAlt(_reportDetailedStation[_reportStationIndex], false); } - + } @@ -4095,14 +4092,14 @@ public void ReportDetail_SelectionChanged(object sender, SelectionChangedEventAr if (selectedReport.GenericTableName == DatabaseLiterals.TableStation) { FillEarthmatFromStation(); - EmptyEarthmatChilds(); + EmptyEarthmatChilds(); FillLocation(); FillDocument(); FillMineralAltFromStation(); EmptyMineralizationAlterationChilds(); FillMineral(); FillEnvironmentFromStation(); - + } if (selectedReport.GenericTableName == DatabaseLiterals.TableEarthMat) @@ -4119,7 +4116,7 @@ public void ReportDetail_SelectionChanged(object sender, SelectionChangedEventAr FillMineral(); } - + } @@ -4228,7 +4225,7 @@ public void ValidateCheck(bool isValid, int inItemID, int originID) /// public void SetSelectedStationFromMapPage() { - if (userSelectedStationDate!= string.Empty && userSelectedStationID != string.Empty) + if (userSelectedStationDate != string.Empty && userSelectedStationID != string.Empty) { //Select proper date foreach (FieldNotes dates in _reportSummaryDateItems) @@ -4236,7 +4233,7 @@ public void SetSelectedStationFromMapPage() if (dates.station.StationVisitDate == userSelectedStationDate) { _reportDateIndex = _reportSummaryDateItems.IndexOf(dates); - + RaisePropertyChanged("ReportListViewDateIndex"); FillStationFromList(); //Refill station based on new selected date } @@ -4257,7 +4254,7 @@ public void SetSelectedStationFromMapPage() else { //Reset selection to last item - _reportStationIndex = _reportDetailedStation.Count - 1; + _reportStationIndex = _reportDetailedStation.Count - 1; RaisePropertyChanged("ReportStationListIndex"); diff --git a/GSCFieldApp/ViewModels/FossilViewModel.cs b/GSCFieldApp/ViewModels/FossilViewModel.cs index 4aaf33be..0c07f9bb 100644 --- a/GSCFieldApp/ViewModels/FossilViewModel.cs +++ b/GSCFieldApp/ViewModels/FossilViewModel.cs @@ -5,7 +5,7 @@ namespace GSCFieldApp.ViewModels { - public class FossilViewModel: ViewModelBase + public class FossilViewModel : ViewModelBase { #region INIT DECLARATIONS diff --git a/GSCFieldApp/ViewModels/LocationViewModel.cs b/GSCFieldApp/ViewModels/LocationViewModel.cs index 027dd2a5..d196ad68 100644 --- a/GSCFieldApp/ViewModels/LocationViewModel.cs +++ b/GSCFieldApp/ViewModels/LocationViewModel.cs @@ -14,7 +14,7 @@ namespace GSCFieldApp.ViewModels { - public class LocationViewModel: ViewModelBase + public class LocationViewModel : ViewModelBase { #region INITIALIZATION @@ -59,7 +59,8 @@ public class LocationViewModel: ViewModelBase public string LocationAlias { get { return _locationAlias; } set { _locationAlias = value; } } public int LocationID { get { return _locationID; } set { _locationID = value; } } - public string LocationLatitude { + public string LocationLatitude + { get { return _locationLatitude; } set { @@ -186,7 +187,7 @@ public void AutoFillDialog(FieldNotes incomingData) RaisePropertyChanged("LocationEasting"); RaisePropertyChanged("LocationNorthing"); RaisePropertyChanged("LocationNTS"); - RaisePropertyChanged("SelectedLocationDatums"); + RaisePropertyChanged("SelectedLocationDatums"); doLocationUpdate = true; } @@ -286,7 +287,7 @@ public void SetReadOnlyFields(bool doSetTo = false) { if (_readonlyFields) { - _readonlyFields = false; + _readonlyFields = false; } else { @@ -389,7 +390,7 @@ public async void DisplayUTMCoordinatesAsync() SpatialReference inSR = SpatialReferences.Wgs84; //Default if (selectedEPGS > 26900 && selectedEPGS < 27000) { - inSR = SpatialReference.Create(4617); + inSR = SpatialReference.Create(4617); } MapPoint geoPoint = new MapPoint(x_value, y_value, inSR); @@ -399,7 +400,7 @@ public async void DisplayUTMCoordinatesAsync() int y = (int)projPoint.Y; int x = (int)projPoint.X; _locationNorthing = y.ToString(); - _locationEasting= x.ToString(); + _locationEasting = x.ToString(); diff --git a/GSCFieldApp/ViewModels/MapPageViewModel.cs b/GSCFieldApp/ViewModels/MapPageViewModel.cs index ac566449..3e035bc9 100644 --- a/GSCFieldApp/ViewModels/MapPageViewModel.cs +++ b/GSCFieldApp/ViewModels/MapPageViewModel.cs @@ -1,42 +1,39 @@ -using System.Collections.Generic; -using System; -using System.Linq; -using System.Threading.Tasks; -using System.IO; -using System.Collections.ObjectModel; -using Windows.UI.Xaml; -using Windows.Devices.Geolocation; -using Windows.UI.Xaml.Controls; -using Windows.Storage; -using Windows.UI.Core; -using Esri.ArcGISRuntime.Mapping; -using Esri.ArcGISRuntime.UI.Controls; -using Esri.ArcGISRuntime.UI; +using Esri.ArcGISRuntime.Data; using Esri.ArcGISRuntime.Geometry; +using Esri.ArcGISRuntime.Mapping; using Esri.ArcGISRuntime.Symbology; -using Esri.ArcGISRuntime.Data; -using GSCFieldApp.Services.DatabaseServices; -using GSCFieldApp.Models; +using Esri.ArcGISRuntime.UI; +using Esri.ArcGISRuntime.UI.Controls; +using GeoAPI.CoordinateSystems; +using GeoAPI.CoordinateSystems.Transformations; using GSCFieldApp.Dictionaries; -using Template10.Mvvm; -using Template10.Controls; -using Windows.ApplicationModel.Resources; -using Windows.System; -using Windows.UI.Xaml.Input; -using System.Globalization; -using Symbol = Windows.UI.Xaml.Controls.Symbol; -using Newtonsoft.Json; -using SQLite; +using GSCFieldApp.Models; using GSCFieldApp.Services; - +using GSCFieldApp.Services.DatabaseServices; +using Newtonsoft.Json; //Added by jamel using ProjNet.CoordinateSystems; using ProjNet.CoordinateSystems.Transformations; -using ProjNet.Converters.WellKnownText; -using ProjNet; -using GeoAPI.CoordinateSystems; -using GeoAPI.CoordinateSystems.Transformations; +using SQLite; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Diagnostics; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using Template10.Controls; +using Template10.Mvvm; +using Windows.ApplicationModel.Resources; +using Windows.Devices.Geolocation; +using Windows.Storage; +using Windows.System; +using Windows.UI.Core; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; +using Symbol = Windows.UI.Xaml.Controls.Symbol; namespace GSCFieldApp.ViewModels { @@ -172,7 +169,7 @@ private void EsriMap_PropertyChanged(object sender, System.ComponentModel.Proper { initMap = true; } - + } #endregion @@ -313,7 +310,7 @@ public async Task SetGPS() _geolocator.DesiredAccuracy = Windows.Devices.Geolocation.PositionAccuracy.Default; //_geolocator.DesiredAccuracy = Windows.Devices.Geolocation.PositionAccuracy.High; - + break; case GeolocationAccessStatus.Denied: @@ -360,8 +357,8 @@ public async void Geolocal_StatusChangedAsync(Geolocator sender, Windows.Devices StartLocationRing(); ResetLocationGraphic(); } - - + + //await Task.Delay(3000); //Let enough time to pass so GPS actually gets a proper fix //await NoLocationFlightMode(); @@ -1818,7 +1815,7 @@ public async void Geolocal_Update(Geoposition in_position) { mapScale = ApplicationLiterals.defaultMapScale; } - + //Only move if there is a coordinate if (in_position.Coordinate.Point.Position.Longitude != 0 && in_position.Coordinate.Point.Position.Latitude != 0 && !pauseGraphicRefresh) @@ -1914,7 +1911,7 @@ private void SettingsPageViewModel_deleteAllLayers(object sender, EventArgs e) { DeleteLayersAsync(false); RefreshMap(true); - + } /// @@ -2031,7 +2028,7 @@ public async void myMapView_IdentifyFeature(object sender, Windows.UI.Xaml.Input ShowIdentifyStructureDialog(idGraphic.Attributes["Id"].ToString(), idGraphic.Attributes["Date"].ToString(), idGraphic.Attributes["Azim"].ToString(), idGraphic.Attributes["Dip"].ToString(), idGraphic.Attributes["StructureClass"].ToString(), idGraphic.Attributes["ParentID"].ToString(), sender); } - + } else { @@ -2060,16 +2057,16 @@ public async void myMapView_IdentifyFeature(object sender, Windows.UI.Xaml.Input /// /// /// - public async void ShowIdentifyStructureDialog(string graphicID, string graphicDate, + public async void ShowIdentifyStructureDialog(string graphicID, string graphicDate, string azim, string dipPlunge, string stationId, string graphicClass, object sender) { ContentDialog tapStationDialog = new ContentDialog() { Title = local.GetString("MapPageIdentifyStructureDialogTitle"), Content = String.Format("{0} {1} " + - "\n" + local.GetString("PflowDialogClass/Header") + "({2})" + + "\n" + local.GetString("PflowDialogClass/Header") + "({2})" + "\n" + local.GetString("StructureDialogAzim/Header") + "({3})" + - "\n" + local.GetString("StructureDialogDip/Header") + "({4})", + "\n" + local.GetString("StructureDialogDip/Header") + "({4})", graphicID, graphicDate, graphicClass, @@ -2099,7 +2096,7 @@ public async void ShowIdentifyStationDialog(string graphicID, string graphicDate { // Get select station information var tupleStation = queryStation(graphicID); - int stationId= tupleStation.Item1; + int stationId = tupleStation.Item1; string stationAlias = tupleStation.Item2; string stationDate = tupleStation.Item3; string stationTime = tupleStation.Item4; @@ -2355,7 +2352,7 @@ public void SaveLayerRendering() { Debug.WriteLine("Could not delete mapPageLayer.json"); } - + } using (var jayson = new StreamWriter(JSONPath, true)) @@ -2661,13 +2658,13 @@ public async Task AddUserLayers() { tpkList[sf.Name] = sf; } - else if (fileName.Contains(DatabaseLiterals.DBTypeSqlite) + else if (fileName.Contains(DatabaseLiterals.DBTypeSqlite) && !fileName.Contains(DatabaseLiterals.DBName) && !fileName.Contains(DatabaseLiterals.DBNameSuffixUpgrade)) { sqliteList[sf.Name] = sf; } - else if (fileName.Contains(DatabaseLiterals.DBTypeSqliteDeprecated) + else if (fileName.Contains(DatabaseLiterals.DBTypeSqliteDeprecated) && !fileName.Contains(DatabaseLiterals.DBName) && !fileName.Contains(DatabaseLiterals.DBNameSuffixUpgrade)) { @@ -2743,7 +2740,7 @@ public async Task AddUserLayers() } } - else if (configs.LayerName != null && (configs.LayerName.Contains(DatabaseLiterals.DBTypeSqlite) || configs.LayerName.Contains(DatabaseLiterals.DBTypeSqliteDeprecated))) + else if (configs.LayerName != null && (configs.LayerName.Contains(DatabaseLiterals.DBTypeSqlite) || configs.LayerName.Contains(DatabaseLiterals.DBTypeSqliteDeprecated))) { if (sqliteList.ContainsKey(configs.LayerName)) { @@ -2779,7 +2776,7 @@ public async Task AddUserLayers() LayerVisibility = true }; mpl.LayerSettings = mpls; - _filenameValues.Insert(0,mpl); + _filenameValues.Insert(0, mpl); RaisePropertyChanged("FilenameValues"); foundLayers = true; } @@ -2912,7 +2909,7 @@ public void AddDataTypeSQLite(StorageFile inSQLite, bool isVisible = true, doubl currentMapView.GraphicsOverlays.Add(_overlayContainerOther[inSQLite.Name][i]); } } - + LoadFromGivenDB(otherLocationTableRows, currentConnection, loadedOtherGraphicList, false); #endregion @@ -3081,14 +3078,14 @@ public async Task SetLayerOrderAsync() ObservableCollection newFileList = new ObservableCollection(); foreach (MapPageLayers orderedFiles in _filenameValues.Reverse()) //Reverse order while iteration because UI is reversed intentionnaly { - if (orderedFiles.LayerName.Contains(".tpk") || (orderedFiles.LayerName.Contains(DatabaseLiterals.DBTypeSqlite) - && !orderedFiles.LayerName.Contains(DatabaseLiterals.DBName)) || (orderedFiles.LayerName.Contains(DatabaseLiterals.DBTypeSqliteDeprecated) - && !orderedFiles.LayerName.Contains(DatabaseLiterals.DBName)) + if (orderedFiles.LayerName.Contains(".tpk") || (orderedFiles.LayerName.Contains(DatabaseLiterals.DBTypeSqlite) + && !orderedFiles.LayerName.Contains(DatabaseLiterals.DBName)) || (orderedFiles.LayerName.Contains(DatabaseLiterals.DBTypeSqliteDeprecated) + && !orderedFiles.LayerName.Contains(DatabaseLiterals.DBName)) && !orderedFiles.LayerName.Contains(DatabaseLiterals.DBNameSuffixUpgrade)) { //Build path string localFilePath = Path.Combine(accessData.ProjectPath, orderedFiles.LayerName); - Uri localUri = new Uri(localFilePath); + Uri localUri = new Uri(localFilePath); if (layerDico.ContainsKey(orderedFiles.LayerName.Split('.')[0])) { @@ -3128,7 +3125,7 @@ public async Task SetLayerOrderAsync() } - + } @@ -3183,7 +3180,7 @@ public void ClearLayers() currentMapView.UpdateLayout(); } - + } @@ -3582,11 +3579,11 @@ public async void DeleteLayersAsync(bool fromSelection) { if (esriMap != null) { - + esriMap.Basemap.BaseLayers.Clear(); esriMap = null; } - + } catch (Exception) { diff --git a/GSCFieldApp/ViewModels/MineralViewModel.cs b/GSCFieldApp/ViewModels/MineralViewModel.cs index e39a0da3..2dab7255 100644 --- a/GSCFieldApp/ViewModels/MineralViewModel.cs +++ b/GSCFieldApp/ViewModels/MineralViewModel.cs @@ -6,12 +6,11 @@ using System.Collections.ObjectModel; using System.Linq; using Template10.Mvvm; -using Windows.Gaming.Input.ForceFeedback; using Windows.UI.Xaml.Controls; namespace GSCFieldApp.ViewModels { - public class MineralViewModel: ViewModelBase + public class MineralViewModel : ViewModelBase { #region INITIALIZATION @@ -34,7 +33,7 @@ public class MineralViewModel: ViewModelBase private readonly Dictionary _mineralResidualModes = new Dictionary(); //Will contain mineral Id and it's mode, for residual mode calculation private readonly List _minerals = new List(); //Will contain a list of all minerals related to current parent earthmat. To catch duplicates - + //UI interaction public bool doMineralUpdate = false; @@ -143,7 +142,7 @@ public string MineralSizeMax public ObservableCollection MineralFormHabit { get { return _mineralFormHabit; } set { _mineralFormHabit = value; } } public ObservableCollection MineralFormHabitValues { get { return _mineralFormHabitValues; } set { _mineralFormHabitValues = value; } } public string SelectedMineralFormHabit { get { return _selectedMineralFormHabit; } set { _selectedMineralFormHabit = value; } } - public ObservableCollection MineralOccur{ get { return _mineralOccur; } set { _mineralOccur = value; } } + public ObservableCollection MineralOccur { get { return _mineralOccur; } set { _mineralOccur = value; } } public string SelectedMineralOccur { get { return _selectedMineralOccur; } set { _selectedMineralOccur = value; } } public ObservableCollection MineralModeText { get { return _mineralModeText; } set { _mineralModeText = value; } } public string SelectedMineralModeText { get { return _selectedMineralModeText; } set { _selectedMineralModeText = value; } } @@ -235,7 +234,7 @@ public void AutoFillDialog(FieldNotes incomingData) _mineralParentName = DatabaseLiterals.TableMineralAlteration; _mineralMAID = existingDataDetailMineral.mineral.MineralMAID; } - + _mineralAlias = existingDataDetailMineral.mineral.MineralIDName; _mineralName = existingDataDetailMineral.mineral.MineralName; @@ -287,7 +286,7 @@ public void AutoFillDialog(FieldNotes incomingData) RaisePropertyChanged("SelectedMineralFormHabit"); RaisePropertyChanged("SelectedMineralOccur"); RaisePropertyChanged("SelectedMineralModeText"); - + doMineralUpdate = true; } @@ -302,14 +301,14 @@ public void SaveDialogInfo() //Get current class information and add to model mineralModel.MineralID = _mineralID; //Prime key - + mineralModel.MineralIDName = _mineralAlias; - if (_mineralNote!= null && _mineralNote != String.Empty) + if (_mineralNote != null && _mineralNote != String.Empty) { mineralModel.MineralNote = _mineralNote; } - + mineralModel.MineralName = _mineralName; if (_mineralEMID != 0) @@ -418,7 +417,7 @@ private void FillForm() //Update UI RaisePropertyChanged("MineralFormHabit"); - RaisePropertyChanged("SelectedMineralFormHabit"); + RaisePropertyChanged("SelectedMineralFormHabit"); } /// @@ -436,7 +435,7 @@ private void FillOccur() //Update UI RaisePropertyChanged("MineralOccur"); - RaisePropertyChanged("SelectedMineralOccur"); + RaisePropertyChanged("SelectedMineralOccur"); } #endregion @@ -500,7 +499,7 @@ public void CalculateResidual(string newMode = "") } } - + } if (_mineralResidualModes.Count() == 0) @@ -584,7 +583,7 @@ public void MineralModeBox_SelectionChanged(object sender, SelectionChangedEvent Themes.ComboBoxItem senderItem = senderBox.SelectedItem as Themes.ComboBoxItem; CalculateResidual(senderItem.itemValue); } - + } /// diff --git a/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs b/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs index 2608d96c..293f6168 100644 --- a/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs +++ b/GSCFieldApp/ViewModels/MineralizationAlterationViewModel.cs @@ -1,16 +1,16 @@ using GSCFieldApp.Models; using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.Themes; +using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Template10.Mvvm; -using GSCFieldApp.Themes; using Windows.UI.Xaml.Controls; -using System; namespace GSCFieldApp.ViewModels { - public class MineralizationAlterationViewModel: ViewModelBase + public class MineralizationAlterationViewModel : ViewModelBase { #region INITIALIZATION @@ -261,7 +261,7 @@ private void FillMinAltPhase() //Update UI RaisePropertyChanged("MineralAltPhase"); - RaisePropertyChanged("SelectedMineralAltPhase"); + RaisePropertyChanged("SelectedMineralAltPhase"); } /// @@ -316,7 +316,7 @@ private void FillMineralAlterations() //Update UI RaisePropertyChanged("MineralAltMA"); - RaisePropertyChanged("SelectedMineralAltMA"); + RaisePropertyChanged("SelectedMineralAltMA"); } /// diff --git a/GSCFieldApp/ViewModels/PaleoflowViewModel.cs b/GSCFieldApp/ViewModels/PaleoflowViewModel.cs index eb166273..3e264963 100644 --- a/GSCFieldApp/ViewModels/PaleoflowViewModel.cs +++ b/GSCFieldApp/ViewModels/PaleoflowViewModel.cs @@ -8,7 +8,7 @@ namespace GSCFieldApp.ViewModels { - public class PaleoflowViewModel: ViewModelBase + public class PaleoflowViewModel : ViewModelBase { #region INIT DECLARATIONS @@ -36,7 +36,7 @@ public class PaleoflowViewModel: ViewModelBase private ObservableCollection _pflowRelative = new ObservableCollection(); private string _selectedPflowRelative = string.Empty; - public string _pflowNote= string.Empty;//Default + public string _pflowNote = string.Empty;//Default public string _pflowDipPlunge = string.Empty; public string _pflowAzim = string.Empty; public bool? _pflowMainDirection = false; @@ -183,10 +183,10 @@ private void FillPflowClass() { _pflowClass.Add(itemClass); } - + //Update UI - RaisePropertyChanged("PflowClass"); + RaisePropertyChanged("PflowClass"); RaisePropertyChanged("SelectedPflowClass"); } @@ -200,7 +200,7 @@ private void FillPflowDirection() { _pflowDir.Add(itemDirection); } - + //Update UI RaisePropertyChanged("PflowDir"); @@ -228,7 +228,7 @@ private void FillPflowFeature() { pflowF = accessData.GetPicklistValuesFromParent(tableName, fieldName, "x", false).ToList(); //Make the query crash and return N.A. if nothing is available in lithotype } - + //Fill in cbox if (_selectedPflowFeature == null) { @@ -263,7 +263,7 @@ private void FillPflowConfidence() { _pflowConfidence.Add(itemConfidence); } - + //Update UI RaisePropertyChanged("PflowConfidence"); @@ -279,11 +279,11 @@ private void FillPflowBedrockSurface() { _pflowBedSurface.Add(itemBedrockSurface); } - + //Update UI RaisePropertyChanged("PflowBedSurface"); - RaisePropertyChanged("SelectedPflowBedSurface"); + RaisePropertyChanged("SelectedPflowBedSurface"); } @@ -296,7 +296,7 @@ private void FillPflowDefition() { _pflowDefined.Add(itemDefinition); } - + //Update UI RaisePropertyChanged("PflowDefined"); @@ -313,7 +313,7 @@ private void FillPflowIndicatorNumber() { _pflowNoIndicator.Add(itemIndiNumber); } - + //Update UI RaisePropertyChanged("PflowNoIndicator"); @@ -329,7 +329,7 @@ private void FillPflowRelAge() { _pflowAge.Add(itemRelativeAge); } - + //Update UI RaisePropertyChanged("PflowAge"); @@ -346,7 +346,7 @@ private void FillPflowMethod() { _pflowMethod.Add(itemMethod); } - + //Update UI RaisePropertyChanged("PflowMethod"); @@ -363,7 +363,7 @@ private void FillPflowRelation() { _pflowRelative.Add(itemRelation); } - + //Update UI RaisePropertyChanged("PflowRelative"); @@ -400,7 +400,7 @@ public void AutoFillDialog(FieldNotes incomingData) { _pflowMainDirection = false; } - + _selectedPflowClass = existingDataDetailPflow.paleoflow.PFlowClass; _selectedPflowDir = existingDataDetailPflow.paleoflow.PFlowSense; @@ -414,10 +414,10 @@ public void AutoFillDialog(FieldNotes incomingData) _selectedPflowFeature = existingDataDetailPflow.paleoflow.PFlowFeature; //Update UI - RaisePropertyChanged("PflowID"); - RaisePropertyChanged("PflowAge"); - RaisePropertyChanged("PflowParentID"); - RaisePropertyChanged("PflowAzim"); + RaisePropertyChanged("PflowID"); + RaisePropertyChanged("PflowAge"); + RaisePropertyChanged("PflowParentID"); + RaisePropertyChanged("PflowAzim"); RaisePropertyChanged("PflowNote"); RaisePropertyChanged("PflowDip"); RaisePropertyChanged("PflowName"); @@ -427,14 +427,14 @@ public void AutoFillDialog(FieldNotes incomingData) RaisePropertyChanged("SelectedPflowClass"); RaisePropertyChanged("SelectedPflowDir"); - RaisePropertyChanged("SelectedPflowFeature"); - RaisePropertyChanged("SelectedPflowConfidence"); - RaisePropertyChanged("SelectedPflowBedSurface"); - RaisePropertyChanged("SelectedPflowDefined"); - RaisePropertyChanged("SelectedPflowNoIndicator"); - RaisePropertyChanged("SelectedPflowage"); - RaisePropertyChanged("SelectedPflowMethod"); - RaisePropertyChanged("SelectedPflowRelative"); + RaisePropertyChanged("SelectedPflowFeature"); + RaisePropertyChanged("SelectedPflowConfidence"); + RaisePropertyChanged("SelectedPflowBedSurface"); + RaisePropertyChanged("SelectedPflowDefined"); + RaisePropertyChanged("SelectedPflowNoIndicator"); + RaisePropertyChanged("SelectedPflowage"); + RaisePropertyChanged("SelectedPflowMethod"); + RaisePropertyChanged("SelectedPflowRelative"); doPflowUpdate = true; @@ -469,7 +469,7 @@ public void SaveDialogInfo() { pflowModel.PFlowMainDir = Dictionaries.DatabaseLiterals.boolNo; } - + } else { diff --git a/GSCFieldApp/ViewModels/PicklistViewModel.cs b/GSCFieldApp/ViewModels/PicklistViewModel.cs index ad5440da..fc559707 100644 --- a/GSCFieldApp/ViewModels/PicklistViewModel.cs +++ b/GSCFieldApp/ViewModels/PicklistViewModel.cs @@ -357,7 +357,7 @@ public async void UpdateLithology(bool withParent = true) //Rebuild semantic data if (withParent) { - Models.SemanticDataGenerator.GetGroupedData(true, Dictionaries.DatabaseLiterals.TableEarthMat, + Models.SemanticDataGenerator.GetGroupedData(true, Dictionaries.DatabaseLiterals.TableEarthMat, Dictionaries.DatabaseLiterals.FieldEarthMatLithgroup, Dictionaries.DatabaseLiterals.FieldEarthMatLithdetail); } else @@ -365,7 +365,7 @@ public async void UpdateLithology(bool withParent = true) Models.SemanticDataGenerator.GetGroupedData(true, Dictionaries.DatabaseLiterals.TableEarthMat, string.Empty, Dictionaries.DatabaseLiterals.FieldEarthMatLithdetail); } - + } /// @@ -445,7 +445,7 @@ public void picklistValues_SelectionChanged(object sender, SelectionChangedEvent _picklistEditEnableDisable = true; RaisePropertyChanged("PicklistEditEnableDisable"); _selectedPicklistValuesIndex = -1; - RaisePropertyChanged("SelectedPicklistValueIndex"); + RaisePropertyChanged("SelectedPicklistValueIndex"); } } diff --git a/GSCFieldApp/ViewModels/SampleViewModel.cs b/GSCFieldApp/ViewModels/SampleViewModel.cs index 80293c2c..38343f24 100644 --- a/GSCFieldApp/ViewModels/SampleViewModel.cs +++ b/GSCFieldApp/ViewModels/SampleViewModel.cs @@ -1,22 +1,22 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Template10.Mvvm; +using GSCFieldApp.Dictionaries; using GSCFieldApp.Models; using GSCFieldApp.Services.DatabaseServices; -using Windows.UI.Xaml.Controls; +using System; +using System.Collections.Generic; using System.Collections.ObjectModel; +using System.Linq; +using Template10.Mvvm; using Windows.UI.Xaml; -using GSCFieldApp.Dictionaries; +using Windows.UI.Xaml.Controls; namespace GSCFieldApp.ViewModels { - public class SampleViewModel: ViewModelBase + public class SampleViewModel : ViewModelBase { #region INITIALIZATION //UI default values - + private string _sampleAlias = string.Empty; private int _sampleID = 0; private int _sampleEartmatID = 0; @@ -104,7 +104,7 @@ public class SampleViewModel: ViewModelBase public string SelectedSampleSurface { get { return _selectedSampleSurface; } set { _selectedSampleSurface = value; } } public ObservableCollection SampleQuality { get { return _sampleQuality; } set { _sampleQuality = value; } } - public string SelectedSampleQuality{ get { return _selectedSampleQuality; } set { _selectedSampleQuality = value; } } + public string SelectedSampleQuality { get { return _selectedSampleQuality; } set { _selectedSampleQuality = value; } } public ObservableCollection SampleState { get { return _sampleState; } set { _sampleState = value; } } public string SelectedSampleState { get { return _selectedSampleState; } set { _selectedSampleState = value; } } @@ -289,7 +289,7 @@ public void AutoFillDialog(FieldNotes incomingData) if (_sampleDuplicateName != String.Empty) { _isSampleDuplicate = true; - RaisePropertyChanged("IsSampleDuplicate"); + RaisePropertyChanged("IsSampleDuplicate"); } //Update UI @@ -306,7 +306,7 @@ public void AutoFillDialog(FieldNotes incomingData) RaisePropertyChanged("SelectedSampleHorizon"); RaisePropertyChanged("SampleDepthMin"); RaisePropertyChanged("SampleDepthMax"); - RaisePropertyChanged("SampleDuplicateName"); + RaisePropertyChanged("SampleDuplicateName"); //Update list view UnPipePurposes(existingDataDetailSample.sample.SamplePurpose); @@ -328,7 +328,7 @@ public void SaveDialogInfo() sampleModel.SampleNotes = _sampleNote; sampleModel.SampleEarthmatID = _sampleEartmatID; sampleModel.SamplePurpose = PipePurposes(); //process list of values so they are concatenated. - if (_sampleAzim!= string.Empty) + if (_sampleAzim != string.Empty) { sampleModel.SampleAzim = int.Parse(_sampleAzim); } @@ -344,7 +344,7 @@ public void SaveDialogInfo() { sampleModel.SampleDepthMax = int.Parse(_sampleDepthMax); } - + sampleModel.SampleDuplicateName = _sampleDuplicateName; if (SelectedSampleType != null) @@ -402,7 +402,7 @@ private void FillSampleType() //Update UI RaisePropertyChanged("SampleType"); - RaisePropertyChanged("SelectedSampleType"); + RaisePropertyChanged("SelectedSampleType"); } /// @@ -420,7 +420,7 @@ private void FillSurface() //Update UI RaisePropertyChanged("SampleSurface"); - RaisePropertyChanged("SelectedSampleSurface"); + RaisePropertyChanged("SelectedSampleSurface"); } /// /// Will fill the sample type combobox @@ -454,7 +454,7 @@ private void FillQuality() //Update UI RaisePropertyChanged("SampleQuality"); - RaisePropertyChanged("SelectedSampleQuality"); + RaisePropertyChanged("SelectedSampleQuality"); } /// /// Will fill the sample state combobox @@ -504,7 +504,7 @@ private void FillSamplePurpose() { _samplePurpose.Add(itemPurpose); } - + //Update UI RaisePropertyChanged("SamplePurpose"); @@ -531,7 +531,7 @@ private void SetFieldVisibility() _surficialVisibility = Visibility.Visible; } } - else + else { //Fallback _bedrockVisibility = Visibility.Visible; @@ -610,7 +610,7 @@ public void AddAPurpose(string purposeToAdd) { _purposeValues.Add(newPurp); } - + } #endregion RaisePropertyChanged("PurposeValues"); @@ -662,15 +662,15 @@ public void ValidateForPaleomagnetism(bool forceDeactivate = false) #region validate paleomagnetism //Validate for oriented samplem type and paleomagnetism. This should trigger view on Oriented set of inputs - if (_surficialVisibility == Visibility.Visible - && SelectedSamplePurpose == DatabaseLiterals.samplePurposePaleomag + if (_surficialVisibility == Visibility.Visible + && SelectedSamplePurpose == DatabaseLiterals.samplePurposePaleomag && SelectedSampleType == DatabaseLiterals.sampleTypeOriented) { _bedrockVisibility = Visibility.Visible; RaisePropertyChanged("BedrockVisibility"); } - else if (_surficialVisibility == Visibility.Visible - && (SelectedSamplePurpose != DatabaseLiterals.samplePurposePaleomag + else if (_surficialVisibility == Visibility.Visible + && (SelectedSamplePurpose != DatabaseLiterals.samplePurposePaleomag || SelectedSampleType != DatabaseLiterals.sampleTypeOriented)) { _bedrockVisibility = Visibility.Collapsed; @@ -678,9 +678,9 @@ public void ValidateForPaleomagnetism(bool forceDeactivate = false) } //Validate within purposes list - if (_surficialVisibility == Visibility.Visible + if (_surficialVisibility == Visibility.Visible && SelectedSampleType == DatabaseLiterals.sampleTypeOriented - && SelectedSamplePurpose == String.Empty + && SelectedSamplePurpose == String.Empty && PurposeValues.Count > 0) { foreach (Themes.ComboBoxItem cbi in PurposeValues) diff --git a/GSCFieldApp/ViewModels/SettingsPageViewModel.cs b/GSCFieldApp/ViewModels/SettingsPageViewModel.cs index 9caa6fec..d15bbcd6 100644 --- a/GSCFieldApp/ViewModels/SettingsPageViewModel.cs +++ b/GSCFieldApp/ViewModels/SettingsPageViewModel.cs @@ -1,17 +1,17 @@ +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.Services.FileServices; +using SQLite; using System; using System.Collections.Generic; +using System.Globalization; +using System.IO; using System.Threading.Tasks; using Template10.Mvvm; using Windows.Storage; using Windows.UI.Xaml; -using GSCFieldApp.Models; using Windows.UI.Xaml.Controls; -using GSCFieldApp.Services.DatabaseServices; -using GSCFieldApp.Dictionaries; -using GSCFieldApp.Services.FileServices; -using SQLite; -using System.IO; -using System.Globalization; namespace GSCFieldApp.ViewModels { @@ -57,15 +57,20 @@ public class SettingsPageViewModel : ViewModelBase #region PROPERTIES //Toggle buttons for table choice - public bool CommonToggle {get { return _commonToggle; } - set { + public bool CommonToggle + { + get { return _commonToggle; } + set + { _commonToggle = value; RaisePropertyChanged(); localSetting.SetSettingValue(Dictionaries.ScienceLiterals.ApplicationThemeCommon, value); ToggleCommons(value); } - } - public bool BedrockToggle { get { return _bedrockToggle; } + } + public bool BedrockToggle + { + get { return _bedrockToggle; } set { _bedrockToggle = value; @@ -74,7 +79,9 @@ public class SettingsPageViewModel : ViewModelBase ToggleBedrock(value); } } - public bool SurficialToggle { get { return _surficialToggle; } + public bool SurficialToggle + { + get { return _surficialToggle; } set { _surficialToggle = value; @@ -117,7 +124,7 @@ public SettingsPageViewModel() public void InitializeToggleSwitches() { #region Header toggle based on project type - if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoFWorkType)!=null) + if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoFWorkType) != null) { if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoFWorkType).ToString() == Dictionaries.ScienceLiterals.ApplicationThemeBedrock) { @@ -134,7 +141,7 @@ public void InitializeToggleSwitches() #endregion #region Header toggles - if (localSetting.GetSettingValue(Dictionaries.ScienceLiterals.ApplicationThemeCommon)!=null) + if (localSetting.GetSettingValue(Dictionaries.ScienceLiterals.ApplicationThemeCommon) != null) { _commonToggle = (bool)localSetting.GetSettingValue(Dictionaries.ScienceLiterals.ApplicationThemeCommon); @@ -271,7 +278,7 @@ private void Switch_ChildSwitched(string parentName, bool parentSwitchValue) { ToggleEarthChilds(parentSwitchValue); } - + } } @@ -295,7 +302,7 @@ public void ToggleEarthChilds(bool earthToggleValue) RaisePropertyChanged("SampleToggle"); RaisePropertyChanged("MineralToggle"); RaisePropertyChanged("StructureToggle"); - RaisePropertyChanged("PflowToggle"); + RaisePropertyChanged("PflowToggle"); } @@ -312,7 +319,7 @@ public void ToggleCommons(bool commonToggleValue) FossilToggle = commonToggleValue; EarthToggle = commonToggleValue; - RaisePropertyChanged("EarthToggle"); + RaisePropertyChanged("EarthToggle"); RaisePropertyChanged("FossilToggle"); RaisePropertyChanged("CommonToggle"); RaisePropertyChanged("PhotoToggle"); @@ -366,7 +373,7 @@ public async void ResetAppAsync() ContentDialog deleteBookDialog = new ContentDialog() { Title = loadLocalization.GetString("SettingPageButtonResetTitle"), - Content = loadLocalization.GetString("SettingPageButtonResetMessage/Text") , + Content = loadLocalization.GetString("SettingPageButtonResetMessage/Text"), PrimaryButtonText = loadLocalization.GetString("Generic_ButtonYes/Content"), SecondaryButtonText = loadLocalization.GetString("Generic_ButtonNo/Content") }; @@ -401,7 +408,7 @@ public async void ResetAppAsync() } } - + /// /// An hidden double click to wipe (factory reset) the app /// @@ -449,7 +456,7 @@ public async void settingLoadPicklistButton_TappedAsync(object sender, Windows.U int read = fileReader.Read(buffer, 0, buffer.Length); readCount += read; fileWriter.Write(buffer, 0, read); - + } } } @@ -488,11 +495,11 @@ public void MyPivot_SelectionChanged(object sender, SelectionChangedEventArgs e) //Get info Pivot senderPivot = (Pivot)sender; PivotItem selectedPivotItem = (PivotItem)senderPivot.Items[_selectedPivotIndex]; - + if (selectedPivotItem.Name.ToLower().Contains("picklist")) { _loadPicklistVisibility = Visibility.Visible; - + } else { @@ -503,7 +510,7 @@ public void MyPivot_SelectionChanged(object sender, SelectionChangedEventArgs e) } - public class PicklistPartViewModel: ViewModelBase + public class PicklistPartViewModel : ViewModelBase { } @@ -566,7 +573,7 @@ public bool UsePhotoModeDialogButton { return (bool)currentSettings.GetSettingValue(Dictionaries.ApplicationLiterals.KeywordDocumentMode); } - + } set { @@ -620,7 +627,7 @@ public bool UseStructureSymbols { settingStructSymbolRequest(this, null); } - + } } diff --git a/GSCFieldApp/ViewModels/ShellViewModel.cs b/GSCFieldApp/ViewModels/ShellViewModel.cs index 26f2af57..9c431248 100644 --- a/GSCFieldApp/ViewModels/ShellViewModel.cs +++ b/GSCFieldApp/ViewModels/ShellViewModel.cs @@ -1,16 +1,16 @@ -using System; -using System.Collections.Generic; -using Windows.Storage; -using Template10.Mvvm; +using GSCFieldApp.Dictionaries; using GSCFieldApp.Services.DatabaseServices; -using Windows.UI.Xaml.Controls; using GSCFieldApp.Services.FileServices; +using System; +using System.Collections.Generic; +using Template10.Mvvm; +using Windows.Storage; using Windows.UI.Xaml; -using GSCFieldApp.Dictionaries; +using Windows.UI.Xaml.Controls; namespace GSCFieldApp.ViewModels { - public class ShellViewModel: ViewModelBase + public class ShellViewModel : ViewModelBase { //UI private bool _shellEnableMapCommand = true; @@ -81,7 +81,7 @@ public async void QuickBackupAsync() { inMemoryYoungestPhoto = DateTimeOffset.MinValue; } - + } if (localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoPName) != null) { @@ -111,13 +111,13 @@ public async void QuickBackupAsync() { FilesToBackup.Add(files); } - + } //Get photos if (files.Name.ToLower().Contains(".jpg")) { - hasPhotos = true; + hasPhotos = true; if (files.DateCreated >= inMemoryYoungestPhoto) { //Copy all photos @@ -154,13 +154,13 @@ public async void QuickBackupAsync() newList.Add(sf); } - + } //Zip string outputArchivePath = await fs.AddFilesToZip(newList); - + //Keep youngest photo in memory localSetting.SetSettingValue(Dictionaries.ApplicationLiterals.KeywordBackupPhotoYoungest, youngestPhoto); @@ -175,10 +175,10 @@ public async void QuickBackupAsync() await fsToDelete.DeleteAsync(); break; } - + } - + } else if (FilesToBackup.Count == 1 && FilesToBackup[0].Name.Contains(DatabaseLiterals.DBTypeSqlite)) { @@ -201,7 +201,7 @@ public async void QuickBackupAsync() endProcessDialog.Style = (Style)Application.Current.Resources["DeleteDialog"]; ContentDialogResult cdr = await endProcessDialog.ShowAsync(); } - + } else if (FilesToBackup.Count == 0) { @@ -220,7 +220,7 @@ public async void QuickBackupAsync() //Show empty backed up photo warning if (photoCount == 0 && hasPhotos) { - + var loadLocalization = Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView(); ContentDialog warningNoPhotoBackup = new ContentDialog() { diff --git a/GSCFieldApp/ViewModels/StationViewModel.cs b/GSCFieldApp/ViewModels/StationViewModel.cs index 68770945..bb8921af 100644 --- a/GSCFieldApp/ViewModels/StationViewModel.cs +++ b/GSCFieldApp/ViewModels/StationViewModel.cs @@ -1,16 +1,14 @@ -using System; +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using System; using System.Collections.Generic; +using System.Collections.ObjectModel; using System.Linq; using System.Threading.Tasks; using Template10.Mvvm; -using GSCFieldApp.Models; -using GSCFieldApp.Services.DatabaseServices; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using System.Collections.ObjectModel; -using GSCFieldApp.Dictionaries; -using GSCFieldApp.Themes; -using Windows.ApplicationModel.Contacts; namespace GSCFieldApp.ViewModels { @@ -68,7 +66,7 @@ public StationViewModel(bool isWayPoint) //Fill controls FillStationType(); - + SetFieldVisibility(); //Will enable/disable some fields based on bedrock or surficial usage //Treat station for themes. @@ -141,14 +139,14 @@ public string TraverseNo public string SlSNotes { get { return _slsnotes; } set { _slsnotes = value; } } public string StationOCSize { get { return _stationOCSize; } set { _stationOCSize = value; } } - public ObservableCollection StationTypes {get { return _stationTypes; } set { _stationTypes = value; } } - public string SelectedStationTypes{ get { return _selectedStationTypes; } set { _selectedStationTypes = value; } } + public ObservableCollection StationTypes { get { return _stationTypes; } set { _stationTypes = value; } } + public string SelectedStationTypes { get { return _selectedStationTypes; } set { _selectedStationTypes = value; } } public ObservableCollection ObservationSource { get { return _observationSource; } set { _observationSource = value; } } public string SelectedObservationSources { get { return _selectedObservationSource; } set { _selectedObservationSource = value; } } public ObservableCollection StationQuality { get { return _stationQuality; } set { _stationQuality = value; } } - public string SelectedStationQuality{ get { return _selectedStationQuality; } set { _selectedStationQuality = value; } } + public string SelectedStationQuality { get { return _selectedStationQuality; } set { _selectedStationQuality = value; } } public ObservableCollection StationQualityValues { get { return _stationQualityValues; } set { _stationQualityValues = value; } } public ObservableCollection StationPhysEnv { get { return _stationPhysEnv; } set { _stationPhysEnv = value; } } public string SelectedStationPhysEnv { get { return _selectedStationPhysEnv; } set { _selectedStationPhysEnv = value; } } @@ -249,11 +247,11 @@ public void SaveDialogInfo() //accessData.SaveFromSQLTableObject(StationModel, doStationUpdate); - if (newStationEdit!=null) + if (newStationEdit != null) { newStationEdit(this); } - + } public void AutoFillDialog(FieldNotes incomingData, bool isWaypoint) @@ -300,7 +298,7 @@ public void AutoFillDialog(FieldNotes incomingData, bool isWaypoint) _waypointVisibility = Visibility.Collapsed; RaisePropertyChanged("WaypointVisibility"); } - else + else { _waypointVisibility = Visibility.Visible; RaisePropertyChanged("WaypointVisibility"); @@ -336,7 +334,7 @@ private void FillAirPhotoNo_TraverseNo() string currentDate = DateTime.Now.ToShortDateString(); DateTime lastStationDate = DateTime.Parse(sts.StationVisitDate); DateTime currentDateDT = DateTime.Parse(currentDate); - if (lastStationDate!= null && currentDateDT != null) + if (lastStationDate != null && currentDateDT != null) { int dateComparisonResult = DateTime.Compare(lastStationDate, currentDateDT); if (lastStationDate != null && dateComparisonResult < 0) @@ -370,7 +368,7 @@ private void FillStationPhysEnv() { _stationPhysEnv.Add(itemPE); } - + //Update UI RaisePropertyChanged("StationPhysEnv"); @@ -390,7 +388,7 @@ private void FillStationQuality() { _stationQuality.Add(itemSQ); } - + //Update UI RaisePropertyChanged("StationQuality"); @@ -552,7 +550,7 @@ public int QuickLocation(FieldLocation inLocation) Location.LocationElev = _elevation; } - + Location.LocationAlias = _locationAlias = idCalculator.CalculateLocationAlias(_alias); //Calculate new value //Location.LocationID = _locationid = idCalculator.CalculateLocationID(_locationAlias); //Calculate new value Location.MetaID = int.Parse(localSetting.GetSettingValue(Dictionaries.DatabaseLiterals.FieldUserInfoID).ToString()); //Foreign key @@ -563,7 +561,7 @@ public int QuickLocation(FieldLocation inLocation) //Fill in the feature location GeopackageService geoService = new GeopackageService(); string insertQuery = accessData.GetGeopackageInsertQuery(Location); - + Location.LocationID = geoService.DoSpatialiteQueryInGeopackage(insertQuery); return Location.LocationID; } @@ -589,7 +587,7 @@ public FieldNotes QuickStation(FieldLocation inPosition) StationModel.StationVisitDate = _dateDate = CalculateStationDate(); //Calculate new value StationModel.StationVisitTime = _dateTime = CalculateStationTime();//Calculate new value StationModel.StationAirNo = _airno; - if (_stationTravNo!=string.Empty) + if (_stationTravNo != string.Empty) { StationModel.StationTravNo = Convert.ToInt32(_stationTravNo); } diff --git a/GSCFieldApp/ViewModels/StructureViewModel.cs b/GSCFieldApp/ViewModels/StructureViewModel.cs index f454113a..ea889ca2 100644 --- a/GSCFieldApp/ViewModels/StructureViewModel.cs +++ b/GSCFieldApp/ViewModels/StructureViewModel.cs @@ -10,10 +10,10 @@ namespace GSCFieldApp.ViewModels { - public class StructureViewModel: ViewModelBase + public class StructureViewModel : ViewModelBase { #region INIT DECLARATIONS - + public bool doStructureUpdate = false; private string _groupTypeDetail = string.Empty; public string level1Sep = Dictionaries.ApplicationLiterals.parentChildLevel1Seperator; @@ -25,7 +25,7 @@ public class StructureViewModel: ViewModelBase private ObservableCollection _structMethod = new ObservableCollection(); private string _selectedStructMethod = string.Empty; private ObservableCollection _structAttitude = new ObservableCollection(); - private string _selectedStructAttitude = string.Empty; + private string _selectedStructAttitude = string.Empty; private ObservableCollection _structYoung = new ObservableCollection(); private string _selectedStructYoung = string.Empty; private ObservableCollection _structGen = new ObservableCollection(); @@ -66,7 +66,7 @@ public class StructureViewModel: ViewModelBase #region PROPERTIES public string StructDetail { get { return _structDetail; } set { _structDetail = value; } } - public string StructFabric{ get { return _structFabric; } set { _structFabric = value; } } + public string StructFabric { get { return _structFabric; } set { _structFabric = value; } } public string StructSense { get { return _structSense; } set { _structSense = value; } } public string StructNote { get { return _structNote; } set { _structNote = value; } } public string StructClass { get { return _structClass; } set { _structClass = value; } } @@ -90,7 +90,7 @@ public class StructureViewModel: ViewModelBase public ObservableCollection StructStrain { get { return _structStrain; } set { _structStrain = value; } } public string SelectedStructStrain { get { return _selectedStructStrain; } set { _selectedStructStrain = value; } } public ObservableCollection StructFlat { get { return _structFlat; } set { _structFlat = value; } } - public string SelectedStructFlat{ get { return _selectedStructFlat; } set { _selectedStructFlat = value; } } + public string SelectedStructFlat { get { return _selectedStructFlat; } set { _selectedStructFlat = value; } } public ObservableCollection StructRelated { get { return _structRel; } set { _structRel = value; } } public string SelectedStructRelated { get { return _selectedStructRel; } set { _selectedStructRel = value; } } public string StructAzim @@ -159,7 +159,7 @@ public string StructDip { _structDip = value = "0"; } - + RaisePropertyChanged("StructDip"); } @@ -206,7 +206,7 @@ public void FillStructureRelated(string lithoClass = "") { lithoClass = existingDataDetailStructure.structure.StructureClass; } - + } @@ -220,7 +220,7 @@ public void FillStructureRelated(string lithoClass = "") } else if (existingDataDetailStructure.GenericTableName == Dictionaries.DatabaseLiterals.TableStructure) { - queryWhere = queryWhere + " = " + existingDataDetailStructure.ParentID ; + queryWhere = queryWhere + " = " + existingDataDetailStructure.ParentID; } //Extra where clause to select only counterpart and not same structure types @@ -233,7 +233,7 @@ public void FillStructureRelated(string lithoClass = "") queryWhere = queryWhere + " AND " + DatabaseLiterals.FieldStructureClass + " LIKE '%" + DatabaseLiterals.KeywordPlanar + "%'"; } else - { + { //Do nothing which should select everything. } @@ -356,7 +356,7 @@ private void FillStructureGeneration() { RaisePropertyChanged("SelectedStructGen"); } - + #endregion @@ -523,7 +523,7 @@ public void AutoFillDialog(FieldNotes incomingData) { _structClass = existingDataDetailStructure.structure.StructureClass.ToString(); } - + _strucclasstypedetail = existingDataDetailStructure.structure.getClassTypeDetail; _selectedStructFlat = existingDataDetailStructure.structure.StructureFlattening; @@ -540,23 +540,23 @@ public void AutoFillDialog(FieldNotes incomingData) //Update UI RaisePropertyChanged("StructID"); - RaisePropertyChanged("StructName"); - RaisePropertyChanged("StructDetail"); - RaisePropertyChanged("StructAzim"); + RaisePropertyChanged("StructName"); + RaisePropertyChanged("StructDetail"); + RaisePropertyChanged("StructAzim"); RaisePropertyChanged("StructDip"); - RaisePropertyChanged("StructFabric"); - RaisePropertyChanged("StructNote"); - RaisePropertyChanged("StructSense"); + RaisePropertyChanged("StructFabric"); + RaisePropertyChanged("StructNote"); + RaisePropertyChanged("StructSense"); RaisePropertyChanged("StructType"); RaisePropertyChanged("StructParentID"); RaisePropertyChanged("StructClassTypeDetail"); - RaisePropertyChanged("SelectedStructFlat"); - RaisePropertyChanged("SelectedStructMethod"); + RaisePropertyChanged("SelectedStructFlat"); + RaisePropertyChanged("SelectedStructMethod"); RaisePropertyChanged("SelectedStructStrain"); - - AutoFillDialog2ndRound(incomingData); + + AutoFillDialog2ndRound(incomingData); doStructureUpdate = true; } @@ -619,7 +619,7 @@ public void SaveDialogInfoAsync() { newStructureEdit(this); } - + } @@ -686,7 +686,7 @@ public void BuildStructureObject() { structureModel.StructureFlattening = SelectedStructFlat; } - if (SelectedStructRelated != null && SelectedStructRelated != string.Empty + if (SelectedStructRelated != null && SelectedStructRelated != string.Empty && SelectedStructRelated != DatabaseLiterals.picklistNACode) { structureModel.StructureRelated = int.Parse(SelectedStructRelated); @@ -740,7 +740,7 @@ public void NewDialog_userHasSelectedAValue(object sender) { ListView inListView = sender as ListView; Models.SemanticData inSD = inListView.SelectedValue as Models.SemanticData; - if (inSD!=null) + if (inSD != null) { string userStrucClassTypeDetail = inSD.Title + level2Sep + inSD.Subtitle; NewSearch_userHasSelectedAValue(userStrucClassTypeDetail); diff --git a/GSCFieldApp/Views/ContentDialogSemanticZoom.xaml.cs b/GSCFieldApp/Views/ContentDialogSemanticZoom.xaml.cs index 6ed1faca..70db706d 100644 --- a/GSCFieldApp/Views/ContentDialogSemanticZoom.xaml.cs +++ b/GSCFieldApp/Views/ContentDialogSemanticZoom.xaml.cs @@ -1,7 +1,7 @@ -using Windows.UI.Xaml; +using GSCFieldApp.ViewModels; +using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; -using GSCFieldApp.ViewModels; // The Content Dialog item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 @@ -31,7 +31,7 @@ public ContentDialogSemanticZoom(string tableName, string parentFieldName, strin this.Loaded += ContentDialogSemanticZoom_Loaded; } - + private void ContentDialogSemanticZoom_Loaded(object sender, RoutedEventArgs e) { var collectionGroups = Collection.View.CollectionGroups; diff --git a/GSCFieldApp/Views/DocumentDialog.xaml.cs b/GSCFieldApp/Views/DocumentDialog.xaml.cs index bcd44d21..7c35d28b 100644 --- a/GSCFieldApp/Views/DocumentDialog.xaml.cs +++ b/GSCFieldApp/Views/DocumentDialog.xaml.cs @@ -1,15 +1,15 @@ -using System; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.ViewModels; +using System; +using System.Collections.Generic; using System.IO; +using Template10.Common; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; -using GSCFieldApp.ViewModels; -using GSCFieldApp.Models; -using Template10.Common; -using Windows.UI.Xaml.Media.Imaging; -using GSCFieldApp.Services.DatabaseServices; using Windows.UI.Xaml.Media; -using System.Collections.Generic; +using Windows.UI.Xaml.Media.Imaging; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 diff --git a/GSCFieldApp/Views/EarthmatDialog.xaml.cs b/GSCFieldApp/Views/EarthmatDialog.xaml.cs index 794681f8..68c3eb6b 100644 --- a/GSCFieldApp/Views/EarthmatDialog.xaml.cs +++ b/GSCFieldApp/Views/EarthmatDialog.xaml.cs @@ -1,16 +1,15 @@ -using System; +using GSCFieldApp.Dictionaries; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.ViewModels; +using System; using System.Collections.Generic; using System.Linq; +using Template10.Common; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; -using GSCFieldApp.ViewModels; -using GSCFieldApp.Models; -using Template10.Common; -using GSCFieldApp.Services.DatabaseServices; -using Windows.UI.Core; -using GSCFieldApp.Dictionaries; // The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238 @@ -23,7 +22,7 @@ public sealed partial class EarthmatDialog : UserControl { public EarthmatViewModel ViewModel { get; set; } public FieldNotes parentViewMode { get; set; } - + public List Rocks { get; private set; } private readonly DataAccess accessData = new DataAccess(); @@ -246,8 +245,8 @@ private async void EarthLithoSearch_Click(object sender, RoutedEventArgs e) ContentDialogResult results = await newDialog.ShowAsync(); } - - + + } diff --git a/GSCFieldApp/Views/EnvironmentDialog.xaml.cs b/GSCFieldApp/Views/EnvironmentDialog.xaml.cs index 10dfc3e3..6d9e671d 100644 --- a/GSCFieldApp/Views/EnvironmentDialog.xaml.cs +++ b/GSCFieldApp/Views/EnvironmentDialog.xaml.cs @@ -1,19 +1,18 @@ -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; -using Template10.Common; +using GSCFieldApp.Models; using GSCFieldApp.ViewModels; -using GSCFieldApp.Models; +using System.Collections.Generic; using System.ComponentModel; -using System.Threading.Tasks; +using Template10.Common; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; -using System.Collections.Generic; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 namespace GSCFieldApp.Views { - public sealed partial class EnvironmentDialog : UserControl + public sealed partial class EnvironmentDialog : UserControl { public event PropertyChangedEventHandler PropertyChanged = delegate { }; public FieldNotes parentEnvironmentReport; diff --git a/GSCFieldApp/Views/FieldBookDialog.xaml.cs b/GSCFieldApp/Views/FieldBookDialog.xaml.cs index e831a7d4..631e75ba 100644 --- a/GSCFieldApp/Views/FieldBookDialog.xaml.cs +++ b/GSCFieldApp/Views/FieldBookDialog.xaml.cs @@ -1,15 +1,15 @@ -using System; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.ViewModels; +using System; using System.IO; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; +using System.Threading.Tasks; using Template10.Common; using Template10.Controls; -using GSCFieldApp.ViewModels; -using System.Threading.Tasks; -using GSCFieldApp.Services.DatabaseServices; -using GSCFieldApp.Models; using Windows.Storage; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; namespace GSCFieldApp.Views { @@ -48,8 +48,8 @@ public FieldBookDialog(FieldBooks inProject, bool init = false) //#258 bringing back some old patch on save button this.userInfoSaveButton.GotFocus -= userInfoSaveButton_GotFocusAsync; this.userInfoSaveButton.GotFocus += userInfoSaveButton_GotFocusAsync; //bug 306 - - + + } private void UserInfoPart_Loading(FrameworkElement sender, object args) @@ -80,7 +80,7 @@ private void UserCodeTextBox_TextChanging(TextBox sender, TextBoxTextChangingEve sender.SelectionLength = 0; } - + #region SAVE @@ -146,9 +146,9 @@ private async void userInfoSaveButton_GotFocusAsync(object sender, RoutedEventAr }; await mandatoryFields.ShowAsync(); - + } - + this.userInfoSaveButton.GotFocus += userInfoSaveButton_GotFocusAsync; } @@ -192,7 +192,7 @@ private async void userInfoCancelButton_TappedAsync(object sender, TappedRoutedE await DeleteInitBook(); } - + } @@ -240,12 +240,12 @@ public async Task DeleteABook(StorageFolder inSF) { } - + fileStillExists = Directory.Exists(inSF.Path); ; } return fileStillExists; - + } diff --git a/GSCFieldApp/Views/FieldBooksPage.xaml.cs b/GSCFieldApp/Views/FieldBooksPage.xaml.cs index 8da5080a..54ea503e 100644 --- a/GSCFieldApp/Views/FieldBooksPage.xaml.cs +++ b/GSCFieldApp/Views/FieldBooksPage.xaml.cs @@ -1,9 +1,6 @@ +using GSCFieldApp.ViewModels; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; -using GSCFieldApp.ViewModels; -using Esri.ArcGISRuntime.Portal; -using System.Collections.Generic; -using static GSCFieldApp.Views.FieldBooksPage; namespace GSCFieldApp.Views { diff --git a/GSCFieldApp/Views/FieldNotesPage.xaml.cs b/GSCFieldApp/Views/FieldNotesPage.xaml.cs index bde92199..fefa0eeb 100644 --- a/GSCFieldApp/Views/FieldNotesPage.xaml.cs +++ b/GSCFieldApp/Views/FieldNotesPage.xaml.cs @@ -1,10 +1,10 @@ -using System.ComponentModel; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.ViewModels; +using System.ComponentModel; using Windows.Data.Json; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; -using GSCFieldApp.ViewModels; -using GSCFieldApp.Services.DatabaseServices; namespace GSCFieldApp.Views { @@ -14,7 +14,7 @@ public sealed partial class FieldNotesPage : Page //Event to notify View of any changes public event PropertyChangedEventHandler PropertyChanged = delegate { }; - + public FieldNotesViewModel ViewModel { get; set; } //Local settings @@ -124,7 +124,7 @@ private void ViewModel_summaryDone(object sender) ViewModel.userSelectedStationDate = string.Empty; ViewModel.SetSelectedStationFromMapPage(); } - + } /// @@ -138,7 +138,7 @@ private void Grid_Loaded(object sender, RoutedEventArgs e) { this.ViewModel.FillSummaryReportDateItems(); } - + } /// diff --git a/GSCFieldApp/Views/FossilDialog.xaml.cs b/GSCFieldApp/Views/FossilDialog.xaml.cs index f29fd026..28693fc5 100644 --- a/GSCFieldApp/Views/FossilDialog.xaml.cs +++ b/GSCFieldApp/Views/FossilDialog.xaml.cs @@ -1,9 +1,9 @@ -using GSCFieldApp.ViewModels; +using GSCFieldApp.Models; +using GSCFieldApp.ViewModels; using Template10.Common; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; -using GSCFieldApp.Models; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 diff --git a/GSCFieldApp/Views/LocationDialog.xaml.cs b/GSCFieldApp/Views/LocationDialog.xaml.cs index 9a53f1f9..1c579903 100644 --- a/GSCFieldApp/Views/LocationDialog.xaml.cs +++ b/GSCFieldApp/Views/LocationDialog.xaml.cs @@ -1,15 +1,15 @@ -using GSCFieldApp.ViewModels; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.ViewModels; using System; +using System.Threading.Tasks; using Template10.Common; +using Template10.Controls; +using Windows.ApplicationModel.Resources; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; -using GSCFieldApp.Models; -using Windows.ApplicationModel.Resources; -using Template10.Controls; -using GSCFieldApp.Services.DatabaseServices; -using System.Threading.Tasks; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 @@ -61,7 +61,7 @@ private void LocationSaveButton_GotFocus(object sender, RoutedEventArgs e) private void LocationDialog_Unloaded(object sender, RoutedEventArgs e) { //Detect manual entry, if it's the case pop station dialog - if (locationVM.entryType == Dictionaries.DatabaseLiterals.locationEntryTypeManual && locationVM.doLocationUpdate == false && !isBackButtonPressed ) + if (locationVM.entryType == Dictionaries.DatabaseLiterals.locationEntryTypeManual && locationVM.doLocationUpdate == false && !isBackButtonPressed) { //Create a field note report to act like a parent FieldNotes stationParent = new FieldNotes @@ -109,7 +109,7 @@ private void LocationDialog_Loading(FrameworkElement sender, object args) { this.locationVM.SetReadOnlyFields(true); } - + } else { @@ -121,7 +121,7 @@ private void LocationDialog_Loading(FrameworkElement sender, object args) //Get default accent color from textbox border, for validating easting northings SolidColorBrush defaultBorderBrush = this.LocationLat.BorderBrush as SolidColorBrush; - } + } #region CLOSE @@ -235,7 +235,7 @@ public Task isLocationValidAsync() if ((_easting != 0 && _northing != 0) && (_long == 0 && _lat == 0) && (selectedEPGS != 4617 || selectedEPGS != 4326)) { isValid = false; - } + } } else { diff --git a/GSCFieldApp/Views/MapPage.xaml.cs b/GSCFieldApp/Views/MapPage.xaml.cs index b6f2b42a..05d13031 100644 --- a/GSCFieldApp/Views/MapPage.xaml.cs +++ b/GSCFieldApp/Views/MapPage.xaml.cs @@ -1,17 +1,16 @@ -using System; -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Navigation; -using GSCFieldApp.Services.DatabaseServices; -using Esri.ArcGISRuntime.Mapping; -using Esri.ArcGISRuntime.UI; -using Windows.UI.Xaml.Input; -using System.Threading.Tasks; +using Esri.ArcGISRuntime.Mapping; using Esri.ArcGISRuntime.Symbology; +using Esri.ArcGISRuntime.UI; using GSCFieldApp.Dictionaries; +using GSCFieldApp.Services.DatabaseServices; +using System; +using System.Threading.Tasks; using Windows.UI; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; +using Windows.UI.Xaml.Navigation; using Symbol = Windows.UI.Xaml.Controls.Symbol; -using Windows.ApplicationModel.Resources; namespace GSCFieldApp.Views { @@ -87,7 +86,7 @@ private void MapPage_Loaded(object sender, RoutedEventArgs e) MapPageViewModel.RefreshMap(true); MapPageViewModel.DisplayPointAndLabelsAsync(myMapView); - + //DisplayLatLongGrid(); //UpdateGrid(); @@ -112,7 +111,7 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) { MapPageViewModel.currentMapView.CancelSetViewpointOperations(); } - + base.OnNavigatingFrom(e); } @@ -127,7 +126,7 @@ protected override void OnNavigatingFrom(NavigatingCancelEventArgs e) /// private void MapInfoButtonClicked(object sender, RoutedEventArgs e) { - + //Try and enforce whole map view redraw see #176 //MapPageViewModel.esriMap = null; //MapPageViewModel.currentMapView = null; @@ -266,7 +265,7 @@ private void DisplayLatLongGrid() private void UpdateGrid() { - if (myMapView.Grid != null && myMapView.Grid.LevelCount > 0) + if (myMapView.Grid != null && myMapView.Grid.LevelCount > 0) { //Get proper color Windows.UI.Color defaultColor = new Windows.UI.Color(); @@ -446,8 +445,8 @@ private void MapZoomExtentIcon_Tapped(object sender, TappedRoutedEventArgs e) MapPageViewModel.ZoomToLayer(true); //myMapView.SetViewpoint - - + + } diff --git a/GSCFieldApp/Views/MineralDialog.xaml.cs b/GSCFieldApp/Views/MineralDialog.xaml.cs index 5de9792a..b00e59d9 100644 --- a/GSCFieldApp/Views/MineralDialog.xaml.cs +++ b/GSCFieldApp/Views/MineralDialog.xaml.cs @@ -1,12 +1,12 @@ -using GSCFieldApp.ViewModels; +using GSCFieldApp.Models; +using GSCFieldApp.Services.DatabaseServices; +using GSCFieldApp.ViewModels; using System.Collections.Generic; using System.Linq; using Template10.Common; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; -using GSCFieldApp.Models; -using GSCFieldApp.Services.DatabaseServices; using Windows.UI.Xaml.Media; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 @@ -129,7 +129,7 @@ private void MineralAutoSuggest_TextChanged(AutoSuggestBox sender, AutoSuggestBo private void MineralAutoSuggest_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args) { - + if (args.ChosenSuggestion != null && args.ChosenSuggestion.ToString() != "No results found" && sender.Text != string.Empty) { MineralNamesTextbox.Text = args.ChosenSuggestion.ToString(); diff --git a/GSCFieldApp/Views/PaleoflowDialog.xaml.cs b/GSCFieldApp/Views/PaleoflowDialog.xaml.cs index d2ee8681..bd048aec 100644 --- a/GSCFieldApp/Views/PaleoflowDialog.xaml.cs +++ b/GSCFieldApp/Views/PaleoflowDialog.xaml.cs @@ -9,7 +9,7 @@ namespace GSCFieldApp.Views { - public sealed partial class PaleoflowDialog: UserControl + public sealed partial class PaleoflowDialog : UserControl { public PaleoflowViewModel pflowModel { get; set; } public FieldNotes pflowParentViewModel { get; set; } diff --git a/GSCFieldApp/Views/PicklistDialog.xaml.cs b/GSCFieldApp/Views/PicklistDialog.xaml.cs index f4bdd488..1b11d560 100644 --- a/GSCFieldApp/Views/PicklistDialog.xaml.cs +++ b/GSCFieldApp/Views/PicklistDialog.xaml.cs @@ -1,13 +1,13 @@ -using System; +using GSCFieldApp.Models; +using GSCFieldApp.ViewModels; +using System; using System.Collections.Generic; using Template10.Common; +using Windows.ApplicationModel.Resources; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; -using GSCFieldApp.ViewModels; -using Windows.ApplicationModel.Resources; -using GSCFieldApp.Models; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 diff --git a/GSCFieldApp/Views/SampleDialog.xaml.cs b/GSCFieldApp/Views/SampleDialog.xaml.cs index a3c06f39..4e939874 100644 --- a/GSCFieldApp/Views/SampleDialog.xaml.cs +++ b/GSCFieldApp/Views/SampleDialog.xaml.cs @@ -1,10 +1,10 @@ -using System.Collections.Generic; +using GSCFieldApp.Models; +using GSCFieldApp.ViewModels; +using System.Collections.Generic; using Template10.Common; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Input; -using GSCFieldApp.ViewModels; -using GSCFieldApp.Models; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 @@ -93,7 +93,7 @@ private void sampleBackButton_Tapped(object sender, TappedRoutedEventArgs e) { ViewModel.DeleteCascadeOnQuickSample(parentViewModel); } - + CloseControl(); } diff --git a/GSCFieldApp/Views/SettingsPage.xaml.cs b/GSCFieldApp/Views/SettingsPage.xaml.cs index 20c71d7d..f5fe2296 100644 --- a/GSCFieldApp/Views/SettingsPage.xaml.cs +++ b/GSCFieldApp/Views/SettingsPage.xaml.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; +using Template10.Controls; +using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Navigation; -using Windows.UI.Xaml; -using Template10.Controls; namespace GSCFieldApp.Views @@ -24,7 +24,7 @@ public SettingsPage() //this.Loaded += SettingsPage_Loaded; ; //Set the toggle switches in the customize tab } - + protected override void OnNavigatedTo(NavigationEventArgs e) { var index = int.Parse(_SerializationService.Deserialize(e.Parameter?.ToString()).ToString()); diff --git a/GSCFieldApp/Views/Shell.xaml.cs b/GSCFieldApp/Views/Shell.xaml.cs index fc9a8971..38af7ebe 100644 --- a/GSCFieldApp/Views/Shell.xaml.cs +++ b/GSCFieldApp/Views/Shell.xaml.cs @@ -1,12 +1,12 @@ +using GSCFieldApp.ViewModels; +using System; +using System.Threading.Tasks; using Template10.Common; using Template10.Controls; using Template10.Services.NavigationService; +using Windows.UI.Popups; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; -using GSCFieldApp.ViewModels; -using System.Threading.Tasks; -using Windows.UI.Popups; -using System; namespace GSCFieldApp.Views diff --git a/GSCFieldApp/Views/Splash.xaml.cs b/GSCFieldApp/Views/Splash.xaml.cs index 0ca0d38d..8921378a 100644 --- a/GSCFieldApp/Views/Splash.xaml.cs +++ b/GSCFieldApp/Views/Splash.xaml.cs @@ -13,7 +13,7 @@ public Splash(SplashScreen splashScreen) Window.Current.SizeChanged += (s, e) => Resize(splashScreen); Resize(splashScreen); - + } private void Splash_Unloaded(object sender, RoutedEventArgs e) diff --git a/GSCFieldApp/Views/StationDialog.xaml.cs b/GSCFieldApp/Views/StationDialog.xaml.cs index 86a0b8b6..8051e5a8 100644 --- a/GSCFieldApp/Views/StationDialog.xaml.cs +++ b/GSCFieldApp/Views/StationDialog.xaml.cs @@ -1,19 +1,19 @@ -using Windows.UI.Xaml; -using Windows.UI.Xaml.Controls; -using Windows.UI.Xaml.Input; -using Template10.Common; +using GSCFieldApp.Models; using GSCFieldApp.ViewModels; -using GSCFieldApp.Models; +using System.Collections.Generic; using System.ComponentModel; using System.Threading.Tasks; +using Template10.Common; +using Windows.UI.Xaml; +using Windows.UI.Xaml.Controls; +using Windows.UI.Xaml.Input; using Windows.UI.Xaml.Media; -using System.Collections.Generic; // The User Control item template is documented at http://go.microsoft.com/fwlink/?LinkId=234236 namespace GSCFieldApp.Views { - public sealed partial class StationDataPart : UserControl + public sealed partial class StationDataPart : UserControl { public event PropertyChangedEventHandler PropertyChanged = delegate { }; public FieldNotes parentStationReport; @@ -35,7 +35,7 @@ public StationDataPart(FieldNotes inParentReport, bool isWaypoint) this.InitializeComponent(); this.ViewModel = new StationViewModel(isWaypoint); - if (mapPosition !=null) + if (mapPosition != null) { this.ViewModel.Location = mapPosition; } @@ -89,11 +89,11 @@ private void StationDataPart_Loading(FrameworkElement sender, object args) { this.pageHeader.Text = this.ViewModel.Alias; } - + ViewModel.SetCurrentLocationInUI(mapPosition); } - + } @@ -147,7 +147,7 @@ private async void stationBackButton_Click(object sender, RoutedEventArgs e) CloseControl(); } - + } private async void stationBackButton_Tapped(object sender, TappedRoutedEventArgs e) diff --git a/GSCFieldApp/Views/StructureDialog.xaml.cs b/GSCFieldApp/Views/StructureDialog.xaml.cs index 6db3fcdd..515721c0 100644 --- a/GSCFieldApp/Views/StructureDialog.xaml.cs +++ b/GSCFieldApp/Views/StructureDialog.xaml.cs @@ -22,7 +22,7 @@ namespace GSCFieldApp.Views { public sealed partial class StructureDialog : UserControl { - public StructureViewModel strucViewModel { get; set; } + public StructureViewModel strucViewModel { get; set; } public FieldNotes parentViewModel { get; set; } public bool isAQuickStructure = false; @@ -54,7 +54,7 @@ public StructureDialog(FieldNotes inDetailViewModel, bool isQuickStructure) //#258 bringing back some old patch on save button this.structSaveButton.GotFocus -= StructSaveButton_GotFocus; this.structSaveButton.GotFocus += StructSaveButton_GotFocus; - + } private void StructSaveButton_GotFocus(object sender, RoutedEventArgs e) @@ -109,7 +109,7 @@ private void StructureDialog_Loading(FrameworkElement sender, object args) this.pageHeader.Text = this.pageHeader.Text + " " + this.strucViewModel.StructName; } - + } @@ -155,7 +155,7 @@ private async void structTypeSearch_Click(object sender, RoutedEventArgs e) private void StructureRelatedCombobox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ComboBox cb = sender as ComboBox; - if (cb.SelectedValue != null && cb.SelectedValue.ToString() != string.Empty + if (cb.SelectedValue != null && cb.SelectedValue.ToString() != string.Empty && cb.SelectedValue.ToString() != DatabaseLiterals.picklistNACode) { int strucID = int.Parse(cb.SelectedValue.ToString()); @@ -278,7 +278,7 @@ private void PassFailAzimuthTrend() public void StructureAzimuthNumBox_TextChanged(object sender, TextBoxTextChangingEventArgs e) { UpdateSymAng(); - + } private void StructureDipNumBox_TextChanged(object sender, TextBoxTextChangingEventArgs e) @@ -476,7 +476,7 @@ private void StructureAttitudeCombobox_SelectionChanged(object sender, Selection { //Nullify dip strucViewModel.StructDip = string.Empty; - + } From 50612acc923094b3e8a52707b90c35c57775fb80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Fri, 22 Sep 2023 14:58:48 -0400 Subject: [PATCH 036/177] Some fixes for db upgrade. --- GSCFieldApp/Models/Station.cs | 2 +- .../Services/DatabaseServices/DataAccess.cs | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/GSCFieldApp/Models/Station.cs b/GSCFieldApp/Models/Station.cs index cd3136f3..1adf14b7 100644 --- a/GSCFieldApp/Models/Station.cs +++ b/GSCFieldApp/Models/Station.cs @@ -129,7 +129,7 @@ public Dictionary> getFieldList //Revert schema 1.5 changes. List stationFieldList144 = new List(); - stationFieldList144.AddRange(stationFieldListDefault); + stationFieldList144.AddRange(stationFieldList150); int removeIndex = stationFieldList144.IndexOf(DatabaseLiterals.FieldStationAlias); stationFieldList144.Remove(DatabaseLiterals.FieldStationAlias); stationFieldList144.Insert(removeIndex,DatabaseLiterals.FieldStationAliasDeprecated); diff --git a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs index 26c990a6..b10c4884 100644 --- a/GSCFieldApp/Services/DatabaseServices/DataAccess.cs +++ b/GSCFieldApp/Services/DatabaseServices/DataAccess.cs @@ -748,6 +748,10 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne { queryList.Add(GetUpgradeQueryVersion1_42(attachDBName)); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEarthMat); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraverseLineDeprecated); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraversePointDeprecated); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraverseLine); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraversePoint); //Tables that are either not in are can't have any data in this version upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEnvironment); @@ -761,6 +765,10 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne queryList.AddRange(GetUpgradeQueryVersion1_44(attachDBName)); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableLocation); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableMetadata); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraverseLineDeprecated); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraversePointDeprecated); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraverseLine); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraversePoint); //Tables that are either not in are can't have any data in this version upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEnvironment); @@ -779,6 +787,10 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEarthMat); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableMetadata); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableDocument); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraverseLineDeprecated); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraversePointDeprecated); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraverseLine); + upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraversePoint); //Tables that are either not in are can't have any data in this version upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEnvironment); @@ -799,6 +811,8 @@ public async Task DoUpgradeSchema(string inDBPath, SQLiteConnection outToDBConne //Tables that are either not in are can't have any data in this version upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableEnvironment); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraverseLineDeprecated); + upgradeUntouchedTables.Add(Dictionaries.DatabaseLiterals.TableTraversePointDeprecated); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraverseLine); upgradeUntouchedTables.Remove(Dictionaries.DatabaseLiterals.TableTraversePoint); From 62da23a59dd6df44e9cfabdfbe29d06e68a84d08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Tue, 26 Sep 2023 09:51:24 -0400 Subject: [PATCH 037/177] #264 added amphibolite schist in lith type metamorphic - amphibolite. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 798720 -> 798720 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index d9d5d51d0428132cc9019b6625398d886afc9293..ddfa40a8b43a3e75b6c1dc034f534c77e49be4b2 100644 GIT binary patch delta 197 zcmZp8V9@ZuV1hK`?};+bjK3Qbwk9z0%QFVG7sxXLF%u9o12GE_vjQ<25VHd@2M}`t zF&7YXPcM+?nZm=u^OJ?&fv=hO7|+kmh6XQrtQtM%1qm~RDk>`*GB7e2Dl#zCGw}1X zJ2|;oxVf1)>spvO8|j*u8=C7{8o9dax|$j~8=9M%I9fVRpUBK5HrLII5{J; kxI}yU!!jn(=>f`|tc*s}3k{jfrwgQU^KCz_%VWs|0694|-T(jq delta 95 zcmZp8V9@ZuV1hK`uZc3wjK3Nawk9z0%QFVH7sxXLF%u9o12GE_vjQ<25VHd@2M}`t lF&7YXPcM+?nZm`)dyIwOfv=hO*k(h69lYC*>GD`H0RZDN9fbe@ From 358b0f3c8b1626fd2762f4d34af6c9333139f2f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Tue, 26 Sep 2023 11:42:46 -0400 Subject: [PATCH 038/177] #61 added new F_DRILL_HOLE table with related picklists. --- GSCFieldApp/ModelResources/GSCFieldwork.gpkg | Bin 798720 -> 806912 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/GSCFieldApp/ModelResources/GSCFieldwork.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork.gpkg index ddfa40a8b43a3e75b6c1dc034f534c77e49be4b2..8444b7bb190c2a258b2e302a874c8645efead41a 100644 GIT binary patch delta 3227 zcmaKuYit}x9l&?@cD?rAtq(hKPjM@}rgdV2*X;X2Xp-4i?$q=7?tB+wC&6}n=SMj| zWFJHnQpXCyD2<@6bd^@Jg8BjYQk6tvCBz3_srn%i;ZZ>XR6&&xM3l7OC{zlwYiDmS za=Oy&%b&RpW3@9sof5d^sk+xCNAd|^<)(AFPMKA%KK&VHEmK1`y| zCecZExd;6oR-vz;Z{F+q$srVHVy`Ap*fMqptDx_qN0HwlS>z~$2M>A6 z%QM6ixO<)>zMWb>egWHsl)I2Fo=1^=y>jmwl1!3rKTpiLm;Xa`yK8J>e?r%Dxq}~H z^PlV9i#(CV@OA7$rNiyF3eTmfwW&%R>FuTaM(N%pS+uhwhbKy7dAl)kCahv6 zo1I9HWbM+|m#fUu46{QH0j*nP!MPsfpg0lIIM z9!QdbFmt46PmE^9ZEMY!9ZsXH(fMZrRw$V%R%=uBYK5sUF_o41T8)`os#Td)f8E!n zYG17mHOmh9wUb-?Ldf@RiSWZ|l%Jhnt^2lC=4WQAE7isNgV5Cg7w!#lV^dqWgLK!n zxxt!pE>mjk@Mk`4?Y?Wvi}Ur>fY&gsQeCdk`71-&CnmRKi_NC^5o^fyXHiS;N3G$s zhU&>6+M)dG-l=QUxmXHjEQ!8`(7%jZZO@UHi8o{C(AVOR!9!wuCvH#&P>=sRbrxq##eX(sd{&cJd zW*!}*Hcpnw6w9LDJ>_lOrhb97g%-H$B=(ql;*2%G6m17)Y|gYtnW*87Mee1W)Mve`P$K5_|AYD;Ix<)yQ+<8dclOk$PS&c? zUC}Xe)hybeWHTjTWbG#5Og~LURQ~?IsQ$H3sfm$d=5QtlvJ*Kl40qc{OM`H^IWn9F zxv_BGSntOy{0zo3!{t&soLiZEW1OC_?0n=$KR>pAUE5M9NH;6cdYjwe_=m0`tLgBC zpBqQ`flo$5^Q|?RT*)pT0ol>5h3(KpzkrOEhlfFN%>COjH0A0ysmG~6fuMxA(>JNv zjf?M7-o^LhbHe8mUqm`%vv~4Q`&s&}#7ER%{3Ys6!fE?v>pQJON_3pa@W~}Hly%k;hBKIi5-BPqZp~PIMqaZ3n5(I8{ z5#VH#O9wWO`#>a>qW#-%JBGY&h`g==R`FkwsF^I#4U;uhTT}#rH!W2UfML;Hg15uU zi2ouQ(Hn0^3Sk+Vcq6j{^cEmjgVjRh9;tpsFMadbg6^{wcIsC*$` zz#k474)YodK&b2Omsda|it$g<-AQ(-v~x=gZl2WEf*SPjUA zD!~GxTUvt_+^|;Knx9%&TC6Zua7m~A{~!I9l^z&7JZdt|e6?0#!1A)--kpw&Hb(NDMx#(+Bgw8gtNTNK5DeZ*O zfh0J#466n-Q}Qbba8$r@h9Ws8kQ~L1xHrH6qX>+L`4#?0ptdluLLLc5snnim(kPtc z*s2IqQBdF+({&ydSRpObF$EnoJnYAFp<1u53R0ch!2}s2X{b@Mb+1d_zRcu6qpDx@a_SBB+rUg%M5s zM++6wYQ2nZx{JC9Q}94H7LttgLa7k@I|zye5_TtEtheaE@4&fu&Utvw;G@J~#hnZX z**0TrLG!=h!Bj(%v+d{ENe51jY&x{*z<>j%RbK?|@bmU8OxGfFZ6KmX$;v4+3#;lw z7B28q6Seh1-0x{l9ZEDdQSLH~fYV)!>CI<~hVDK0&lPGp&~S}GwVaSMO00U>r|bH<&cfofnX&}_f6FWJoMpG~+Ki~5&w%m|tDOd4e-hwNda?0;gG%`(gQ_h?%k zlv%-6P|Lu>!kpKRdROqszj+C@3`6la6uN1A9bW(~e8v{;^SxodP<=g&()4@e92tYJ zp;!zG2IZ@m0rmSQUZWHst16jxW_nEgk zy39~xBTTf=fp7SVEBKB#2!7xdP7hb{7kI5s<_|?8Kz&u*1{!~h`?%1jyJ&6=PeGxy gfmGV?UraiBov^lq(-s)97p*NFMAf3L2Fo=50De)a;{X5v From 02b7c08c2698c131ef8a9603ae08b3c575944f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Wed, 27 Sep 2023 15:03:30 -0400 Subject: [PATCH 039/177] #61 Added base classes for new drill hole form. --- GSCFieldApp/Dictionaries/DatabaseLiterals.cs | 20 +++ GSCFieldApp/GSCFieldApp.csproj | 1 + GSCFieldApp/Models/DrillHole.cs | 122 +++++++++++++++++++ GSCFieldApp/Models/EarthMaterial.cs | 4 + 4 files changed, 147 insertions(+) create mode 100644 GSCFieldApp/Models/DrillHole.cs diff --git a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs index 432ffef6..e2868c1d 100644 --- a/GSCFieldApp/Dictionaries/DatabaseLiterals.cs +++ b/GSCFieldApp/Dictionaries/DatabaseLiterals.cs @@ -134,6 +134,7 @@ public static class DatabaseLiterals public const string FieldEarthMatOxidation = "OXIDATION"; //Version 1.7 public const string FieldEarthMatClastForm = "CLASTFORM"; //Version 1.7 public const string FieldEarthMatContactNote = "CONTACT_NOTE"; //Version 1.8 + public const string FieldEarthMatDrillHoleID = "DRILLHOLEID"; //Version 1.8 public const string FieldSampleID = "SAMPLEID"; //Version 1.0 public const string FieldSampleName = "SAMPLEIDNAME"; //Version 1.5 @@ -302,6 +303,24 @@ public static class DatabaseLiterals public const string FieldEnvMineralizationNote = "MINNOTE"; //Origins in Ganfeld, not implemented here, gossan and mineralization have their own form. public const string FieldEnvGossan = "GOSSPRES"; //Origins in Ganfeld, not implemented here, gossan and mineralization have their own form. + public const string FieldDrillID = "DRILLHOLEID"; //Version 1.8 + public const string FieldDrillName = "DRILLHOLE_ORIGINAL_NAME"; //Version 1.8 + public const string FieldDrillCompany = "COMPANY"; //Version 1.8 + public const string FieldDrillType = "DRILLHOLE_TYPE"; //Version 1.8 + public const string FieldDrillAzimuth = "AZIMUTH"; //Version 1.8 + public const string FieldDrillDip = "DIP"; //Version 1.8 + public const string FieldDrillDepth = "DH_DEPTH"; //Version 1.8 + public const string FieldDrillUnit = "UNIT"; //Version 1.8 + public const string FieldDrillDate = "DRILHOLE_DATE"; //Version 1.8 + public const string FieldDrillHoleSize = "DRILLHOLE_SIZE"; //Version 1.8 + public const string FieldDrillCoreSize = "DRILLCORE_SIZE"; //Version 1.8 + public const string FieldDrillRelogType = "RELOG_TYPE"; //Version 1.8 + public const string FieldDrillRelogBy = "RELOG_BY"; //Version 1.8 + public const string FieldDrillRelogIntervals = "RELOG_INTERVALS"; //Version 1.8 + public const string FieldDrillLog = "LOG_SUMMARY"; //Version 1.8 + public const string FieldDrillNotes = "NOTES"; //Version 1.8 + public const string FieldDrillLocationID = "LOCATIONID"; //Version 1.8 + #endregion #region Database table names @@ -327,6 +346,7 @@ public static class DatabaseLiterals public const string TableTraversePoint = "F_TRAVERSE_POINT";//Version 1.7 public const string TableTraverseLine = "F_TRAVERSE_LINE";//Version 1.7 public const string TableFieldCampDeprecated = "FS_FIELDCAMP"; //Deprecated version 1.7 + public const string TableDrillHoles = "F_DRILL_HOLE"; //Version 1.8 #endregion diff --git a/GSCFieldApp/GSCFieldApp.csproj b/GSCFieldApp/GSCFieldApp.csproj index 53407c9c..610187a2 100644 --- a/GSCFieldApp/GSCFieldApp.csproj +++ b/GSCFieldApp/GSCFieldApp.csproj @@ -192,6 +192,7 @@ + diff --git a/GSCFieldApp/Models/DrillHole.cs b/GSCFieldApp/Models/DrillHole.cs new file mode 100644 index 00000000..48b094e2 --- /dev/null +++ b/GSCFieldApp/Models/DrillHole.cs @@ -0,0 +1,122 @@ +using GSCFieldApp.Dictionaries; +using SQLite; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace GSCFieldApp.Models +{ + [Table(DatabaseLiterals.TableDrillHoles)] + public class DrillHole + { + [PrimaryKey, AutoIncrement, Column(DatabaseLiterals.FieldDrillID)] + public int DrillID { get; set; } + + [Column(DatabaseLiterals.FieldDrillName)] + public string DrillName { get; set; } + + [Column(DatabaseLiterals.FieldDrillCompany)] + public string DrillCompany { get; set; } + + [Column(DatabaseLiterals.FieldDrillType)] + public string DrillType { get; set; } + + [Column(DatabaseLiterals.FieldDrillAzimuth)] + public string DrillAzim { get; set; } + + [Column(DatabaseLiterals.FieldDrillDip)] + public string DrillDip { get; set; } + + [Column(DatabaseLiterals.FieldDrillDepth)] + public string DrillDepth { get; set; } + + [Column(DatabaseLiterals.FieldDrillUnit)] + public string DrillUnit { get; set; } + + [Column(DatabaseLiterals.FieldDrillDate)] + public string DrillDate { get; set; } + + [Column(DatabaseLiterals.FieldDrillHoleSize)] + public string DrillHoleSize { get; set; } + + [Column(DatabaseLiterals.FieldDrillCoreSize)] + public string DrillCoreSize { get; set; } + + [Column(DatabaseLiterals.FieldDrillRelogType)] + public string DrillRelogType { get; set; } + + [Column(DatabaseLiterals.FieldDrillRelogBy)] + public string DrillRelogBy { get; set; } + + [Column(DatabaseLiterals.FieldDrillRelogIntervals)] + public string DrillRelogIntervals { get; set; } + + [Column(DatabaseLiterals.FieldDrillLog)] + public string DrillLog { get; set; } + + [Column(DatabaseLiterals.FieldDrillNotes)] + public string DrillNotes { get; set; } + + [Column(DatabaseLiterals.FieldDrillLocationID)] + public string DrillLocationID { get; set; } + + //Hierarchy + public string ParentName = DatabaseLiterals.TableLocation; + + /// + /// Soft mandatory field check. User can still create record even if fields are not filled. + /// Ignore attribute will tell sql not to try to write this field inside the database. + /// + [Ignore] + public bool isValid + { + get + { + if ((DrillType != null && DrillName != string.Empty)) + { + return true; + } + else + { + return false; + } + } + set { } + } + + /// + /// A list of all possible fields from current class but also from previous schemas (for db upgrade) + /// + [Ignore] + public Dictionary> getFieldList + { + get + { + //Create a new list of all current columns in current class. This will act as the most recent + //version of the class + Dictionary> drillFieldList = new Dictionary>(); + List drillFieldListDefault = new List(); + + drillFieldListDefault.Add(DatabaseLiterals.FieldDrillID); + foreach (System.Reflection.PropertyInfo item in this.GetType().GetProperties().Where(prop => Attribute.IsDefined(prop, typeof(ColumnAttribute))).ToList()) + { + if (item.CustomAttributes.First().ConstructorArguments.Count() > 0) + { + drillFieldListDefault.Add(item.CustomAttributes.First().ConstructorArguments[0].ToString().Replace("\\", "").Replace("\"", "")); + } + + } + + drillFieldList[DatabaseLiterals.DBVersion] = drillFieldListDefault; + + + return drillFieldList; + } + set { } + } + + + } +} diff --git a/GSCFieldApp/Models/EarthMaterial.cs b/GSCFieldApp/Models/EarthMaterial.cs index cf4196a2..d3799437 100644 --- a/GSCFieldApp/Models/EarthMaterial.cs +++ b/GSCFieldApp/Models/EarthMaterial.cs @@ -106,6 +106,9 @@ public class EarthMaterial [Column(DatabaseLiterals.FieldEarthMatNotes)] public string EarthMatNotes{ get; set; } + [Column(DatabaseLiterals.FieldEarthMatDrillHoleID)] + public string EarthMatDrillHoleID { get; set; } + //Hierarchy public string ParentName = DatabaseLiterals.TableStation; @@ -201,6 +204,7 @@ public Dictionary> getFieldList List earthmatFieldList170 = new List(); earthmatFieldList170.AddRange(earthmatFieldListDefault); earthmatFieldList170.Remove(DatabaseLiterals.FieldEarthMatContactNote); + earthmatFieldList170.Remove(DatabaseLiterals.FieldEarthMatDrillHoleID); earthmatFieldList[DatabaseLiterals.DBVersion170] = earthmatFieldList170; //Revert shcema 1.7 changes From 9a5f40e245bcae25316080e943a6a980e04f5859 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Wed, 27 Sep 2023 15:05:47 -0400 Subject: [PATCH 040/177] Added copy of version 1.7 geopackage for update ability. --- .../ModelResources/GSCFieldwork_v170.gpkg | Bin 0 -> 761856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 GSCFieldApp/ModelResources/GSCFieldwork_v170.gpkg diff --git a/GSCFieldApp/ModelResources/GSCFieldwork_v170.gpkg b/GSCFieldApp/ModelResources/GSCFieldwork_v170.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..af05c953d780af32923d940453b07711fe4a6b87 GIT binary patch literal 761856 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

j%S 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

A5zUR*vaGfVF_7L{<;?JRsRhP&g1bBk`b( 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

h6p1uk{Nni0%l_eThT-_TULXHqPry=RF2 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 QwQI#T*gh3+k4MG-1x-km>i_@% literal 0 HcmV?d00001 From 2406e8b3569d4c587f78199550b52385feb1f41b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?gabriel=2Ehuot-v=C3=A9zina?= Date: Wed, 27 Sep 2023 15:12:38 -0400 Subject: [PATCH 041/177] #61 added new color schema for drill hole form. --- GSCFieldApp/Styles/Custom.xaml | 51 ++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/GSCFieldApp/Styles/Custom.xaml b/GSCFieldApp/Styles/Custom.xaml index de0d407f..dcffc315 100644 --- a/GSCFieldApp/Styles/Custom.xaml +++ b/GSCFieldApp/Styles/Custom.xaml @@ -53,6 +53,9 @@ #99cc00 #bfff00 + #439ee2 + #8EC4ED + Red @@ -104,6 +107,9 @@ + + + @@ -1233,6 +1239,51 @@ + + - + + + + + + +