@Post
  @Path("/organizacao/salva")
  public void salva(
      Organizacao organizacao,
      OrganizacaoInfo organizacaoInfo,
      Localidade localidade,
      OrganizacaoLocalidade organizacaoLocalidade,
      TipoEndereco tipoEndereco) {

    String mensagem = "";

    try {

      if (this.organizacaoDao.buscaOrganizacaoByEmpNome(
              empresa.getEmpresa_id(), organizacao.getNome())
          == null) {

        organizacao.setCreated(dataAtual);
        organizacao.setUpdated(dataAtual);

        organizacao.setCreatedBy(usuario);
        organizacao.setUpdatedBy(usuario);

        organizacao.setChave(organizacao.getNome());
        organizacao.setDescricao(organizacao.getNome());

        organizacao.setEmpresa(empresa);

        organizacao.setIsActive(organizacao.getIsActive() == null ? false : true);

        this.organizacaoDao.beginTransaction();
        this.organizacaoDao.adiciona(organizacao);
        this.organizacaoDao.commit();

        OrganizacaoInfo oi = new OrganizacaoInfo();

        oi.setEmpresa(organizacao.getEmpresa());
        oi.setOrganizacao_id(organizacao.getOrganizacao_id());
        oi.setTipoOrganizacao(
            organizacaoInfo.getTipoOrganizacao().getTipoOrganizacao_id() == null
                ? null
                : organizacaoInfo.getTipoOrganizacao());
        // oi.setCalendario(organizacaoInfo.getCalendario().getCalendario_id() == null ? null :
        // organizacaoInfo.getCalendario());
        oi.setOrganizacaoPai(
            organizacaoInfo.getOrganizacaoPai().getOrganizacao_id() == null
                ? null
                : organizacaoInfo.getOrganizacaoPai());
        oi.setSupervisorOrganizacao(
            organizacaoInfo.getSupervisorOrganizacao().getFuncionario_id() == null
                ? null
                : organizacaoInfo.getSupervisorOrganizacao());
        oi.setChave(organizacao.getNome());
        oi.setNome(organizacao.getNome());
        oi.setDescricao(organizacao.getNome());
        oi.setNomeFantasia(organizacaoInfo.getNomeFantasia());
        oi.setDddFone1(organizacaoInfo.getDddFone1());
        oi.setTelefone1(organizacaoInfo.getTelefone1());
        oi.setDddFone2(organizacaoInfo.getDddFone2());
        oi.setTelefone2(organizacaoInfo.getTelefone2());
        oi.setDddFax(organizacaoInfo.getDddFax());
        oi.setFax(organizacaoInfo.getFax());
        oi.setEmail(organizacaoInfo.getEmail());
        oi.setIe(organizacaoInfo.getIe());
        oi.setCnpj(organizacaoInfo.getCnpj());
        oi.setContato(organizacaoInfo.getContato());

        oi.setCreated(dataAtual);
        oi.setUpdated(dataAtual);

        oi.setCreatedBy(usuario);
        oi.setUpdatedBy(usuario);

        oi.setIsActive(organizacao.getIsActive());

        if (this.organizacaoInfoDao.buscaOrganizacaoById(organizacao.getOrganizacao_id()) == null) {

          this.organizacaoInfoDao.beginTransaction();
          this.organizacaoInfoDao.adiciona(oi);
          this.organizacaoInfoDao.commit();
        }

        Localidade l = this.localidadeDao.buscaLocalidade(localidade.getCep());

        if (l.getLocalidade_id() == null) {

          Empresa empresa = new Empresa();
          Organizacao organizacao2 = new Organizacao();

          empresa.setEmpresa_id(1l);
          organizacao2.setOrganizacao_id(1l);

          localidade.setEmpresa(empresa);
          localidade.setOrganizacao(organizacao2);

          localidade.setCreated(dataAtual);
          localidade.setCreatedBy(usuario);
          localidade.setIsActive(true);

          try {

            this.localidadeDao.beginTransaction();
            this.localidadeDao.adiciona(localidade);
            this.localidadeDao.commit();

          } catch (Exception e) {

            this.localidadeDao.rollback();

            if (e.getCause().toString().indexOf("PK_LOCALIDADE") != -1) {
              mensagem = "Erro: Localidade " + localidade.getCep() + " já existente.";
            } else {
              mensagem = "Erro: Erro ao adicionar Localidade:";
            }
          }

        } else {

          localidade.setLocalidade_id(l.getLocalidade_id());
        }

        OrganizacaoLocalidade ol = new OrganizacaoLocalidade();

        ol.setEmpresa(empresa);
        ol.setOrganizacao(organizacao);
        ol.setLocalidade(localidade);
        ol.setTipoEndereco(tipoEndereco);
        ol.setNumero(organizacaoLocalidade.getNumero());
        ol.setComplemento(organizacaoLocalidade.getComplemento());
        ol.setPontoReferencia(organizacaoLocalidade.getPontoReferencia());

        ol.setCreated(dataAtual);
        ol.setUpdated(dataAtual);

        ol.setCreatedBy(usuario);
        ol.setUpdatedBy(usuario);

        ol.setIsActive(true);

        try {

          this.organizacaoLocalidadeDao.beginTransaction();
          this.organizacaoLocalidadeDao.adiciona(ol);
          this.organizacaoLocalidadeDao.commit();

        } catch (Exception e) {

          this.organizacaoLocalidadeDao.rollback();

          if (e.getCause().toString().indexOf("PK__PARCEIROLOCALIDADE") != -1) {
            mensagem = "Erro: Parceiro Localidade já existente.";
          } else {
            mensagem = "Erro: Erro ao adicionar Parceiro Localidade :";
          }
        }

        mensagem = "Organização adicionado com sucesso.";

      } else {

        mensagem = "Erro: Organização já cadastrado.";
      }

    } catch (Exception e) {

      mensagem = "Erro: Falha ao adicionar a Organização.";

    } finally {

      this.organizacaoDao.clear();
      this.organizacaoDao.close();
    }

    result.include("notice", mensagem);
    result.redirectTo(this).cadastro();
  }