/// <summary> /// Método para buscar o código do fornecedor /// </summary> /// <returns>string</returns> internal static string BuscarCodigoFornecedor(Guid IdEmpresa) { // Objeto que recebe o retorno do método string retCodigoFornecedor = string.Empty; // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); System.Data.Objects.ObjectParameter objCodigoFornecedor = new System.Data.Objects.ObjectParameter("P_CODIGO", typeof(global::System.Int32)); context.RETORNAR_CODIGO(Contrato.Constantes.TIPO_COD_FORNECEDOR, IdEmpresa, objCodigoFornecedor); // Recupera o código do fornecedor retCodigoFornecedor = Util.RecuperaCodigo((int)objCodigoFornecedor.Value, Contrato.Constantes.TIPO_COD_FORNECEDOR); // retorna os dados return retCodigoFornecedor; }
/// <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; }
/// <summary> /// Método para salvar o cliente /// </summary> /// <param name="entradaCliente">Objeto com os dados do cliente</param> /// <returns>Contrato.RetornoCliente</returns> internal static Contrato.RetornoCliente SalvarCliente(Contrato.EntradaCliente entradaCliente) { // Objeto que recebe o retorno do método Contrato.RetornoCliente retCliente = new Contrato.RetornoCliente(); // Objeto que recebe o retorno da sessão Contrato.RetornoSessao retSessao = Negocio.Sessao.ValidarSessao(new Contrato.Sessao() { Login = entradaCliente.UsuarioLogado, Chave = entradaCliente.Chave }); // Verifica se o usuário está autenticado if (retSessao.Codigo == Contrato.Constantes.COD_RETORNO_SUCESSO) { // Verifica se as informações do cliente foram informadas string strValidacao = ValidarClientePreenchido(entradaCliente.Cliente); // Se existe algum erro if (strValidacao.Length > 0) { retCliente.Codigo = Contrato.Constantes.COD_FILTRO_VAZIO; retCliente.Mensagem = strValidacao; } else { // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); context.ContextOptions.LazyLoadingEnabled = true; // Busca o cliente no banco List<Dados.CLIENTE> lstClientes = (from c in context.T_CLIENTE where (c.COD_CLIENTE == entradaCliente.Cliente.Codigo && (entradaCliente.Cliente.Cpf_Cnpj != null || c.CPF_CNJP_CLIENTE == entradaCliente.Cliente.Cpf_Cnpj) && (entradaCliente.EmpresaLogada.Id == Guid.Empty || c.ID_EMPRESA == entradaCliente.EmpresaLogada.Id)) || (entradaCliente.Novo == null && entradaCliente.Cliente.Id == c.ID_CLIENTE) select c).ToList(); // Verifica se foi encontrado algum registro if (lstClientes.Count > 0 && entradaCliente.Novo != null && (bool)entradaCliente.Novo) { // Preenche o objeto de retorno retCliente.Codigo = Contrato.Constantes.COD_REGISTRO_DUPLICADO; retCliente.Mensagem = string.Format("O cliente de código '{0}' já existe!", lstClientes.First().COD_CLIENTE); } else { // Se existe o cliente if (lstClientes.Count > 0) { // Atualiza o cliente lstClientes.First().NOME_CLIENTE = entradaCliente.Cliente.Nome; lstClientes.First().CAIXA_ESCOLAR = entradaCliente.Cliente.CaixaEscolar; lstClientes.First().BOL_ATIVO = entradaCliente.Cliente.Ativo; lstClientes.First().BOL_PESSOA_FISICA = entradaCliente.Cliente.Tipo == Contrato.Enumeradores.Pessoa.Fisica ? true : false; lstClientes.First().CPF_CNJP_CLIENTE = entradaCliente.Cliente.Cpf_Cnpj; lstClientes.First().DES_EMAIL = entradaCliente.Cliente.Email; lstClientes.First().DES_INSCRICAO_ESTADUAL = entradaCliente.Cliente.InscricaoEstadual; lstClientes.First().NUM_TELEFONE = entradaCliente.Cliente.Telefone; lstClientes.First().NUM_CELULAR = entradaCliente.Cliente.Celular; lstClientes.First().DES_ENDERECO = entradaCliente.Cliente.Endereco; lstClientes.First().NUM_ENDERECO = entradaCliente.Cliente.Numero; lstClientes.First().CMP_ENDERECO = entradaCliente.Cliente.Complemento; lstClientes.First().NUM_CEP = entradaCliente.Cliente.Cep; lstClientes.First().DES_BAIRRO = entradaCliente.Cliente.Bairro; lstClientes.First().DES_CIDADE = entradaCliente.Cliente.Cidade; lstClientes.First().COD_ESTADO = entradaCliente.Cliente.Uf == null ? null : entradaCliente.Cliente.Uf.Codigo; lstClientes.First().DES_ESTADO = entradaCliente.Cliente.Uf == null ? null : entradaCliente.Cliente.Uf.Nome; lstClientes.First().DATA_ATUALIZACAO = DateTime.Now; lstClientes.First().LOGIN_USUARIO = entradaCliente.UsuarioLogado; lstClientes.First().ID_CLIENTE_MATRIZ = entradaCliente.Cliente.ClienteMatriz != null ? entradaCliente.Cliente.ClienteMatriz.Id: Guid.Empty; } else { // Recupera o código do cliente string codigoCliente = string.Empty; if (entradaCliente.Cliente.Codigo != string.Empty) codigoCliente = entradaCliente.Cliente.Codigo; else { System.Data.Objects.ObjectParameter objCodigoOrcamento = new System.Data.Objects.ObjectParameter("P_CODIGO", typeof(global::System.Int32)); context.RETORNAR_CODIGO(Contrato.Constantes.TIPO_COD_CLIENTE, entradaCliente.EmpresaLogada.Id, objCodigoOrcamento); codigoCliente = Util.RecuperaCodigo((int)objCodigoOrcamento.Value, Contrato.Constantes.TIPO_COD_CLIENTE); } // Cria o cliente Dados.CLIENTE tCliente = new Dados.CLIENTE(); tCliente.ID_CLIENTE = Guid.NewGuid(); tCliente.COD_CLIENTE = codigoCliente; tCliente.NOME_CLIENTE = entradaCliente.Cliente.Nome; tCliente.ID_EMPRESA = entradaCliente.EmpresaLogada.Id; tCliente.BOL_ATIVO = entradaCliente.Cliente.Ativo; tCliente.CAIXA_ESCOLAR = entradaCliente.Cliente.CaixaEscolar; tCliente.BOL_PESSOA_FISICA = entradaCliente.Cliente.Tipo == Contrato.Enumeradores.Pessoa.Fisica ? true : false; tCliente.CPF_CNJP_CLIENTE = entradaCliente.Cliente.Cpf_Cnpj; tCliente.DES_EMAIL = entradaCliente.Cliente.Email; tCliente.NUM_TELEFONE = entradaCliente.Cliente.Telefone; tCliente.NUM_CELULAR = entradaCliente.Cliente.Celular; tCliente.DES_INSCRICAO_ESTADUAL = entradaCliente.Cliente.InscricaoEstadual; tCliente.DES_ENDERECO = entradaCliente.Cliente.Endereco; tCliente.NUM_ENDERECO = entradaCliente.Cliente.Numero; tCliente.CMP_ENDERECO = entradaCliente.Cliente.Complemento; tCliente.NUM_CEP = entradaCliente.Cliente.Cep; tCliente.DES_BAIRRO = entradaCliente.Cliente.Bairro; tCliente.DES_CIDADE = entradaCliente.Cliente.Cidade; tCliente.COD_ESTADO = entradaCliente.Cliente.Uf == null ? null : entradaCliente.Cliente.Uf.Codigo; tCliente.DES_ESTADO = entradaCliente.Cliente.Uf == null ? null : entradaCliente.Cliente.Uf.Nome; tCliente.DATA_ATUALIZACAO = DateTime.Now; tCliente.LOGIN_USUARIO = entradaCliente.UsuarioLogado; tCliente.ID_CLIENTE_MATRIZ = entradaCliente.Cliente.ClienteMatriz != null ? entradaCliente.Cliente.ClienteMatriz.Id : Guid.Empty; // Adiciona o cliente na tabela context.AddToT_CLIENTE(tCliente); } // Salva as alterações context.SaveChanges(); // Preenche o objeto de retorno retCliente.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; } } } else { // retorna quando o usuário não está autenticado retCliente.Codigo = retSessao.Codigo; retCliente.Mensagem = retSessao.Mensagem; } // retorna dos dados return retCliente; }
/// <summary> /// Método para salvar o orcamento /// </summary> /// <param name="entradaOrcamento">Objeto com os dados do orcamento</param> /// <returns>Contrato.RetornoOrcamento</returns> internal static Contrato.RetornoOrcamento SalvarOrcamento(Contrato.EntradaOrcamento entradaOrcamento) { // Objeto que recebe o retorno do método Contrato.RetornoOrcamento retOrcamento = new Contrato.RetornoOrcamento(); // Objeto que recebe o retorno da sessão Contrato.RetornoSessao retSessao = Negocio.Sessao.ValidarSessao(new Contrato.Sessao() { Login = entradaOrcamento.UsuarioLogado, Chave = entradaOrcamento.Chave }); // Verifica se o usuário está autenticado if (retSessao.Codigo == Contrato.Constantes.COD_RETORNO_SUCESSO) { // Verifica se as informações do orcamento foram informadas string strValidacao = ValidarOrcamentoPreenchido(entradaOrcamento.Orcamento); // Se existe algum erro if (strValidacao.Length > 0) { retOrcamento.Codigo = Contrato.Constantes.COD_FILTRO_VAZIO; retOrcamento.Mensagem = strValidacao; } else { // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); context.ContextOptions.LazyLoadingEnabled = true; // Busca o orcamento no banco List<Dados.ORCAMENTO> lstOrcamentos = (from p in context.T_ORCAMENTO where (p.COD_ORCAMENTO == entradaOrcamento.Orcamento.Codigo && (entradaOrcamento.EmpresaLogada.Id == Guid.Empty || p.ID_EMPRESA == entradaOrcamento.EmpresaLogada.Id)) || (entradaOrcamento.Novo == null && entradaOrcamento.Orcamento.Id == p.ID_ORCAMENTO) select p).ToList(); // Verifica se foi encontrado algum registro if (lstOrcamentos.Count > 0 && entradaOrcamento.Novo != null && (bool)entradaOrcamento.Novo) { // Preenche o objeto de retorno retOrcamento.Codigo = Contrato.Constantes.COD_REGISTRO_DUPLICADO; retOrcamento.Mensagem = string.Format("O orcamento de código '{0}' já existe!", lstOrcamentos.First().COD_ORCAMENTO); } else { // Se existe o orcamento if (lstOrcamentos.Count > 0) { // Atualiza o orcamento lstOrcamentos.First().COD_ORCAMENTO = entradaOrcamento.Orcamento.Codigo; lstOrcamentos.First().DATA_ORCAMENTO = entradaOrcamento.Orcamento.Data; lstOrcamentos.First().ID_CLIENTE = entradaOrcamento.Orcamento.Cliente.Id; lstOrcamentos.First().ID_ESTADO_ORCAMENTO = entradaOrcamento.Orcamento.Estado.Id; lstOrcamentos.First().ID_USUARIO_VENDEDOR = entradaOrcamento.Orcamento.Vendedor.Id; lstOrcamentos.First().ID_USUARIO_RESPONSAVEL = entradaOrcamento.Orcamento.Responsavel.Id; lstOrcamentos.First().NUM_DESCONTO = entradaOrcamento.Orcamento.ValorDesconto; lstOrcamentos.First().NUM_PRAZO_ENTREGA = entradaOrcamento.Orcamento.PrazoEntrega; lstOrcamentos.First().NUM_VALIDADE_ORCAMENTO = entradaOrcamento.Orcamento.ValidadeOrcamento; lstOrcamentos.First().DATA_ATUALIZACAO = DateTime.Now; lstOrcamentos.First().LOGIN_USUARIO = entradaOrcamento.UsuarioLogado; // Apaga todos os itens que estão relacionados while (lstOrcamentos.First().T_ITEM.Count > 0) { context.T_ITEM.DeleteObject(lstOrcamentos.First().T_ITEM.First()); } // Verifica se existe algum item associado ao orçamento if (entradaOrcamento.Orcamento.Itens != null) { // Para cada item associado foreach (Contrato.Item item in entradaOrcamento.Orcamento.Itens) { Negocio.Item.SalvarItemOrcamento(lstOrcamentos.First(), entradaOrcamento.UsuarioLogado, item); } } } else { // Recupera o código do orçamento string codigoOrcamento = string.Empty; if (entradaOrcamento.Orcamento.Codigo != string.Empty) codigoOrcamento = entradaOrcamento.Orcamento.Codigo; else { System.Data.Objects.ObjectParameter objCodigoOrcamento = new System.Data.Objects.ObjectParameter("P_CODIGO", typeof(global::System.Int32)); context.RETORNAR_CODIGO(Contrato.Constantes.TIPO_COD_ORCAMENTO, entradaOrcamento.EmpresaLogada.Id, objCodigoOrcamento); codigoOrcamento = Util.RecuperaCodigo((int)objCodigoOrcamento.Value, Contrato.Constantes.TIPO_COD_ORCAMENTO); } // Cria o orcamento Dados.ORCAMENTO tOrcamento = new Dados.ORCAMENTO(); tOrcamento.ID_ORCAMENTO = Guid.NewGuid(); tOrcamento.COD_ORCAMENTO = codigoOrcamento; tOrcamento.DATA_ORCAMENTO = entradaOrcamento.Orcamento.Data; tOrcamento.ID_EMPRESA = entradaOrcamento.EmpresaLogada.Id; tOrcamento.ID_CLIENTE = entradaOrcamento.Orcamento.Cliente.Id; tOrcamento.ID_ESTADO_ORCAMENTO = entradaOrcamento.Orcamento.Estado.Id; tOrcamento.ID_USUARIO_VENDEDOR = entradaOrcamento.Orcamento.Vendedor.Id; tOrcamento.ID_USUARIO_RESPONSAVEL = entradaOrcamento.Orcamento.Responsavel.Id; tOrcamento.NUM_DESCONTO = entradaOrcamento.Orcamento.ValorDesconto; tOrcamento.NUM_PRAZO_ENTREGA = entradaOrcamento.Orcamento.PrazoEntrega; tOrcamento.NUM_VALIDADE_ORCAMENTO = entradaOrcamento.Orcamento.ValidadeOrcamento; tOrcamento.DATA_ATUALIZACAO = DateTime.Now; tOrcamento.LOGIN_USUARIO = entradaOrcamento.UsuarioLogado; // Verifica se existe algum item associado ao orçamento if (entradaOrcamento.Orcamento.Itens != null) { // Para cada item associado foreach (Contrato.Item item in entradaOrcamento.Orcamento.Itens) { Negocio.Item.SalvarItemOrcamento(tOrcamento, entradaOrcamento.UsuarioLogado, item); } } context.AddToT_ORCAMENTO(tOrcamento); } // Salva as alterações context.SaveChanges(); // Preenche o objeto de retorno retOrcamento.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; } } } else { // retorna quando o usuário não está autenticado retOrcamento.Codigo = retSessao.Codigo; retOrcamento.Mensagem = retSessao.Mensagem; } // retorna dos dados return retOrcamento; }
/// <summary> /// Método para salvar o produto /// </summary> /// <param name="entradaProduto">Objeto com os dados do produto</param> /// <returns>Contrato.RetornoProduto</returns> internal static Contrato.RetornoProduto SalvarProduto(Contrato.EntradaProduto entradaProduto) { // Objeto que recebe o retorno do método Contrato.RetornoProduto retProduto = new Contrato.RetornoProduto(); // Objeto que recebe o retorno da sessão Contrato.RetornoSessao retSessao = Negocio.Sessao.ValidarSessao(new Contrato.Sessao() { Login = entradaProduto.UsuarioLogado, Chave = entradaProduto.Chave }); // Verifica se o usuário está autenticado if (retSessao.Codigo == Contrato.Constantes.COD_RETORNO_SUCESSO) { // Verifica se as informações do produto foram informadas string strValidacao = ValidarProdutoPreenchido(entradaProduto.Produto); // Se existe algum erro if (strValidacao.Length > 0) { retProduto.Codigo = Contrato.Constantes.COD_FILTRO_VAZIO; retProduto.Mensagem = strValidacao; } else { // Loga no banco de dados Dados.BRASIL_DIDATICOS context = new Dados.BRASIL_DIDATICOS(); context.ContextOptions.LazyLoadingEnabled = true; // Busca o produto no banco List<Dados.PRODUTO> lstProdutos = (from p in context.T_PRODUTO where (p.COD_PRODUTO == entradaProduto.Produto.Codigo || (entradaProduto.Novo == null && entradaProduto.Produto.Id == p.ID_PRODUTO) || (entradaProduto.Novo.Value == true && p.COD_PRODUTO_FORNECEDOR == entradaProduto.Produto.CodigoFornecedor && p.COD_PRODUTO_FORNECEDOR != string.Empty && p.ID_FORNECEDOR == entradaProduto.Produto.Fornecedor.Id)) select p).ToList(); // Verifica se foi encontrado algum registro if (lstProdutos.Count > 0 && entradaProduto.Novo != null && (bool)entradaProduto.Novo) { // Preenche o objeto de retorno retProduto.Codigo = Contrato.Constantes.COD_REGISTRO_DUPLICADO; retProduto.Mensagem = string.Format("O produto de código '{0}' já existe!", lstProdutos.First().COD_PRODUTO); } else { // Se existe o produto if (lstProdutos.Count > 0) { // Atualiza o produto lstProdutos.First().NOME_PRODUTO = entradaProduto.Produto.Nome; lstProdutos.First().COD_BARRAS = entradaProduto.Produto.CodigoBarras; lstProdutos.First().NUM_QUANTIDADE = entradaProduto.Produto.Quantidade; lstProdutos.First().NUM_VALOR = entradaProduto.Produto.ValorBase; lstProdutos.First().NUM_VALOR_ATACADO = entradaProduto.Produto.ValorPercentagemAtacado; lstProdutos.First().NUM_VALOR_VAREJO = entradaProduto.Produto.ValorPercentagemVarejo; lstProdutos.First().COD_PRODUTO_FORNECEDOR = entradaProduto.Produto.CodigoFornecedor; lstProdutos.First().ID_FORNECEDOR = entradaProduto.Produto.Fornecedor.Id; lstProdutos.First().NCM_PRODUTO = entradaProduto.Produto.Ncm; lstProdutos.First().BOL_ATIVO = entradaProduto.Produto.Ativo; lstProdutos.First().DATA_ATUALIZACAO = DateTime.Now; lstProdutos.First().LOGIN_USUARIO = entradaProduto.UsuarioLogado; // Apaga todas as taxas que estão relacionados while (lstProdutos.First().T_PRODUTO_TAXA.Count > 0) { context.T_PRODUTO_TAXA.DeleteObject(lstProdutos.First().T_PRODUTO_TAXA.First()); } // Verifica se existe alguma taxa associada ao produto if (entradaProduto.Produto.Taxas != null) { // Para cada taxa associada foreach (Contrato.Taxa taxa in entradaProduto.Produto.Taxas) { Negocio.Taxa.SalvarTaxaProduto(lstProdutos.First(), entradaProduto.UsuarioLogado, taxa); } } // Apaga todas as unidades de medidas que estão relacionados while (lstProdutos.First().T_PRODUTO_UNIDADE_MEDIDA.Count > 0) { context.T_PRODUTO_UNIDADE_MEDIDA.DeleteObject(lstProdutos.First().T_PRODUTO_UNIDADE_MEDIDA.First()); } // Verifica se existe alguma unidade de medida associado ao produto if (entradaProduto.Produto.UnidadeMedidas != null) { // Para cada taxa associada foreach (Contrato.UnidadeMedida unidadeMedida in entradaProduto.Produto.UnidadeMedidas) { Negocio.UnidadeMedida.SalvarUnidadeMedidaProduto(lstProdutos.First(), entradaProduto.UsuarioLogado, unidadeMedida); } } } else { // Recupera o código do produto string codigoProduto = string.Empty; if (entradaProduto.Produto.Codigo != string.Empty) codigoProduto = entradaProduto.Produto.Codigo; else { System.Data.Objects.ObjectParameter objCodigoProduto = new System.Data.Objects.ObjectParameter("P_CODIGO", typeof(global::System.Int32)); context.RETORNAR_CODIGO(Contrato.Constantes.TIPO_COD_PRODUTO, entradaProduto.EmpresaLogada.Id, objCodigoProduto); codigoProduto = Util.RecuperaCodigo((int)objCodigoProduto.Value, Contrato.Constantes.TIPO_COD_PRODUTO); } // Cria o produto Dados.PRODUTO tProduto = new Dados.PRODUTO(); tProduto.ID_PRODUTO = Guid.NewGuid(); tProduto.COD_PRODUTO = codigoProduto; tProduto.COD_BARRAS = entradaProduto.Produto.CodigoBarras; tProduto.NOME_PRODUTO = entradaProduto.Produto.Nome; tProduto.COD_PRODUTO_FORNECEDOR = entradaProduto.Produto.CodigoFornecedor; tProduto.ID_FORNECEDOR = entradaProduto.Produto.Fornecedor.Id; tProduto.NCM_PRODUTO = entradaProduto.Produto.Ncm; tProduto.NUM_VALOR = entradaProduto.Produto.ValorBase; tProduto.NUM_VALOR_ATACADO = entradaProduto.Produto.ValorPercentagemAtacado; tProduto.NUM_VALOR_VAREJO = entradaProduto.Produto.ValorPercentagemVarejo; tProduto.NUM_QUANTIDADE = entradaProduto.Produto.Quantidade; tProduto.BOL_ATIVO = entradaProduto.Produto.Ativo; tProduto.DATA_ATUALIZACAO = DateTime.Now; tProduto.LOGIN_USUARIO = entradaProduto.UsuarioLogado; // Verifica se existe alguma taxa associada ao produto if (entradaProduto.Produto.Taxas != null) { // Para cada taxa associada foreach (Contrato.Taxa taxa in entradaProduto.Produto.Taxas) { Negocio.Taxa.SalvarTaxaProduto(tProduto, entradaProduto.UsuarioLogado, taxa); } } // Verifica se existe alguma unidade de medida associado ao produto if (entradaProduto.Produto.UnidadeMedidas != null) { // Para cada taxa associada foreach (Contrato.UnidadeMedida unidadeMedida in entradaProduto.Produto.UnidadeMedidas) { Negocio.UnidadeMedida.SalvarUnidadeMedidaProduto(lstProdutos.First(), entradaProduto.UsuarioLogado, unidadeMedida); } } context.AddToT_PRODUTO(tProduto); } // Salva as alterações context.SaveChanges(); // Preenche o objeto de retorno retProduto.Codigo = Contrato.Constantes.COD_RETORNO_SUCESSO; } } } else { // retorna quando o usuário não está autenticado retProduto.Codigo = retSessao.Codigo; retProduto.Mensagem = retSessao.Mensagem; } // retorna dos dados return retProduto; }