コード例 #1
0
ファイル: Ext116.cs プロジェクト: billy84/Xamarin
        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);
            }
        }
コード例 #2
0
ファイル: Ext116.cs プロジェクト: billy84/Xamarin
        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);
            }
        }
コード例 #3
0
ファイル: Ext116.cs プロジェクト: billy84/Xamarin
        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);
            }
        }
コード例 #4
0
        /// <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);
            }
        }