• Geral
  • Lançada versão v2.1

israel7souza

Só vi a resposta agora, já tinha feito funcionar aqui, quando abri o docker-compose eu vi que tinha errado nisso.
Já customizei o app do painel e estou terminando de customizar o app de triagem, mas empaquei na modificação do payload da triagem. Aproveitei que já haviam os campos para envio do nome e documento e consegui fazer o post, mas a resposta vem com erro:

Return value of Novosga\Entity\Cliente::getEndereco() must be an instance of Novosga\Entity\Endereco, null returned

Adicionei um campo de endereço na request (mas não dá pra ficar colocando endereço no autoatendimento), e já tentei enviar de tudo: array vazio, string vazia, objeto vazio, null, mas neste caso ele retorna:

You must define a type for Novosga\Entity\Cliente::$endereco.

Verifiquei no código do novoSGA e em Cliente.orm.yml a entidade Endereço está integrada à Entidade Cliente sem definição de tipo e também não diz se pode ser null:

    embedded:
        endereco:
            class: Novosga\Entity\Endereco
            columnPrefix: end_

No arquivo Endereco.orm.yml o tipo é definível como "integrável" e os campos podem ser nulos.

Novosga\Entity\Endereco:
    type: embeddable
    fields:
        pais:
            type: string
            length: 2
            nullable: true
        cep:
            type: string
            length: 25
            nullable: true
        estado:
            type: string
            length: 3
            nullable: true
        cidade:
            type: string
            length: 30
            nullable: true
        logradouro:
            type: string
            length: 60
            nullable: true
        numero:
            type: string
            length: 10
            nullable: true
        complemento:
            type: string
            length: 15
            nullable: true

A questão é: se a API permite a emissão de senhas sem os dados do cliente, por qual motivo ao adicionar o cliente é exigido a inserção de dados do endereço? (que aliás eu não vi em lugar algum do sistema em si)

Enfim, já que estou com esta demanda aqui no meu órgão, estou disposto a colaborar com o desenvolvimento do sistema na medida do possível, porém não tenho tanto conhecimento das regras de negócio como você, por isso busquei ajuda aqui. 😄

    Não consigo cadastrar novo usuario: [Lotação] Lotação é utilizada para definir o perfil de acesso do usuário nas unidades.
    Onde configuro este item de LOTAÇÃO na configuração de usuario?

      tiagoalves A questão é: se a API permite a emissão de senhas sem os dados do cliente, por qual motivo ao adicionar o cliente é exigido a inserção de dados do endereço? (que aliás eu não vi em lugar algum do sistema em si)

      Permite informação apenas do nome+documento para buscar ou inserir um cliente. Esse é o mesmo payload desde versões antigas quando nem existia a entidade cliente.

      Na versão gratuita não tem muita utilidade os demais campos, mas por exemplo existe um módulo comercial para visualizar e cadastrar clientes.

        tonyferreira "Lotação" é apenas a junção de "Unidade" + "Perfil", o usuário precisa ter ao menos um perfil em pelo menos uma unidade.

        tiagoalves

        Me da uma mão no painel também não consigo vocalizar, chamando só com sinal é super rápido, mas vocalizar não chama.

          rogeriolino Já tentei de diversas formas, inclusive já encontrei o código que provoca o erro:

          You must define a type for Novosga\Entity\Cliente::$endereco.

          É no arquivo Entity.Cliente.yml do Serializer, onde está:

          Novosga\Entity\Cliente:
              properties:
                  id:
                      read_only: true
                  nome:
                      type: string
                  documento:
                      type: string

          Deveria Estar:

          Novosga\Entity\Cliente:
              properties:
                  id:
                      read_only: true
                  nome:
                      type: string
                  documento:
                      type: string
                  endereco:
                      type: array

          O problema é que isso gera o seguinte erro:

          ReflectionProperty::getValue() expects parameter 1 to be object, array given

          E no serializer não tem o tipo "object" e eu não entendo muito de symfony nem de doctrine pra saber onde que ocorre essa conversão de array pra objeto. Além disso não há nenhum log sobre isso pra me ajudar a seguir o stack trace.

          israel7souza Sobre o Painel eu fiz apenas o MVP, preciso mudar algumas coisas na página de configuração do fork que eu fiz. Foi relativamente simples, em algumas horas já estava funcionando. Como sou de um órgão da segurança publica vou ter que mudar algumas coisas antes de publicar no github.

          Quando estiver validado, se possível posso fazer um PR no projeto original e lançar uma release nova.
          É claro que tá tudo bem desatualizado mas pelo menos algumas funções como a vocalização e o chamado pelo nome já estariam disponíveis.

          Update:
          Resolvi o problema (aparentemente)

          Ao invés de declarar o tipo específico (string, array, etc) no serializer, o mesmo deve ser a entidade (que é um objeto):

          Novosga\Entity\Cliente:
              properties:
                  id:
                      read_only: true
                  nome:
                      type: string
                  documento:
                      type: string
                  endereco:
                      type: Novosga\Entity\Endereco

          Nesse caso é só mandar um objeto vazio no lugar do endereço no JSON que ele vai retornar com a senha:

          {
          	"unidade": $unidade,
          	"servico": $servico,
          	"prioridade": $prioridade,
          	"cliente": {
          		"nome": "$nome",
          		"documento": "$documento",
          		"endereco": {}
          	}
          }

          Estou fazendo testes aqui mas aparentemente deu certo.

            israel7souza
            Qual ambiente tu subiu esse novoSGA? Docker? Windows?
            Já viu a questão da configuração do Mercure (no painel v2.1 não funciona se o mercure não estiver configurado direito).

            Testa na última release v2.0.1 (eu testei web e desktop e funcionou nas duas), o chamado vai demorar pra cair no painel, se chamar é problema no mercure mesmo pois essa versão usa o socket.io.

              tiagoalves

              Eu uso wamp server no Windows, para o novosga e para o mercure rodo um docker somente com docker.

              tiagoalves
              A release panel-app v2.0.1 não tem conexão com mercure.
              Somente a panel-app v2.1 foi realizado o Removing socketio, adding support for mercure.
              Demora muito a comunicação com a a versão 2.0.1 do painel
              Quando coloco somente para chamar pelo sons do painel de atenção, fica rápido demais a resposta é imediata, mas se eu coloco a vocalização não chama panel-app v2.1.

                israel7souza

                israel7souza Quando coloco somente para chamar pelo sons do painel de atenção, fica rápido demais a resposta é imediata, mas se eu coloco a vocalização não chama panel-app v2.1.

                Chama a senha no painel mas não vocaliza? Isso que você quer dizer?

                Eu implementei a vocalização de forma manual (não usei o checkbox).

                  5 dias depois

                  israel7souza Então, quando eu terminar a customização pro meu órgão vou fazer uma PR pra disponibilizar a versão com as funcionalidades.