예제 #1
0
        //запуск всех задач и автообновление списка из БД
        public WorkerErrorLevel StartAutoRefresh()
        {
            GetOverdueInDB(DateTime.Now);
            //запуск задач
            WorkerErrorLevel wol = StartTasks();

            if (wol == WorkerErrorLevel.Error)
            {
                return(wol);
            }

            //получение текущего дня
            CurrentDate = GetCurrentDate();

            //запуск таймера
            if (WorkerTimer == null)
            {
                WorkerTimer = new Timer();
            }
            WorkerTimer.AutoReset = true;
            WorkerTimer.Interval  = 10000;
            WorkerTimer.Elapsed  += new ElapsedEventHandler(WorkerTimer_Elapsed);
            WorkerTimer.Start();

            return(WorkerErrorLevel.OK);
        }
예제 #2
0
        void Worker_OnOverdueTaskDetected(object sender)
        {
            string correctMsg = "Для просроченных задач установлено новое время" +
                                " выполнения. Однократно выполняемые задачи деактивированы";
            string runMsg = "Выполнение просроченных задач завершено";

            if (Convert.ToBoolean(cConfig.GetParameter("Global.OverdueNotify", "true")))
            {
                niMain.ShowBalloonTip(5000, "Просроченные задания",
                                      "Обнаружены просроченные задания", ToolTipIcon.Warning);
            }

            if (Convert.ToBoolean(cConfig.GetParameter("Global.OverdueRun", "false")))
            {
                WorkerErrorLevel wol = Worker.RunOverdueTasks();
                showworkererror(wol, runMsg);
            }

            if (Convert.ToBoolean(cConfig.GetParameter("Global.OverdueNewTime", "false")))
            {
                WorkerErrorLevel wol = Worker.CorrectOverdueTime(DateTime.Now);
                showworkererror(wol, correctMsg);

                if (wol == WorkerErrorLevel.OK)
                {
                    niMain.ShowBalloonTip(5000, "Просроченные задания",
                                          correctMsg, ToolTipIcon.Info);
                }
            }
        }
예제 #3
0
        private void mnuTasksStartAll_Click(object sender, EventArgs e)
        {
            WorkerErrorLevel wol = Worker.StartAutoRefresh();

            if (wol != WorkerErrorLevel.OK)
            {
                CommonFunctions.ErrMessage(Worker.TaskErrMessage);
                statlblMessages.ForeColor = Color.Red;
                statlblMessages.Text      = Worker.TaskErrMessage;
            }
            else
            {
                if (Worker.TaskErrMessage == string.Empty)
                {
                    statlblMessages.ForeColor = Color.Black;
                    statlblMessages.Text      = "Задачи запущены. " +
                                                "Задач " + Worker.LoadedTasksCount();
                }
                else
                {
                    statlblMessages.ForeColor = Color.Crimson;
                    statlblMessages.Text      = Worker.TaskErrMessage;
                }

                mnuTasksStartAll.Enabled = false;
                mnuTasksStopAll.Enabled  = true;
                mnuTasksRestart.Enabled  = true;
            }
        }
예제 #4
0
        void WorkerTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            string date = GetCurrentDate();

            if (CurrentDate != date) //наступил следующий день, обновляем список задач
            {
                WorkerTimer.Stop();  //остановка таймера, чтоб событие не вызвалось
                WorkerErrorLevel wol = RefreshTasks();
                if (wol == WorkerErrorLevel.Error)
                {
                    if (OnAutoRefreshError != null)
                    {
                        OnAutoRefreshError(this);
                    }
                    return;
                }

                CurrentDate = date;
                WorkerTimer.Start();
                if (OnAutorefreshComplete != null)
                {
                    OnAutorefreshComplete(this);
                }
            }
        }
