Producto | |||||
---|---|---|---|---|---|
Línea de producto: | |||||
Segmento: | |||||
Módulo: | SIGACON, SIGAFAT, SIGAFIN | ||||
Función: |
| ||||
País: | PARAGUAY | ||||
Ticket: | 21039076 | ||||
Requisito/Story/Issue (informe el requisito vinculado): | DMICAS-81 |
Se está permitiendo incluir más de un proveedor y cliente con el mismo número de RUC.
Es importante considerar que únicamente debería permitirse duplicar el número de RUC cuando el proveedor o el cliente es extranjero, ya que se hace uso de un RUC genérico.
De igual manera para el caso donde se incluye un proveedor o cliente y una tienda distinta, también está correcto que el RUC sea el mismo.
|
En Paraguay, está disponible una API para la búsqueda de RUC.
https://turuc.com.py/swagger-ui/index.html#/rest-contribuyente/getContribuyenteWithPath
Programa ADVPL para consumo de API, configuración de usuario.
#INCLUDE "PROTHEUS.CH"
#INCLUDE "FWBROWSE.CH"
//Dicionario SX3
//X3_CAMPO (A1_CGC e A2_CGC)
//X3_VLDUSER = APIRUCPY()
User Function APIRUCPY(cRUC)
Local cVar := ReadVar()
Local oMod := FWModelActive()
Local oRest := FwRest():New("https://turuc.com.py/api/contribuyente")
Local oJson := JsonObject():New()
Local aHead := {'accept: */*'}
Local cRest := ""
Local cRed := ""
Local cNom := ""
Local lRet := .F.
Default cRUC := &(cVar)
oRest:SetPath("?ruc=" + Trim(cRUC))
FWMsgRun(Nil,{|| lRet := oRest:Get(aHead)}, Nil, oRest:CHOST)
If lRet //Achou
cRest := DecodeUtf8(oRest:GetResult())
If ! Empty(cRest) .And. Empty(oJson:fromJson(cRest))
//oJson["data"]["ruc"] = CODIGO + DV
//oJson["data"]["estado"] = A1_ATIVO
//oJson["data"]["esPersonaJuridica"] = A1_PESSOA
cNom := oJson["data"]["razonSocial"]
If (", ")$(cNom)
cRed := AllTrim(SubStr(cNom,At(", ",cNom)+1,Len(cNom)))
Else
cRed := AllTrim(SubStr(cNom,1,At(" ",cNom)))
Endif
If cVar == "M->A2_CGC" //Proveedor
iif(Empty(oMod), M->A2_NOME := cNom, FWFldPut("A2_NOME", cNom))
iif(Empty(oMod), M->A2_NREDUZ := cRed, FWFldPut("A2_NREDUZ", cRed))
ElseIf cVar == "M->A1_CGC" //Cliente
iif(Empty(oMod), M->A1_NOME := cNom, FWFldPut("A1_NOME", cNom))
iif(Empty(oMod), M->A1_NREDUZ := cRed, FWFldPut("A1_NREDUZ", cRed))
Endif
Endif
Endif
FreeObj(oRest)
Return(lRet)
//Consulta Especifica no SXB
//XB_ALIAS XB_TIPO XB_SEQ XB_COLUNA XB_CONTEM XB_DESCRI...
//RUCPAR 1 01 RE "" RUC
//RUCPAR 2 01 01 U_XBRUCPAR() ""
//RUCPAR 5 01 01 VAR_IXB ""
//Dicionario SX3
//X3_CAMPO (A1_CGC e A2_CGC)
//X3_F3 = RUCPAR
//Consulta Padrao - API turuc.com.py - F3
User Function XBRUCPAR() // --> L
Local cCod := ""
Local cVar := ReadVar()
Local lRet := RUCBrowse(&(cVar),@cCod)
If lRet
VAR_IXB := cCod
Endif
Return(lRet)
Static Function RUCBrowse(cGet,cCod)
Local oDlg, oBrw, oCol, oPan, oGet, oBtn
Local oFnt := TFont():New("Arial",,020,,.F.,,,,,.F.,.F.)
Local bEnd := {|| lRet := .T., oDlg:End()}
Local lRet := .F.
Local nPag := 0
Local aRow := {}
cGet := PadR(cGet,50," ")
DEFINE MSDIALOG oDlg TITLE "Consulta turuc.com.py" FROM 0, 0 To 400, 820 PIXEL
oPan := TPanel():New(0,0,,oDlg,,,,,,410,20,.F.,.F.)
oPan:Align := CONTROL_ALIGN_TOP
DEFINE FWBROWSE oBrw DATA ARRAY ARRAY aRow NO CONFIG NO REPORT LINE HEIGHT 21 OF oDlg
@ 003, 005 MSGET oGet VAR cGet SIZE 240, 012 OF oPan PICTURE "@!" FONT oFnt VALID (iif(oGet:LMODIFIED, aRow := SetBrwRow(oBrw, cGet, 0), Nil), nPag := 0, .T.) PIXEL
@ 004, 250 BUTTON "&Consulta" SIZE 035, 012 OF oPan ACTION {|| nPag := 0, aRow := SetBrwRow(oBrw, cGet, nPag), oBtn:SetFocus()} PIXEL
@ 004, 290 BUTTON "&Seguinte" SIZE 035, 012 OF oPan WHEN Len(aRow) > 10 ACTION {|| ++nPag, aRow := SetBrwRow(oBrw, cGet, @nPag)} PIXEL
@ 004, 330 BUTTON "Sitio &Web" SIZE 035, 012 OF oPan WHEN .T. ACTION {|| ShellBrw("https://turuc.com.py/#consulta")} PIXEL
@ 004, 370 BUTTON oBtn PROMPT "&OK" SIZE 035, 012 OF oPan WHEN ! Empty(aRow) ACTION Eval(bEnd) PIXEL
oBrw:SetDoubleClick(bEnd)
oBrw:SetFontBrowse(TFont():New("Arial",,-14,,.F.))
oBrw:NPOSSIBLEROWS := 15
ADD MARKCOLUMN oCol DATA {|| oBrw:oData:aArray[oBrw:At(),4]} OF oBrw
ADD COLUMN oCol DATA {|| oBrw:oData:aArray[oBrw:At(), 1]} TITLE "NOMBRE" TYPE "C" SIZE 50 DECIMAL 0 PICTURE "" HEADERCLICK {|| aSort(aRow,,,{|x,y| x[1]<y[1]}), oBrw:Refresh(.T.)} ALIGN 1 OF oBrw
ADD COLUMN oCol DATA {|| oBrw:oData:aArray[oBrw:At(), 2]} TITLE "RUC" TYPE "C" SIZE 10 DECIMAL 0 PICTURE "" HEADERCLICK {|| aSort(aRow,,,{|x,y| x[2]<y[2]}), oBrw:Refresh(.T.)} ALIGN 1 OF oBrw
ADD COLUMN oCol DATA {|| oBrw:oData:aArray[oBrw:At(), 3]} TITLE "ESTADO" TYPE "C" SIZE 12 DECIMAL 0 PICTURE "" HEADERCLICK {|| aSort(aRow,,,{|x,y| x[3]<y[3]}), oBrw:Refresh(.T.)} ALIGN 1 OF oBrw
aRow := SetBrwRow(oBrw, cGet, 0)
oBrw:Activate()
If Empty(cGet)
oGet:SetFocus()
Else
oBrw:SetFocus()
Endif
oBrw:Refresh(.T.)
ACTIVATE MSDIALOG oDlg CENTERED
If lRet
cCod := AllTrim(aRow[oBrw:nAt,2])
Endif
FreeObj(oBrw)
Return(lRet)
Static Function SetBrwRow(oBrw,cGet,nPag)
Local aRow := {}
Local nPos := 0
Local nMax := 0
Local cRaz := ""
Local cEst := ""
Local cRuc := ""
Local cMar := ""
Local jRow := Nil
FWMsgRun(Nil,{|| jRow := TURUCAPIS(cGet, @nPag, @nMax)}, Nil, "Consulta - turuc.com.py")
If ! Empty(jRow)
For nPos := 1 To Len(jRow)
cRaz := jRow[nPos]["razonSocial"]
cRuc := jRow[nPos]["ruc"]
cEst := jRow[nPos]["estado"]
cMar := iif(cEst == "ACTIVO", "ENABLE", "DISABLE")
aAdd(aRow, {cRaz, cRuc, cEst, cMar})
Next nPos
Endif
//Generico RUC
If Empty(aRow)
aAdd(aRow, {"Consumidor Final IC", "44444401-7", "Generico", "ENABLE"})
aAdd(aRow, {"Clientes Exportación", "66666601-6", "Generico", "ENABLE"})
aAdd(aRow, {"Agentes Diplomáticos", "77777701-0", "Generico", "ENABLE"})
aAdd(aRow, {"Clientes Exterior", "88888801-5", "Generico", "ENABLE"})
aAdd(aRow, {"Proveedores Exterior", "99999901-0", "Generico", "ENABLE"})
nMax := 1
Endif
//Ajusta Browse
oBrw:SetArray(aRow)
If ValType(oBrw:oBrowse) == "O"
oBrw:oBrowse:cToolTip := "Pagina: " + cValToChar(nPag+1) + "/" + cValToChar(nMax)
If nPag >= nMax
nPag := 0
Endif
Endif
oBrw:Refresh(.T.)
Return(aRow)
Static Function TURUCAPIS(cKey,nPag,nMax)
Local oRest := FwRest():New("https://turuc.com.py")
Local oJson := JsonObject():New()
Local aHead := {'accept: application/json;charset=UTF-8'}
Local jRes := Nil
Local cRes := Nil
cKey := AllTrim(cKey)
If Len(cKey) >= 3
oRest:SetPath("/api/contribuyente/search?page="+cValToChar(nPag)+"&search=" + escape(cKey))
If oRest:Get(aHead)
cRes := DecodeUtf8(oRest:GetResult())
Else
MsgInfo(oRest:GetLastError(),"Atencion")
EndIf
Endif
If ! Empty(cRes) .And. Empty(oJson:fromJson(cRes))
nMax := oJson["data"]["paginas"]
jRes := oJson["data"]["contribuyentes"]
Else
nPag := 0
nMax := 0
jRes := ""
Endif
Return(jRes)
Static Function ShellBrw(cUrl)
Local cBrw, cAux
Local nRem := GetRemoteType(@cAux)
If nRem == 2
cBrw := GetPvProfString("CONFIG", "HELPBROWSER", "firefox", GetRemoteIniName())
If Empty(cBrw)
cBrw := GetSrvProfString("HELPBROWSER", "firefox")
EndIf
If ! Empty(cBrw)
WaitRun(cBrw + " " + cUrl)
ElseIf "MAC" $(Upper(cAux))
MsgInfo("Web browser not found for: " + cAux)
Else
ShellExecute("Browser", "/usr/bin/firefox", cUrl, "/", 1)
Endif
Else //Windows
ShellExecute("open", cUrl, "", "", 1)
Endif
Return(Nil)