105 |
105 |
"description": "VAT rate",
|
106 |
106 |
"type": "number",
|
107 |
107 |
"required": True
|
|
108 |
},
|
|
109 |
"price_code": {
|
|
110 |
"description": "User price code",
|
|
111 |
"type": "string",
|
|
112 |
"required": False
|
108 |
113 |
}
|
109 |
114 |
}
|
110 |
115 |
}
|
... | ... | |
165 |
170 |
"description": "Rerservation type identifier",
|
166 |
171 |
"type": "number",
|
167 |
172 |
"required": True
|
|
173 |
},
|
|
174 |
"price_code": {
|
|
175 |
"description": "User price code",
|
|
176 |
"type": "string",
|
|
177 |
"required": False
|
168 |
178 |
}
|
169 |
179 |
}
|
170 |
180 |
}
|
... | ... | |
384 |
394 |
except RequestException as e:
|
385 |
395 |
raise APIError("Authentication to Planitec failed: %s" % str(e))
|
386 |
396 |
|
387 |
|
def get_or_create_pairing(self, post_data):
|
|
397 |
def updateorcreate_user(self, post_data):
|
|
398 |
dyn_price_code = post_data.get('price_code')
|
|
399 |
price_code = dyn_price_code or self.price_code
|
|
400 |
|
388 |
401 |
with transaction.atomic():
|
389 |
402 |
pairing, created = Pairing.objects.get_or_create(
|
390 |
403 |
resource=self, name_id=post_data['name_id'],
|
391 |
|
defaults={'external_id': uuid.uuid4().get_hex(), 'price_code': self.price_code})
|
|
404 |
defaults={'external_id': uuid.uuid4().get_hex(), 'price_code': price_code})
|
392 |
405 |
if created:
|
|
406 |
# Create planitec user
|
393 |
407 |
params = {
|
394 |
408 |
"externalUserIdentifier": pairing.external_id,
|
395 |
409 |
"name": post_data['last_name'],
|
396 |
410 |
"firstName": post_data['first_name'],
|
397 |
411 |
"mail": post_data['email'],
|
398 |
|
"pricingCode": self.price_code
|
|
412 |
"pricingCode": price_code
|
399 |
413 |
}
|
400 |
414 |
data = self._call_planitech(self.requests.post, 'createPerson', params)
|
401 |
415 |
if data.get('creationStatus') != 'OK':
|
402 |
416 |
raise APIError("Person creation failed: %s" % data.get('creationStatus'))
|
|
417 |
|
|
418 |
elif dyn_price_code and pairing.price_code != dyn_price_code:
|
|
419 |
# Update planitec user
|
|
420 |
pairing.price_code = dyn_price_code
|
|
421 |
pairing.save()
|
|
422 |
params = {
|
|
423 |
'externalUserIdentifier': pairing.external_id,
|
|
424 |
'pricingCode': dyn_price_code
|
|
425 |
}
|
|
426 |
data = self._call_planitech(self.requests.post, 'updatePerson', params)
|
|
427 |
if data.get('modificationStatus') != 'OK':
|
|
428 |
raise APIError("Person update failed: %s" % data.get('modificationStatus'))
|
|
429 |
|
403 |
430 |
return pairing
|
404 |
431 |
|
405 |
432 |
@endpoint(
|
... | ... | |
417 |
444 |
start_datetime = combine_date_time(post_data['date'], post_data['start_time'])
|
418 |
445 |
end_datetime = combine_date_time(post_data['date'], post_data['end_time'])
|
419 |
446 |
|
420 |
|
pairing = self.get_or_create_pairing(post_data)
|
|
447 |
pairing = self.updateorcreate_user(post_data)
|
421 |
448 |
|
422 |
449 |
params = {
|
423 |
450 |
"activityID": mste.Uint32(post_data['activity_id']),
|
... | ... | |
457 |
484 |
end_datetime = combine_date_time(post_data['date'], post_data['end_time'])
|
458 |
485 |
request_date = datetime.now()
|
459 |
486 |
|
460 |
|
pairing = self.get_or_create_pairing(post_data)
|
|
487 |
pairing = self.updateorcreate_user(post_data)
|
461 |
488 |
|
462 |
489 |
params = {
|
463 |
490 |
"activityID": mste.Uint32(post_data['activity_id']),
|