예제 #5
0
        private void mnuEditDelete_Click(object sender, EventArgs e)
        {
            if (grdMain.CurrentRow == null)
            {
                return;
            }
            int RecID = (int)grdMain.CurrentRow.Cells["ID"].Value;

            //проверка, не заблокирована ли запись
            if (LockedRecIDs.Contains(RecID))
            {
                CommonFunctions.InfoMessage("Запись заблокирована, так как данное задание выполняется",
                                            "Запись заблокирована");
                return;
            }

            DataRow dr = cConfig.dsConfig.Tables["Tasks"].Rows.Find(RecID);

            DialogResult Ans = MessageBox.Show("Окончательно удалить задачу " +
                                               dr["Name"].ToString() + "?\r\nОтменить будет невозможно!",
                                               "Удаление задачи", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);

            if (Ans == DialogResult.No)
            {
                return;
            }

            //определение, удаляется ли последняя строка в гриде
            bool LastRow = false;
            int  gridy   = grdMain.CurrentCellAddress.Y;
            int  gridx   = grdMain.CurrentCellAddress.X;

            if (gridy == (grdMain.Rows.Count - 1))
            {
                LastRow = true;
            }

            //удаление задачи
            cConfig.dsConfig.Tables["Tasks"].Rows.Remove(dr);
            //выгружаем из списка запущенных, если есть
            WorkerErrorLevel wol = Worker.RemoveTask(RecID, false);

            showworkererror(wol, "Задача удалена");
            if (!cConfig.SaveConfig())
            {
                CommonFunctions.ErrMessage(cConfig.ConfigErrMessage);
            }
            FindRows = null;

            if (LastRow)
            {
                if (grdMain.Rows.Count > 0)
                {
                    grdMain.Rows[grdMain.Rows.Count - 1].Cells[gridx].Selected = true;
                }
            }
        }
예제 #6
0
        public WorkerErrorLevel RefreshTasks()
        {
            WorkerErrorLevel wol = StopTasks();

            if (wol != WorkerErrorLevel.OK)
            {
                return(wol);
            }
            return(StartTasks());
        }
예제 #7
0
        private void mnuEditEdit_Click(object sender, EventArgs e)
        {
            if (grdMain.CurrentRow == null)
            {
                return;
            }

            //Подготовка данных для редактирования
            int   RecID = (int)grdMain.CurrentRow.Cells["ID"].Value;
            cTask Task  = null;

            //проверка, не заблокирована ли запись
            if (LockedRecIDs.Contains(RecID))
            {
                CommonFunctions.InfoMessage("Запись заблокирована, так как данное задание выполняется",
                                            "Запись заблокирована");
                return;
            }

            try
            {
                Task = new cTask(cConfig.dsConfig, "Tasks", RecID);
            }
            catch (Exception ex)
            {
                CommonFunctions.ErrMessage(ex.Message);
                statlblMessages.ForeColor = Color.Red;
                statlblMessages.Text      = "ОШИБКА: " + ex.Message;
                return;
            }

            //форма редактирования
            frmAddTask fAddTask = new frmAddTask();

            fAddTask.fMain = this;
            fAddTask.Task  = Task;
            fAddTask.bEdit = true;
            fAddTask.ShowDialog();
            OnLockRecord   = null;
            OnUnlockRecord = null;

            if (fAddTask.bSuccess)
            {
                FindRows = null; //обнуление поиска

                //отредактированное задание должно быть в очереди на выполнение
                if (Worker.RunningInCurrentPeriod(RecID))
                {
                    Worker.RemoveTask(RecID, false);              //удаляем
                    WorkerErrorLevel wol = Worker.AddTask(RecID); //перезапускаем
                    showworkererror(wol, "Задача сохранена и запущена на выполнение.");
                }
            }
        }
예제 #8
0
        void Worker_OnAutoRefreshError(object sender)
        {
            cTaskWorker w = (cTaskWorker)sender;

            CommonFunctions.ErrMessage(w.TaskErrMessage);
            WorkerErrorLevel wol = w.StopAutoRefresh();

            if (wol != WorkerErrorLevel.OK)
            {
                CommonFunctions.ErrMessage(w.TaskErrMessage);
            }
        }
예제 #9
0
        public WorkerErrorLevel StopAutoRefresh()
        {
            WorkerErrorLevel wol = StopTasks();

            if (wol != WorkerErrorLevel.OK)
            {
                return(wol);
            }
            if (WorkerTimer != null)
            {
                WorkerTimer.Stop();
                WorkerTimer.Elapsed -= WorkerTimer_Elapsed;
                WorkerTimer.Dispose();
                WorkerTimer = null;
            }

            return(WorkerErrorLevel.OK);
        }
