Revision 979b59ce
Added by Benjamin Dauvergne about 12 years ago
calebasse/actes/validation.py | ||
---|---|---|
1 | 1 |
# -*- coding: utf-8 -*- |
2 |
|
|
2 | 3 |
import datetime |
4 |
import models |
|
3 | 5 |
|
4 | 6 |
def get_acts_of_the_day(date, service=None): |
5 |
from models import EventAct |
|
7 |
if not isinstance(date, datetime.date): |
|
8 |
date = date.date() |
|
9 |
qs = models.Act.objects.filter(date=date) |
|
6 | 10 |
if service: |
7 |
return EventAct.objects.filter(date__year=date.year, |
|
8 |
date__month=date.month, date__day=date.day, |
|
9 |
services__pk__icontains=service.pk).order_by('date') |
|
10 |
return EventAct.objects.filter(date__year=date.year, |
|
11 |
date__month=date.month, date__day=date.day).order_by('date') |
|
11 |
qs = qs.filter(patient__service=service) |
|
12 |
return qs.order_by('date') |
|
12 | 13 |
|
13 | 14 |
|
14 | 15 |
def unlock_all_acts_of_the_day(date, service=None): |
15 |
for act in get_acts_of_the_day(date, service): |
|
16 |
if not act.is_billed: |
|
17 |
act.validation_locked = False |
|
18 |
act.save() |
|
19 |
|
|
20 |
def are_all_acts_of_the_day_locked(date, service=None): |
|
21 |
for act in get_acts_of_the_day(date, service): |
|
22 |
if not act.validation_locked: |
|
23 |
return False |
|
24 |
return True |
|
16 |
get_acts_of_the_day(date, service).update(validation_locked=False) |
|
25 | 17 |
|
26 | 18 |
|
27 | 19 |
def get_acts_not_locked_of_the_day(date, service=None): |
28 |
acts = [] |
|
29 |
for act in get_acts_of_the_day(date, service): |
|
30 |
if not act.validation_locked: |
|
31 |
acts.append(act) |
|
32 |
return acts |
|
20 |
return get_acts_of_the_day(date, service) \ |
|
21 |
.filter(validation_locked=False) |
|
22 |
|
|
23 |
|
|
24 |
def are_all_acts_of_the_day_locked(date, service=None): |
|
25 |
return not get_acts_not_locked_of_the_day(date, service).exists() |
|
33 | 26 |
|
34 | 27 |
|
35 | 28 |
def get_days_with_acts_not_locked(start_day, end_day, service=None): |
36 |
num_days = abs((start_day - end_day).days) + 1 |
|
37 |
days_list = [start_day + datetime.timedelta(days=x) \ |
|
38 |
for x in range(0, num_days)] |
|
39 |
result = [] |
|
40 |
for day in days_list: |
|
41 |
if not are_all_acts_of_the_day_locked(day, service): |
|
42 |
result.append(day) |
|
43 |
return result |
|
29 |
qs = models.Act.objects.filter(date__gte=start_day, |
|
30 |
date__lte=end_day, validation_locked=False) |
|
31 |
if service: |
|
32 |
qs = qs.filter(patient__service=service) |
|
33 |
return sorted(set(qs.values_list('date', flat=True))) |
|
34 |
|
|
35 |
|
|
36 |
def date_generator(from_date, to_date): |
|
37 |
while from_date < to_date: |
|
38 |
yield from_date |
|
39 |
from_date += datetime.timedelta(days=1) |
|
44 | 40 |
|
45 | 41 |
|
46 | 42 |
def get_days_with_all_acts_locked(start_day, end_day, service=None): |
47 |
num_days = abs((start_day - end_day).days) + 1 |
|
48 |
days_list = [start_day + datetime.timedelta(days=x) \ |
|
49 |
for x in range(0, num_days)] |
|
50 |
result = [] |
|
51 |
for day in days_list: |
|
52 |
if are_all_acts_of_the_day_locked(day, service): |
|
53 |
result.append(day) |
|
54 |
return result |
|
43 |
locked_days = get_days_with_acts_not_locked(start_day, end_day, |
|
44 |
service) |
|
45 |
return sorted(set(date_generator) - set(locked_days)) |
|
55 | 46 |
|
56 | 47 |
|
57 | 48 |
def automated_validation(date, service, user, commit=True): |
Also available in: Unified diff
actes: rewriten validation Django style