Ejemplo n.º 1
0
 public TituloModelo ObterModelo(int modeloId)
 {
     return(_busModelo.Obter(modeloId));
 }
        public void Salvar(Titulo titulo)
        {
            try
            {
                titulo.Autor = new Funcionario()
                {
                    Id = User.FuncionarioId
                };
                titulo.CredenciadoId = User.FuncionarioId;

                if (titulo.Id <= 0)
                {
                    titulo.Situacao.Id      = (int)eTituloSituacao.EmCadastro;
                    titulo.DataCriacao.Data = DateTime.Now;
                }

                if (titulo.Modelo.Regra(eRegra.NumeracaoAutomatica))
                {
                    titulo.Numero.Inteiro = null;
                    titulo.Numero.Ano     = null;
                }

                //Carrega o Modelo e suas regras do modelo
                titulo.Modelo = _busModelo.Obter(titulo.Modelo.Id);

                IEspecificidadeBus busEsp = EspecificiadadeBusFactory.Criar(titulo.Modelo.Codigo.GetValueOrDefault());

                string jsonEsp = (titulo.Especificidade != null) ? titulo.Especificidade.Json : null;
                titulo.Especificidade = (Especificidade)busEsp.Deserialize(jsonEsp);
                titulo.Especificidade = titulo.ToEspecificidade();

                //Delega a validação de especificidade
                _validar.ValidarEspecificidade = () =>
                {
                    busEsp.Validar.Salvar(titulo.Especificidade);
                };

                if (_validar.Salvar(titulo))
                {
                    #region Arquivos/Diretorio

                    ArquivoBus _busArquivo = new ArquivoBus(eExecutorTipo.Interno);

                    if (!titulo.Modelo.Regra(eRegra.PdfGeradoSistema) && titulo.ArquivoPdf.Id == 0)
                    {
                        titulo.ArquivoPdf = _busArquivo.Copiar(titulo.ArquivoPdf);
                    }

                    if (titulo.Anexos != null && titulo.Anexos.Count > 0)
                    {
                        foreach (Anexo anexo in titulo.Anexos)
                        {
                            if (anexo.Arquivo.Id == 0)
                            {
                                anexo.Arquivo = _busArquivo.Copiar(anexo.Arquivo);
                            }
                        }
                    }

                    #endregion

                    using (BancoDeDados bancoDeDados = BancoDeDados.ObterInstancia())
                    {
                        GerenciadorTransacao.ObterIDAtual();
                        bancoDeDados.IniciarTransacao();

                        #region Arquivos/Banco

                        ArquivoDa arquivoDa = new ArquivoDa();

                        if (!titulo.Modelo.Regra(eRegra.PdfGeradoSistema))
                        {
                            arquivoDa.Salvar(titulo.ArquivoPdf, User.FuncionarioId, User.Name, User.Login, (int)eExecutorTipo.Interno, User.FuncionarioTid, bancoDeDados);
                        }

                        if (titulo.Anexos != null && titulo.Anexos.Count > 0)
                        {
                            foreach (Anexo anexo in titulo.Anexos)
                            {
                                if (anexo.Arquivo.Id == 0)
                                {
                                    arquivoDa.Salvar(anexo.Arquivo, User.FuncionarioId, User.Name, User.Login, (int)eExecutorTipo.Interno, User.FuncionarioTid, bancoDeDados);
                                }
                            }
                        }

                        #endregion

                        _da.Salvar(titulo, bancoDeDados);

                        //Atualiza os Ids em Especificidade
                        titulo.Especificidade = titulo.ToEspecificidade();
                        busEsp.Salvar(titulo.Especificidade, bancoDeDados);

                        //Trata quando o catch do busEsp.Salvar silencia o erro.
                        if (!Validacao.EhValido)
                        {
                            return;
                        }

                        bancoDeDados.Commit();
                    }

                    Validacao.Add(Mensagem.Titulo.Salvar);
                }
            }
            catch (Exception exc)
            {
                Validacao.AddErro(exc);
            }
        }