예제 #1
0
        /// <summary>
        /// 1. Fetches Google Sheets data
        /// 2. Converts Google Sheets data to WeldingInspection objects
        /// 3. Checks if the WeldingInspection objects are valid for database
        /// </summary>
        /// <param name="service">Google Sheets API v4 service to connect to Google Sheets</param>
        /// <param name="operators">All operators data from spreadsheets.json config file</param>
        /// <param name="allRanges">All range data from spreadsheets.json config file</param>
        /// <param name="sb">StringBuilder workflow output</param>
        /// <exception cref="Weldings.DbUpdateException">is thrownon on failed db update and failed rollback if Settings.Default.AbortOnFailedRollback is set to true</exception>
        public static void DoControll(
            SheetsService service,
            Spreadsheets.Operator[] operators,
            Spreadsheets.SheetsRanges allRanges,
            StringBuilder sb)
        {
            allInspections = new List <WeldingInspection>();

            foreach (Spreadsheets.Operator oper in operators)
            {
                OnProgressUpdated(0,
                                  $"updating DB: operator - {oper.OperatorId}, sheet - \"{allRanges.Pirmieji.SheetName}\"...");

                DoControllSingleSheet(
                    service,
                    oper,
                    allRanges.Pirmieji,
                    DataConverter.ConvertPirmieji,
                    DBUpdater.DoPirmieji,
                    sb);

                OnProgressUpdated(0,
                                  $"updating DB: operator - {oper.OperatorId}, sheet - \"{allRanges.Nepirmieji.SheetName}\"...");

                DoControllSingleSheet(
                    service,
                    oper,
                    allRanges.Nepirmieji,
                    DataConverter.ConvertNepirmieji,
                    DBUpdater.DoNepirmieji,
                    sb);
            }
        }
예제 #2
0
        /// <summary>
        /// 1. Fetches Google Sheets data
        /// 2. Converts Google Sheets data to WeldingInspection objects
        /// 3. Checks if the WeldingInspection objects are valid for database
        /// </summary>
        /// <param name="service">Google Sheets API v4 service to connect to Google Sheets</param>
        /// <param name="operators">All operators data from spreadsheets.json config file</param>
        /// <param name="allRanges">All range data from spreadsheets.json config file</param>
        /// <param name="sb">StringBuilder workflow output</param>
        public static void DoControll(
            SheetsService service,
            Spreadsheets.Operator[] operators,
            Spreadsheets.SheetsRanges allRanges,
            StringBuilder sb)
        {
            allInspections = new List <WeldingInspection>();

            foreach (Spreadsheets.Operator oper in operators)
            {
                sb.AppendLine();

                OnProgressUpdated(0,
                                  $"verifying data: operator - {oper.OperatorId}, sheet - \"{allRanges.Pirmieji.SheetName}\"...");

                DoControllSingleSheet(
                    service,
                    oper,
                    allRanges.Pirmieji,
                    DataConverter.ConvertPirmieji,
                    ObjectVerifier.VerifyPirmieji,
                    sb);

                OnProgressUpdated(0,
                                  $"verifying data: operator - {oper.OperatorId}, sheet - \"{allRanges.Nepirmieji.SheetName}\"...");

                DoControllSingleSheet(
                    service,
                    oper,
                    allRanges.Nepirmieji,
                    DataConverter.ConvertNepirmieji,
                    ObjectVerifier.VerifyNepirmieji,
                    sb);
            }

            StringBuilder repSb = RepeatFinder.FindRepeats(allInspections.ToList());

            sb.AppendLine(Messages.Default.RepeatedRecordsHeader);
            sb.Append(repSb);
        }
