public void EditarProdutoBancario(tb_prodbco entity, IDaoTransacao transacao = null)
        {
            _log.TraceMethodStart();

            var dao = _factory.GetDaoCorporativo <tb_prodbco>();

            if (entity.cod_empresa == null || entity.cod_empresa.Value <= 0)
            {
                throw new ApplicationException("Código da empresa inválido");
            }

            if (entity.cod_grproduto == null || entity.cod_grproduto.Value <= 0)
            {
                throw new ApplicationException("Código do grupo do produto inválido");
            }

            if (entity.cod_prodbco == null || entity.cod_prodbco.Value <= 0)
            {
                throw new ApplicationException("Código do produto inválido");
            }

            tb_empresa empresa = _empresaService.BuscarEmpresaPorCodigo(entity.cod_empresa.Value, transacao);

            if (empresa == null)
            {
                throw new ApplicationException("Empresa informada não cadastrada");
            }

            tb_grproduto grproduto = _grprodutoService.BuscarGrupoProdutoPorCodigo(entity.cod_empresa.Value, entity.cod_grproduto.Value, transacao);

            if (grproduto == null)
            {
                throw new ApplicationException("Grupo do produto informado não cadastrado");
            }

            string where = $" cod_empresa = {entity.cod_empresa} and cod_prodbco = {entity.cod_prodbco} ";

            var listaEntityBanco = dao.Obter(where);

            if (listaEntityBanco == null || !listaEntityBanco.Any())
            {
                throw new ApplicationException($"Dados informados não foram cadastrados - empresa: {entity.cod_empresa} e produto bancário: {entity.cod_prodbco} ");
            }

            var entityBanco = listaEntityBanco.First();

            entityBanco.abv_prodbco   = entity.abv_prodbco;
            entityBanco.des_prodbco   = entity.des_prodbco;
            entityBanco.cod_grproduto = entity.cod_grproduto;
            entityBanco.idc_replica   = entity.idc_replica;
            entityBanco.tip_produto   = entity.tip_produto;

            dao.Atualizar(entityBanco, where);

            _log.TraceMethodEnd();
        }
        public tb_grproduto BuscarGrupoProdutoPorCodigo(int cod_empresa, int cod_grproduto, IDaoTransacao transacao = null)
        {
            _log.TraceMethodStart();

            var dao = transacao == null?_factory.GetDaoCorporativo <tb_grproduto>() : _factory.GetDaoCorporativo <tb_grproduto>(transacao);

            tb_grproduto retorno = dao.ObterPrimeiro($" cod_empresa = {cod_empresa}  and cod_grproduto = {cod_grproduto} ");

            _log.TraceMethodEnd();
            return(retorno);
        }
        public tb_prodbco GravarProdutoBancario(tb_prodbco entity, IDaoTransacao transacao = null)
        {
            _log.TraceMethodStart();

            var dao = _factory.GetDaoCorporativo <tb_prodbco>();

            if (entity.cod_empresa == null || entity.cod_empresa.Value <= 0)
            {
                throw new ApplicationException("Código da empresa inválido");
            }

            if (entity.cod_grproduto == null || entity.cod_grproduto.Value <= 0)
            {
                throw new ApplicationException("Código do grupo do produto inválido");
            }

            if (entity.cod_prodbco == null || entity.cod_prodbco.Value <= 0)
            {
                throw new ApplicationException("Código do produto inválido");
            }

            tb_empresa empresa = _empresaService.BuscarEmpresaPorCodigo(entity.cod_empresa.Value, transacao);

            if (empresa == null)
            {
                throw new ApplicationException("Empresa informada não cadastrada");
            }

            tb_grproduto grproduto = _grprodutoService.BuscarGrupoProdutoPorCodigo(entity.cod_empresa.Value, entity.cod_grproduto.Value, transacao);

            if (grproduto == null)
            {
                throw new ApplicationException("Grupo do produto informado não cadastrado");
            }

            string where = $" cod_empresa = {entity.cod_empresa} and cod_prodbco = {entity.cod_prodbco} ";

            var entityBanco = dao.Obter(where);

            if (entityBanco != null && entityBanco.Any())
            {
                throw new ApplicationException($"Dados informados já foram cadastrados - empresa: {entity.cod_empresa} e produto bancário: {entity.cod_prodbco} ");
            }

            entity = dao.Inserir(entity);

            _log.TraceMethodEnd();
            return(entity);
        }