private DialogResult newLogin(Form formulario,bool retorno)
        {
            try
            {
                DialogResult resp = MessageBox.Show("Deseja salvar as altereções relalizadas", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                if (resp == DialogResult.Yes)
                {
                    daoItemProposta = new DaoProdutoProposta();
                    daoProposta = new DaoProposta();
                    ProcedimentosLiberacao.interromperLiberacao(objProposta);
                    daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, "null");
                    daoItemProposta.updateItemPropostaRetorno();
                    this.Dispose();
                    this.Close();
                    formulario.Show();
                }
                else if (resp == DialogResult.No)
                {
                    daoProposta = new DaoProposta();
                    ProcedimentosLiberacao.interromperLiberacao(objProposta);
                    daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, "null");
                    daoProposta = null;
                    this.Dispose();
                    this.Close();
                    formulario.Show();
                }

                return resp;
            }
            catch (Exception ex)
            {
                throw new Exception("Não foi possível executar o comando solicitado. \n ", ex);
            }
        }
        /// <summary>
        /// Realiza todos os procedimentos nescessários para carregar o próximo item a ser separado.
        /// </summary>
        /// 
        /// <returns>
        ///          TRUE --> caso exista um próximo item a ser trabalhado
        ///          FALSE --> caso não exista mais items para serem trabalhados.
        /// </returns>
        private bool nextItemProposta()
        {
            bool hasItem = false;
            daoItemProposta = new DaoProdutoProposta();
            daoEtiqueta = new DaoEtiqueta();
            objTransacoes = new BaseMobile();

            try
            {
                this.clearParaProximoItem();
                //processa Quantidade de itens
                ProcedimentosLiberacao.decrementaQtdTotalItens(1);
                //processa qunatidade de peças
                ProcedimentosLiberacao.decrementaQtdTotalPecas(objProposta.ListObjItemProposta[0].Quantidade);
                //seta status para separado
                ProcedimentosLiberacao.setStatusProdutoParaSeparado(objProposta.ListObjItemProposta[0]);
                //grava informações do item na base de dados mobile
                daoItemProposta.updateStatusItemProposta(objProposta.ListObjItemProposta[0]);

                ////ESTE TRECHO TALVES ESTEJA SENDO DESNECESSÀRIO.
                ////ANALIZAR MELHOR Action SUA UTILIZACAO
                //daoEtiqueta.insertSequencia(ProcedimentosLiberacao.EtiquetasLidas);

                //inseri informações das etiquetas referente ao produto liberado em formato Xml
                daoItemProposta.updateXmlItemProposta(Etiqueta.gerarXmlItensEtiquetas(ProcedimentosLiberacao.EtiquetasLidas), objProposta.ListObjItemProposta[0].CodigoItemProposta);

                //carrega próximo item
                if (ProcedimentosLiberacao.TotalItens > 0)
                {
                    ProdutoProposta prod = daoItemProposta.fillTop1ItemProposta();

                    //Carrega informações de Embalagem para o produto que será trabalhado.
                    prod.Embalagens = daoEmbalagem.carregarEmbalagensProduto(prod);

                    if (prod != null)
                    {
                        hasItem = true;

                        objProposta.setNextItemProposta(prod);
                    }
                    else
                    {
                        hasItem = false;
                    }
                }
                else // CASO não tenha um próximo item
                {
                    hasItem = false;
                }

                //Se existir um próximo item
                if (hasItem)
                {
                    //seta Parametros para iniciar leitura do próximo item
                    ProcedimentosLiberacao.inicializarProcedimentosProximoItem(objProposta.ListObjItemProposta[0].Quantidade);

                    //recarrega o form com as informações do próximo item.
                    this.fillCamposForm(objProposta, ProcedimentosLiberacao.TotalPecas, ProcedimentosLiberacao.TotalItens);
                }
                else
                {
                    this.clearFormulario(true, true);
                }
            }
            catch (SqlCeException Ex)
            {
                MessageBox.Show(Ex.Message);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao carregar próximo item!",ex);
            }
            finally
            {
                daoEtiqueta = null;
                daoItemProposta = null;
            }

            return hasItem;
        }
        /// <summary>
        /// Menu evento ao clicar em Opções/Logout
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mnuOpcoes_Logout_Click(object sender, EventArgs e)
        {
            try
            {

                if (this.newLogin(new frmLogin(),true )!= DialogResult.Cancel) {
                    MainConfig.UserOn.registrarAcesso(Usuario.statusLogin.NAOLOGADO);
                }

            }
            catch (Exception ex)
            {
                MainConfig.errorMessage(ex.Message, "Logout");
            }
            finally
            {
                daoItemProposta = null;
                daoProduto = null;
            }
        }
        void mnuOpcoes_Terminar_Click(object sender, System.EventArgs e)
        {
            try
            {
                this.newLogin(new FrmAcao());

            }
            catch (Exception ex)
            {
                MainConfig.errorMessage(ex.Message, "Logout");
            }
            finally
            {
                daoItemProposta = null;
                daoProduto = null;
            }
        }
        /// <summary>
        /// Realiza todo o processo de liberação para o produto lido
        /// </summary>
        /// <param name="inputText">Valor captado pelo leitor</param>
        /// <param name="tipoEtiqueta">Tipo de Etiqueta a ser validada</param>
        private void liberarItem(String inputText,Etiqueta.Tipo tipoEtiqueta)
        {
            try
            {
                ProcedimentosLiberacao.lerEtiqueta(inputText,tipoEtiqueta, objProposta.ListObjItemProposta[0], tbProduto, tbLote, tbSequencia, tbQuantidade, tbMensagem);

                if (ProcedimentosLiberacao.QtdPecasItem == 0)
                {
                    if (!this.nextItemProposta())
                    {
                        this.finalizarProposta();
                    }

                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                daoProposta = null;
                daoItemProposta = null;
            }
        }
        private void liberarItem(String inputText)
        {
            try
            {
                ProcedimentosLiberacao.lerEtiqueta(inputText, objProposta.ListObjItemProposta[0], tbProduto, tbLote, tbSequencia, tbQuantidade, tbMensagem);

                if (ProcedimentosLiberacao.QtdPecasItem == 0)
                {
                    if (!this.nextItemProposta())
                    {
                        daoItemProposta = new DaoProdutoProposta();
                        daoProposta = new DaoProposta();
                        daoProposta.updatePropostaTbPickingMobileFinalizar(objProposta, Proposta.StatusLiberacao.FINALIZADO);
                        daoItemProposta.updateItemPropostaRetorno();
                        this.Dispose();
                        this.Close();
                    }

                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                daoProposta = null;
                daoItemProposta = null;
            }
        }
 private void finalizarProposta()
 {
     daoItemProposta = new DaoProdutoProposta();
     daoProposta = new DaoProposta();
     daoProposta.updatePropostaTbPickingMobileFinalizar(objProposta, Proposta.StatusLiberacao.FINALIZADO);
     daoItemProposta.updateItemPropostaRetorno();
     daoProposta.updateVolumeProposta(objProposta.Codigo);
     daoProposta.retiraPropostaListaPrioridade(objProposta.Codigo, MainConfig.CodigoUsuarioLogado);
     this.Dispose();
     this.Close();
 }
        /// <summary>
        /// Valida o fechamento do form.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void FrmProposta_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            DialogResult result = MessageBox.Show("Desejar salvar as alterações realizadas?", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

            if (result == DialogResult.No)
            {
                daoProposta = new DaoProposta();
                ProcedimentosLiberacao.interromperLiberacao(objProposta);
                daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, "null");
                daoProposta = null;
                MainConfig.UserOn.registrarAcesso(Usuario.statusLogin.NAOLOGADO);
                this.Dispose();
                this.Close();
                Application.Exit();
            }
            else if (result == DialogResult.Yes)
            {
                daoItemProposta = new DaoProdutoProposta();
                daoProposta = new DaoProposta();
                ProcedimentosLiberacao.interromperLiberacao(objProposta);
                daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, "null");
                daoItemProposta.updateItemPropostaRetorno();
                MainConfig.UserOn.registrarAcesso(Usuario.statusLogin.NAOLOGADO);
                this.Dispose();
                this.Close();
                Application.Exit();
            }
            else
            {
                e.Cancel = true;
            }
        }
