/// <summary> /// Método para salvar o fornecedor /// </summary> /// <param name="entradaFornecedor">Objeto com os dados do fornecedor</param> /// <returns>Contrato.RetornoFornecedor</returns> internal static Contrato.RetornoFornecedor SalvarFornecedor(Contrato.EntradaFornecedor entradaFornecedor) { // Objeto que recebe o retorno do método Contrato.RetornoFornecedor retFornecedor = new Contrato.RetornoFornecedor(); // Objeto que recebe o retorno da sessão Contrato.RetornoSessao retSessao = Negocio.Sessao.ValidarSessao(new Contrato.Sessao() { Login = entradaFornecedor.UsuarioLogado, Chave = entradaFornecedor.Chave }); // Verifica se o usuário está autenticado if (retSessao.Codigo == Contrato.Constantes.COD_RETORNO_SUCESSO) { // Verifica se as informações do fornecedor foram informadas string strValidacao = ValidarFornecedorPreenchido(entradaFornecedor.Fornecedor); // Se existe algum erro if (strValidacao.Length > 0) { retFornecedor.Codigo = Contrato.Constantes.COD_FILTRO_VAZIO; retFornecedor.Mensagem = strValidacao; } else { // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); context.ContextOptions.LazyLoadingEnabled = true; // Busca o fornecedor no banco List<Dados.FORNECEDOR> lstFornecedores = (from f in context.T_FORNECEDOR where (f.COD_FORNECEDOR == entradaFornecedor.Fornecedor.Codigo && (entradaFornecedor.Fornecedor.Cpf_Cnpj != null || f.CPF_CNJP_FORNECEDOR == entradaFornecedor.Fornecedor.Cpf_Cnpj) && (entradaFornecedor.EmpresaLogada.Id == Guid.Empty || f.ID_EMPRESA == entradaFornecedor.EmpresaLogada.Id)) || (entradaFornecedor.Novo == null && entradaFornecedor.Fornecedor.Id == f.ID_FORNECEDOR) select f).ToList(); // Verifica se foi encontrado algum registro if (lstFornecedores.Count > 0 && entradaFornecedor.Novo != null && (bool)entradaFornecedor.Novo) { // Preenche o objeto de retorno retFornecedor.Codigo = Contrato.Constantes.COD_REGISTRO_DUPLICADO; retFornecedor.Mensagem = string.Format("O fornecedor de código '{0}' já existe!", lstFornecedores.First().COD_FORNECEDOR); } else { // Se existe o fornecedor if (lstFornecedores.Count > 0) { bool atualizarProdutos = false; // Atualiza o fornecedor lstFornecedores.First().NOME_FORNECEDOR = entradaFornecedor.Fornecedor.Nome; lstFornecedores.First().BOL_PESSOA_FISICA = entradaFornecedor.Fornecedor.Tipo == Contrato.Enumeradores.Pessoa.Fisica ? true : false; lstFornecedores.First().CPF_CNJP_FORNECEDOR = entradaFornecedor.Fornecedor.Cpf_Cnpj; lstFornecedores.First().NUM_VALOR_ATACADO = entradaFornecedor.Fornecedor.ValorPercentagemAtacado; lstFornecedores.First().NUM_VALOR_VAREJO = entradaFornecedor.Fornecedor.ValorPercentagemVarejo; lstFornecedores.First().BOL_ATIVO = (bool)entradaFornecedor.Fornecedor.Ativo; lstFornecedores.First().DATA_ATUALIZACAO = DateTime.Now; lstFornecedores.First().LOGIN_USUARIO = entradaFornecedor.UsuarioLogado; // verifica se o fornecedor foi desativado atualizarProdutos = (bool)entradaFornecedor.Fornecedor.Ativo == false; // Verifica se é para atualizar os produtos if (!atualizarProdutos) // verifica se a quantidade de taxas foi alterada atualizarProdutos = (entradaFornecedor.Fornecedor.Taxas == null && lstFornecedores.First().T_FORNECEDOR_TAXA.Count > 0) || (entradaFornecedor.Fornecedor.Taxas != null && lstFornecedores.First().T_FORNECEDOR_TAXA.Count != entradaFornecedor.Fornecedor.Taxas.Count); // Verifica se é para atualizar os produtos if (entradaFornecedor.Fornecedor.Taxas != null && !atualizarProdutos) // Para cada taxa existente foreach (Contrato.Taxa t in entradaFornecedor.Fornecedor.Taxas) { // Verifica se é para atualizar os produtos if (!atualizarProdutos) // Verifica se alguma informação da taxa foi atualizada atualizarProdutos = (from ft in lstFornecedores.First().T_FORNECEDOR_TAXA where ft.ID_TAXA == t.Id && (ft.NUM_VALOR != t.Valor || ft.ORD_PRIORIDADE != t.Prioridade) select ft).Count() > 0; else break; } // Apaga todas as taxas que estão relacionadas ao fornecedor while (lstFornecedores.First().T_FORNECEDOR_TAXA.Count > 0) { context.T_FORNECEDOR_TAXA.DeleteObject(lstFornecedores.First().T_FORNECEDOR_TAXA.First()); } // Preenche as taxas do fornecedor PreencherTaxaFornecedor(entradaFornecedor, lstFornecedores.First()); // Verifica se é para atualizar os produtos if (atualizarProdutos) // Atualiza o valor das taxas nos produtos SalvarProdutosFornecedor(entradaFornecedor); } else { // Recupera o código do cliente string codigoFornecedor = string.Empty; if (entradaFornecedor.Fornecedor.Codigo != string.Empty) codigoFornecedor = entradaFornecedor.Fornecedor.Codigo; else { System.Data.Objects.ObjectParameter objCodigoFornecedor = new System.Data.Objects.ObjectParameter("P_CODIGO", typeof(global::System.Int32)); context.RETORNAR_CODIGO(Contrato.Constantes.TIPO_COD_FORNECEDOR, entradaFornecedor.EmpresaLogada.Id, objCodigoFornecedor); codigoFornecedor = Util.RecuperaCodigo((int)objCodigoFornecedor.Value, Contrato.Constantes.TIPO_COD_FORNECEDOR); } // Cria o fornecedor Dados.FORNECEDOR tFornecedor = new Dados.FORNECEDOR(); tFornecedor.ID_FORNECEDOR = Guid.NewGuid(); tFornecedor.COD_FORNECEDOR = codigoFornecedor; tFornecedor.NOME_FORNECEDOR = entradaFornecedor.Fornecedor.Nome; tFornecedor.ID_EMPRESA = entradaFornecedor.EmpresaLogada.Id; tFornecedor.BOL_PESSOA_FISICA = entradaFornecedor.Fornecedor.Tipo == Contrato.Enumeradores.Pessoa.Fisica ? true : false; tFornecedor.CPF_CNJP_FORNECEDOR = entradaFornecedor.Fornecedor.Cpf_Cnpj; tFornecedor.NUM_VALOR_ATACADO = entradaFornecedor.Fornecedor.ValorPercentagemAtacado; tFornecedor.NUM_VALOR_VAREJO = entradaFornecedor.Fornecedor.ValorPercentagemVarejo; tFornecedor.BOL_ATIVO = (bool)entradaFornecedor.Fornecedor.Ativo; tFornecedor.DATA_ATUALIZACAO = DateTime.Now; tFornecedor.LOGIN_USUARIO = entradaFornecedor.UsuarioLogado; // Preenche as taxas do fornecedor PreencherTaxaFornecedor(entradaFornecedor, tFornecedor); // Adiciona o fornecedor na tabela context.AddToT_FORNECEDOR(tFornecedor); } // Salva as alterações context.SaveChanges(); // Preenche o objeto de retorno retFornecedor.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; } } } else { // retorna quando o usuário não está autenticado retFornecedor.Codigo = retSessao.Codigo; retFornecedor.Mensagem = retSessao.Mensagem; } // retorna dos dados return retFornecedor; }