/**************************************************************************
** Exemplo de customiza‡Æo para a central de parƒmetros de OF - html.mof.ParamEstabTaxObligations
***************************************************************************/
 
USING PROGRESS.json.*.
USING PROGRESS.json.ObjectModel.*.
USING com.totvs.framework.api.*.
 
DEFINE INPUT        PARAMETER pEndPoint AS CHARACTER  NO-UNDO.
DEFINE INPUT        PARAMETER pEvent    AS CHARACTER  NO-UNDO.
DEFINE INPUT        PARAMETER pAPI      AS CHARACTER  NO-UNDO.
DEFINE input-output PARAMETER jsonIO    AS JSONObject NO-UNDO.
 
DEFINE VARIABLE jObj            AS JsonObject NO-UNDO.
DEFINE VARIABLE aFields         AS JSonArray  NO-UNDO.
DEFINE VARIABLE aActions        AS JsonArray  NO-UNDO.

DEFINE VARIABLE cCodUsuario     AS CHARACTER  NO-UNDO.

/* ***************************  Main Block  *************************** */
 
IF (pEvent = "new" OR pEvent = "edit" OR pEvent = "view") AND pEndPoint = "getMetadata" THEN
    RUN piGetMetaDataEdit.

PROCEDURE piGetMetaDataEdit:
    
    // Obtem a lista de campos e valores   
    ASSIGN aFields = jsonIO:getJsonArray('configurationTabForm').
 
    // Cria os novos campos na lista.
    ASSIGN jObj = NEW JsonObject().
    jObj:add('divider', "Itens da UPC").
    jObj:add('property', 'codUsuario').
    jObj:add('label', 'Meu campo customizado').
    jObj:add('visible', TRUE).
    jObj:add('required', TRUE).
    jObj:ADD('placeholder', 'Insira o valor').
    jObj:ADD('type', JsonAPIUtils:convertAblTypeToHtmlType('character')).
    jObj:add('gridColumns', 12).
    
    // Exemplo de como customizar para envio de arquivos. Precisa o type ser upload e ter a propriedade 'url' definida.
    // A url deve estar no formato das APIs do Datasul, apontando para um endpoint do tipo POST.
    //jObj:add('type', 'upload').
    //jObj:ADD('url', '/dts/datasul-rest/resources/prg/ofp/v1/fiscalDocument/validateFormItem').
    
    // Retorna a nova lista com os campos customizados
    aFields:add(jObj).
    
    ASSIGN jObj = NEW JSONObject()
           aActions = jsonIO:getJsonArray("pageCustomActions").
           
    jObj:ADD("action", "/dts/datasul-rest/resources/prg/ofp/v1/fiscalDocument/validateFormItem").
    jObj:ADD("label", "Minha a‡Æo UPC").
    aActions:ADD(jObj).
    
    jsonIO:SET("pageCustomActions", aActions).
    
END PROCEDURE.

IF  pEndPoint = "GetEstablishmentItemsParameters" AND
    pEvent = "afterGetEstablishmentItemsParameters" THEN
    RUN piAfterGet.
    
PROCEDURE piAfterGet:

    FIND FIRST ped-curva
        WHERE ped-curva.codigo = 22112000
          AND ped-curva.vl-aberto = 22112000
        EXCLUSIVE-LOCK NO-ERROR.
        
    IF  AVAILABLE ped-curva THEN
        jsonIO:getJsonObject("root"):add("codUsuario", ped-curva.char-2).
        

END PROCEDURE.
    
IF  pEndPoint = "UpdateEstablishmentItemsParameters"
AND pEvent    = "beforeUpdateEstablishmentItemsParameters" THEN
    RUN piBeforeUpdate.

PROCEDURE piBeforeUpdate:
    
    cCodUsuario = jsonIO:getJsonObject("payload"):getCharacter("codUsuario") NO-ERROR.

    FIND FIRST ped-curva
        WHERE ped-curva.codigo = 22112000
          AND ped-curva.vl-aberto = 22112000
        EXCLUSIVE-LOCK NO-ERROR.    
        
    IF  AVAILABLE ped-curva THEN
        ASSIGN ped-curva.char-2 = cCodUsuario.
    ELSE DO:
        CREATE ped-curva.
        ASSIGN ped-curva.codigo    = 22112000
               ped-curva.vl-aberto = 22112000
               ped-curva.char-2    = cCodUsuario.
    END.

END PROCEDURE.    