Example #9
0
        /// <summary>
        /// Menu evento ao clicar em Opções/Logout
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mnuOpcoes_Logout_Click(object sender, EventArgs e)
        {
            try
            {
                this.newLogin(new frmLogin());

            }
            catch (Exception ex)
            {
                MainConfig.errorMessage(ex.Message, "Logout");
            }
            finally
            {
                daoItemProposta = null;
                daoProduto = null;
            }
        }
        /// <summary>
        /// Reliza todos os processos nescessários para efetuar a carga de dados na base Mobile.
        /// </summary>
        private void carregaBaseMobile()
        {
            objTransacoes = new BaseMobile();
            objProposta = new Proposta();
            daoItemProposta = new DaoProdutoProposta();
            daoProposta = new DaoProposta();
            daoProduto = new DaoProduto();
            daoEmbalagem = new DaoEmbalagem();

            try
            {
                //Limpa a Base.
                objTransacoes.clearBaseMobile();

                //Carrega um objeto Proposta e inicia todo o procedimento.
                //Caso não exista propostas a serem liberadas gera um exception
                //onde será feito os tratamentos para evitar o travamento do sistema.
                if ((objProposta = daoProposta.fillTop1PropostaServidor()) != null)
                {
                    daoProposta.InsertOrUpdatePickingMobile(objProposta, MainConfig.CodigoUsuarioLogado, Proposta.StatusLiberacao.TRABALHANDO, DateTime.Now);

                    //recupera o codigoPickingMobile da proposta trabalhada.
                    objProposta.CodigoPikingMobile = daoProposta.selectMaxCodigoPickingMobile(objProposta.Codigo);

                    //Realiza o Insert na Base Mobile
                    daoProposta.insertProposta(objProposta, MainConfig.CodigoUsuarioLogado);

                            ////Recupera List com itens da proposta
                            //this.listaProdutoProposta = daoItemProposta.fillListItensProposta((int)objProposta.Codigo).ToList<ProdutoProposta>();
                            ////Insert na Base Mobile tabela tb0002_ItensProsposta
                            //daoItemProposta.insertItemProposta(listaProdutoProposta.ToList<ProdutoProposta>());

                    //Recupera List com itens da proposta
                    //Insert na Base Mobile tabela tb0002_ItensProposta
                    daoItemProposta.insertItemProposta(daoItemProposta.fillListItensProposta((int)objProposta.Codigo).ToList<ProdutoProposta>());

                            //Recupera informações sobre os produtos existentes na proposta
                            //this.listaProduto = daoProduto.fillListProduto((int)objProposta.Codigo).ToList<Produto>();
                            //daoProduto.insertProdutoBaseMobile(listaProduto.ToList<Produto>());

                    //Insert na base Mobile tabela tb0003_Produtos
                    //Recupera informações sobre os produtos existentes na proposta
                    daoProduto.insertProdutoBaseMobile(daoProduto.fillListProduto((int)objProposta.Codigo).ToList<Produto>());

                    //Armazena informações de embalagens do produto na base mobile.
                    daoEmbalagem.insertEmbalagemBaseMobile(daoEmbalagem.cargaEmbalagensProduto((int)objProposta.Codigo));

                    //Carrega Informações das Embalagens de Separação.
                    ProcedimentosLiberacao.ListEmbalagensSeparacao  = daoEmbalagem.carregarEmbalagensSeparacao();

                }
                else
                {
                    throw new NoNewPropostaException("Não existem novas propostas a serem liberadas!!");
                }
            }
            catch (SqlQueryExceptions ex)
            {
                this.exitOnError(ex.Message, "Próxima Proposta");
            }
            catch (NoNewPropostaException ex)
            {
                this.exitOnError(ex.Message, "Próxima Proposta");
            }
            catch (SqlCeException sqlEx)
            {
                StringBuilder strBuilder = new StringBuilder();
                strBuilder.Append("Ocorreram problemas durante a carga de dados na tabela tb0002_ItensProposta. \n");
                strBuilder.Append("O procedimento não pode ser concluído");
                strBuilder.AppendFormat("Erro : {0}", sqlEx.Errors);
                strBuilder.AppendFormat("Description : {0}", sqlEx.Message);
                MainConfig.errorMessage(strBuilder.ToString(), "SqlException!!");
            }
            catch (Exception ex)
            {
                StringBuilder sbMsg = new StringBuilder();
                sbMsg.Append("Ocorreram problemas durante a carga de dados para a Base Mobile \n");
                sbMsg.AppendFormat("Error : {0}", ex.Message);
                sbMsg.Append("\nContate o Administrador do sistema.");
                MainConfig.errorMessage(sbMsg.ToString(), "Sistem Error!");
            }
            finally
            {
                objTransacoes = null;
                objProposta = null;
                daoProposta = null;
                daoProduto = null;
                daoItemProposta = null;
                daoEmbalagem = null;
            }
        }
        /// <summary>
        /// Realiza todos os procedimentos nescessários para carregar o próximo item a ser separado.
        /// </summary>
        /// 
        /// <returns>
        ///          TRUE --> caso exista um próximo item a ser trabalhado
        ///          FALSE --> caso não exista mais items para serem trabalhados.
        /// </returns>
        public static bool nextItemProposta(Proposta objProposta,FrmProposta frm)
        {
            bool hasItem = false;
            var daoItemProposta = new DaoProdutoProposta();
            var daoEtiqueta = new DaoEtiqueta();
            var objTransacoes = new BaseMobile();

            try
            {
                frm.clearParaProximoItem();

                tratarParaProximoItem(objProposta);
                //grava informações do item na base de dados mobile
                daoItemProposta.updateStatusItemProposta(objProposta.ListObjItemProposta[0]);
                //inseri informações das etiquetas referente ao produto liberado em formato Xml
                daoItemProposta.updateXmlItemProposta(montarXmlProcedimento(), objProposta.ListObjItemProposta[0].CodigoItemProposta);

                //carrega próximo item
                if (frm.temItensConferir())
                {
                    var prod = daoItemProposta.itemATrabalhar();
                    var daoEmbalagem = new DaoEmbalagem();

                    if (prod != null)
                    {
                        //Carrega informações de Embalagem para o produto que será trabalhado.
                        prod.Embalagens = daoEmbalagem.carregarEmbalagensProduto(prod);

                        hasItem = true;

                        objProposta.setNextItemProposta(prod);
                    }
                    else
                    {
                        hasItem = false;
                    }
                }
                else // CASO não tenha um próximo item
                {
                    hasItem = false;
                }

                //Se existir um próximo item
                if (hasItem)
                {
                    //seta Parametros para iniciar leitura do próximo item
                    inicializarProcedimentosProximoItem(objProposta.ListObjItemProposta[0].Quantidade);

                    //recarrega o form com as informações do próximo item.
                    //frm.fillCamposForm(objProposta, TotalPecas, TotalItens);
                    frm.fillCamposForm(objProposta);
                }
                else
                {
                    frm.clearFormulario(true, true);
                }
            }
            catch (SqlCeException Ex)
            {
                MessageBox.Show(Ex.Message);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao carregar próximo item!", ex);
            }
            finally
            {
                daoEtiqueta = null;
                daoItemProposta = null;
                objTransacoes = null;
            }

            return hasItem;
        }
        public static void finalizarProposta(Proposta objProposta,FrmProposta frmProposta)
        {
            try
            {
                FrmProposta.mostrarMensagem(TitaniumColector.Forms.FrmProposta.enumCor.BLUE, "Gravando informações na base de dados!", TitaniumColector.Forms.FrmProposta.enumCursor.WAIT);
                var daoItemProposta = new DaoProdutoProposta();
                var daoProposta = new DaoProposta();
                var daoEmbalagem = new DaoEmbalagem();

                daoEmbalagem.salvarEmbalagensSeparacao(objProposta);
                daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.FINALIZADO, true, true);
                daoItemProposta.updateItemPropostaRetorno();
                daoProposta.updateVolumeProposta(objProposta.Codigo);
                daoProposta.retiraPropostaListaPrioridade(objProposta.Codigo, MainConfig.UserOn.Codigo);

            }
            catch (Exception ex)
            {
                throw new Exception("finalizarProposta()\n " + ex.Message);
            }
            finally
            {
                FrmAcao frm = new FrmAcao();
                FrmProposta.mostrarMensagem(TitaniumColector.Forms.FrmProposta.enumCor.RED, "", TitaniumColector.Forms.FrmProposta.enumCursor.DEFAULT);
                frmProposta.Dispose();
                frmProposta.Close();
                frm.Show();
            }
        }
        /// <summary>
        /// Reliza todos os processos nescessários para efetuar a carga de dados na base Mobile.
        /// </summary>
        public static void carregaBaseMobile(FrmProposta frm)
        {
            var objTransacoes = new BaseMobile();
            var objProposta = new Proposta();
            var daoItemProposta = new DaoProdutoProposta();
            var daoProposta = new DaoProposta();
            var daoProduto = new DaoProduto();
            var daoEmbalagem = new DaoEmbalagem();

            //LIMPA INFORMAÇÕES RESULTANTE DE OUTROS PRODUTOS JÁ CONFERIDOS
            ProcedimentosLiberacao.limpar();

            try
            {
                //Limpa a Base.
                objTransacoes.clearBaseMobile();

                //Carrega um objeto Proposta e inicia todo o procedimento.
                //Caso não exista propostas a serem liberadas gera um exception
                //onde será feito os tratamentos para evitar o travamento do sistema.
                if ((objProposta = daoProposta.fillTop1PropostaServidor()) != null)
                {
                    daoProposta.InsertOrUpdatePickingMobile(objProposta, MainConfig.UserOn.Codigo, Proposta.StatusLiberacao.TRABALHANDO, DateTime.Now);

                    //recupera o codigoPickingMobile da proposta trabalhada.
                    objProposta.CodigoPikingMobile = daoProposta.selectMaxCodigoPickingMobile(objProposta.Codigo);

                    //Realiza o Insert na Base Mobile
                    daoProposta.insertProposta(objProposta, MainConfig.UserOn.Codigo);

                    //Recupera List com itens da proposta
                    //Insert na Base Mobile tabela tb0002_ItensProposta
                    daoItemProposta.carregarBaseMobileItens(daoItemProposta.fillListItensProposta((int)objProposta.Codigo).ToList<ProdutoProposta>());

                    //Insert na base Mobile tabela tb0003_Produtos
                    //Recupera informações sobre os produtos existentes na proposta
                    daoProduto.insertProdutoBaseMobile(daoProduto.fillListProduto((int)objProposta.Codigo).ToList<Produto>());

                    //Armazena informações de embalagens do produto na base mobile.
                    daoEmbalagem.insertEmbalagemBaseMobile(daoEmbalagem.cargaEmbalagensProduto((int)objProposta.Codigo));

                    //Carrega Informações das Embalagens de Separação.
                    //Carrega Quantidade das Embalagens utilizadas nos volumes da separação
                    ProcedimentosLiberacao.ListEmbalagensSeparacao = daoEmbalagem.carregarInformacoesEmbalagensUtilizadas((Int32)objProposta.CodigoPikingMobile, daoEmbalagem.carregarEmbalagensSeparacao());

                }
                else
                {
                    throw new NoNewPropostaException("Não existem novas propostas a serem liberadas!!");
                }
            }
            catch (SqlQueryExceptions ex)
            {
                frm.exitOnError(ex.Message, "Próxima Proposta", false);
            }
            catch (NoNewPropostaException ex)
            {
                frm.exitOnError(ex.Message, "Próxima Proposta", false);
            }
            catch (SqlCeException sqlEx)
            {
                ProcedimentosLiberacao.interromperLiberacao(objProposta);
                daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, true, false);
                StringBuilder strBuilder = new StringBuilder();
                strBuilder.Append("O procedimento não pode ser concluído.\n");
                strBuilder.AppendFormat("Erro : {0}", sqlEx.Errors);
                strBuilder.AppendFormat("Description : {0}", sqlEx.Message);
                frm.exitOnError(strBuilder.ToString(), "SqlException!!", false);
            }
            catch (Exception ex)
            {
                ProcedimentosLiberacao.interromperLiberacao(objProposta);
                daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, true, false);
                StringBuilder strBuilder = new StringBuilder();
                strBuilder.Append("O procedimento não pode ser concluído.\n");
                strBuilder.AppendFormat(" Descrição: {0}", ex.Message);
                strBuilder.Append("\nContate o Administrador do sistema.");
                frm.exitOnError(strBuilder.ToString(), "SqlException!!", false);
            }
            finally
            {
                objTransacoes = null;
                objProposta = null;
                daoProposta = null;
                daoProduto = null;
                daoItemProposta = null;
                daoEmbalagem = null;
            }
        }
