calebasse/calebasse/actes/validation.py @ d694f19f
| 3ed29cb7 | Mikaël Ates | # -*- coding: utf-8 -*-
|
|
import datetime
|
|||
| 0853d495 | Mikaël Ates | def get_acts_of_the_day(date, service=None):
|
|
| 3ed29cb7 | Mikaël Ates | from models import EventAct
|
|
| 0853d495 | Mikaël Ates | if service:
|
|
return EventAct.objects.filter(date__year=date.year,
|
|||
date__month=date.month, date__day=date.day,
|
|||
services__pk__icontains=service.pk).order_by('date')
|
|||
| 3ed29cb7 | Mikaël Ates | return EventAct.objects.filter(date__year=date.year,
|
|
date__month=date.month, date__day=date.day).order_by('date')
|
|||
| 0853d495 | Mikaël Ates | def unlock_all_acts_of_the_day(date, service=None):
|
|
| 1aae39b5 | Mikaël Ates | for act in get_acts_of_the_day(date, service):
|
|
if not act.is_billed:
|
|||
| 72dbfaca | Mikaël Ates | act.validation_locked = False
|
|
act.save()
|
|||
| 3ed29cb7 | Mikaël Ates | ||
| 0853d495 | Mikaël Ates | def are_all_acts_of_the_day_locked(date, service=None):
|
|
for act in get_acts_of_the_day(date, service):
|
|||
| 3ed29cb7 | Mikaël Ates | if not act.validation_locked:
|
|
return False
|
|||
return True
|
|||
| 0853d495 | Mikaël Ates | def get_acts_not_locked_of_the_day(date, service=None):
|
|
| 3ed29cb7 | Mikaël Ates | acts = []
|
|
| 0853d495 | Mikaël Ates | for act in get_acts_of_the_day(date, service):
|
|
| 3ed29cb7 | Mikaël Ates | if not act.validation_locked:
|
|
acts.append(act)
|
|||
return acts
|
|||
| 0853d495 | Mikaël Ates | def get_days_with_acts_not_locked(start_day, end_day, service=None):
|
|
| 3ed29cb7 | Mikaël Ates | num_days = abs((start_day - end_day).days) + 1
|
|
days_list = [start_day + datetime.timedelta(days=x) \
|
|||
for x in range(0, num_days)]
|
|||
result = []
|
|||
for day in days_list:
|
|||
| 0853d495 | Mikaël Ates | if not are_all_acts_of_the_day_locked(day, service):
|
|
| 3ed29cb7 | Mikaël Ates | result.append(day)
|
|
return result
|
|||
| 0853d495 | Mikaël Ates | def get_days_with_all_acts_locked(start_day, end_day, service=None):
|
|
| 3ed29cb7 | Mikaël Ates | num_days = abs((start_day - end_day).days) + 1
|
|
days_list = [start_day + datetime.timedelta(days=x) \
|
|||
for x in range(0, num_days)]
|
|||
result = []
|
|||
for day in days_list:
|
|||
| 0853d495 | Mikaël Ates | if are_all_acts_of_the_day_locked(day, service):
|
|
| 3ed29cb7 | Mikaël Ates | result.append(day)
|
|
return result
|
|||
| 93895776 | Mikaël Ates | def automated_validation(date, service, user, commit=True):
|
|
| 3ed29cb7 | Mikaël Ates | nb_acts_double = 0
|
|
nb_acts_validated = 0
|
|||
| 93895776 | Mikaël Ates | nb_acts_abs_non_exc = 0
|
|
nb_acts_abs_exc = 0
|
|||
nb_acts_annul_nous = 0
|
|||
nb_acts_annul_famille = 0
|
|||
nb_acts_abs_ess_pps = 0
|
|||
nb_acts_enf_hosp = 0
|
|||
| 0853d495 | Mikaël Ates | acts_of_the_day = get_acts_of_the_day(date, service)
|
|
| 93895776 | Mikaël Ates | for act in acts_of_the_day:
|
|
if act.is_state('ABS_NON_EXC'):
|
|||
nb_acts_abs_non_exc = nb_acts_abs_non_exc + 1
|
|||
if act.is_state('ABS_EXC'):
|
|||
nb_acts_abs_exc = nb_acts_abs_exc + 1
|
|||
if act.is_state('ANNUL_NOUS'):
|
|||
nb_acts_annul_nous = nb_acts_annul_nous + 1
|
|||
if act.is_state('ANNUL_FAMILLE'):
|
|||
nb_acts_annul_famille = nb_acts_annul_famille + 1
|
|||
if act.is_state('ABS_ESS_PPS'):
|
|||
nb_acts_abs_ess_pps = nb_acts_abs_ess_pps + 1
|
|||
if act.is_state('ENF_HOSP'):
|
|||
nb_acts_enf_hosp = nb_acts_enf_hosp + 1
|
|||
| 3ed29cb7 | Mikaël Ates | nb_acts_total = len(acts_of_the_day)
|
|
patients = {}
|
|||
if service.name == 'CMPP':
|
|||
# Verification des actes en doubles
|
|||
acts = [act for act in acts_of_the_day \
|
|||
| 93895776 | Mikaël Ates | if act.get_state().state_name in ('VALIDE', 'NON_VALIDE',
|
|
'ACT_DOUBLE')]
|
|||
| 3ed29cb7 | Mikaël Ates | for act in acts:
|
|
if act.patient not in patients:
|
|||
patients[act.patient] = []
|
|||
patients[act.patient].append(act)
|
|||
for patient, acts in patients.items():
|
|||
if len(acts) > 1:
|
|||
# Si plusieurs actes pour un même patient le même jour
|
|||
# On valide le premier, s'il n'est pas déja validé.
|
|||
# Les autres sont marqués actes en double
|
|||
found_one = False
|
|||
| 1aae39b5 | Mikaël Ates | acts_t = []
|
|
| 3ed29cb7 | Mikaël Ates | for act in acts:
|
|
| 1aae39b5 | Mikaël Ates | if act.is_billed:
|
|
found_one = True
|
|||
| c756ec89 | Mikaël Ates | nb_acts_validated = nb_acts_validated + 1
|
|
| 1aae39b5 | Mikaël Ates | else:
|
|
acts_t.append(act)
|
|||
for act in acts_t:
|
|||
| 3ed29cb7 | Mikaël Ates | if not found_one:
|
|
| 93895776 | Mikaël Ates | if not act.is_state('VALIDE') and commit:
|
|
| 3ed29cb7 | Mikaël Ates | act.set_state('VALIDE', author=user, auto=True)
|
|
found_one = True
|
|||
nb_acts_validated = nb_acts_validated + 1
|
|||
else:
|
|||
| 93895776 | Mikaël Ates | if commit:
|
|
act.set_state('ACT_DOUBLE', author=user, auto=True)
|
|||
| 3ed29cb7 | Mikaël Ates | nb_acts_double = nb_acts_double + 1
|
|
else:
|
|||
| 9f81a4a0 | Mikaël Ates | if not acts[0].is_state('VALIDE') and commit:
|
|
| 3ed29cb7 | Mikaël Ates | acts[0].set_state('VALIDE', author=user, auto=True)
|
|
| 93895776 | Mikaël Ates | nb_acts_validated = nb_acts_validated + 1
|
|
| 3ed29cb7 | Mikaël Ates | else:
|
|
acts = [act for act in acts_of_the_day if act.is_state('NON_VALIDE')]
|
|||
for act in acts:
|
|||
| 93895776 | Mikaël Ates | if commit:
|
|
act.set_state('VALIDE', author=user, auto=True)
|
|||
| 3ed29cb7 | Mikaël Ates | nb_acts_validated = nb_acts_validated + 1
|
|
| 93895776 | Mikaël Ates | ||
| 3ed29cb7 | Mikaël Ates | # Acts locking
|
|
for act in acts_of_the_day:
|
|||
| 93895776 | Mikaël Ates | if commit:
|
|
act.validation_locked = True
|
|||
act.save()
|
|||
if service.name == 'CMPP' and commit:
|
|||
| 3ed29cb7 | Mikaël Ates | for patient, _ in patients.items():
|
|
patient.create_diag_healthcare(user)
|
|||
| a4b52050 | Mikaël Ates | patient.automated_switch_state(user)
|
|
| 93895776 | Mikaël Ates | return (nb_acts_total, nb_acts_validated, nb_acts_double,
|
|
nb_acts_abs_non_exc, nb_acts_abs_exc, nb_acts_annul_nous,
|
|||
nb_acts_annul_famille, nb_acts_abs_ess_pps,
|
|||
nb_acts_enf_hosp)
|