Hace un mes atrás vi algunos post de gente interesada en interactuar entre visual foxpro y odoo, aca les pongo unos ejemplos de como buscar actualizar crear y eliminar registros con el marcado de horas del reloj de personal
que es la tabla
hr.attendance para lo cual deben instalar los modulos de Empleados y asistencias
Bueno Espero les sirva ya que esto es muy potente para migrar nuestras aplicaciones a Odoo o integrarlas
#Define lAsync .F.
#Define curlserver "
http://172.24.64.1:8069"
****VFPJSON
https://github.com/sait/vfpjson****API ODOO
https://github.com/yezyilomo/odoo-rest-api clear
set procedure to json
messagebox(login("misuario", "miclave", "mibasededatos"))
nid=buscar_id_empleado(18354722)
if nid > 0
nidu=buscar_marcado(nid)
endif
centrada="2020-12-03 11:00"
nidn=nuevo_marcado(nid, centrada)
messagebox(nidn)
csalida="2020-12-03 15:00"
marcado_salida(nidu, csalida)
************************
function login( cuser, cpassw, cdb)
***LOGIN CON POST
JsonDatos =""
TEXT TO JsonDatos NOSHOW ADDITIVE TEXTMERGE PRETEXT 7
{
"jsonrpc": "2.0",
"params": {
"login": "<<cuser>>",
"password": "<<cpassw>>",
"db": "<<cdb>>"
}
}
endtext
lcUrl = curlserver+"/web/session/authenticate"
loRequest = Createobject('MsXml2.XmlHttp')
loRequest.Open("POST", lcUrl, lAsync )
loRequest.setRequestHeader("Content-Type", "application/json")
loRequest.Send(JsonDatos)
*ojson=json_decode(loRequest.ResponseText)
if cuser $ loRequest.ResponseText
return "OK"
else
if 'Access denied' $ loRequest.responseText
return "Acceso Denegado error de usuario o clave"
else
return "Error"
endif
endif
*******************
function buscar_id_empleado(ndni)
lcUrl = curlserver+'/api/hr.employee?query={ id, identification_id }&filter=[["identification_id", "=", '+ str(ndni,10,0) +']]'
loRequest = Createobject('MsXml2.XmlHttp')
loRequest.Open("GET", lcUrl, lAsync )
loRequest.Send()
ojson=json_decode(loRequest.ResponseText)
if ('"count": 0,' $ loRequest.responseText)
return 0
else
reg=ojson._result.get(1)
return reg._id
endif
***************
function buscar_marcado(id_empleado)
*** BUSQUEDA CON GET
lcUrl = curlserver+'/api/hr.attendance?query={ id, check_in, check_out, display_name }&filter=[["employee_id", "=", '+ str(id_empleado,5,0) +']]'
loRequest = Createobject('MsXml2.XmlHttp')
loRequest.Open("GET", lcUrl, lAsync )
loRequest.Send()
ojson=json_decode(loRequest.ResponseText)
CREATE CURSOR cursor_tickets(id I,check_in C(20), check_out C(20), display_name C(200))
if !('"count": 0,' $ loRequest.responseText)
for n=1 to alen(ojson._result.array)
x=ojson._result.array[n]._id
e=iif(vartype(ojson._result.array[n]._check_in)="L","",ojson._result.array[n]._check_in)
s=iif(vartype(ojson._result.array[n]._check_out)="L","",ojson._result.array[n]._check_out)
d=iif(vartype(ojson._result.array[n]._display_name)="L","",ojson._result.array[n]._display_name)
insert into cursor_tickets ( id, check_in , check_out, display_name ) values (x,e, s, d)
next
endif
if vartype(ojson._error) <> "U"
return ojson._error._data._message
else
reg=ojson._result.get(1)
return reg._id
endif
*!* ? loRequest.Status
*!* ? loRequest.ResponseText
function nuevo_marcado(id_empleado, cingreso)
****INSERT CON POST 2020-12-03 09:18
id_empleado=str(id_empleado,5,0)
JsonDatos =""
TEXT TO JsonDatos NOSHOW ADDITIVE TEXTMERGE PRETEXT 7
{
"params": {
"data": {
"employee_id": <<id_empleado>>,
"check_in":"<<cingreso>>"
}
}
}
endtext
lcUrl = curlserver+"/api/hr.attendance"
loRequest = Createobject('MsXml2.XmlHttp')
loRequest.Open("POST", lcUrl, lAsync )
loRequest.setRequestHeader("Content-Type", "application/json")
loRequest.Send(JsonDatos)
ojson=json_decode(loRequest.ResponseText)
if vartype(ojson._error) <> "U"
return ojson._error._data._message
else
reg=ojson._result.get(1)
return reg._id
endif
*!* ? loRequest.Status
*!* ? loRequest.ResponseText
function marcado_salida(id_mov, cegreso)
****UPDATE CON PUT
lid_mov=int(id_mov)
id_mov=str(lid_mov,7,0)
JsonDatos =""
TEXT TO JsonDatos NOSHOW ADDITIVE TEXTMERGE PRETEXT 7
{
"params": {
"filter": [["id", "=", <<id_mov>>]],
"data": {
"check_out" : "<<cegreso>>"
}
}
}
endtext
lcUrl = curlserver+"/api/hr.attendance"
loRequest = Createobject('MsXml2.XmlHttp')
loRequest.Open("PUT", lcUrl, lAsync )
loRequest.setRequestHeader("Content-Type", "application/json")
loRequest.Send(JsonDatos)
ojson=json_decode(loRequest.ResponseText)
if vartype(ojson._error) <> "U"
return ojson._error._data._message
else
return ojson._result
endif