Project

General

Profile

« Previous | Next » 

Revision 979b59ce

Added by Benjamin Dauvergne about 12 years ago

actes: rewriten validation Django style

View differences:

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