234 |
234 |
if not self.EMAIL_RE.match(email):
|
235 |
235 |
raise APIError('email is not valid', http_status=400)
|
236 |
236 |
with transaction.atomic():
|
237 |
|
link, created = Link.objects.get_or_create(
|
|
237 |
link, created, updated = Link.create_or_update(
|
238 |
238 |
resource=self,
|
239 |
|
name_id=NameID,
|
|
239 |
NameID=NameID,
|
240 |
240 |
file_number=file_number,
|
241 |
|
defaults={
|
242 |
|
'secret': secret,
|
243 |
|
'dob': dob
|
244 |
|
})
|
245 |
|
updated = False
|
246 |
|
if not created:
|
247 |
|
if link.secret != secret or link.dob != dob:
|
248 |
|
link.secret = secret
|
249 |
|
link.dob = dob
|
250 |
|
updated = True
|
251 |
|
# email is necessary for audit purpose
|
252 |
|
link.get_file(email=email)
|
253 |
|
if updated:
|
254 |
|
link.save()
|
|
241 |
secret=secret,
|
|
242 |
dob=dob,
|
|
243 |
email=email)
|
255 |
244 |
return {'link_id': link.pk, 'created': created, 'updated': updated}
|
256 |
245 |
|
257 |
246 |
@endpoint(name='unlink',
|
... | ... | |
282 |
271 |
qs.delete()
|
283 |
272 |
return {'deleted': count}
|
284 |
273 |
|
285 |
|
@classmethod
|
286 |
|
def _make_display_name(cls, mdph_file):
|
287 |
|
prenom = mdph_file.get('beneficiaire', {}).get('prenom')
|
288 |
|
nom = mdph_file.get('beneficiaire', {}).get('nom')
|
289 |
|
numero = mdph_file['numero']
|
290 |
|
parts = []
|
291 |
|
if prenom:
|
292 |
|
parts.append(prenom)
|
293 |
|
if nom:
|
294 |
|
parts.append(nom)
|
295 |
|
parts.append(u'#%s' % numero)
|
296 |
|
return ' '.join(parts)
|
297 |
|
|
298 |
274 |
@endpoint(name='dossiers',
|
299 |
275 |
description=_('Get datas for all links, or for a specified one'),
|
300 |
276 |
perm='can_access',
|
... | ... | |
342 |
318 |
file_data.update(to_json().err_to_response(e))
|
343 |
319 |
else:
|
344 |
320 |
file_data.update({
|
345 |
|
'text': self._make_display_name(mdph_file),
|
|
321 |
'err': 0,
|
346 |
322 |
'dossier': mdph_file,
|
347 |
323 |
})
|
|
324 |
file_data['text'] = six.text_type(link)
|
348 |
325 |
data.append(file_data)
|
349 |
326 |
if link_id:
|
350 |
327 |
return {'data': data[0] if data else None}
|
351 |
328 |
return {'data': data}
|
352 |
329 |
|
353 |
330 |
|
|
331 |
@six.python_2_unicode_compatible
|
354 |
332 |
class Link(models.Model):
|
355 |
333 |
resource = models.ForeignKey(
|
356 |
334 |
MDPH13Resource,
|
... | ... | |
369 |
347 |
created = models.DateTimeField(
|
370 |
348 |
verbose_name=_('Creation date'),
|
371 |
349 |
auto_now_add=True)
|
|
350 |
display_name = models.CharField(
|
|
351 |
verbose_name=_('Display name'),
|
|
352 |
max_length=128,
|
|
353 |
blank=True)
|
372 |
354 |
|
373 |
355 |
def get_file(self, email=None):
|
374 |
356 |
# email is necessary for audit purpose
|
375 |
|
return self.resource.call_situation_dossier(
|
|
357 |
mdph_file = self.resource.call_situation_dossier(
|
376 |
358 |
file_number=self.file_number,
|
377 |
359 |
secret=self.secret,
|
378 |
360 |
dob=self.dob,
|
379 |
361 |
email=email)
|
|
362 |
display_name = self._make_display_name(mdph_file)
|
|
363 |
if self.display_name != display_name:
|
|
364 |
self.display_name = display_name
|
|
365 |
self.save()
|
|
366 |
return mdph_file
|
|
367 |
|
|
368 |
@classmethod
|
|
369 |
def create_or_update(self, resource, NameID, file_number, secret, dob, email=None):
|
|
370 |
# email is necessary for audit purpose
|
|
371 |
mdph_file = resource.call_situation_dossier(
|
|
372 |
file_number=file_number,
|
|
373 |
secret=secret,
|
|
374 |
dob=dob,
|
|
375 |
email=email)
|
|
376 |
display_name = self._make_display_name(mdph_file)
|
|
377 |
|
|
378 |
link, created = Link.objects.get_or_create(
|
|
379 |
resource=resource,
|
|
380 |
name_id=NameID,
|
|
381 |
file_number=file_number,
|
|
382 |
defaults={
|
|
383 |
'secret': secret,
|
|
384 |
'dob': dob,
|
|
385 |
'display_name': display_name,
|
|
386 |
})
|
|
387 |
|
|
388 |
updated = False
|
|
389 |
if not created:
|
|
390 |
if link.secret != secret or link.dob != dob or link.display_name != display_name:
|
|
391 |
link.secret = secret
|
|
392 |
link.dob = dob
|
|
393 |
link.display_name = display_name
|
|
394 |
link.save()
|
|
395 |
updated = True
|
|
396 |
return link, created, updated
|
|
397 |
|
|
398 |
@classmethod
|
|
399 |
def _make_display_name(cls, mdph_file):
|
|
400 |
prenom = mdph_file.get('beneficiaire', {}).get('prenom')
|
|
401 |
nom = mdph_file.get('beneficiaire', {}).get('nom')
|
|
402 |
numero = mdph_file['numero']
|
|
403 |
parts = []
|
|
404 |
if prenom:
|
|
405 |
parts.append(prenom)
|
|
406 |
if nom:
|
|
407 |
parts.append(nom)
|
|
408 |
parts.append(u'#%s' % numero)
|
|
409 |
return ' '.join(parts)
|
|
410 |
|
|
411 |
def __str__(self):
|
|
412 |
return self.display_name or u'#%s' % self.file_number
|
380 |
413 |
|
381 |
414 |
class Meta:
|
382 |
415 |
unique_together = (
|