Example #14
0
        /// <summary>
        /// Realiza os procedimentos nescessários de termino de conferência 
        /// de um item de modo que não seja perdido nenhuma informação útil.
        /// </summary>
        /// <param name="showQuestion">Mostrar ou não a pergunta de confirmação ao usuário.</param>
        /// <returns>resposta do Dialog Result</returns>
        private DialogResult exitForm(bool showQuestion)
        {
            try
            {
                DialogResult resp;

                if (showQuestion)
                {
                    resp = MessageBox.Show("Deseja salvar as altereções realizadas", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    resp = DialogResult.Yes;
                }

                Cursor.Current = Cursors.WaitCursor;

                if (resp == DialogResult.Yes)
                {
                    var daoItemProposta = new DaoProdutoProposta();
                    var daoProposta = new DaoProposta();
                    var daoEmbalagem = new DaoEmbalagem();

                    ProcedimentosLiberacao.interromperLiberacao(objProposta);
                    daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, true, true);
                    daoItemProposta.updateItemPropostaRetorno();
                    daoEmbalagem.salvarEmbalagensSeparacao(objProposta);
                    this.Dispose();
                    this.Close();
                }
                else if (resp == DialogResult.No)
                {
                    var daoProposta = new DaoProposta();
                    ProcedimentosLiberacao.interromperLiberacao(objProposta);
                    daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, true, false);
                    this.Dispose();
                    this.Close();
                }

                return resp;
            }
            catch (Exception ex)
            {
                MainConfig.errorMessage("Não foi possível executar o comando solicitado.\n" + ex.Message, "Form Propostas");
                return DialogResult.Yes;
            }
            finally
            {
                Cursor.Current = Cursors.Default;
            }
        }
