Manuais
PHC GO Workshop Framework PHC GO - Regras de Negócio (Casos Práticos)
 
Neste tópico, iremos ver vários exemplos de casos práticos do Workshop de Regras de Negócio.

Em primeiro lugar, vamos criar um Add-on no Portfólio de add-ons chamado Workshop e com o plano mínimo Advanced. Depois, todas as peças da Framework que sejam desenvolvidas, devem ser adicionadas a este add-on.



Casos Práticos



  1. A Pedido
  2. Ação no ecrã de Clientes que preenche o campo de Observações com um texto escolhido por si.

    Como Fazer?

    1. Criar uma Regra de Negócio para a Entidade Clientes com o Tipo de Código A pedido. No Código onRunCode colocar:

    2. itemVO.obs = "Exemplo do preenchimento automático"
      listMsg.AddRange(save(itemVO))

      If not listMsg.HasMsgErrors() then
      listMsg.add(New MsgSuccess("Foi gravado"))
      end if



    3. Criar uma extensão de entidade para a entidade Clientes



    4. Criar a ação para atualizar o campo Observações



  3. Ao Alterar
  4. Concatenar no campo Observações com o seguinte texto “(Data e hora atual) - O (nome do utilizador) colocou em estado de alteração”

    Como Fazer?

    1. Criar uma Regra de negócio ao alterar com o seguinte código:

    itemVO.obs = itemVO.obs + vbCr + sdk.Dates.timezoneDate + " - O " + sdk.User.getCurrentInfo.username + " colocou em estado de alteração"



  5. Ao Apagar
  6. Só pode apagar Clientes em que o utilizador logado é o vendedor daquele Cliente

    Como Fazer?

    1. Criar uma Regra de negócio ao alterar com o seguinte código:

    if itemVO.vendedor <> sdk.User.getCurrentInfo.vendedor
    listMsg.add(new MsgError("Apenas podes apagar os teus clientes"))
    end if



  7. Ao Gravar
  8. Obrigar a preencher o Vendedor se o utilizador que está a introduzir o Cliente tem o vendedor preenchido na sua ficha de utilizador.

    Como Fazer?

    1. Criar uma Regra de negócio ao gravar com o seguinte código:

    if not isVoid(sdk.User.getCurrentInfo.vendedor) and isVoid(itemVO.vendedor)
    listMsg.add(New MsgError("Tem que preencher o vendedor"))
    End if



  9. Ao Introduzir
  10. Preencher automaticamente o vendedor no Cliente com o vendedor do utilizador.

    Como Fazer?

    1. Criar uma Regra de negócio ao introduzir com o seguinte código:

    itemVO.vendedor = SDK.User.getCurrentInfo.vendedor 
    itemVO.vendnm = SDK.User.getCurrentInfo.vendnm


  11. Ao introduzir com Referência
  12. A partir de uma Compra, abrir um Dossier de Encomenda de Fornecedor preenchendo o nome do Fornecedor

    Como Fazer?

    1. Criar uma Extensão de ecrã e entidade para as Compras


    2. Criar uma ação para criar a Encomenda a Fornecedor

    3. Criar uma Regra de negócio ao introduzircom o seguinte código:

    itemVO.no = oriitemVO.no 
    actEntity(itemVO)

  13. Ao Sincronizar
  14. Nos Artigos, ao preencher a referência, apresentar uma mensagem ao utilizador a indicar com o valor da referência

    Como Fazer?

    1. Criar uma Regra de negócio ao sincronizar com o seguinte código:

    ' valida se há alguma coisa alterada 
    Select Case changedItems.First.baseType
    ' valida se o objeto alterado foi a entidade de pedidos
    Case GetType(stVO)
    Dim item As stVO = Nothing
    Dim itemRefChanged = changedItems.getChangedItemByField(item, "ref")


    'se foi alterado então vamos analisar o conteudo
    If itemRefChanged IsNot Nothing
    listMsg.Add(New MsgInfo("Referência: "+masterVO.ref ))
    end if
    end Select

  15. Após Gravar
  16. Enviar um e-mail para o utilizador administrador que foi criado um novo cliente

    Como Fazer?

    1. Criar uma Regra de negócio ao gravar com o seguinte código:

    sdk.Email.send(sdk.User.getCurrentInfo.email,"eteixeira@phcsoftware.com","Cliente Novo","Foi criado o cliente "+itemVO.nome,false)



  17. Ao copiar linhas
    Ao copiar linhas de um documento de origem para um documento de destino serem exibidas mensagens de sucesso das linhas copiadas.

    Como fazer?
    1. No campo Entidade selecionar a entidade de destino por exemplo Faturação, (ItemVO)
    2. No campo Tipo de código selecionar Ao copiar linhas
    3. No campo Entidade de origem selecionar a entidade de origem, por exemplo Dossiers, (oriItemVO)
    4. collections - são as linhas copiadas
    5. Inserir o seguinte código de exemplo
    6. Gravar a regra de negocio e associar ao add-on
      For Each coll As FiVO In collections
      listMsg.Add(New MsgSuccess("A copiar a referencia com origem em Dossiers " + coll.ref))
      Next


    Casos Práticos - Avançado




    1. A Pedido
    2. Criar uma ação para o ecrã de Fatura “Adicione um adufe” que adiciona uma linha com a referência A001

      Como Fazer

      1. Criar uma extensão de entidade para a Faturação


      2. Criar uma Regra de negócio ao gravar com o seguinte código:

      3. Dim fi as FIVO = FIVO.getNewInstance(of FIVO) 
        fi.ref = "A001"
        fi.qtt = 1

        itemVO.fis.add(fi)
        actEntity(itemVO)

        listMsg.AddRange(save(itemVO))



      4. Criar uma ação para executar a Regra de Negócio

    3. Ao Gravar
    4. Na fatura, criar um novo campo nas linhas com o total da linha com IVA. Ao gravar, preencher esse campo somando o valor liquido com o valor do IVA.

      Como Fazer

      1. Criar uma Personalização de ecrã e entidade para a Faturação

      2. Adicionar uma Coluna chamada Total

      3. Criar uma Regra de Negócio ao gravar com o seguinte Código:



    5. Ao introduzir com Referência
    6. A partir de uma Compra, abrir um Dossier de Encomenda de Fornecedor preenchendo o nome do Fornecedor e copiando as linhas

      Como Fazer?

      1. Criar uma Regra de negócio ao introduzir com referência com o seguinte código:

      itemVO.no = oriitemVO.no 

      dim itembi as BiVO
      For each linhaCompra as FnVO in oriItemVO.fns
      itembi = FrameworkFiVO.getNewInstance(of BiVO)
      itembi.ref = linhaCompra.ref
      itembi.qtt = linhaCompra.qtt
      itemVO.bis.add(itembi)
      Next
      actEntity(itemVO)



    7. Ao sincronizar
    8. Nos artigos, ao preencher a referência, preencher o Código de barras com as 3 primeiras letras da referência, mais 6 digitos com um número sequencial.

      Como Fazer?

      1. Criar uma Regra de negócio ao sincronizar com o seguinte código:

      ' valida se há alguma coisa alterada 
      Select Case changedItems.First.baseType
      ' valida se o objeto alterado foi a entidade de pedidos
      Case GetType(stVO)
      Dim item As stVO = Nothing
      Dim itemRefChanged = changedItems.getChangedItemByField(item, "ref")

      'se foi alterado então vamos analisar o conteudo
      If itemRefChanged IsNot Nothing

      Dim noMax as Integer = 0
      Dim idQuery As QueryVO = New QueryVO()
      idQuery.entityName = "st"
      idQuery.SelectItems.Add("Isnull(max(Convert(Numeric(10),Right(codigo,5))),0) as proxnumero")

      idQuery.filterItems.Add(New FilterItem("codigo", Comparison.notequal, "''"))

      Dim resultList As List(Of Object) = SDK.Query.getEntityData(idQuery)
      If resultList isnot Nothing AndAlso resultList.any Then
      noMax = resultList(0).proxnumero + 1
      End If
      masterVO.codigo = masterVO.ref.substring(0,3)+Right("00000"+noMax.ToString,5)
      end if
      end Select


    9. Após gravar
    Após gravar uma Fatura, enviar por e-mail o PDF da fatura em anexo para o Cliente

    Como Fazer?

    1. Criar uma Regra de negócio após gravar com o seguinte código:

    If not IsVoid(itemVO.email) then 
    Dim baseReportStamp As String = "z202203232140187890069486"
    Dim result As PHCResult = SDK.Report.GenerateReport("FT", baseReportStamp, itemVO.ftstamp,1)

    If Not result.HasErrors() Then

    Dim filename As String = result.result.Cast(Of StringVO).FirstOrDefault.phcString

    Dim emailAttachments As New List(Of FileAttachment)
    emailAttachments.Add(sdk.FileUtil.getFile(filename))

    Dim emailSubject = itemVO.nome
    Dim emailbody As String = "Dear customer, please see attached. Don’t hesitate to reach out if you have any questions."
    If sdk.email.send("admin@phcfx.pt", "eteixeira@phcsoftware.com", emailSubject, emailbody, True,emailAttachments)
    listMsg.Add(New MsgInfo("The e-mail has been sent to customer"))
    End If
    End If
    End If