SPECManager API Connector#
Use the specmanagerapi connector to interact with SPECManager API.
This connector assumes that it has SPECManager v5 installed with the SPECManager-API LIPS package.
Import module#
from spec_utils import SMAPIClient, SMEmployeeType
from spec_utils._schemas import specmanager as smschema
Client settings#
URL = '<your-nettime-url>'
APIKEY = '<your-api-key>'
Start session manually#
client = SMAPIClient(url=URL, apikey=APIKEY)
client.start_session()
client.is_connected
See out...
True
Close session manually#
client.close_session()
client.is_connected
See out...
False
Get clockings#
import datetime as dt
with SMAPIClient(url=URL, apikey=APIKEY) as client:
clockings = client.get_clockings(
type_=SMEmployeeType.CONTRACTOR,
from_="20210101083000", #%Y%m%d%H%M%S
to_=dt.datetime.now(), # current time
)
# check result
clockings
See out...
{'ok': True,
'error': None,
'response': {'count': 320,
'pages': 16,
'clockings': [{'id': 72493,
'employee': 774,
'type': 71,
'card': '12345678',
'tmp': '20210808103422',
'result': 66,
'offline': 0,
'gl': 34,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 23,
# show more (open the raw output data in a text editor) ...
'gl': 18,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 11,
'version': 0}]}}
Including history table#
import datetime as dt
with SMAPIClient(url=URL, apikey=APIKEY) as client:
clockings = client.get_clockings(
type_=SMEmployeeType.CONTRACTOR,
from_="20210101083000", #%Y%m%d%H%M%S
to_=dt.datetime.now(), # current time
fromHistory=True
)
# check result
clockings
See out...
{'ok': True,
'error': None,
'response': {'count': 10320,
'pages': 516,
'clockings': [{'id': 61493,
'employee': 774,
'type': 71,
'card': '12345678',
'tmp': '20210101113215',
'result': 66,
'offline': 0,
'gl': 34,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 23,
# show more (open the raw output data in a text editor) ...
'gl': 18,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 11,
'version': 0}]}}
Including Employee detail#
import datetime as dt
with SMAPIClient(url=URL, apikey=APIKEY) as client:
clockings = client.get_clockings(
type_=SMEmployeeType.CONTRACTOR,
from_="20210101083000", #%Y%m%d%H%M%S
to_=dt.datetime.now(), # current time
employeeDetail=True
)
# check result
clockings
See out...
{'ok': True,
'error': None,
'response': {'count': 320,
'pages': 16,
'clockings': [{'id': 72493,
'employee': {'code': 774,
'mat': '774',
'card': '12345678',
'centerCode': 'AR',
'centerDesc': 'DEMO',
'firstname': 'John',
'lastName': 'Dow',
'dni': '87654321',
'company': '',
'optionalData': []},
'type': 71,
'card': '12345678',
'tmp': '20210808103422',
'result': 66,
'offline': 0,
'gl': 34,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 23,
# show more (open the raw output data in a text editor) ...
'gl': 18,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 11,
'version': 0}]}}
Including optionals data#
import datetime as dt
with SMAPIClient(url=URL, apikey=APIKEY) as client:
clockings = client.get_clockings(
type_=SMEmployeeType.CONTRACTOR,
from_="20210101083000", #%Y%m%d%H%M%S
to_=dt.datetime.now(), # current time
employeeDetail=True,
employeeData=[1, 2]
)
# check result
clockings
See out...
{'ok': True,
'error': None,
'response': {'count': 320,
'pages': 16,
'clockings': [{'id': 72493,
'employee': {'code': 774,
'mat': '774',
'card': '12345678',
'centerCode': 'AR',
'centerDesc': 'DEMO',
'firstname': 'John',
'lastName': 'Dow',
'dni': '87654321',
'company': '',
'optionalData': [{
'1': 'some-value',
'2': 'another-value'}]},
'type': 71,
'card': '12345678',
'tmp': '20210808103422',
'result': 66,
'offline': 0,
'gl': 34,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 23,
# show more (open the raw output data in a text editor) ...
'gl': 18,
'reader': 66,
'aux': '0000',
'value': 0,
'terminal': 11,
'version': 0}]}}
Save employee#
To import or update employees you can use the methods post_employee and post_employees, depending on whether you want to send one or more of them.
To set the data of an employee, you can use the schemes included in spec_utils._schemas.specmanager, use native types or combine between them and spec_utils will understand your data :sunglasses:.
Using native types#
employee_data = {
"code": 50505,
"nif": "50505",
"enmrollment":"50505",
"optionalData": [{
"level": 8,
"value": "20123456789"
}],
"lastName":"Doe",
"firstName":"John",
"center": {
"code": "AR"
},
"isActive": True,
"comment": "- new entry comment",
"cardList": {
"cards": [{"number": "808080"}, {"number": "909090"}],
"required": True
},
"department": {
"path": "SPEC/AR/DEMO"
}
}
with SMAPIClient(url=URL, apikey=APIKEY) as client:
response = client.post_employee(
type_=SMEmployeeType.OWN,
employee=employee_data
)
See out...
{'ok': True, 'error': None, 'response': 'Datos importados correctamente.'}
Using schemes#
from spec_utils._schemas import specmanager as smschema
employee_data = smschema.Employee(
code=50505,
nif=50505,
enrollment=50505,
optionalData=[smschema.OptionalData(
level=1,
value="20123456789"
)],
lastName="Doe",
firstName="John",
center=smschema.Center(
code='AR'
),
isActive=True,
comment="- new entry comment",
cardList=smschema.CardList(
cards=[smschema.Card(
number="808080"
)],
required=True
),
department=smschema.Department(
path="SPEC/AR/DEMO"
),
)
with SMAPIClient(url=URL, apikey=APIKEY) as client:
response = client.post_employee(
type_=SMEmployeeType.OWN,
employee=employee_data
)
See out...
{'ok': True, 'error': None, 'response': 'Datos importados correctamente.'}
Combining types#
from spec_utils._schemas import specmanager as smschema
employee_data = smschema.Employee(
code=50505,
nif=50505,
enrollment=50505,
optionalData=[{
"level": 8,
"value": "20123456789"
}],
lastName="Doe",
firstName="John",
center={
"code": "AR"
},
isActive=True,
comment="- new entry comment",
cardList={
"cards": [{"number": "808080"}, {"number": "909090"}],
"required": True
},
department=smschema.Department(
path="SPEC/AR/DEMO"
),
)
with SMAPIClient(url=URL, apikey=APIKEY) as client:
response = client.post_employee(
type_=SMEmployeeType.OWN,
employee=employee_data
)
See out...
{'ok': True, 'error': None, 'response': 'Datos importados correctamente.'}
* You can review the schemes to inspect the data and create more variants.