214 |
214 |
if not self.EMAIL_RE.match(email):
|
215 |
215 |
raise APIError('email is not valid', http_status=400)
|
216 |
216 |
with transaction.atomic():
|
217 |
|
link, created = Link.objects.get_or_create(
|
|
217 |
link, created, updated = Link.create_or_update(
|
218 |
218 |
resource=self,
|
219 |
|
name_id=NameID,
|
|
219 |
NameID=NameID,
|
220 |
220 |
file_number=file_number,
|
221 |
|
defaults={
|
222 |
|
'secret': secret,
|
223 |
|
'dob': dob
|
224 |
|
})
|
225 |
|
updated = False
|
226 |
|
if not created:
|
227 |
|
if link.secret != secret or link.dob != dob:
|
228 |
|
link.secret = secret
|
229 |
|
link.dob = dob
|
230 |
|
updated = True
|
231 |
|
# email is necessary for audit purpose
|
232 |
|
link.get_file(email=email)
|
233 |
|
if updated:
|
234 |
|
link.save()
|
|
221 |
secret=secret,
|
|
222 |
dob=dob,
|
|
223 |
email=email)
|
235 |
224 |
return {'link_id': link.pk, 'created': created, 'updated': updated}
|
236 |
225 |
|
237 |
226 |
@endpoint(name='unlink',
|
... | ... | |
262 |
251 |
qs.delete()
|
263 |
252 |
return {'deleted': count}
|
264 |
253 |
|
265 |
|
@classmethod
|
266 |
|
def _make_display_name(cls, mdph_file):
|
267 |
|
prenom = mdph_file.get('beneficiaire', {}).get('prenom')
|
268 |
|
nom = mdph_file.get('beneficiaire', {}).get('nom')
|
269 |
|
numero = mdph_file['numero']
|
270 |
|
parts = []
|
271 |
|
if prenom:
|
272 |
|
parts.append(prenom)
|
273 |
|
if nom:
|
274 |
|
parts.append(nom)
|
275 |
|
parts.append(u'#%s' % numero)
|
276 |
|
return ' '.join(parts)
|
277 |
|
|
278 |
254 |
@endpoint(name='dossiers',
|
279 |
255 |
description=_('Get datas for all links, or for a specified one'),
|
280 |
256 |
perm='can_access',
|
... | ... | |
315 |
291 |
'err': 0,
|
316 |
292 |
}
|
317 |
293 |
try:
|
318 |
|
mdph_file = link.get_file(email=email)
|
|
294 |
file_data['dossier'] = link.get_file(email=email)
|
319 |
295 |
except Exception as e:
|
320 |
296 |
if link_id:
|
321 |
297 |
raise
|
322 |
298 |
file_data.update(to_json().err_to_response(e))
|
323 |
|
else:
|
324 |
|
file_data.update({
|
325 |
|
'text': self._make_display_name(mdph_file),
|
326 |
|
'dossier': mdph_file,
|
327 |
|
})
|
|
299 |
# do it later as get_filter() can modify str(link)
|
|
300 |
file_data['text'] = six.text_type(link)
|
328 |
301 |
data.append(file_data)
|
329 |
302 |
if link_id:
|
330 |
303 |
return {'data': data[0] if data else None}
|
331 |
304 |
return {'data': data}
|
332 |
305 |
|
333 |
306 |
|
|
307 |
@six.python_2_unicode_compatible
|
334 |
308 |
class Link(models.Model):
|
335 |
309 |
resource = models.ForeignKey(
|
336 |
310 |
MDPH13Resource,
|
... | ... | |
349 |
323 |
created = models.DateTimeField(
|
350 |
324 |
verbose_name=_('Creation date'),
|
351 |
325 |
auto_now_add=True)
|
|
326 |
display_name = models.CharField(
|
|
327 |
verbose_name=_('Display name'),
|
|
328 |
max_length=128,
|
|
329 |
blank=True)
|
352 |
330 |
|
353 |
331 |
def get_file(self, email=None):
|
354 |
332 |
# email is necessary for audit purpose
|
355 |
|
return self.resource.call_situation_dossier(
|
|
333 |
mdph_file = self.resource.call_situation_dossier(
|
356 |
334 |
file_number=self.file_number,
|
357 |
335 |
secret=self.secret,
|
358 |
336 |
dob=self.dob,
|
359 |
337 |
email=email)
|
|
338 |
display_name = self._make_display_name(mdph_file)
|
|
339 |
if self.display_name != display_name:
|
|
340 |
self.display_name = display_name
|
|
341 |
self.save()
|
|
342 |
return mdph_file
|
|
343 |
|
|
344 |
@classmethod
|
|
345 |
def create_or_update(self, resource, NameID, file_number, secret, dob, email=None):
|
|
346 |
# email is necessary for audit purpose
|
|
347 |
mdph_file = resource.call_situation_dossier(
|
|
348 |
file_number=file_number,
|
|
349 |
secret=secret,
|
|
350 |
dob=dob,
|
|
351 |
email=email)
|
|
352 |
display_name = self._make_display_name(mdph_file)
|
|
353 |
|
|
354 |
link, created = Link.objects.get_or_create(
|
|
355 |
resource=resource,
|
|
356 |
name_id=NameID,
|
|
357 |
file_number=file_number,
|
|
358 |
defaults={
|
|
359 |
'secret': secret,
|
|
360 |
'dob': dob,
|
|
361 |
'display_name': display_name,
|
|
362 |
})
|
|
363 |
|
|
364 |
updated = False
|
|
365 |
if not created:
|
|
366 |
if link.secret != secret or link.dob != dob or link.display_name != display_name:
|
|
367 |
link.secret = secret
|
|
368 |
link.dob = dob
|
|
369 |
link.display_name = display_name
|
|
370 |
link.save()
|
|
371 |
updated = True
|
|
372 |
return link, created, updated
|
|
373 |
|
|
374 |
@classmethod
|
|
375 |
def _make_display_name(cls, mdph_file):
|
|
376 |
prenom = mdph_file.get('beneficiaire', {}).get('prenom')
|
|
377 |
nom = mdph_file.get('beneficiaire', {}).get('nom')
|
|
378 |
numero = mdph_file['numero']
|
|
379 |
parts = []
|
|
380 |
if prenom:
|
|
381 |
parts.append(prenom)
|
|
382 |
if nom:
|
|
383 |
parts.append(nom)
|
|
384 |
parts.append(u'#%s' % numero)
|
|
385 |
return ' '.join(parts)
|
|
386 |
|
|
387 |
def __str__(self):
|
|
388 |
return self.display_name or u'#%s' % self.file_number
|
360 |
389 |
|
361 |
390 |
class Meta:
|
362 |
391 |
unique_together = (
|