public async Task <UploadChangesResult> UploadSubProjectDataChangesAsync( string v_sCompanyName, string v_sPurpose, string v_sUserName, string v_sMachineName, string v_sSubProjectNo, ObservableCollection <AXDataUploadDataChange> v_cChanges, string v_sAuthID, string v_sToken) { m_wcfClient = new WcfExt116.ServiceClient(); UploadChangesResult result = new UploadChangesResult(); try { ObservableCollection <WcfExt116.cAXDataUploadDataChange> cChanges = new ObservableCollection <WcfExt116.cAXDataUploadDataChange>(); foreach (AXDataUploadDataChange o in v_cChanges) { WcfExt116.cAXDataUploadDataChange oAUDC = new WcfExt116.cAXDataUploadDataChange(); oAUDC.FieldName = o.FieldName; oAUDC.FieldValue = o.FieldValue; oAUDC.ProjectNo = o.ProjectNo; cChanges.Add(oAUDC); } WcfExt116.UploadChangesResult sResult = await m_wcfClient.UploadSubProjectDataChangesAsync( v_sCompanyName, v_sPurpose, v_sUserName, v_sMachineName, v_sSubProjectNo, cChanges, v_sAuthID, v_sToken); if (sResult.bSuccessfull == true) { result.bSuccessfull = sResult.bSuccessfull; result.ActivitiesTable_ModDate = sResult.ActivitiesTable_ModDate; result.ProjTable_ModDate = sResult.ProjTable_ModDate; result.NoteValues = new ObservableCollection <RealtimeNoteKeyValues>(); foreach (WcfExt116.clsRealtimeNoteKeyValues o in sResult.NoteValues) { RealtimeNoteKeyValues oRNV = new RealtimeNoteKeyValues(); oRNV.DeviceIDKey = o.DeviceIDKey; oRNV.NotesRecID = o.NotesRecID; oRNV.ProjectNo = o.ProjectNo; result.NoteValues.Add(oRNV); } } return(result); } catch (Exception ex) { throw new Exception(ex.Message); } }
public async Task <UploadChangesResult> UploadSubProjectFilesAsync( string v_sCompanyName, string v_sSubProjectNo, string v_sUserName, string v_sMachineName, ObservableCollection <UploadFileChange> v_cChanges, string v_sAuthID, string v_sToken) { m_wcfClient = new WcfExt116.ServiceClient(); UploadChangesResult result = new UploadChangesResult(); try { ObservableCollection <WcfExt116.UploadFileChange> cChanges = new ObservableCollection <WcfExt116.UploadFileChange>(); foreach (UploadFileChange o in v_cChanges) { WcfExt116.UploadFileChange oUFC = new WcfExt116.UploadFileChange(); oUFC.byData = new byte[o.byData.Length]; Array.Copy(o.byData, oUFC.byData, o.byData.Length); oUFC.sComment = o.sComment; oUFC.sFileName = o.sFileName; cChanges.Add(oUFC); } WcfExt116.UploadChangesResult sResult = await m_wcfClient.UploadSubProjectFilesAsync( v_sCompanyName, v_sSubProjectNo, v_sUserName, v_sMachineName, cChanges, v_sAuthID, v_sToken); if (sResult.bSuccessfull == true) { result.bSuccessfull = sResult.bSuccessfull; result.ActivitiesTable_ModDate = sResult.ActivitiesTable_ModDate; result.ProjTable_ModDate = sResult.ProjTable_ModDate; result.NoteValues = new ObservableCollection <RealtimeNoteKeyValues>(); foreach (WcfExt116.clsRealtimeNoteKeyValues o in sResult.NoteValues) { RealtimeNoteKeyValues oRNKV = new RealtimeNoteKeyValues(); oRNKV.DeviceIDKey = o.DeviceIDKey; oRNKV.NotesRecID = o.NotesRecID; oRNKV.ProjectNo = o.ProjectNo; result.NoteValues.Add(oRNKV); } } return(result); } catch (Exception ex) { throw new Exception(ex.Message); } }
public async Task <UploadChangesResult> UploadSubProjectNotesChangesAsync( string v_sCompanyName, string v_sPurpose, string v_sUserName, string v_sMachineName, string v_sSubProjectNo, ObservableCollection <NoteDetails> v_cNotes, string v_sAuthID, string v_sToken) { m_wcfClient = new WcfExt116.ServiceClient(); UploadChangesResult result = new UploadChangesResult(); try { ObservableCollection <WcfExt116.NoteDetails> cNotes = new ObservableCollection <WcfExt116.NoteDetails>(); foreach (NoteDetails o in v_cNotes) { WcfExt116.NoteDetails oND = new WcfExt116.NoteDetails(); oND.AXRecID = o.AXRecID; oND.DeviceIDKey = o.DeviceIDKey; oND.InputDate = o.InputDate; oND.NoteText = o.NoteText; oND.NoteType = o.NoteType; oND.ProjectNo = o.ProjectNo; oND.Purpose = o.Purpose; oND.UserName = o.UserName; oND.UserProfile = o.UserProfile; cNotes.Add(oND); } WcfExt116.UploadChangesResult sResult = await m_wcfClient.UploadSubProjectNotesChangesAsync( v_sCompanyName, v_sPurpose, v_sUserName, v_sMachineName, v_sSubProjectNo, cNotes, v_sAuthID, v_sToken); if (sResult.bSuccessfull == true) { result.bSuccessfull = sResult.bSuccessfull; result.ActivitiesTable_ModDate = sResult.ActivitiesTable_ModDate; result.ProjTable_ModDate = sResult.ProjTable_ModDate; result.NoteValues = new ObservableCollection <RealtimeNoteKeyValues>(); foreach (WcfExt116.clsRealtimeNoteKeyValues o in sResult.NoteValues) { RealtimeNoteKeyValues oRNKV = new RealtimeNoteKeyValues(); oRNKV.DeviceIDKey = o.DeviceIDKey; oRNKV.NotesRecID = o.NotesRecID; oRNKV.ProjectNo = o.ProjectNo; result.NoteValues.Add(oRNKV); } } return(result); } catch (Exception ex) { throw new Exception(ex.Message); } }
/// <summary> /// Check for data changes to download. /// </summary> /// <returns></returns> public async Task <bool> CheckForDataChanges(bool v_bBackgroundTask) { bool bSaveOK = false; DataAccess.SaveSubProjectDataResult srResult; bool bConnected = false; bool bErrorOccurred = false; bool bReturnStatus = true; WcfExt116 cAX = null; //cDataAccess cDataDB = null; ObservableCollection <DownloadDataChange> cSubProjects = null; DownloadDataChange cSubProject; List <SubProjectSyncUpdateValues> cSubProjectDates = null; ObservableCollection <SubProjectData> cSubProjectsChanged = null; //v1.0.10 - Data change result object. DownloadDataChangesResult dcResult = null; string sProjectStatus = string.Empty; string sSubProjectStatus = string.Empty; int iSubProjectLimit = -1; bool bCheckForNewSubProjects = true; int iSubProjectsAdded = 0; int iSubProjectsDeleted = 0; List <cProjectNotesTable> cNotes = null; RealtimeNoteKeyValues cNoteKey; List <cUnitsTable> cUnits = null; UnitDetails udUnitDetail; try { //If called from background task then go off and fetch projects to sync if (v_bBackgroundTask == true) { iSubProjectLimit = 2; bCheckForNewSubProjects = false; Syncing.p_ocProjectsToSync = this.m_cData.FetchProjectsToSync(); } //Update screen. if (v_bBackgroundTask == false) { this.UpdateMessage("Checking connection."); //Check we are connected first bConnected = await this.m_cSetting.IsAXSystemAvailable(false); if (bConnected == false) { //Update screen. if (v_bBackgroundTask == false) { this.UpdateMessage("Checking failed."); } ; return(false); } } if (Syncing.p_ocProjectsToSync != null) { int iProjectCount = 0; int iSubProjectCount = 0; cAX = new WcfExt116(); string sLastProjectNo = String.Empty; foreach (ProjectSearch cProject in Syncing.p_ocProjectsToSync) { bErrorOccurred = false; iProjectCount += 1; //Update screen. if (v_bBackgroundTask == false) { sProjectStatus = "Checking project (" + iProjectCount.ToString() + " of " + Syncing.p_ocProjectsToSync.Count.ToString() + ") " + cProject.ProjectNo; this.UpdateMessage(sProjectStatus); //this.SubProjectStatusUpdate(this, new cSyncEventParamProjectStatus(sLastProjectNo, cProject.ProjectNo, iSubProjectsAdded, iSubProjectsDeleted, true)); } iSubProjectsAdded = 0; iSubProjectsDeleted = 0; try { cSubProjects = new ObservableCollection <DownloadDataChange>(); cSubProjectDates = this.m_cData.FetchSubProjectUpdateDateTime(cProject.ProjectNo, iSubProjectLimit); foreach (SubProjectSyncUpdateValues cSubProjectValue in cSubProjectDates) { cSubProject = new DownloadDataChange(); cSubProject.sProjectNo = cProject.ProjectNo; cSubProject.sSubProjectNo = cSubProjectValue.SubProjectNo; cSubProject.Notes = new ObservableCollection <RealtimeNoteKeyValues>(); if (cSubProjectValue.ModifiedDateTime.HasValue == true) { cSubProject.ProjTable_ModDate = cSubProjectValue.ModifiedDateTime.Value; } if (cSubProjectValue.SMMActivities_MODIFIEDDATETIME.HasValue == true) { cSubProject.ActivitiesTable_ModDate = cSubProjectValue.SMMActivities_MODIFIEDDATETIME.Value; } //v1.0.12 - Delivery modified date time if (cSubProjectValue.Delivery_ModifiedDateTime.HasValue == true) { cSubProject.Delivery_ModDate = cSubProjectValue.Delivery_ModifiedDateTime.Value; } //Add notes to upload. cNotes = this.m_cData.GetSubProjectNotesData(cSubProjectValue.SubProjectNo); foreach (cProjectNotesTable cProjNote in cNotes) { cNoteKey = new RealtimeNoteKeyValues(); cNoteKey.DeviceIDKey = cProjNote.IDKey; cNoteKey.NotesRecID = cProjNote.AXRecID; cNoteKey.ProjectNo = cSubProjectValue.SubProjectNo; cSubProject.Notes.Add(cNoteKey); } //Units are only used for the installers app. if (DependencyService.Get <ISettings>().IsThisTheSurveyorApp() == false) { cSubProject.Units = new ObservableCollection <UnitDetails>(); //Add units to upload. cUnits = this.m_cData.FetchUnitsForSubProject(cSubProject.sSubProjectNo); foreach (cUnitsTable cUnitRow in cUnits) { udUnitDetail = new UnitDetails(); udUnitDetail.iInstalledStatus = cUnitRow.InstalledStatus; udUnitDetail.iUNITNUMBER = cUnitRow.UnitNo; udUnitDetail.sITEMID = cUnitRow.ItemID; udUnitDetail.sSTYLE = cUnitRow.Style; udUnitDetail.sUNITLOCATION = cUnitRow.UnitLocation; cSubProject.Units.Add(udUnitDetail); } } cSubProjects.Add(cSubProject); } //v1.0.10 - Retry on failed attempts. int iAttempts = 0; do { try { dcResult = null; dcResult = await cAX.CheckForAXDataChanges(cSubProjects, bCheckForNewSubProjects); if (dcResult != null) { if (dcResult.bSuccessfull == true) { cSubProjectsChanged = dcResult.pdChanged; } } if (cSubProjectsChanged != null) { break; } else { throw new Exception("CheckForAXDataChanges returned null"); } } catch (Exception ex) { bErrorOccurred = true; iAttempts++; if (v_bBackgroundTask == false) { //this.ProjectSyncError(this, new cSyncEventErrorParams(ex.Message, cProject.ProjectNo)); } ; } } while (iAttempts < 3); //Try 3 times. //Sub projects to update. if (cSubProjectsChanged != null) { foreach (SubProjectData cData in cSubProjectsChanged) { srResult = this.m_cData.SaveSubProjectData(cProject.ProjectNo, cProject.ProjectName, cData); bSaveOK = srResult.bSavedOK; //If sub project added then increase count. if (bSaveOK == true) { if (srResult.bProjectAdded == true) { iSubProjectsAdded += 1; } } } //v1.0.18 - No need to update these, takes up too much time. //v1.0.1 - Update the sub projects passed up to say they have synced. //cProjectTable cSubProjectSync; //foreach (wcfAX.DownloadDataChange ddcSub in cSubProjects) //{ // cSubProjectSync = this.m_cData.GetSubProjectProjectData(ddcSub.sSubProjectNo); // cSubProjectSync.DateLastSynced = DateTime.Now; // bSaveOK = this.m_cData.UpdateSubProjectData(cSubProjectSync); //} //v1.0.10 - Delete list of sub projects returned. if (dcResult.sDeleted != null) { //Loop through list of sub project to delete foreach (string sSubProjectToDelete in dcResult.sDeleted) { await this.m_cData.DeleteSubProjectFromDevice(sSubProjectToDelete); iSubProjectsDeleted++; } } } else { bErrorOccurred = true; } iSubProjectCount = 0; //v1.0.1 - Checking files foreach (SubProjectSyncUpdateValues cSubProjectValue in cSubProjectDates) { iSubProjectCount += 1; sSubProjectStatus = "Checking files for sub project (" + iSubProjectCount.ToString() + " of " + cSubProjectDates.Count.ToString() + ")"; //Update screen. if (v_bBackgroundTask == false) { this.UpdateMessage(sProjectStatus + " - " + sSubProjectStatus); } ; bSaveOK = await this.CheckForFileChanges(cProject.ProjectNo, cSubProjectValue.SubProjectNo, v_bBackgroundTask); if (bSaveOK == false) { throw new Exception("Error checking files for sub project (" + cSubProjectValue.SubProjectNo + ")"); } } } catch (Exception ex) { if (v_bBackgroundTask == false) { //this.ProjectSyncError(this, new cSyncEventErrorParams(ex.Message, cProject.ProjectNo)); } ; bErrorOccurred = true; } //If error occurred check connection is OK, if not leave. if (bErrorOccurred == true) { //Update screen. if (v_bBackgroundTask == false) { this.UpdateMessage("Checking Connection."); } ; //Check we are connected first bConnected = await this.m_cSetting.IsAXSystemAvailable(false); if (bConnected == false) { //Update screen. if (v_bBackgroundTask == false) { this.UpdateMessage("Connection Failed."); } ; bReturnStatus = false; break; } } //Update last project no sLastProjectNo = cProject.ProjectNo; } if (v_bBackgroundTask == false) { bool bUpdateSuccess = false; if (bErrorOccurred == false) { bUpdateSuccess = true; } //this.SubProjectStatusUpdate(this, new cSyncEventParamProjectStatus(sLastProjectNo, string.Empty, iSubProjectsAdded, iSubProjectsDeleted, bUpdateSuccess)); } if (cAX != null) { await DependencyService.Get <IWcfExt116>().CloseAXConnection(); } } return(bReturnStatus); } catch (Exception ex) { throw new Exception(ex.Message); } }