Ejemplo n.º 1
0
def index(request):
    today = datetime.date.today()
    people_meal_filter = PersonMeal.objects.filter(meal__date=today)
    try:
        who_wash = people_meal_filter.get(wash=True).person
    except PersonMeal.DoesNotExist:
        who_wash = None
    people_who_ate = [person.person.pk for person in people_meal_filter]
    try:
        meal = Meal.objects.get(date=today)
    except Meal.DoesNotExist:
        meal = Meal.objects.create(date=today)

    ranking = Person.ranking()
    people = Person.objects.all()

    return render(
        request,
        "index.html",
        {
            "people": people,
            "ranking": reversed(ranking),
            "min": meal.get_lowest_avg(),
            "form": AuthenticationForm,
            "today": today.strftime("%d/%m/%Y"),
            "pqc": people_who_ate,
            "who_wash": who_wash,
            "tickets": meal.ticket,
        },
    )
Ejemplo n.º 2
0
 def get_lowest_avg(self):
     ranking = Person.ranking()
     wash = None
     for person in ranking:
         if person.personmeal_set.filter(meal=self).exists():
             if person.is_new:
                 return person
             elif person.get_average() != unicode(0.0):
                 if wash: return wash
                 return person
             if not wash:
                 wash = person
     return wash
Ejemplo n.º 3
0
    def post(self, request, *args, **kwargs):
        check_uncheck = request.POST.get('check_uncheck', None)
        person_pk = request.POST.get('person_pk', None)
        date = request.POST.get('date', None)
        type_of = request.POST.get('type_of', None)
        if not type_of or not date or not person_pk:
            return HttpResponseBadRequest()

        person = get_object_or_404(Person, pk=person_pk)

        date = datetime.datetime.strptime(date, '%d/%m/%Y')
        meal = get_object_or_404(Meal, date=date)

        if check_uncheck == 'uncheck_icon':
            if type_of == 'eat':
                person_meal, created = PersonMeal.objects.get_or_create(
                    meal=meal,
                    person=person,
                    defaults={
                        'wash': False
                    }
                )
                wash = False

            elif type_of == 'wash':
                person_meal, created = PersonMeal.objects.get_or_create(
                    meal=meal,
                    person=person,
                    defaults={
                        'wash': True
                    }
                )

                if not created:
                    person_meal.wash = True
                    person_meal.save()

                wash = True

            else:
                return HttpResponseBadRequest()

        elif check_uncheck == 'check_icon':
            person_meal = PersonMeal.objects.get(meal=meal, person=person)
            if type_of == 'eat':
                wash = False
                person_meal.delete()
            elif type_of == 'wash':
                wash = True
                person_meal.wash = False
                person_meal.save()
            else:
                raise HttpResponseBadRequest()

        else:
            return HttpResponseBadRequest()

        # The personal_data is used to rebuild the ranking with the changes
        # made changing the number of times people eat and washing the dishes
        personal_data = []
        ranking = [instance for instance in Person.ranking()]
        number_of_people = Person.objects.all().count()
        for person in ranking:
            personal_data.append([person.name, person.get_average(), person.weight, person.is_new, person.pk])

        meal_today = get_object_or_404(Meal, date=timezone.now().date())
        try:
            washer = meal_today.get_lowest_avg().name
        except AttributeError:
            washer = None

        number_of_meals = PersonMeal.objects.filter(meal=meal).count()

        return HttpResponse(
            json.dumps({
                'wash': wash,
                'pk': person_meal.person.pk,
                'person_data': list(reversed(personal_data)),
                'washer': washer,
                'number_of_people': number_of_people,
                'number_of_meals': number_of_meals,
            }),
            content_type='application/json'
        )