예제 #10
0
        private void mnuTasksStopAll_Click(object sender, EventArgs e)
        {
            if (Worker.TasksLoaded())
            {
                DialogResult Ask = MessageBox.Show("Имеются загруженные задачи. Остановить все?",
                                                   "Остановка задач", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (Ask == DialogResult.No)
                {
                    return;
                }
            }

            WorkerErrorLevel wol = Worker.StopAutoRefresh();

            showworkererror(wol, "Задачи остановлены");
            mnuTasksStartAll.Enabled = true;
            mnuTasksStopAll.Enabled  = false;
            mnuTasksRestart.Enabled  = false;
        }
예제 #11
0
        //загрузка и запуск заданий на текущий день
        public WorkerErrorLevel StartTasks()
        {
            WorkerErrorLevel wol = LoadTasks();

            if (wol != WorkerErrorLevel.OK)
            {
                return(wol);
            }

            foreach (cTask tsk in CurrentTasks.Values)
            {
                //запуск задач
                tsk.onCompleteTask     += new cTask.CompleteTask(cTaskWorker_onCompleteTask);
                tsk.onSendMessage      += new cTask.SendTaskMessage(cTaskWorker_onSendMessage);
                tsk.onStartRunningTask += new cTask.StartRunnigTask(tsk_onStartRunningTask);
                tsk.onTaskStop         += new cTask.TaskStop(tsk_onTaskStop);

                //если только всплывающие сообщения
                if (WorkerNotification == NotificationType.Baloon)
                {
                    tsk.NoRemind = true; //отключить постоянные напоминания
                }
                else
                {
                    tsk.NoRemind = false;
                }

                try
                {
                    tsk.StartWatch();
                    MessageForms.Add(tsk.ID, null);
                }
                catch (Exception ex)
                {
                    TaskErrMessage = ex.Message;
                    return(WorkerErrorLevel.Error);
                }
            }

            return(WorkerErrorLevel.OK);
        }
예제 #12
0
        private void mnuEditAdd_Click(object sender, EventArgs e)
        {
            //показали форму для добавления
            frmAddTask fAddTask = new frmAddTask();

            fAddTask.ShowDialog();

            if (fAddTask.bSuccess) //добавление удачно
            {
                FindRows = null;   //обнуляем поиск

                //попытка запуска новой задачи

                //вытаскиваем ID последней записи
                int RecID = (int)cConfig.dsConfig.Tables["Tasks"].
                            Rows[cConfig.dsConfig.Tables["Tasks"].Rows.Count - 1]["ID"];

                //Пробуем загрузить
                WorkerErrorLevel wol = Worker.AddTask(RecID);

                showworkererror(wol, "Задача сохранена и запущена на выполнение.");
            }
        }
예제 #13
0
        private void mnuFileOptions_Click(object sender, EventArgs e)
        {
            frmOptions fOptions = new frmOptions();

            fOptions.ShowDialog();

            if (fOptions.bSuccess)
            {
                if (fOptions.NotificationChanged)
                {
                    WorkerErrorLevel wol = Worker.StopAutoRefresh();
                    showworkererror(wol, "Задачи остановлены");
                    mnuTasksStartAll.Enabled = true;
                    mnuTasksStopAll.Enabled  = false;
                    mnuTasksRestart.Enabled  = false;
                    if (!Worker.TasksLoaded())
                    {
                        mnuTasksStartAll_Click(null, null);
                    }
                }
                cConfig.SaveConfig();
            }
        }
예제 #14
0
        void showworkererror(WorkerErrorLevel wol, string oktext)
        {
            switch (wol)
            {
            case WorkerErrorLevel.Error:
            {
                statlblMessages.ForeColor = Color.Red;
                statlblMessages.Text      = Worker.TaskErrMessage;
                CommonFunctions.ErrMessage(Worker.TaskErrMessage);
            }; break;

            case WorkerErrorLevel.Warning:
            {
                statlblMessages.ForeColor = Color.Crimson;
                statlblMessages.Text      = Worker.TaskErrMessage;
            }; break;

            default:
            {
                statlblMessages.ForeColor = Color.Black;
                statlblMessages.Text      = oktext;
            }; break;
            }
        }
예제 #15
0
        private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!ExitFromMenu) //пользователь закрыл форму крестиком, а не вышел из меню
            {
                if (Convert.ToBoolean(cConfig.GetParameter("Global.AskMainBehavior", "true")))
                {
                    //спросить о поведении формы
                    frmMainBeh   fMainBeh = new frmMainBeh();
                    DialogResult Ask      = fMainBeh.ShowDialog();
                    if (Ask == DialogResult.No)
                    {
                        e.Cancel = true;
                        return;
                    }
                }

                //проверить что делать
                FormBehavior MainBehavior = (FormBehavior)Convert.ToInt32(
                    cConfig.GetParameter("Global.MainBehavior", "0"));

                if (MainBehavior == FormBehavior.Hide) //скрыть форму
                {
                    this.Hide();
                    e.Cancel = true;
                }
            }

            bool Maximized = false;

            //если форма минимизирована перед закрытием
            //не сохранять параметры окна
            if (this.WindowState == FormWindowState.Minimized)
            {
                return;
            }

            if (this.WindowState == FormWindowState.Maximized)
            {
                Maximized = true;
            }

            cConfig.SetParameter("Main.Maximized", Maximized.ToString());
            cConfig.SetParameter("Main.Width", this.Width.ToString());
            cConfig.SetParameter("Main.Height", this.Height.ToString());

            //закрытие не отменено - останавливаем задачи
            if (!e.Cancel)
            {
                WorkerErrorLevel wol = Worker.StopAutoRefresh();
                if (wol != WorkerErrorLevel.OK)
                {
                    CommonFunctions.ErrMessage(Worker.TaskErrMessage);
                }
                //LockedRecIDs.Clear();
                //LockedRecIDs = null;
            }

            if (!cConfig.SaveConfig())
            {
                CommonFunctions.ErrMessage(cConfig.ConfigErrMessage);
            }
        }
