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)



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