Example #1
0
 public void Dispose()
 {
     if (dcdEvent != null)
     {
         dcdEvent.Dispose();
         dcdEvent = null;
     }
     if (hDcd != null)
     {
         hDcd.Dispose();
         hDcd = null;
     }
 }
        public void SetScanHandler(System.Windows.Forms.Control cMainInvoker)
        {
            if (null != cMainInvoker)
            {
                cInvoker = cMainInvoker;
                // Now that we've got a connection to a barcode reading device, assign a
                // method for the DcdEvent.  A recurring request is used so that we will
                // continue to get barcode data until our dialog is closed.
                DcdRequestType reqType = (DcdRequestType)1 | DcdRequestType.PostRecurring;

                // Initialize event
                dcdEvent          = new DcdEvent(hPSC, reqType, cInvoker);
                dcdEvent.Scanned += new DcdScanned(dcdEvent_Scanned);
            }
        }
Example #3
0
        public void InitScanner()
        {
            try
            {
                hDcd = new DcdHandle(DcdDeviceCap.Exists | DcdDeviceCap.Barcode);

                // Now that we've got a connection to a barcode reading device, assign a
                // method for the DcdEvent.  A recurring request is used so that we will
                // continue to get barcode data until our dialog is closed.
                DcdRequestType reqType = (DcdRequestType)1 | DcdRequestType.PostRecurring;

                // Initialize event
                dcdEvent          = new DcdEvent(hDcd, reqType);
                dcdEvent.Scanned += new DcdScanned(dcdEvent_Scanned);
                Log.Info("Barcode scanner detected.", "Scan");
            }
            catch (Exception ex)
            {
                TerminalException ex2 = new TerminalException("Barcode scanner not detected.", ex);
                Log.Exception(ex2);
            }
        }