예제 #3
0
        private static StringBuilder fetchConvertVerifySpreadsheet(
            SheetsService service,
            Spreadsheets.Operator operatorData,
            Spreadsheets.SheetsRanges allRanges)
        {
            StringBuilder sb = new StringBuilder().AppendLine(operatorData.OperatorId);

            StringBuilder pirmiejiProblems = fetchConvertVerifySheet(
                service,
                operatorData,
                allRanges.Pirmieji,
                DataConverter.ConvertPirmieji,
                ObjectVerifier.VerifyPirmieji);

            StringBuilder nepirmiejiProblems = fetchConvertVerifySheet(
                service,
                operatorData,
                allRanges.Nepirmieji,
                DataConverter.ConvertNepirmieji,
                ObjectVerifier.VerifyNepirmieji);

            return(sb.AppendLine("Pirmieji").Append(pirmiejiProblems).AppendLine("Nepirmieji").Append(nepirmiejiProblems));
        }
예제 #4
0
        private void doDBUpdateWork(BackgroundWorker worker, DoWorkEventArgs e)
        {
            int           pc             = 1; // progress count
            SheetsService service        = null;
            string        outputFileName = string.Empty;
            bool          preWorkResult  = preWork(ref service, ref outputFileName, worker, e, ref pc);

            if (!preWorkResult)
            {
                return;
            }

            Spreadsheets.Operator[]   operators = SpreadsheetsData.Operators;
            Spreadsheets.SheetsRanges allRanges = SpreadsheetsData.AllRanges;

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat(StartFormMessages.Default.DataVerifyOutputHeaderFormat,
                            DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString());
            sb.AppendLine();

            if (worker.CancellationPending)
            {
                e.Cancel = true;
            }
            worker.ReportProgress(pc++, "Creating DB update report file...");

            string reportFileName = createFileName(
                Settings.Default.UpdateReportFileNameFormat,
                "UpdateReportFileNameFormat", ".txt");

            if (reportFileName == string.Empty)
            {
                return;
            }

            if (worker.CancellationPending)
            {
                e.Cancel = true;
            }
            worker.ReportProgress(pc++, "Creating DB file backup...");


            // create db backup
            if (Settings.Default.CreateDBBackup)
            {
                string dbBackupFileName = createFileName(
                    Settings.Default.DBBackupFilenameFormat,
                    "DBBackupFilenameFormat",
                    Path.GetExtension(Path.GetFileName(Settings.Default.AccessDbPath)));

                if (dbBackupFileName == string.Empty)
                {
                    return;
                }

                try
                {
                    File.Copy(Settings.Default.AccessDbPath, dbBackupFileName, true);
                }
                catch (Exception ex)
                {
                    worker.ReportProgress(0, string.Format(
                                              StartFormMessages.Default.UnableCreateDBCopy,
                                              Settings.Default.AccessDbPath,
                                              dbBackupFileName));
                    LogWriter.Log(ex);
                    return;
                }
            }

            // do the main job and write processing info file

            if (worker.CancellationPending)
            {
                e.Cancel = true;
            }
            worker.ReportProgress(pc++, "Starting the data update work:");

            try
            {
                ControllerUpdate.DoControll(service, operators, allRanges, sb);
            }
            catch (DbUpdateException dbuEx)
            {
                worker.ReportProgress(0,
                                      StartFormMessages.Default.RollbackFailureError);
                LogWriter.Log(dbuEx);
            }
            catch (Exception ex)
            {
                string errorMessage = StartFormMessages.Default.UnexpectedExceptionHeader + ex.Message;
                worker.ReportProgress(0, errorMessage);
                sb.AppendLine(errorMessage);
                LogWriter.Log(ex);
            }
            finally
            {
                service.Dispose();
                using (StreamWriter sw = new StreamWriter(outputFileName))
                {
                    try
                    {
                        sw.Write(sb);
                    }
                    catch (Exception ex)
                    {
                        worker.ReportProgress(0,
                                              string.Format(
                                                  StartFormMessages.Default.UnableWriteUpdateInfoFile,
                                                  outputFileName)
                                              + ex.Message);
                        LogWriter.Log(ex);
                    }
                }
            }

            // create report
            StringBuilder sbReport = ReportCreator.CreateTxt(
                ControllerUpdate.GetInspections());

            using (StreamWriter sw = new StreamWriter(reportFileName))
            {
                try
                {
                    sw.Write(sbReport);
                }
                catch (Exception ex)
                {
                    worker.ReportProgress(0,
                                          string.Format(
                                              StartFormMessages.Default.UnableWriteUpdateReportFile,
                                              reportFileName)
                                          + ex.Message);
                    LogWriter.Log(ex);
                    return;
                }
            }

            e.Result = string.Format(StartFormMessages.Default.UpdateDoneMessage, outputFileName);
        }