Example #15
0
        /// <summary>
        /// Realiza os procedimentos nescessários de termino de conferência 
        /// de um item de modo que não seja perdido nenhuma informação útil.
        /// </summary>
        /// <param name="formulario">Interface responsável por abrir um próximo formulário</param>
        /// <param name="retorno">Se o usuário terá ou não um mesnsagem de informativa após a conclusão do método.</param>
        /// <param name="showQuestion">Mostrar ou não a pergunta de confirmação ao usuário.</param>
        /// <returns>resposta do Dialog Result</returns>
        private DialogResult exitForm(ICall formulario, bool retorno, bool showQuestion)
        {
            try
            {
                DialogResult resp;

                //Verifica se irá ou não apresentar a pergunta ao usuário.
                if (showQuestion)
                {
                    resp = MessageBox.Show("Deseja salvar as altereções realizadas", "Exit", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);
                }
                else
                {
                    resp = DialogResult.Yes;
                }

                //Modifica o estado do cursor
                Cursor.Current = Cursors.WaitCursor;

                //realiza procedimentos nescessário para terminar a conferência do item
                if (resp == DialogResult.Yes)
                {
                    //Classes para trabalhar com as bases de dados.
                    var daoItemProposta = new DaoProdutoProposta();
                    var daoProposta = new DaoProposta();
                    var daoEmbalagem = new DaoEmbalagem();

                    ProcedimentosLiberacao.interromperLiberacao(objProposta);
                    daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, true, true);
                    daoItemProposta.updateItemPropostaRetorno();
                    daoEmbalagem.salvarEmbalagensSeparacao(objProposta);
                    this.Dispose();
                    this.Close();
                }
                else if (resp == DialogResult.No)
                {
                    var daoProposta = new DaoProposta();
                    ProcedimentosLiberacao.interromperLiberacao(objProposta);
                    daoProposta.updatePropostaTbPickingMobile(objProposta, Proposta.StatusLiberacao.NAOFINALIZADO, true, false);
                    this.Dispose();
                    this.Close();
                }
                return resp;
            }
            catch (Exception ex)
            {
                MainConfig.errorMessage("Não foi possível executar o comando solicitado.\n" + ex.Message,"Form Propostas");
                return DialogResult.Yes;
            }
            finally
            {
                Cursor.Current = Cursors.Default;
                formulario.call();
            }
        }