예제 #16
0
        private void mnuEditActivate_Click(object sender, EventArgs e)
        {
            if (grdMain.CurrentRow == null)
            {
                return;
            }
            int RecID = (int)grdMain.CurrentRow.Cells["ID"].Value;

            //проверка, не заблокирована ли запись
            if (LockedRecIDs.Contains(RecID))
            {
                CommonFunctions.InfoMessage("Запись заблокирована, так как данное задание выполняется",
                                            "Запись заблокирована");
                return;
            }


            DataRow dr      = cConfig.dsConfig.Tables["Tasks"].Rows.Find(RecID);
            bool    Active  = (bool)dr["Active"];
            bool    stopped = false;

            grdMain_SelectionChanged(null, null);

            //есть  ли задача в списке на выполнение
            if (Worker.IsTaskExist(RecID))
            {
                //есть, значит активна, надо остановить и удалить из списка
                WorkerErrorLevel wol = Worker.RemoveTask(RecID, false);
                showworkererror(wol, "Задача остановлена");
                if (wol != WorkerErrorLevel.OK)
                {
                    return;
                }
                Active  = false;
                stopped = true;
            }
            else //в списке нет
            {
                //меняем активность на противоположную
                Active = !Active;
            }

            //сохранение в БД
            dr["Active"] = Active;
            bool scfg = cConfig.SaveConfig();

            if (!scfg)
            {
                CommonFunctions.ErrMessage(cConfig.ConfigErrMessage);
                return;
            }

            if (Active)                                   //если была активирована
            {
                if (Worker.RunningInCurrentPeriod(RecID)) //должна ли выполняться
                {
                    //надо добавить в список и запустить
                    WorkerErrorLevel wol = Worker.AddTask(RecID);
                    showworkererror(wol, "Задача активирована и запущена");
                }
                else
                {
                    statlblMessages.ForeColor = Color.Black;
                    statlblMessages.Text      = "Задача активирована.";
                }
            }
            else
            {
                if (stopped)
                {
                    statlblMessages.ForeColor = Color.Black;
                    statlblMessages.Text      = "Задача остановлена и деактивирована.";
                }
                else
                {
                    statlblMessages.ForeColor = Color.Black;
                    statlblMessages.Text      = "Задача деактивирована.";
                }
            }
        }