/// <summary>
        /// Insere um novo operador ou atualiza caso ele já exista.
        /// </summary>
        /// <param name="oper">Operador a ser inserido ou atualizado</param>
        public void InsertUpdateOperator(Operator oper)
        {
            try
            {
                // Gera o hash da senha.
                oper.Password = PasswordTools.GenerateEncodedPassword(oper.Password);

                using (this.operatorDataAccess = new OperatorDataAccess())
                {
                    if (oper.Id > 0)
                    {
                        this.operatorDataAccess.UpdateOperator(oper.Id, oper.Code, oper.Name, oper.Password);
                    }
                    else
                    {
                        this.operatorDataAccess.InsertOperator(oper.Code, oper.Name, oper.Password, oper.Status);
                    }
                }
            }
            catch (Exception ex)
            {
                Logging.Error(BusinessConstants.ProjectName,
                              MethodBase.GetCurrentMethod().DeclaringType.Name,
                              MethodBase.GetCurrentMethod().Name,
                              ex.Message);

                throw ex;
            }
        }
        /// <summary>
        /// Valida o login do operador.
        /// </summary>
        /// <param name="oper">Operador que deseja fazer o login</param>
        /// <returns>Retorna o id do operador em caso de sucesso, ou 0 caso o login não seja válido</returns>
        public int Login(Operator oper)
        {
            try
            {
                // Gera o hash da senha.
                oper.Password = PasswordTools.GenerateEncodedPassword(oper.Password);

                using (this.operatorDataAccess = new OperatorDataAccess())
                {
                    return this.operatorDataAccess.Login(oper.Code, oper.Password);
                }
            }
            catch (Exception ex)
            {
                Logging.Error(BusinessConstants.ProjectName,
                              MethodBase.GetCurrentMethod().DeclaringType.Name,
                              MethodBase.GetCurrentMethod().Name,
                              ex.Message);

                throw ex;
            }
        }
        /// <summary>
        /// Remove um operador.
        /// </summary>
        /// <param name="oper">Operador a ser removido</param>
        public void DeleteOperator(Operator oper)
        {
            try
            {
                using (this.operatorDataAccess = new OperatorDataAccess())
                {
                    this.operatorDataAccess.UpdateOperatorStatus(oper.Code, oper.Status);
                }
            }
            catch (Exception ex)
            {
                Logging.Error(BusinessConstants.ProjectName,
                              MethodBase.GetCurrentMethod().DeclaringType.Name,
                              MethodBase.GetCurrentMethod().Name,
                              ex.Message);

                throw ex;
            }
        }
        /// <summary>
        /// Busca operador pelo id.
        /// </summary>
        /// <param name="id">Id do operador</param>
        /// <returns>Retorna o operador</returns>
        public Operator OperatorById(int id)
        {
            Operator oper = null;
            DataTable dtOperator;

            try
            {
                using (this.operatorDataAccess = new OperatorDataAccess())
                {
                    dtOperator = this.operatorDataAccess.GetOperatorById(id);
                }

                if (dtOperator != null && dtOperator.Rows.Count > 0)
                {
                    oper = new Operator();
                    oper.Id = (int)dtOperator.Rows[0][DatabaseConstants.OperatorIdColumn];
                    oper.Code = (string)dtOperator.Rows[0][DatabaseConstants.OperatorCodeColumn];
                    oper.Name = (string)dtOperator.Rows[0][DatabaseConstants.OperatorNameColumn];
                }
            }
            catch (Exception ex)
            {
                Logging.Error(BusinessConstants.ProjectName,
                              MethodBase.GetCurrentMethod().DeclaringType.Name,
                              MethodBase.GetCurrentMethod().Name,
                              ex.Message);

                throw ex;
            }

            return oper;
        }
 /// <summary>
 /// Limpa a SharedMemory.
 /// </summary>
 public void Clear()
 {
     this.operatorData = null;
 }
        /// <summary>
        /// Ação de Login.
        /// Caso o login seja realizado com sucesso, joga o usuário logado na 'SharedMemory'.
        /// </summary>
        private void Login()
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;

                if (string.IsNullOrWhiteSpace(this.textBoxOperator.Text) ||
                    string.IsNullOrWhiteSpace(this.textBoxPassword.Text))
                {
                    MessageBox.Show(this, Resources.LoginEmptyFields, Resources.Warning, 
                                    MessageBoxButtons.OK, MessageBoxIcon.Warning);

                    return;
                }

                Operator oper = new Operator();
                oper.Code = this.textBoxOperator.Text;
                oper.Password = this.textBoxPassword.Text;

                // Verifica se o login é válido.
                oper.Id = this.operatorBusiness.Login(oper);

                // Se id > 0, então login efetuado com sucesso.
                if (oper.Id > 0)
                {
                    SharedData.Instance.OperatorData = this.operatorBusiness.OperatorById(oper.Id);

                    ClearForm();

                    this.Hide();

                    FormMain frmMain = new FormMain();
                    frmMain.Show(this);
                }
                else
                {
                    MessageBox.Show(this, Resources.LoginFailed, Resources.Error, 
                                    MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            catch (Exception ex)
            {
                Logging.Error(ViewConstants.ProjectName,
                              MethodBase.GetCurrentMethod().DeclaringType.Name,
                              MethodBase.GetCurrentMethod().Name,
                              ex.Message);

                MessageBox.Show(this, Resources.LoginError, Resources.Error, 
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
        /// <summary>
        /// Deleta um operador.
        /// </summary>
        private void DeleteOperator()
        {
            try
            {
                Operator oper = new Operator();
                oper.Code = this.textBoxCode.Text;

                this.operatorBusiness.DeleteOperator(oper);

                MessageBox.Show(this, Resources.OperatorDeleteSuccess, Resources.Success, MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                Logging.Error(ViewConstants.ProjectName,
                              MethodBase.GetCurrentMethod().DeclaringType.Name,
                              MethodBase.GetCurrentMethod().Name,
                              ex.Message);

                MessageBox.Show(this, Resources.OperatorDeleteError, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        /// <summary>
        /// Salva os dados do operador.
        /// </summary>
        private void SaveOperator()
        {
            try
            {
                Operator oper = new Operator();

                if (this.dataGridViewOperators.SelectedRows.Count == 1)
                {
                    oper.Id = int.Parse(this.dataGridViewOperators.SelectedRows[0].Cells[0].Value.ToString());
                }

                oper.Code = this.textBoxCode.Text;
                oper.Name = this.textBoxName.Text;
                oper.Password = this.textBoxPassword.Text;
                oper.Status = 1;

                this.operatorBusiness.InsertUpdateOperator(oper);

                MessageBox.Show(this, Resources.OperatorSaveSuccess, Resources.Success, 
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                Logging.Error(ViewConstants.ProjectName,
                              MethodBase.GetCurrentMethod().DeclaringType.Name,
                              MethodBase.GetCurrentMethod().Name,
                              ex.Message);

                MessageBox.Show(this, Resources.OperatorSaveError, Resources.Error, 
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }