public void AtualizeProcessoAposLeituraDaRevista(IProcessoDePatente processoDePatente)
        {
            ServerUtils.setCredencial(_Credencial);

            var mapeadorDeProcessoDePatente = FabricaGenerica.GetInstancia().CrieObjeto<IMapeadorDeProcessoDePatente>();

            try
            {
                ServerUtils.BeginTransaction();
                VerifiqueSeDespachoDesativaProcesso(processoDePatente);
                mapeadorDeProcessoDePatente.Modificar(processoDePatente);
                ServerUtils.CommitTransaction();
            }
            catch
            {
                ServerUtils.RollbackTransaction();
                throw;
            }
            finally
            {
                ServerUtils.libereRecursos();
            }
        }
        public void Inserir(IProcessoDePatente processoDePatente)
        {
            ServerUtils.setCredencial(_Credencial);

            var mapeadorPatente = FabricaGenerica.GetInstancia().CrieObjeto<IMapeadorDePatente>();
            var mapeadorDeProcessoDePatente = FabricaGenerica.GetInstancia().CrieObjeto<IMapeadorDeProcessoDePatente>();

            try
            {
                ServerUtils.BeginTransaction();
                mapeadorPatente.Insira(processoDePatente.Patente);
                mapeadorDeProcessoDePatente.Inserir(processoDePatente);
                ServerUtils.CommitTransaction();
            }
            catch
            {
                ServerUtils.RollbackTransaction();
                throw;
            }
            finally
            {
                ServerUtils.libereRecursos();
            }
        }
        private PdfPTable ObtenhaTabelaDadosDoCliente(IProcessoDePatente processoDePatente, string nomeDoCliente)
        {
            float[] larguraColunas = { 25, 15, 10, 10, 10, 5, 5 };
            var tabelaCliente = new PdfPTable(larguraColunas);
            tabelaCliente.DefaultCell.Border = Rectangle.NO_BORDER;

            var celulaCliente = new PdfPCell(new Phrase(nomeDoCliente, _Fonte1));
            celulaCliente.HorizontalAlignment = Cell.ALIGN_LEFT;
            celulaCliente.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaCliente.Border = 0;
            tabelaCliente.AddCell(celulaCliente);

            var celulaProcesso = new PdfPCell(new Phrase(processoDePatente.NumeroDoProcessoFormatado, _Fonte1));
            celulaProcesso.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaProcesso.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaProcesso.Border = 0;
            tabelaCliente.AddCell(celulaProcesso);

            var celulaDeposito = new PdfPCell(new Phrase(processoDePatente.DataDoDeposito.HasValue && !processoDePatente.DataDoDeposito.Value.Equals(DateTime.MinValue) ?
                                                         processoDePatente.DataDoDeposito.Value.ToString("dd/MM/yyyy") : "", _Fonte1));
            celulaDeposito.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaDeposito.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaDeposito.Border = 0;
            tabelaCliente.AddCell(celulaDeposito);

            var celulaConcessao = new PdfPCell(new Phrase(processoDePatente.DataDaConcessao.HasValue && !processoDePatente.DataDaConcessao.Value.Equals(DateTime.MinValue) ?
                                                          processoDePatente.DataDaConcessao.Value.ToString("dd/MM/yyyy") : "", _Fonte1));
            celulaConcessao.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaConcessao.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaConcessao.Border = 0;
            tabelaCliente.AddCell(celulaConcessao);

            var celulaVigencia = new PdfPCell(new Phrase(processoDePatente.DataDaVigencia.HasValue && !processoDePatente.DataDaVigencia.Value.Equals(DateTime.MinValue) ?
                                                         processoDePatente.DataDaVigencia.Value.ToString("dd/MM/yyyy") : "", _Fonte1));
            celulaVigencia.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaVigencia.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaVigencia.Border = 0;
            tabelaCliente.AddCell(celulaVigencia);

            var celulaDespacho = new PdfPCell(new Phrase(processoDePatente.Despacho != null  ? processoDePatente.Despacho.Codigo : "", _Fonte1));
            celulaDespacho.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaDespacho.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaDespacho.Border = 0;
            tabelaCliente.AddCell(celulaDespacho);

            var celulaAtivo = new PdfPCell(new Phrase(processoDePatente.Ativo ? "SIM" : "NÂO", _Fonte1));
            celulaAtivo.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaAtivo.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaAtivo.Border = 0;
            tabelaCliente.AddCell(celulaAtivo);

            return tabelaCliente;
        }
        private void MostraDadosDoEmailParaPatente(long id , bool processaTemplateDespacho)
        {
            pnlEscolhaDeDestinariosDeMarca.Visible = false;
            pnlEscolhaDeDestinatoriosPatente.Visible = true;

            using (var servico = FabricaGenerica.GetInstancia().CrieObjeto<IServicoDeProcessoDePatente>())
            {
                var processo = servico.Obtenha(id);

                if (processo == null)
                {
                    ScriptManager.RegisterClientScriptBlock(this, GetType(), Guid.NewGuid().ToString(),
                                                           UtilidadesWeb.MostraMensagemDeInconsitencia("O processo de patente não existe no Banco de Dados."),
                                                           false);
                    return;
                }

                ProcessoDePatente = processo;

                if (processaTemplateDespacho)
                {

                    if (processo.Despacho == null)
                        ScriptManager.RegisterClientScriptBlock(this, GetType(), Guid.NewGuid().ToString(),
                                                                UtilidadesWeb.MostraMensagemDeInconsitencia(
                                                                    "O processo de patente ainda não possui despacho cadastrado. O corpo do e-mail não será preenchido automaticamente pelo template vinculado ao despacho."),
                                                                false);
                    else
                    {
                        if (processo.Despacho.TemplateDeEmail == null)
                            ScriptManager.RegisterClientScriptBlock(this, GetType(), Guid.NewGuid().ToString(),
                                                                    UtilidadesWeb.MostraMensagemDeInconsitencia(
                                                                        "O despacho do processo de patente não possui template de e-mail cadastrado. O corpo do e-mail não será preenchido automaticamente pelo template vinculado ao despacho."),
                                                                    false);
                        else
                            ctrlTemplateDeEmail.TextoDoTemplate = processo.Despacho.TemplateDeEmail.Template;
                    }
                }

            }
        }
        private void VerifiqueSeDespachoDesativaProcesso(IProcessoDePatente processo)
        {
            if (processo.Despacho == null) return;

            if (processo.Despacho.DesativaProcesso)
                processo.Ativo = false;
        }
        private void MostreProcessoDePatente(IProcessoDePatente processoDePatente)
        {
            ViewState[CHAVE_ID_PROCESSO_DE_PATENTE] = processoDePatente.IdProcessoDePatente;
            txtProcesso.Text = processoDePatente.Processo;
            txtDataDeCadastro.SelectedDate = processoDePatente.DataDoCadastro != DateTime.MinValue ? processoDePatente.DataDoCadastro : (DateTime?) null;
            txtDataDeConcessao.SelectedDate = processoDePatente.DataDaConcessao != DateTime.MinValue ? processoDePatente.DataDaConcessao : null;
            txtDataDePublicacao.SelectedDate = processoDePatente.DataDaPublicacao != DateTime.MinValue ? processoDePatente.DataDaPublicacao : null;
            txtDataDoDeposito.SelectedDate = processoDePatente.DataDoDeposito != DateTime.MinValue ? processoDePatente.DataDoDeposito : null;
            txtDataDaVigencia.SelectedDate = processoDePatente.DataDaVigencia != DateTime.MinValue ? processoDePatente.DataDaVigencia : null;
            txtDataDoExame.SelectedDate = processoDePatente.DataDoExame;
            rblProcessoEhDeTerceiro.SelectedValue = processoDePatente.ProcessoEhDeTerceiro ? "1" : "0";

            if (processoDePatente.Procurador != null)
            {
                ctrlProcurador.ProcuradorSelecionado = processoDePatente.Procurador;
                ctrlProcurador.Nome = processoDePatente.Procurador.Pessoa.Nome;
            }

            rblProcessoEhEstrangeiro.SelectedValue = processoDePatente.ProcessoEhEstrangeiro ? "1" : "0";
            rblEstaAtivo.SelectedValue = processoDePatente.Ativo ? "1" : "0";

            if (processoDePatente.Pasta != null)
            {
                ctrlPasta.PastaSelecionada = processoDePatente.Pasta;
                ctrlPasta.Codigo = processoDePatente.Pasta.Codigo;
            }

            if (processoDePatente.Despacho != null)
                MostreDespacho(processoDePatente.Despacho);

            if (processoDePatente.PCT != null)
            {
                rblEHPCT.SelectedValue = "1";
                txtNumeroPCT.Text = processoDePatente.PCT.Numero;
                txtNumeroPCTWO.Text = processoDePatente.PCT.NumeroWO;
                txtDataDaPublicacaoPCT.SelectedDate = processoDePatente.PCT.DataDaPublicacao;
                txtDataDoDepositoPCT.SelectedDate = processoDePatente.PCT.DataDoDeposito;
            }

            ctrlPaisProcesso.PaisSelecionado = processoDePatente.Pais;
            ctrlPaisProcesso.CarreguePaisSelecionado();

            using (var servico = FabricaGenerica.GetInstancia().CrieObjeto<IServicoDeRevistaDePatente>())
            {
                Publicacoes = servico.ObtenhaPublicacoes(processoDePatente.NumeroDoProcessoFormatado);
                grdPublicacoes.DataSource = Publicacoes;
                grdPublicacoes.DataBind();
            }

            ExibaPatenteSelecionada(processoDePatente.Patente);
        }
        private void AtualizeDespachoNoProcesso(string codigoDoDespacho, IProcessoDePatente processoDePatente)
        {
            if (string.IsNullOrEmpty(codigoDoDespacho)) return;

            IDespachoDePatentes despacho;

            using (var servicoDespacho = FabricaGenerica.GetInstancia().CrieObjeto<IServicoDeDespachoDePatentes>())
                despacho = servicoDespacho.ObtenhaDespachoPeloCodigo(codigoDoDespacho);

            if (despacho != null)
                processoDePatente.Despacho = despacho;
        }
        private PdfPTable ObtenhaTabelaDadosDaPatente(IProcessoDePatente processoDePatente, string nomeDoCliente)
        {
            float[] larguraColunas = { 30, 15, 25, 10, 10, 10 };
            var tabelaCliente = new PdfPTable(larguraColunas);
            tabelaCliente.DefaultCell.Border = Rectangle.NO_BORDER;

            var celulaCliente = new PdfPCell(new Phrase(nomeDoCliente, _Fonte1));
            celulaCliente.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaCliente.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaCliente.Border = 0;
            tabelaCliente.AddCell(celulaCliente);

            var celulaProcesso = new PdfPCell(new Phrase(processoDePatente.NumeroDoProcessoFormatado, _Fonte1));
            celulaProcesso.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaProcesso.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaProcesso.Border = 0;
            tabelaCliente.AddCell(celulaProcesso);

            var celulaReferencia = new PdfPCell(new Phrase(ObtenhaReferenciaFormatada(processoDePatente.Patente.TituloPatente), _Fonte1));
            celulaReferencia.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaReferencia.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaReferencia.Border = 0;
            tabelaCliente.AddCell(celulaReferencia);

            var celulaDeposito = new PdfPCell(new Phrase(processoDePatente.DataDoDeposito.HasValue ?
                                                         processoDePatente.DataDoDeposito.Value.ToString("dd/MM/yyyy") : "", _Fonte1));
            celulaDeposito.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaDeposito.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaDeposito.Border = 0;
            tabelaCliente.AddCell(celulaDeposito);

            var celulaDataDoVencimento = new PdfPCell(new Phrase(processoDePatente.Patente.Manutencao.DataDaProximaManutencao.HasValue ?
                                                          processoDePatente.Patente.Manutencao.DataDaProximaManutencao.Value.ToString("dd/MM/yyyy") : "", _Fonte1));
            celulaDataDoVencimento.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaDataDoVencimento.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaDataDoVencimento.Border = 0;
            tabelaCliente.AddCell(celulaDataDoVencimento);

            var celulaValor = new PdfPCell(new Phrase("R$ " + string.Format("{0:N2}", processoDePatente.Patente.Manutencao.ObtenhaValorRealEmEspecie()), _Fonte1));
            celulaValor.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaValor.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaValor.Border = 0;
            tabelaCliente.AddCell(celulaValor);

            return tabelaCliente;
        }
        private PdfPTable ObtenhaTabelaDadosDoProcesso(IProcessoDePatente processoDePatente)
        {
            float[] larguraColunas = { 20, 10, 50, 20 };
            var tabelaCliente = new PdfPTable(larguraColunas);
            tabelaCliente.DefaultCell.Border = Rectangle.NO_BORDER;

            var celulaCliente = new PdfPCell(new Phrase(processoDePatente.NumeroDoProcessoFormatado, _Fonte1));
            celulaCliente.HorizontalAlignment = Cell.ALIGN_LEFT;
            celulaCliente.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaCliente.Border = 0;
            tabelaCliente.AddCell(celulaCliente);

            var celulaProcesso = new PdfPCell(new Phrase(processoDePatente.Patente.NaturezaPatente.IdNaturezaPatente.HasValue ?
                processoDePatente.Patente.NaturezaPatente.IdNaturezaPatente.Value.ToString() : "", _Fonte1));
            celulaProcesso.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaProcesso.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaProcesso.Border = 0;
            tabelaCliente.AddCell(celulaProcesso);

            var celulaConcessao = new PdfPCell(new Phrase(ObtenhaReferenciaFormatada(processoDePatente.Patente.TituloPatente), _Fonte1));
            celulaConcessao.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaConcessao.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaConcessao.Border = 0;
            tabelaCliente.AddCell(celulaConcessao);

            var celulaDeposito = new PdfPCell(new Phrase(processoDePatente.DataDoDeposito.HasValue && !processoDePatente.DataDoDeposito.Value.Equals(DateTime.MinValue) ?
                                                         processoDePatente.DataDoDeposito.Value.ToString("dd/MM/yyyy") : "", _Fonte1));
            celulaDeposito.HorizontalAlignment = Cell.ALIGN_CENTER;
            celulaDeposito.VerticalAlignment = Cell.ALIGN_CENTER;
            celulaDeposito.Border = 0;
            tabelaCliente.AddCell(celulaDeposito);

            return tabelaCliente;
        }