Example #4
0
        /// <summary>
        /// Управляющая процедура
        /// </summary>
        void Manager(UserAction ua)
        {
            try
            {
                //if (DcdEvent != null && State != ProgramState.InitialState)
                //    DcdEvent.Scanned -= DcdScannedDelegate;

                #region Начальное состояние
                // Начальное состояние
                if (State == ProgramState.InitialState)
                {
                    Cache.UpdateCatalogs();
                    FillProdsList();
                    FillDefsList();
                    FillWorksList();
                    string wID, passw;
                    while (true)
                    {
                        AuthentificationForm.ShowDialog();
                        if (AuthentificationForm.DialogResult != DialogResult.OK)
                        {
                            Close();
                        }
                        wID   = AuthentificationForm.textBox1.Text;
                        passw = AuthentificationForm.textBox2.Text;
                        if (Cache.VerifyPassword(wID, passw) == true)
                        {
                            break;
                        }
                        else
                        {
                            MessageBox.Show("Неверный код пользователя или пароль", "Ошибка",
                                            MessageBoxButtons.OK, MessageBoxIcon.Exclamation,
                                            MessageBoxDefaultButton.Button1);
                        }
                    }

                    if (MessageBox.Show("Сканер работает?", "Отладка",
                                        MessageBoxButtons.YesNo, MessageBoxIcon.Question,
                                        MessageBoxDefaultButton.Button1) == DialogResult.Yes)
                    {
                        DcdHandle = new DcdHandle(DcdDeviceCap.Barcode);
                        DcdEvent  = new DcdEvent(DcdHandle, DcdRequestType.PostRecurring, this);
                        DcdHandle.SetReadAhead(false);
                        DcdScannedDelegate = new DcdScanned(DcdEvent_Scanned);
                        DcdEvent.Scanned  += DcdScannedDelegate;
                    }

                    ModifyLayout(ProdsList, null, "Добавить", "Выбрать", "Обновить");
                    State = ProgramState.ProdsList;
                    return;
                }
                #endregion

                #region Список изделий
                // Сканирован код изделия (или введен вручную)
                if (State == ProgramState.ProdsList &&
                    (ua == UserAction.Scan || ua == UserAction.EnterCode))
                {
                    Cache.SelectedProdID = ScannedID;
                    if (Cache.VerifyProdID() == false)
                    {
                        Cache.UpdateProdInfo();
                        if (Cache.VerifyProdID() == false)
                        {
                            throw new Exception("Неверный код изделия");
                        }
                    }
                    Cache.FillTempRegs();
                    FillRegsList();
                    if (RegsList.Items.Count != 0)
                    {
                        ModifyLayout(RegsList, ProdsList, "Добавить", "Править", "Завершить");
                        State = ProgramState.RegsList;
                    }
                    else
                    {
                        ModifyLayout(DefsList, ProdsList, "Выбрать", "Отмена", "");
                        State = ProgramState.DefsList;
                    }
                    return;
                }

                // Ручной ввод кода изделия (по кнопке "Добавить")
                if (State == ProgramState.ProdsList && ua == UserAction.Add)
                {
                    InputForm.textBox1.Text = "";
                    InputForm.Text          = "Список изделий";
                    InputForm.label1.Text   = "Введите штрих-код изделия:";
                    InputForm.ShowDialog();
                    if (InputForm.DialogResult == DialogResult.OK)
                    {
                        Cache.SelectedProdID = InputForm.textBox1.Text;
                        if (Cache.VerifyProdID() == false)
                        {
                            Cache.UpdateProdInfo();
                            if (Cache.VerifyProdID() == false)
                            {
                                throw new Exception("Неверный код изделия");
                            }
                        }
                        Cache.FillTempRegs();
                        FillRegsList();
                        if (RegsList.Items.Count != 0)
                        {
                            ModifyLayout(RegsList, ProdsList, "Добавить", "Править", "Завершить");
                            State = ProgramState.RegsList;
                        }
                        else
                        {
                            ModifyLayout(DefsList, ProdsList, "Выбрать", "Отмена", "");
                            State = ProgramState.DefsList;
                        }
                    }
                    return;
                }

                // Выбрано изделие из списка
                if (State == ProgramState.ProdsList && ua == UserAction.Select)
                {
                    SetSelectedProdID();
                    if (Cache.VerifyProdID() == false)
                    {
                        throw new Exception("Неверный код изделия");
                    }
                    Cache.FillTempRegs();
                    FillRegsList();
                    if (RegsList.Items.Count != 0)
                    {
                        ModifyLayout(RegsList, ProdsList, "Добавить", "Править", "Завершить");
                        State = ProgramState.RegsList;
                    }
                    else
                    {
                        ModifyLayout(DefsList, ProdsList, "Выбрать", "Отмена", "");
                        State = ProgramState.DefsList;
                    }
                    return;
                }
                #endregion

                #region Список регистраций
                // Код сканирован или введен вручную
                if (State == ProgramState.RegsList &&
                    (ua == UserAction.Scan || ua == UserAction.EnterCode))
                {
                    Cache.SelectedDefID = ScannedID;
                    if (Cache.VerifyDefID() == false)
                    {
                        throw new Exception("Неверный код дефекта");
                    }
                    if (Cache.DefAlreadyRegistered() == true)
                    {
                        if (Cache.GetTempRegState() != "NewTemp")
                        {
                            throw new Exception("Невозможно править сохраненную запись");
                        }
                        SelectActionForm.Text         = "Правка записи";
                        SelectActionForm.label1.Text  = "Выберете действие:";
                        SelectActionForm.button1.Text = "Изменить";
                        SelectActionForm.button2.Text = "Удалить";
                        SelectActionForm.button3.Text = "Отмена";
                        SelectActionForm.ShowDialog();
                        if (SelectActionForm.DialogResult == DialogResult.Cancel)
                        {
                            return;
                        }

                        // Удалить запись
                        if (SelectActionForm.DialogResult == DialogResult.No)
                        {
                            AcceptionForm.Text        = "Удаление записи";
                            AcceptionForm.label1.Text = "Удалить запись?";
                            AcceptionForm.ShowDialog();
                            if (AcceptionForm.DialogResult == DialogResult.Yes)
                            {
                                Cache.DelTempReg();
                                RemoveRegsListRecord();
                            }
                        }
                        // Изменить запись
                        if (SelectActionForm.DialogResult == DialogResult.Yes)
                        {
                            ModifyLayout(DefsList, RegsList, "Выбрать", "Далее", "Отмена");
                            State = ProgramState.DefsListEditing;
                        }
                    }
                    else
                    {
                        SelectDefsListRecord();
                        ModifyLayout(WorksList, RegsList, "Выбрать", "Назад", "Отмена");
                        State = ProgramState.WorksList;
                    }
                    return;
                }

                // Выход из списка регистраций
                if (State == ProgramState.RegsList && ua == UserAction.Finish)
                {
                    if (Cache.TempRegsAdded() == true)
                    {
                        SelectActionForm.Text         = "Сохранение изменений";
                        SelectActionForm.label1.Text  = "Сохранить изменения?";
                        SelectActionForm.button1.Text = "Да";
                        SelectActionForm.button2.Text = "Нет";
                        SelectActionForm.button3.Text = "Отмена";
                        SelectActionForm.ShowDialog();
                        if (SelectActionForm.DialogResult == DialogResult.Cancel)
                        {
                            return;
                        }
                        if (SelectActionForm.DialogResult == DialogResult.Yes)
                        {
                            Cache.AcceptTempRegs();
                            TryToRemoveProdsListRecord();
                            if ((ProdsList.Items.Count + 1) / 5 > ProgramSettings.MaxProdsListRecords)
                            {
                                RemoveFirstProdsListRecord();
                            }
                            AddProdsListRecord();
                        }
                    }
                    ModifyLayout(ProdsList, RegsList, "Добавить", "Выбрать", "Обновить");
                    State = ProgramState.ProdsList;
                    return;
                }

                // Добавление записи о дефекте
                if (State == ProgramState.RegsList && ua == UserAction.Add)
                {
                    ModifyLayout(DefsList, RegsList, "Выбрать", "Отмена", "");
                    State = ProgramState.DefsList;
                    return;
                }

                // Изменение записи о дефекте
                if (State == ProgramState.RegsList && ua == UserAction.Change)
                {
                    SetSelectedReg();
                    if (Cache.GetTempRegState() != "NewTemp")
                    {
                        throw new Exception("Невозможно править сохраненную запись");
                    }
                    SelectActionForm.Text         = "Правка записи";
                    SelectActionForm.label1.Text  = "Выберете действие:";
                    SelectActionForm.button1.Text = "Изменить";
                    SelectActionForm.button2.Text = "Удалить";
                    SelectActionForm.button3.Text = "Отмена";
                    SelectActionForm.ShowDialog();
                    if (SelectActionForm.DialogResult == DialogResult.Cancel)
                    {
                        return;
                    }

                    // Удалить запись
                    if (SelectActionForm.DialogResult == DialogResult.No)
                    {
                        AcceptionForm.Text        = "Удаление записи";
                        AcceptionForm.label1.Text = "Удалить запись?";
                        AcceptionForm.ShowDialog();
                        if (AcceptionForm.DialogResult == DialogResult.Yes)
                        {
                            Cache.DelTempReg();
                            RemoveRegsListRecord();
                        }
                    }
                    // Изменить запись
                    if (SelectActionForm.DialogResult == DialogResult.Yes)
                    {
                        ModifyLayout(DefsList, RegsList, "Выбрать", "Далее", "Отмена");
                        State = ProgramState.DefsListEditing;
                    }
                    return;
                }
                #endregion

                #region Список дефектов
                // Код дефекта введен или сканирован
                if (State == ProgramState.DefsList &&
                    (ua == UserAction.Scan || ua == UserAction.EnterCode))
                {
                    Cache.SelectedDefID = ScannedID;
                    if (Cache.VerifyDefID() == false)
                    {
                        throw new Exception("Неверный код дефекта");
                    }
                    if (Cache.DefAlreadyRegistered() == true)
                    {
                        throw new Exception("Дефект уже зарегистрирован");
                    }
                    SelectDefsListRecord();
                    ModifyLayout(WorksList, DefsList, "Выбрать", "Назад", "Отмена");
                    State = ProgramState.WorksList;
                    return;
                }

                // Код дефекта введен или сканирован (в режиме редактирования записи)
                if (State == ProgramState.DefsListEditing &&
                    (ua == UserAction.Scan || ua == UserAction.EnterCode))
                {
                    Cache.SelectedDefID = ScannedID;
                    if (Cache.VerifyDefID() == false)
                    {
                        throw new Exception("Неверный код дефекта");
                    }
                    if (Cache.DefAlreadyRegistered() == true)
                    {
                        throw new Exception("Дефект уже зарегистрирован");
                    }
                    SelectDefsListRecord();
                    ModifyLayout(WorksList, DefsList, "Выбрать", "Назад", "Отмена");
                    State = ProgramState.WorksListEditing;
                    return;
                }

                // Выход из режима добавления дефекта
                if ((State == ProgramState.DefsList || State == ProgramState.DefsListEditing) &&
                    ua == UserAction.Cancel)
                {
                    ModifyLayout(RegsList, DefsList, "Добавить", "Править", "Завершить");
                    State = ProgramState.RegsList;
                    return;
                }

                // Дефект выбран
                if (State == ProgramState.DefsList && ua == UserAction.Select)
                {
                    SetSelectedDefID();
                    if (Cache.DefAlreadyRegistered() == true)
                    {
                        throw new Exception("Дефект уже зарегистрирован");
                    }
                    ModifyLayout(WorksList, DefsList, "Выбрать", "Назад", "Отмена");
                    State = ProgramState.WorksList;
                    return;
                }

                // Деффект выбран (в режиме редактирования записи)
                if (State == ProgramState.DefsListEditing && ua == UserAction.Select)
                {
                    SetSelectedDefID();
                    if (Cache.DefAlreadyRegistered() == true)
                    {
                        throw new Exception("Дефект уже зарегистрирован");
                    }
                    ModifyLayout(WorksList, DefsList, "Выбрать", "Далее", "Отмена");
                    State = ProgramState.WorksListEditing;
                    return;
                }

                // Деффект пропущен (в режиме редактирования записи)
                if (State == ProgramState.DefsListEditing && ua == UserAction.Next)
                {
                    SelectDefsListRecord();
                    ModifyLayout(WorksList, DefsList, "Выбрать", "Далее", "Отмена");
                    State = ProgramState.WorksListEditing;
                    return;
                }
                #endregion

                #region Список операторов
                // Код оператора введен или сканирован
                if (State == ProgramState.WorksList &&
                    (ua == UserAction.Scan || ua == UserAction.EnterCode))
                {
                    Cache.SelectedWorkID = ScannedID;
                    if (Cache.VerifyWorkID() == false)
                    {
                        throw new Exception("Неверный код оператора");
                    }
                    SelectWorksListRecord();
                    SetSelectedDefID();

                    Cache.AddTempReg();
                    AddRegsListRecord();
                    ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить");
                    State = ProgramState.RegsList;
                    return;
                }

                // Код оператора введен или сканирован (в режиме редактирования записи)
                if (State == ProgramState.WorksListEditing &&
                    (ua == UserAction.Scan || ua == UserAction.EnterCode))
                {
                    Cache.SelectedWorkID = ScannedID;
                    if (Cache.VerifyWorkID() == false)
                    {
                        throw new Exception("Неверный код оператора");
                    }
                    SelectWorksListRecord();
                    SetSelectedReg();
                    RemoveRegsListRecord();
                    Cache.DelTempReg();

                    SetSelectedDefID();
                    SetSelectedWorkID();
                    Cache.AddTempReg();
                    AddRegsListRecord();
                    ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить");
                    State = ProgramState.RegsList;
                    return;
                }

                // Назад к выбору дефекта
                if (State == ProgramState.WorksList && ua == UserAction.Back)
                {
                    ModifyLayout(DefsList, WorksList, "Выбрать", "Отмена", "");
                    State = ProgramState.DefsList;
                    return;
                }

                // Отмена добавления записи о дефекте
                if ((State == ProgramState.WorksList || State == ProgramState.WorksListEditing) &&
                    ua == UserAction.Cancel)
                {
                    ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить");
                    State = ProgramState.RegsList;
                    return;
                }

                // Оператор выбран
                if (State == ProgramState.WorksList && ua == UserAction.Select)
                {
                    SetSelectedDefID();
                    SetSelectedWorkID();

                    Cache.AddTempReg();
                    AddRegsListRecord();
                    ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить");
                    State = ProgramState.RegsList;
                    return;
                }

                // Оператор выбран (в режиме редактирования записи)
                if (State == ProgramState.WorksListEditing && ua == UserAction.Select)
                {
                    SetSelectedReg();
                    RemoveRegsListRecord();
                    Cache.DelTempReg();

                    SetSelectedDefID();
                    SetSelectedWorkID();
                    Cache.AddTempReg();
                    AddRegsListRecord();
                    ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить");
                    State = ProgramState.RegsList;
                    return;
                }

                // Оператор пропущен (в режиме редактирования записи)
                if (State == ProgramState.WorksListEditing && ua == UserAction.Next)
                {
                    SelectWorksListRecord();
                    RemoveRegsListRecord();
                    Cache.DelTempReg();

                    SetSelectedDefID();
                    Cache.AddTempReg();
                    AddRegsListRecord();
                    ModifyLayout(RegsList, WorksList, "Добавить", "Править", "Завершить");
                    State = ProgramState.RegsList;
                    return;
                }
                #endregion
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message, "Ошибка",
                                MessageBoxButtons.OK, MessageBoxIcon.Exclamation,
                                MessageBoxDefaultButton.Button1);
            }
            finally
            {
                //if (DcdEvent != null)
                //{
                //    DcdEvent.Scanned += DcdScannedDelegate;
                //}
            }
        }