예제 #5
0
        private void doDataVerifyWork(BackgroundWorker worker, DoWorkEventArgs e)
        {
            int           pc             = 1; // progress count
            SheetsService service        = null;
            string        outputFileName = string.Empty;
            bool          preWorkResult  = preWork(ref service, ref outputFileName, worker, e, ref pc);

            if (!preWorkResult)
            {
                return;
            }

            Spreadsheets.Operator[]   operators = SpreadsheetsData.Operators;
            Spreadsheets.SheetsRanges allRanges = SpreadsheetsData.AllRanges;

            StringBuilder sb = new StringBuilder();

            sb.AppendFormat(StartFormMessages.Default.DataVerifyOutputHeaderFormat,
                            DateTime.Now.ToShortDateString(), DateTime.Now.ToShortTimeString());
            sb.AppendLine();

            // do the main job and write processing info file

            if (worker.CancellationPending)
            {
                e.Cancel = true;
            }
            worker.ReportProgress(pc++, "Starting the data verify work:");

            try
            {
                // the main work
                ControllerVerify.DoControll(service, operators, allRanges, sb);
            }
            catch (Exception ex)
            {
                // all exceptions are caught and logged into sb
                // this is for some unexpected exception
                worker.ReportProgress(0, StartFormMessages.Default.UnexpectedExceptionHeader + ex.Message);
                LogWriter.Log(ex);
                return;
            }
            finally
            {
                service.Dispose();
                using (StreamWriter sw = new StreamWriter(outputFileName))
                {
                    try
                    {
                        sw.Write(sb);
                    }
                    catch (Exception wEx)
                    {
                        worker.ReportProgress(0, string.Format(
                                                  StartFormMessages.Default.UnableWriteVerifyInfoFile,
                                                  outputFileName));
                        LogWriter.Log(wEx);
                    }
                }
            }

            e.Result = string.Format(StartFormMessages.Default.VerifyDoneMessage, outputFileName);
        }
예제 #6
0
        public static StringBuilder FetchConvertVerify(SheetsService service, Spreadsheets.Operator[] operators, Spreadsheets.SheetsRanges allRanges)
        {
            StringBuilder sb = new StringBuilder(DateTime.Now.ToShortDateString()).Append(", ").AppendLine(DateTime.Now.ToShortTimeString());

            foreach (Spreadsheets.Operator operatorData in operators)
            {
                StringBuilder operatorProblems = fetchConvertVerifySpreadsheet(service, operatorData, allRanges);
                sb.Append(operatorProblems);
                sb.AppendLine();
            }

            StringBuilder repSb = RepeatFinder.FindRepeats(allInspections);

            sb.AppendLine().AppendLine("Pasikartojantys suvirinimai:");
            sb.Append(repSb);
            return(sb);
        }
예제 #7
0
 public static void fetchConvertUpdate(SheetsService service, Spreadsheets.Operator[] operators, Spreadsheets.SheetsRanges allRanges)
 {
     foreach (Spreadsheets.Operator operatorData in operators)
     {
         fetchConvertUpdateSpreadsheet(service, operatorData, allRanges);
     }
     allInspections.ToList();
 }
예제 #8
0
 private static void fetchConvertUpdateSpreadsheet(SheetsService service, Spreadsheets.Operator operatorData, Spreadsheets.SheetsRanges allRanges)
 {
     fetchConvertUpdateSheet(service, operatorData, allRanges.Pirmieji, DataConverter.ConvertPirmieji, DBUpdater.DoPirmieji);
     fetchConvertUpdateSheet(service, operatorData, allRanges.Nepirmieji, DataConverter.ConvertNepirmieji, DBUpdater.DoNepirmieji);
 }