Example #1
0
def send_email():
    dishes = Dish.objects.filter(modified__gte=(date.today() -
                                                datetime.timedelta(days=1)))
    menus = Menu.objects.filter(modified__gte=(date.today() -
                                               datetime.timedelta(days=1)))

    users = User.objects.all()

    for user in users:
        html_message = render_to_string(
            'email_template.html',
            {
                'host_url': 'http://127.0.0.1:8000/',
                'dishes': dishes,
                'menus': menus,
                'username': user.username
            },
        )
        email = EmailMultiAlternatives(
            subject='eMenu - najnowsze informacje',
            from_email='*****@*****.**',
            to=(user.email, ),
        )
        email.attach_alternative(html_message, "text/html")
        email.send()
Example #2
0
 def test_filter_students_by_current_internship(self):
     period = PeriodFactory(cohort=self.cohort,
                            date_start=date.today(),
                            date_end=date.today())
     student_info = InternshipStudentInformationFactory(
         cohort=self.cohort, person=self.student_1.person)
     affectation = StudentAffectationStatFactory(student=self.student_1,
                                                 period=period)
     url = reverse(internships_student_resume,
                   kwargs={
                       'cohort_id': self.cohort.id,
                   })
     response = self.client.get(url)
     actual, stats = student._get_students_with_status(
         request=response.wsgi_request,
         cohort=self.cohort,
         filters=(None, True))
     expected = [student_info]
     self.assertCountEqual(expected, actual)
     for item_expected in expected:
         self.assertIn(item_expected, actual)
     self.assertEqual(
         actual[0].current_internship,
         "{}{}".format(affectation.speciality.acronym,
                       affectation.organization.reference))
Example #3
0
def home(request):
    club_data = Club.objects.all()
    club_count = Club.objects.all().count()
    event_count = Event.objects.all().count()
    clubmember_count = ClubMember.objects.all().count()
    club_data = Club.objects.all()
    first = date.today()
    second = date.today() + datetime.timedelta(days=1)
    third = date.today() + datetime.timedelta(days=2)
    fourth = date.today() + datetime.timedelta(days=3)

    first_event_data = Event.objects.filter(start=first)
    second_event_data = Event.objects.filter(start=second)
    third_event_data = Event.objects.filter(start=third)
    forth_event_data = Event.objects.filter(start=fourth)

    context = {
        'fourth': fourth,
        'third': third,
        'second': second,
        'first': first,
        'first_event_data': first_event_data,
        'forth_event_data': forth_event_data,
        'third_event_data': third_event_data,
        'second_event_data': second_event_data,
        'club_data': club_data,
        'club_count': club_count,
        'event_count': event_count,
        'clubmember_count': clubmember_count
    }
    return render(request, 'client/home.html', context)
Example #4
0
def add_crm_mail(email_, mail_content, mail_subject, user):
    typeofservice = Typeofservice.objects.get(id=1)
    user = User.objects.get(id=user.id)

    try:
        id_department, subject = mail_subject.split('-')
    except ValueError:
        id_department = 1

    print(id_department)

    try:
        client = Client.objects.get(email=email_)
        Atendimento.objects.get_or_create(type=typeofservice,
                                          department=id_department,
                                          person=client,
                                          contact=email_,
                                          feedback=mail_content,
                                          deadline=date.today(),
                                          user_id=user.id)
    except Client.DoesNotExist:
        client_default = Client.objects.get(id=1)
        Atendimento.objects.get_or_create(
            type=typeofservice,
            department='1',
            person=client_default,
            contact=email_,
            feedback='Este e-mail não pertence a nenhum cliente' + '\n' +
            mail_content,
            deadline=date.today(),
            user_id=user.id)
Example #5
0
    def setUp(self) -> None:
        User.objects.create_user('test')

        poll = Poll.objects.create(name='Проверочный опрос',
                                   start_date=date.today(),
                                   end_date=date.today(),
                                   description='Описание для опроса')
        yesterday = date.today() - timedelta(days=1)
        Poll.objects.create(name='Неактивный опрос', start_date=yesterday,
                            end_date=yesterday,
                            description='Описание для опроса')

        self.text_answer_question = Question.objects.create(
            text='Как работают Middleware?',
            type=Question.TypeChoices.TEXT_ANSWER, poll=poll)

        self.single_answer_question = Question.objects.create(
            text='Django или Flask?', type=Question.TypeChoices.SINGLE_ANSWER,
            poll=poll)
        AnswerOption.objects.create(question=self.single_answer_question,
                                    content='Django')
        AnswerOption.objects.create(question=self.single_answer_question,
                                    content='Flask')

        self.several_options_answer_question = Question.objects.create(
            text='Какие возможности в Django?',
            type=Question.TypeChoices.SEVERAL_OPTIONS_ANSWER,
        poll=poll)
        AnswerOption.objects.create(
            question=self.several_options_answer_question, content='ASGI')
        AnswerOption.objects.create(
            question=self.several_options_answer_question, content='WSGI')
        AnswerOption.objects.create(
            question=self.several_options_answer_question, content='ML')
Example #6
0
 def setUp(self) -> None:
     poll = Poll.objects.create(
         name='Проверочный опрос', start_date=date.today(),
         end_date=date.today(), description='Описание для опроса')
     Question.objects.create(text='Что должно здесь быть?',
                             type=Question.TypeChoices.TEXT_ANSWER,
                             poll=poll)
Example #7
0
def job(request,job_slug=None,start_date=None,end_date=None,latest_count=10):
    #print request.META
    if job_slug:
        summary = None
        job = Job.objects.get(slug=job_slug)
        job_metrics = job.metrics.all()
        try:
            job.extra_display_fields = [df.strip() for df in job.config.display_extra_fields.split(',')]
            if len(job.config.multipart_field):
                if start_date is None and end_date is None:
                    start_date = date.today()
                    end_date = date.fromordinal(date.today().toordinal() + 1)

        except Exception, ex:
            print str(ex)
            job.extra_display_fields = ['log',]

        #this is where we decide how many and which notifications to display!!!!
        if start_date is not None and end_date is not None:
            notifications = job.notifications.filter(at__gte=start_date,at__lt=end_date)
        else:
            notifications = job.notifications.all()[:latest_count]

        notifications = [n for n in notifications]
        multipart = False
        multipart_field = None
        multipart_values = {}
        try:
            if len(job.config.multipart_field):
                multipart = True
                multipart_field = job.config.multipart_field
                for v in job.config.multipart_names.split(','):
                    multipart_values[v.strip()] = None
        except Exception, ex:
            pass
Example #8
0
    def handle(self, *args, **options):
        start_date = options['start_date']
        end_date = options['end_date']

        if not (start_date and end_date) and (start_date or end_date):
            raise CommandError(
                "You must specify both --date-from and --date-to "
                "to import research summaries for a given period."
            )

        if start_date:
            try:
                start_date = parse_date(start_date).date()
            except ValueError:
                raise CommandError("Invalid --date-from: '{}'".format(start_date))

        if end_date:
            if end_date == 'today':
                end_date = date.today()
            else:
                try:
                    end_date = parse_date(end_date).date()
                except ValueError:
                    raise CommandError("Invalid --date-to: '{}'".format(end_date))

        if not (start_date and end_date):
            # If there is no dates in arguments,
            # use the date of the last import as a start date,
            # and the current date as an end date
            end_date = date.today()
            last_updated_at = ResearchSummaryPage.objects.aggregate(last_updated_at=models.Max('updated_at'))
            last_updated_at = last_updated_at.get('last_updated_at')

            if not last_updated_at:
                raise CommandError(
                    "No research summaries were imported before. "
                    "You have to run import and specify date range manually."
                )

            start_date = last_updated_at.date()

        parent_page = ResearchSummariesIndexPage.objects.first()
        logger.info('Importing research summaries %s - %s', start_date, end_date)

        if not parent_page:
            raise CommandError(
                "There is no ResearchSummariesIndexPage pages. "
                "You have to create one to be able to import research summaries."
            )

        fetch_chunks_for_dates(parent_page, start_date, end_date)
Example #9
0
def _get_students_with_status(request, cohort, filters):

    active_period = Period.objects.filter(cohort=cohort,
                                          date_start__lte=date.today(),
                                          date_end__gte=date.today()).first()

    internship_ids = Internship.objects.filter(cohort=cohort).values_list(
        'pk', flat=True)

    current_internship_subquery = InternshipStudentAffectationStat.objects.filter(
        student__person=OuterRef('person'), period=active_period)

    student_internships_count = InternshipChoice.objects.filter(
        internship__pk__in=internship_ids,
        choice=1,
        student__person=OuterRef('person')).values('student').annotate(
            count=Count('internship')).values('count')

    students_info = InternshipStudentInformation.objects\
        .filter(cohort=cohort)\
        .prefetch_related(Prefetch('person__student_set', to_attr='students'))\
        .order_by('person__last_name', 'person__first_name')\
        .annotate(
            current_internship=Concat(
                Subquery(current_internship_subquery.values('speciality__acronym')),
                Subquery(current_internship_subquery.values('organization__reference'))
            ),
            chosen_internships_count=Subquery(student_internships_count, output_field=models.IntegerField()),
            total_count=Value(internship_ids.count(), output_field=models.IntegerField())
        ).annotate(
            status=F('chosen_internships_count')-F('total_count')
        )

    status_stats = {
        'OK': students_info.filter(status__gte=0).count(),
        'NOK': students_info.filter(status__lt=0).count(),
        'UNKNOWN': students_info.filter(status__isnull=True).count(),
    }

    if filters:
        filter_name, filter_current_internship = filters
        if filter_name:
            students_info = students_info.filter(person__last_name__unaccent__icontains=filter_name) | \
                            students_info.filter(person__first_name__unaccent__icontains=filter_name)
        if filter_current_internship:
            students_info = students_info.exclude(
                Q(current_internship__isnull=True)
                | Q(current_internship__exact=''))

    paginated_students_info = get_object_list(request, students_info)
    return paginated_students_info, status_stats
Example #10
0
def detail(request, course_id):
    try:
        course = Course.objects.get(id=course_id)
        exams = course.exam_set.filter(end_date__gte = date.today())
    except Course.DoesNotExist:
        raise Http404
    return render_to_response('course_detail.html', {'exams': exams, 'course' : course}, RequestContext(request))
Example #11
0
class Reservation(models.Model):
    STATUS = (
        ('New', 'New'),
        ('Accepted', 'Accepted'),
        ('Completed', 'Completed'),
        ('Canceled', 'Canceled'),
    )
    car = models.ForeignKey(Car, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=50, blank=True)
    surname = models.CharField(max_length=50, blank=True)
    phone = models.CharField(blank=True, max_length=20)
    start_from = models.CharField(max_length=50, blank=True)
    destination_to = models.CharField(max_length=50, blank=True)
    distance = models.IntegerField(blank=True)
    time = models.CharField(blank=True, max_length=10)
    kisi_sayisi = models.IntegerField(blank=True, null=True)
    status = models.CharField(max_length=10, choices=STATUS, default='New')
    date = models.DateField(default=date.today().strftime('%Y-%m-%d'),
                            blank=True)
    address = models.TextField(max_length=100, blank=True)
    adminnote = models.CharField(blank=True, max_length=100)
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

    @property
    def total(self):
        return (self.distance * self.car.price)

    @property
    def price(self):
        return (self.car.price)
Example #12
0
    def test_view_loads_correct_data(self):
        today = date.today()

        user1 = User.objects.create(
            username='******', email='*****@*****.**', password='******',
            first_name='User', last_name='1', is_active=True
        )
        user2 = User.objects.create(
            username='******', email='*****@*****.**', password='******',
            first_name='User', last_name='2', is_active=True
        )

        UserInfo.objects.create(user=user1, year=today.year - 1)
        UserInfo.objects.create(user=user2, year=today.year - 2)

        value = str(user1.pk) + ' Y, ' + str(user2.pk) + ' N'

        StatusUpdate.objects.create(
            date=today, value=value)

        response = self.client.get(
            reverse('status-update-detail', kwargs={
                'day': today.day, 'month': today.month, 'year': today.year}))

        self.assertIn('User 1', response.content.decode('utf8'))
        self.assertIn('User 2', response.content.decode('utf8'))
Example #13
0
    def get_queryset(self):
        user = self.request.user
        year = self.request.GET.get('year')
        month = self.request.GET.get('month')
        day = self.request.GET.get('day')

        if not year or not month:
            today = date.today()
            year = today.year
            month = today.month
        if not day:
            queryset = Calendar.objects.filter(show_time__month=month,
                                               show_time__year=year)
        else:
            queryset = Calendar.objects.filter(show_time__day=day,
                                               show_time__month=month,
                                               show_time__year=year)
        queryset_ret = queryset.filter(user=user)

        if user.team:
            queryset_ret |= queryset.filter(team=user.team)

        if user.major:
            queryset_ret |= queryset.filter(major=user.major)

        if user.faculty:
            queryset_ret |= queryset.filter(faculty=user.faculty)

        if user.classes:
            queryset_ret |= queryset.filter(classes=user.classes)

        return queryset_ret
    def update(self, instance, validated_data):
        user = self.context.get('request').user

        authorized_reas = get_user_reas(user).all()
        rea = instance.bed.unit.reanimation_service
        if rea is None:
            raise serializers.ValidationError('The reanimation service could not be found.')

        if rea not in authorized_reas:
            raise PermissionDenied

        new_bed_id = validated_data.pop("id_bed", None)
        if new_bed_id:
            if int(new_bed_id) != instance.bed.id:
                new_bed = Bed.objects.filter(id=new_bed_id).first()
                if new_bed is None:
                    raise serializers.ValidationError(f"Le lit demandé (${new_bed_id}) n'existe pas")

                new_bed_rea = new_bed.unit.reanimation_service
                if new_bed_rea not in authorized_reas:
                    raise serializers.ValidationError(f"Le lit demandé (${new_bed_id}) appartien au "
                                                      f"service ${new_bed_rea}. Vous n'avez pas les accès.")

                if new_bed.current_stay:
                    raise serializers.ValidationError(f"Le lit demandé (${new_bed_id}) est déjà occupé.")

                if new_bed.is_unusable:
                    raise serializers.ValidationError(f"Le lit demandé (${new_bed_id}) n'est pas en état de service.")

                validated_data["bed"] = new_bed

        terminate = validated_data.pop("terminate", None)
        if terminate:
            validated_data["end_date"] = date.today()
        return super(UnitStaySerializer, self).update(instance, validated_data)
Example #15
0
 def get_fechas(self):
     now = date.today()
     self.fin = date(now.year, now.month,
                     calendar.monthrange(now.year, now.month)[1])
     self.inicio = date(now.year, now.month, 1)
     self.inicio = datetime.combine(self.inicio, time.min)
     self.fin = datetime.combine(self.fin, time.max)
Example #16
0
class TodayList(generics.ListAPIView):
    today_date = date.today()

    queryset = Meeting.objects.filter(date=today_date)
    serializer_class = BasicMeetingSerializer

    permission_classes = (IsAuthenticated, )
def test_chart(request):
    try:
        measures = []
        measures_label = []
        for idx in reversed(range(7)):
            energy = 0
            past_date = date.today() - timedelta(days=idx)
            try:
                daily_measures_queryset = Measure.objects.filter(
                    created_at__day=past_date.day,
                    created_at__month=past_date.month,
                    created_at__year=past_date.year)
                for measure in daily_measures_queryset:
                    energy += measure.active_power
                energy = (energy / daily_measures_queryset.count()) * 24 / 1000
            except:
                energy = 0
            measures.append(energy)
            measures_label.append(past_date)

        return JsonResponse({
            'valid': True,
            'chart_values': measures,
            'chart_labels': measures_label
        })
    except:
        return JsonResponse({'valid': False, 'error_message': "Deu pau."})
def test_StrictDateField_form_with_instance_invalid():
    today = date.today()
    x = DateFieldModel(field=today)
    form_class = modelform_factory(model=DateFieldModel, fields=['field'])
    form = form_class(data={'field': 9223372036854775808}, instance=x)
    assert form.is_valid() is False
    assert form.errors == {'field': ['Enter a valid date.']}
def test_StrictDateField_form_without_instance_valid():
    today = date.today()
    form_class = modelform_factory(model=DateFieldModel, fields=['field'])
    form = form_class(data={'field': today})
    assert form.is_valid() is True
    assert form.errors == {}
    assert form.save().field == today
Example #20
0
 def today(self):
     today = date.today()
     return today.replace(day=1,
                          month=int(
                              self.kwargs.get('month', str(today.month))),
                          year=int(self.kwargs.get('year',
                                                   str(today.year))))
Example #21
0
File: views.py Project: wandeei/QA
    def post(self, request, slug):
        answer_question = Question.objects.get(slug=slug)

        body = request.POST['details']

        writer = UserOtherDetails.objects.get(user=request.user)

        date_written = date.today()
        time_written = timezone.now().time().strftime('%H:%M')
        question = answer_question

        answer = Answer()
        answer.question_string = answer_question.title
        answer.body = body
        answer.writer = writer
        answer.date_written = date_written
        answer.time_written = time_written
        answer.question = question
        answer.save()

        answer_question.no_of_answers += 1
        answer_question.save()

        writer.increase_no_of_answers()
        writer.save()

        return redirect('/questions/' + question.slug)
Example #22
0
    def queryset(self, request, queryset):

        val = self.value()

        today = date.today()

        # note: groups with no related item (groupismajority) will be considered
        # as not in council

        if val == '1':
            queryset = queryset.exclude(groupismajority__isnull=True).filter(
                Q(groupismajority__end_date__gt=today)
                | Q(groupismajority__end_date__isnull=True))

        elif val == '0':
            # the check for groups NOT in majority is more complex because
            # we have to check that ALL related objects (groupismajority)
            # have an end_date previous the current date
            groups_in_council = Group.objects.exclude(
                groupismajority__isnull=True).filter(
                    Q(groupismajority__end_date__gt=today)
                    | Q(groupismajority__end_date__isnull=True))

            queryset = queryset.exclude(pk__in=groups_in_council)

        return queryset
Example #23
0
def reminder_cronjob():
    today = date.today()
    semester = current_semester()
    fahrt_date_reminder(semester, today)
    fahrt_payment_reminder(semester, today)
    tutor_reminder(semester, today)
    guidedtour_reminder(semester, today)
Example #24
0
def edit_equipment(request, asset_id=None):
    instance = get_object_or_404(Equipment, asset_id=asset_id)
    form = EquipmentForm(request.POST or None, instance=instance)
    if form.is_valid():
        equipment = form.save(commit=False)

        equipment.category_id = equipment.model.model_category_id
        equipment.risk_score = equipment.category.category_risk_score + equipment.department.department_risk_score
        if equipment.risk_score > 6:
            equipment.ppm_intervel = 180
        else:
            equipment.ppm_intervel = 365
        equipment.next_service_date = equipment.service_date + datetime.timedelta(days=equipment.ppm_intervel)
        d = (equipment.next_service_date - date.today()).days

        equipment.ppm_due_days = d

        equipment.save()
        instance = equipment
        i = Equipment.objects.get(pk=instance.asset_id)
        i.risk_score = i.category.category_risk_score + i.department.department_risk_score
        i.save()

        return redirect('view_equipment', asset_id)

    context = {
        "title": 'Edit ' + str(instance.asset_id),
        "instance": instance,
        "form": form,
        "asset_id": asset_id,

    }
    return render(request, "edit_equipment.html", context)
Example #25
0
    def update_signin_attempts(self, failed: bool):
        """
        :param failed if `True` a failed sign-in attempt count is incremented by one(+1) which will in turn translate
        to a minus one(-1) remaining attempts. If `False` failed attempts are reset to zero (0) and the remaining
        attempts are set to -1.
        :return: number of sign-in attempts left until account is deactivated
        """
        _, metered = max_sign_in_attempts()
        attempt, created = FailedSignInAttempt.objects.get_or_create(user=self)

        count_attr = 'attempt_count'
        zero_attempts_count = models.F(count_attr) - models.F(count_attr)
        if created:
            # new record was created
            if failed:
                attempt_count = attempt.attempt_count
            else:
                # sign-in was considered successful. Reset attempt count to 0
                attempt_count = zero_attempts_count
        else:
            # existing record was found
            if failed:
                attempt_count = models.F(count_attr) + 1
            else:
                # sign-in was considered successful. Reset attempt count to 0
                attempt_count = zero_attempts_count
        attempt.device_ip = self.device_ip
        attempt.attempt_date = dj_date.today()
        # if attempts are metered, use the latest attempt count otherwise
        # maintain it to zero i.e. assume there hasn't been a failed attempt
        attempt.attempt_count = attempt_count if metered else 0
        attempt.save()
        attempt.refresh_from_db()
        return self.__remaining_attempts(attempt) if failed else attempt.attempt_count - 1
def test_StrictDateField_ok_until_changed():
    """
    Ensure this value cannot change to an invalid state after being set
    """
    model = DateFieldModel(field=date.today())
    with pytest.raises(ValidationError):
        model.field = '2000-00-00'
Example #27
0
    def get_initial(self):
        init = super().get_initial()

        init.update({
            'year': date.today().year
        })

        return init
Example #28
0
 def list(self, request, *args, **kwargs):
     target_seeker = self.get_object()
     queryset = target_seeker.made_requests.filter((
         Q(valid_until__gt=date.today()) & Q(status="OP")) | Q(
             Q(selected_donor=self.request.user.donor_profile)
             & Q(status="CL"))).order_by('-created')
     serializer = self.get_serializer(queryset, many=True)
     return Response(serializer.data)
Example #29
0
    def test_polls_are_active(self):
        url = reverse('active_polls')
        response = self.client.get(url)
        expected_response = [
            {'id': 3, 'question_set': [
                {'id': 4, 'text': 'Как работают Middleware?',
                 'type': 'TEXT_ANSWER'},
                {'id': 5, 'text': 'Django или Flask?',
                 'type': 'SINGLE_ANSWER'},
                {'id': 6, 'text': 'Какие возможности в Django?',
                 'type': 'SEVERAL_OPTIONS_ANSWER'}],
             'name': 'Проверочный опрос', 'start_date': str(date.today()),
             'end_date': str(date.today()),
             'description': 'Описание для опроса'}]

        self.assertListEqual(response.json(), expected_response)
        self.assertEqual(response.status_code, HTTP_200_OK)
Example #30
0
 def test_create_user_account_for_internship_master(self,
                                                    mock_ldap_api_call):
     master = MasterFactory(person=PersonFactory(birth_date=date.today()))
     url = reverse('create_accounts', kwargs={'cohort_id': self.cohort.pk})
     response = self.client.post(url, data={'selected_master': [master.pk]})
     messages_list = [msg for msg in response.wsgi_request._messages]
     self.assertEqual(messages_list[0].level_tag, "success")
     self.assertIn(str(master.person), messages_list[0].message)
def test_StrictDateField_update_via_queryset_invalid_then_get():
    """
    So for whatever reason, by the time this gets to the FieldCleaningDescriptor
    the 'blep' has been converted into True ... fun.
    """
    model = DateFieldModel.objects.create(field=date.today())
    model.__class__.objects.filter(pk=model.pk).update(field='2000-01-01')
    assert model.__class__.objects.get(pk=model.pk).field == date(2000, 1, 1)
Example #32
0
def upload_and_rename_picture(instance, filename):
    today = date.today()
    path = "quiz/{}-{}-{}/".format(
        today.year, today.month, today.day) + "".join([
            random.choice(string.ascii_letters + string.digits)
            for _ in range(20)
        ])
    return path
Example #33
0
def age_validator(value):
    MIN_AGE = 18
    today = date.today()
    if (today - value).days < MIN_AGE * 365 + 5:
        raise ValidationError({
            'email': [
                'Account holder must be at least %d years old' % MIN_AGE,
            ]
        })
def test_StrictDateField_form_with_instance_valid():
    today = date.today()
    future = today + timedelta(days=2)
    x = DateFieldModel(field=today)
    form_class = modelform_factory(model=DateFieldModel, fields=['field'])
    form = form_class(data={'field': future}, instance=x)
    assert form.is_valid() is True
    assert form.errors == {}
    assert form.save().field == future
Example #35
0
 def create(self, request, *args, **kwargs):
     serializer = PageViewCreateSerializer(data=request.data)
     serializer.is_valid(raise_exception=True)
     url = serializer.data['url']
     dt = date.today()
     pv, created = self.queryset.get_or_create(url=url, date=dt)
     pv.count += 1
     pv.save()
     return Response(data=self.get_serializer(pv).data)
Example #36
0
 def validate(self, attrs):
     attrs = super(UserSerializer, self).validate(attrs)
     birthday = attrs['birthday']
     if birthday:
         MIN_AGE = 18
         today = date.today()
         if (today - birthday).days < MIN_AGE * 365 + 5:
             raise ValidationError({'email': ['Account holder must be at least %d years old' % MIN_AGE, ]})
     return attrs
Example #37
0
def vendas_pachamama(request):

    queryset = BaseVendasRealizadas.objects.all()

    mes_pagamento_vendas = sorted(
        set([int(obj.mes_faturamento_2) for obj in queryset]))
    produtos_vendas_lista = sorted(
        set([str(obj.produto_2) for obj in queryset]))

    periodo_vendas = []
    produtos_vendas = []

    meses = {
        'Jan': 1,
        'Fev': 2,
        'Mar': 3,
        'Abr': 4,
        'Mai': 5,
        'Jun': 6,
        'Jul': 7,
        'Ago': 8,
        'Set': 9,
        'Out': 10,
        'Nov': 11,
        'Dez': 12
    }

    for i in meses:
        data_1 = date.today()
        data = '{}-{}'.format(i, data_1.year)
        periodo_vendas.append(data)

    STATUS = {'status_1': 'Conciliado'}

    CLASSIFICACAO_RESULTADO = {
        'produtos': '( + ) Produtos',
    }

    for mes in mes_pagamento_vendas:
        cartao_lan = int(
            BaseVendasRealizadas.objects.filter(
                situacao_faturamento_2=STATUS['status_1'],
                classificacao_resultado_faturamento_2=CLASSIFICACAO_RESULTADO[
                    'produtos'],
                mes_faturamento_2=mes,
                ano_faturamento_2='2020').aggregate(
                    Sum('total_mercadoria_2'))['total_mercadoria_2__sum'])

        produtos_vendas.append(cartao_lan)

    return render(
        request, 'pachamama/vendas.html', {
            'produtos_vendas': produtos_vendas,
            'periodo_vendas': periodo_vendas,
            'produtos_vendas_lista': produtos_vendas_lista
        })
Example #38
0
def add_calendar(title,
                 content,
                 type,
                 url,
                 is_event,
                 user=None,
                 faculty=None,
                 major=None,
                 classes=None,
                 team=None,
                 show_time=None):
    if not show_time:
        show_time = date.today()

    key_calendar = "%s-%s-%d-%s-%s-%s-%s-%s-%s-%s" % \
                   (
                       title, content, type, str(url),
                       str(getattr(user, "username", "none")),
                       str(getattr(faculty, "name", "none")),
                       str(getattr(major, "name", "none")),
                       str(getattr(classes, "name", "none")),
                       str(getattr(team, "name", "none")),
                       str(show_time),
                   )
    key_calendar = hashlib.md5(key_calendar).hexdigest().decode("utf-8")
    obj = _calendar_cache_instance.get(key_calendar)
    if not obj:
        obj = Calendar.objects.filter(title=title,
                                      content=content,
                                      type=type,
                                      url=url,
                                      is_event=is_event,
                                      user=user,
                                      faculty=faculty,
                                      major=major,
                                      classes=classes,
                                      team=team,
                                      show_time=show_time)
    if obj:
        return

    obj = Calendar.objects.create(
        title=title,
        content=content,
        type=type,
        url=url,
        is_event=is_event,
        user=user,
        faculty=faculty,
        major=major,
        classes=classes,
        team=team,
    )

    cache_utils.delete_cache(_calendar_cache_instance)
    _calendar_cache_instance.set(key_calendar, obj, settings.DEFAULT_CACHE_AGE)
Example #39
0
def dades_basiques(request):

    (user, l4) = tools.getImpersonateUser(request)
    sessioImpersonada = tools.sessioImpersonada(request)
        
    return {
            'data': date.today(),
            'user': user,
            'l4': l4,
            'sessioImpersonada': sessioImpersonada,
            'menu': calcula_menu( user, request.path_info ),
             }
Example #40
0
    def list(self, request):
        """
        Lists student counts by state and month

        :param request:
        :return:
        """
        states = (
            ([StudentProfileState.NEW, StudentProfileState.IMPORTED,
              StudentProfileState.MISSING_INFORMATION, StudentProfileState.INTERVIEW_SCHEDULED], _('Pending')),
            ([StudentProfileState.REJECTED, StudentProfileState.OUTBOARDED], _('Rejected or Outboarded')),
            ([StudentProfileState.ACCEPTED], _('Accepted into Pool')),
        )

        truncate_date = connection.ops.date_trunc_sql('month', 'auth_user.date_joined')
        num_months = 6
        start_date = date.today() - relativedelta(months=num_months)
        months = [start_date + relativedelta(months=x) for x in range(0, num_months + 1)]
        categories = ["%s %s" % (m.strftime('%b'), m.strftime('%y')) for m in months]
        columns = []
        month_nums = [m.month for m in months]

        for keys, label in states:
            """
            Count each state and group by month
            """
            state_data = [label]
            results = StudentProfile.objects.filter(state__in=keys, user__date_joined__isnull=False)\
                .extra({'month': truncate_date})\
                .annotate(count=Count('id'))\
                .values('month', 'count')

            results_dict = {}
            for r in results:
                if r['month'].month in results_dict:
                    results_dict[r['month'].month] += r['count']
                else:
                    results_dict[r['month'].month] = r['count']
            for m in month_nums:
                count = 0
                if m in results_dict:
                    count = results_dict[m]
                state_data.append(count)
            columns.append(state_data)

        # Add totals
        columns.append(['Total'] + [StudentProfile.objects.filter(
            user__date_joined__lt=m,
            state=StudentProfileState.ACCEPTED
        ).count() for m in months])

        return Response({'categories': categories, 'columns': columns})
Example #41
0
 def get_age(self):
     today = date.today()
     born = self.birthday
     try: # raised when birth date is February 29 and the current year is not a leap year
         birthday = born.replace(year=today.year)
     except ValueError:
         birthday = born.replace(year=today.year, day=born.day-1)
     except AttributeError:
         return 0
     if birthday > today:
         return today.year - born.year - 1
     else:
         return today.year - born.year
Example #42
0
def resultats( request ):

    (user, l4) = tools.getImpersonateUser(request)
    professor = User2Professor( user )     
    
    report = []
    
 
    taula = tools.classebuida()
    taula.titol = tools.classebuida()
    taula.titol.contingut = ""
    taula.capceleres = []
    
    capcelera = tools.classebuida()
    capcelera.amplade = 35
    capcelera.contingut = u'{0}'.format( u'Avaluació qualitativa' )
    taula.capceleres.append(capcelera)
    
    capcelera = tools.classebuida()
    capcelera.amplade = 65
    capcelera.contingut = u'Dades'
    taula.capceleres.append(capcelera)
    
    taula.fileres = []    
    for qualitativa in AvaluacioQualitativa.objects.all():
        filera = []
        camp = tools.classebuida()
        camp.contingut = u'{0}'.format(unicode( qualitativa ) )
        filera.append(camp)
        
        camp = tools.classebuida()
        obertaLaQualitativa =  qualitativa.data_obrir_avaluacio <=  date.today() <= qualitativa.data_tancar_avaluacio
        estat = '(Oberta)' if obertaLaQualitativa else '(Tancada)'
        camp.contingut = u'del {0} al {1} {2}'.format( qualitativa.data_obrir_avaluacio, qualitativa.data_tancar_avaluacio, estat)
        camp.enllac = '/avaluacioQualitativa/report/{0}'.format( qualitativa.pk )
        filera.append(camp)
        
        taula.fileres.append( filera )

        report.append(taula)
        
    return render(
                request,
                'report.html',
                    {'report': report,
                     'head': u'Avaluacions Qualitatives' ,
                    },
                )
def dades_basiques(request):

    (user, l4) = tools.getImpersonateUser(request)
    sessioImpersonada = tools.sessioImpersonada(request)

    my_timeoff = calculate_my_time_off(request.user)
    return {
            'data': date.today(),
            'user': user,
            'l4': l4,
            'sessioImpersonada': sessioImpersonada,
            'menu': calcula_menu( user, request.path_info ),
            'my_timeoff': my_timeoff,
            'my_safe_timeoff': my_timeoff - 10 if bool(my_timeoff) else my_timeoff,
            'es_direccio_o_impersonat': sessioImpersonada or user.groups.filter( name=u"direcció" ),
             }
Example #44
0
 def formatday(self, day, weekday):
     if day != 0:
         cssclass = self.cssclasses[weekday]
         day_date = date(self.year, self.month, day)
         if date.today() == day_date:
             cssclass += ' today'
         if day_date in self.counts:
             cssclass += ' filled'
             body = ['<ul>']
             for item in self.counts[day_date]:
                 body.append('<li>')
                 body.append(str(item['dcount']))
                 body.append('</li>')
             body.append('</ul>')
             return self.day_cell(cssclass, '<span class="day">%d</span> %s' % (day, ''.join(body)))
         return self.day_cell(cssclass, '<span class="day">%d</span>' % day)
     return self.day_cell('noday', '&nbsp;')
def test_StrictDateField_descriptor_doesnt_disappear():
    """
    don't clobber the descriptor
    """
    today = date.today()
    value = DateFieldModel(field=today)
    assert value.field == today
    value.field = '2015-04-16'
    assert value.field == date(2015, 4, 16)
    with pytest.raises(ValidationError):
        value.field = 'v'*256
    assert value.field == date(2015, 4, 16)
    value.field = today
    assert value.field == today
    with pytest.raises(TypeError):
        value.field = -1
    with pytest.raises(ValidationError):
        value.field = '-1'
Example #46
0
def mostraGrupPromocionar(request, grup=""):

    from datetime import date
    PromoFormset = modelformset_factory(Alumne, form=promoForm, extra = 0)
    if request.method == 'POST':
        curs_vinent = request.POST.get('curs_desti')
        print request.POST
        formset = PromoFormset(request.POST)
        for form in formset.forms:
            if form.is_valid():

                decisio = form.cleaned_data['decisio']
                if (decisio == "2"):

                    id =  form.cleaned_data['id'].id
                    alumne = Alumne.objects.get(id=id)
                    alumne.data_baixa = date.today()
                    alumne.estat_sincronitzacio = 'DEL'
                    alumne.motiu_bloqueig = 'Baixa'
                    alumne.save()


                if (decisio == "0"):

                    id = form.cleaned_data['id'].id
                    alumne = Alumne.objects.get(id = id)
                    alumne.grup_id = curs_vinent
                    alumne.save()


        pass

    grups = Grup.objects.all().order_by("descripcio_grup")
    grup_actual = Grup.objects.get(id=grup)
    alumnes = Alumne.objects.filter(grup=grup, data_baixa__isnull = True ).order_by("cognoms")
    if (len(alumnes) == 0):

        msg = "Aquest grup no te alumnes actualment."
        return render(request,'mostraGrupsPromocionar.html', {"grups" : grups, "msg": msg})

    formset = PromoFormset(queryset=alumnes)

    return render(request,'mostraGrupPromocionar.html', {"grup_actual" : grup_actual, "formset" : formset, "grups":grups})
Example #47
0
def user_home(request):
    """Defines the user's home page. Shows a tabular representation of the user's documents"""
    user = request.user
    year = request.GET.get('year')
    if request.GET.get('query'):
        # if week is ALL, then create the date
        week = request.GET.get('week')
        month = request.GET.get('month')
        if week == 'All':
            filter_date = datetime.strptime(month + ' ' + year, "%m %Y")
            user_notes = Note.objects.filter(user_id=user.id, date_due__gte=filter_date,
                                             date_due__lt=filter_date + timedelta(weeks=4))
        # else, do some tricks on weeks & months
        else:
            filter_date = datetime.strptime(month + ' ' + year, "%m %Y")
            week_start = filter_date + timedelta(weeks=int(week) - 1)
            user_notes = Note.objects.filter(user_id=user.id,
                                             date_due__gte=week_start,
                                             date_due__lt=week_start + timedelta(weeks=1))

    else:
        user_notes = Note.objects.filter(user_id=user.id)

    curr_date = date.today()
    week_ago = curr_date - timedelta(days=7)
    purged_items = []
    # purge 7 days rule
    for user_note in user_notes:
        if user_note.date_posted.date() < week_ago:
            # delete
            Note.objects.filter(id=user_note.id).delete()
            purged_items.append(user_note.id)

    user_notes = user_notes.exclude(id__in=purged_items)

    # +1 day rule.
    for user_note in user_notes:
        if (not user_note.is_cancelled or not user_note.is_done) and user_note.date_due.date() < curr_date:
            user_note.date_due = curr_date + timedelta(days=1)

    return render(request, 'todolist/list.html',
                  {'notes': sorted(user_notes, key=lambda note: note.date_posted, reverse=True)})
Example #48
0
def note_new(request):
    context = RequestContext(request)
    if request.method == 'POST':
        note_form = NewNoteForm(data=request.POST)
        if note_form.is_valid():
            new_note = Note()
            new_note.text = note_form.cleaned_data['text']
            new_note.is_cancelled = False
            new_note.is_done = False
            new_note.date_posted = date.today()
            new_note.date_due = note_form.cleaned_data['date_due']
            new_note.save()

            return HttpResponseRedirect('/todolist/')
        else:
            print(note_form.errors)

    else:
        note_form = NewNoteForm()
    return render_to_response('todolist/new_note.html', {'form': note_form}, context)
Example #49
0
def task_status(request):
    if request.method != "POST":
        raise Http404
    else:
        postdata = request.POST.copy()
        id = postdata.get("id", 0)
        value = postdata.get("value", "")
        if not id:
            return HttpResponse("Bad ID")
        if not value:
            return HttpResponse("Bad value")

        task = Task.objects.get(pk=id)
        task.status = value
        if value == "ended":
            task.date_out = date.today()
        else:
            if task.date_out:
                task.date_out = None
        task.save()

        return HttpResponse("OK")
Example #50
0
def NouPost(request):
    if request.method == 'POST':
        formulariPost = NouPostForm(request.POST)
        if formulariPost.is_valid():
            autor = request.user
            data = str(date.today())
            tema = formulariPost.cleaned_data['tema']
            titol = formulariPost.cleaned_data['titol']
            entrada = formulariPost.cleaned_data['entrada']
            post = Post()
            post.autor = autor
            post.data_publicacio = data
            post.entrada = entrada
            post.tema = tema
            post.titol = titol
            post.save()
            messages.add_message(request, messages.INFO, 'Post publicat correctament.')
            return HttpResponseRedirect('/')
        else:
            messages.add_message(request, messages.INFO, 'Error publicant el post.')
    else:
        formulariPost = NouPostForm()
    return render(request,'Blog/nouPost.html', {'formulariPost' : formulariPost})
Example #51
0
 def given_a_transaction(self, text):
     t = Transaction(transaction_date=date.today(), currency_date=date.today(), reference=0, account_id=0, value=0, text=text)
     return t
Example #52
0
def elsMeusAlumnesAndAssignatures( request ):

    (user, l4) = tools.getImpersonateUser(request)
    professor = User2Professor( user )     
    
    report = []
    
    nTaula=0

    assignatura_grup = set()
    for ca in Impartir.objects.filter( horari__professor = professor ):
        if ca.horari.grup is not None: 
            assignatura_grup.add( (ca.horari.assignatura, ca.horari.grup )  )
            
    for (assignatura, grup,) in  assignatura_grup: 
    
        taula = tools.classebuida()
        taula.codi = nTaula; nTaula+=1
        taula.tabTitle = u'{0} - {1}'.format(unicode( assignatura ) , unicode( grup ) )
        
        taula.titol = tools.classebuida()
        taula.titol.contingut = ""
        
        capcelera_nom = tools.classebuida()
        capcelera_nom.amplade = 25
        capcelera_nom.contingut = u'{0} - {1}'.format(unicode( assignatura ) , unicode( grup ) )

        capcelera_nIncidencies = tools.classebuida()
        capcelera_nIncidencies.amplade = 10
        capcelera_nIncidencies.contingut = u'Incidències'

        capcelera_assistencia = tools.classebuida()
        capcelera_assistencia.amplade = 5
        capcelera_assistencia.contingut = u'Assist.'

        capcelera_nFaltes = tools.classebuida()
        capcelera_nFaltes.amplade = 15
        nClasses = Impartir.objects.filter( horari__professor = professor ,
                                            horari__assignatura = assignatura, 
                                            horari__grup = grup 
                                            ).count()
        nClassesImpartides =   Impartir.objects.filter( 
                                            horari__professor = professor ,
                                            horari__assignatura = assignatura, 
                                            horari__grup = grup, 
                                            dia_impartir__lte = date.today() 
                                            ).count() 

        capcelera_nFaltes.contingut = u' ({0}h impartides / {1}h)'.format( nClassesImpartides, nClasses)            

        capcelera_contacte = tools.classebuida()
        capcelera_contacte.amplade = 45
        capcelera_contacte.contingut = u'Dades de contacte Tutors.'
        
        taula.capceleres = [capcelera_nom, capcelera_nIncidencies, capcelera_assistencia, capcelera_nFaltes, capcelera_contacte]
        
        taula.fileres = []
        for alumne in Alumne.objects.filter( 
                            controlassistencia__impartir__horari__grup = grup,
                            controlassistencia__impartir__horari__assignatura = assignatura, 
                            controlassistencia__impartir__horari__professor = professor  ).distinct().order_by('cognoms'):
            
            filera = []
            
            #-nom--------------------------------------------
            camp_nom = tools.classebuida()
            camp_nom.enllac = None
            camp_nom.contingut = u'{0}'.format( alumne )
            filera.append(camp_nom)
            
            #-incidències--------------------------------------------
            camp_nIncidencies = tools.classebuida()
            camp_nIncidencies.enllac = None
            nIncidencies = alumne.incidencia_set.filter(
                                                        control_assistencia__impartir__horari__grup = grup,
                                                        control_assistencia__impartir__horari__professor = professor, 
                                                        control_assistencia__impartir__horari__assignatura = assignatura,
                                                        tipus__es_informativa = False 
                                                       ).count()
            nExpulsions = alumne.expulsio_set.filter( 
                                                        control_assistencia__impartir__horari__grup = grup,
                                                        control_assistencia__impartir__horari__professor = professor, 
                                                        control_assistencia__impartir__horari__assignatura = assignatura
                                                    ).exclude(
                                                        estat = 'ES'
                                                    ).count()
            camp_nIncidencies.multipleContingut = [ ( u'Incid: {0}'.format( nIncidencies ), None, ), 
                                                    ( u'Expul: {0}'.format( nExpulsions), None,  ) ]
            filera.append(camp_nIncidencies)

            #-Assistencia--------------------------------------------
            from django.db.models import Sum, Count
#                nFaltes = alumne.controlassistencia_set.filter( 
#                                                               estat__isnull = False  ,
#                                                               impartir__horari__assignatura = assignatura
#                                                        ).aggregate( 
#                                        ausencia = Sum( 'estat__pct_ausencia' ),
#                                        classes = Count( 'estat' ) 
#                                                        )
            
            controls = alumne.controlassistencia_set.filter(   
                                                    impartir__dia_impartir__lte = datetime.today(), 
                                                    impartir__horari__grup = grup,
                                                    impartir__horari__professor = professor, 
                                                    impartir__horari__assignatura = assignatura 
                                                           )
            
            nFaltesNoJustificades = controls.filter(  Q(estat__codi_estat = 'F' )  ).count()
            nFaltesJustificades = controls.filter( estat__codi_estat = 'J'  ).count()
            nRetards = controls.filter( estat__codi_estat = 'R'  ).count()
            nControls = controls.filter(estat__codi_estat__isnull = False ).count( )
            camp = tools.classebuida()
            camp.enllac = None
            tpc = 100.0 - ( ( 100.0 * float(nFaltesNoJustificades + nFaltesJustificades) ) / float(nControls) ) if nControls > 0 else 'N/A'
            camp.contingut = u"""{0:.2f}%""".format( tpc ) if nControls > 0 else 'N/A'
            filera.append(camp)

            camp = tools.classebuida()
            camp.enllac = None
            contingut = "Controls: {0},F.no J.: {1},F.Just: {2},Retards: {3}".format( nControls, nFaltesNoJustificades , nFaltesJustificades, nRetards)
            camp.multipleContingut =  [ (c, None,) for c in contingut.split(',') ]
            filera.append(camp)

            #--
            #-nom--------------------------------------------
            camp = tools.classebuida()
            camp.enllac = None
            camp.multipleContingut = [(u'{0} ({1}, {2}, {3})'.format( alumne.rp1_nom,
                                                                        alumne.rp1_telefon,
                                                                        alumne.rp1_mobil,
                                                                        alumne.rp1_correu ), None,),
                                      (u'{0} ({1}, {2}, {3})'.format( alumne.rp2_nom,
                                                                        alumne.rp2_telefon,
                                                                        alumne.rp2_mobil,
                                                                        alumne.rp2_correu ), None,)]
            filera.append(camp)
            taula.fileres.append( filera )
        
        report.append(taula)
        
    return render(
                request,
                'reportTabs.html',
                    {'report': report,
                     'head': u'Informació alumnes' ,
                    },
                )
Example #53
0
 def age(self):
     """
     Returns an integer of year between birth_date and now
     """
     # end_date = in_date if in_date else date.today()
     return (date.today() - self.birth_date).days / 365
def test_StrictDateField_save():
    x = DateFieldModel(field=date.today())
    x.save()
    assert model_to_dict(x) == model_to_dict(DateFieldModel.objects.get(pk=x.pk))
 def close(self):
     self.state = STATE_ARCHIVE
     self.closingdate = date.today()
Example #56
0
 def today(self):
     today = date.today()
     return today.replace(day=1,
                          month=int(self.kwargs.get('month', str(today.month))),
                          year=int(self.kwargs.get('year', str(today.year))))
Example #57
0
        }
        weekdays.append(d)
        _date += timedelta(days=1)
    return weekdays

def lastweek(day=date.today()):
    onthelastsunday = day + timedelta(days=-(date.weekday(day) + 7))
    onsunday = day + timedelta(days=-(date.weekday(day)))
    return (onthelastsunday, onsunday)
        
def datedelta2list(d1,d2):
    dlist = []
    for i in range((d2-d1).days + 1):
        dlist.append(d1 + timedelta(days=i))
    return dlist

class Weekly():
    def __init__(self, sunday, saturday):
        self.sunday = sunday
        self.saturday = saturday
        
    def workdays(self):
        return 5
    
    def workhours(self, hours_of_day):
        return self.workdays() * hours_of_day

if __name__ == '__main__':
    start,end = lastweek(date.today())
    print start,end
Example #58
0
def calcula_menu( user , path ):
    
    if not user.is_authenticated():
        return

    #mire a quins grups està aquest usuari:
    al = Group.objects.get_or_create(name= 'alumne' )[0] in user.groups.all()
    di = not al and Group.objects.get_or_create(name= 'direcció' )[0] in user.groups.all()
    pr = not al and Group.objects.get_or_create(name= 'professors' )[0] in user.groups.all()
    pl = not al and Group.objects.get_or_create(name= 'professional' )[0] in user.groups.all()
    co = not al and Group.objects.get_or_create(name= 'consergeria' )[0] in user.groups.all()
    pg = not al and Group.objects.get_or_create(name= 'psicopedagog' )[0] in user.groups.all()
    so = not al and Group.objects.get_or_create(name= 'sortides' )[0] in user.groups.all()
    tu = not al and pr and ( User2Professor( user).tutor_set.exists() or User2Professor( user).tutorindividualitzat_set.exists() )    
    tots = di or pr or pl or co or al or pg
    
    #Comprovar si té missatges sense llegir
    nMissatges = user.destinatari_set.filter( moment_lectura__isnull = True ).count()
    fa2segons = datetime.now() - timedelta( seconds = 2 )
    nMissatgesDelta = user.destinatari_set.filter( moment_lectura__gte = fa2segons ).count()
    
    #Comprovar si té expulsions sense tramitar o cal fer expulsions per acumulació
    teExpulsionsSenseTramitar= False
    if pr:
        professor = User2Professor( user )
        teExpulsionsSenseTramitar = professor.expulsio_set.exclude( tramitacio_finalitzada = True ).exists() 
        
        #Acumulació Incidències
        if settings.CUSTOM_INCIDENCIES_PROVOQUEN_EXPULSIO and not teExpulsionsSenseTramitar:
            professional = User2Professional( user )
            teExpulsionsSenseTramitar = ( Alumne
                                          .objects
                                          .order_by()
                                          .filter( incidencia__professional = professional, 
                                                   incidencia__tipus__es_informativa = False,
                                                   incidencia__gestionada_pel_tutor = False,
                                                   incidencia__es_vigent = True )
                                          .annotate( n = Count( 'incidencia' ) )
                                          .filter( n__gte = 3 )
                                          .exists()
                                        )
    
    #Comprovar si hi ha una qualitativa oberta
    hiHaUnaQualitativaOberta = False
    if pr:
        from aula.apps.avaluacioQualitativa.models import AvaluacioQualitativa
        hiHaUnaQualitativaOberta = AvaluacioQualitativa.objects.filter(  data_obrir_avaluacio__lte =  date.today(),
                                                                         data_tancar_avaluacio__gte = date.today() ).exists()
    
    menu = { 'items':[], 'subitems':[], 'subsubitems':[], }

    try:
        nom_path = resolve( path ).url_name
    except:
        return menu
    
    menu["esalumne"]=al
    if al:
        alumneuser = AlumneUser.objects.get( id = user.id )
        alumne = alumneuser.getAlumne()
        menu["nomusuari"]= u"Família de {alumne}".format( alumne=alumne.nom )
    else:
        menu["nomusuari"]= user.first_name or user.username 
    
    try:
        menu_id, submenu_id, subsubmenu_id = nom_path.split( '__' )[:3]
    except:
        return menu
    
    arbre_tutoria = (
                      ("Actuacions", 'tutoria__actuacions__list', tu, None, None ),
                      ("Incidències de Tutor", 'tutoria__incidencies__list', tu, None, None ),
                      ("Justificar", 'tutoria__justificar__pre_justificar', tu, None, None ),
                      ("Cartes", 'tutoria__cartes_assistencia__gestio_cartes', tu, None, None ),                                      
                      ("Alumnes", 'tutoria__alumnes__list', tu, None, None ),
                      ("Assistència", 'tutoria__assistencia__list_entre_dates', tu, None, None ),                                      
                      ("Informe", 'tutoria__alumne__informe_setmanal', tu, None, None ),                                      
                      ("Portal", 'tutoria__relacio_families__dades_relacio_families', tu, None, None ),
                      ("Seguiment", 'tutoria__seguiment_tutorial__formulari', tu, None, None ),
                    )
    if settings.CUSTOM_TUTORS_INFORME:
        arbre_tutoria += (
                      ("Impressió Faltes i Incid.", 'tutoria__informe__informe_faltes_incidencies', tu, None, None ),                                      
                    )
        
    if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU' ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and ( di or pr ):
        professor = User2Professor( user )
        filtre = [ 'P', 'R', ]
        te_sortides_actives = ( Sortida
                       .objects
                       .exclude( estat = 'E' )
                       .filter( estat__in = filtre )
                       .filter( data_inici__gte = datetime.now() )
                       .filter( tutors_alumnes_convocats = professor )
                       .exists()
                      )    
        arbre_tutoria += (
                      ("Sortides", 'tutoria__justificarSortida__list', tu, ( u'!', 'info' ) if te_sortides_actives else None, None
                      ),                                      
                    )



    
    arbre1 = (

               #--Consergeria--------------------------------------------------------------------------
               ('consergeria', 'Consergeria', 'consergeria__missatges__envia_tutors', co, None,
                  (
                      ("Missatge a tutors", 'consergeria__missatges__envia_tutors', co, None, None ),
                      ("Incidència per retard", 'consergeria__incidencia__onbehalf', co, None, None ),

                   )
               ),
        
               #--Aula--------------------------------------------------------------------------
               #  id,    nom     vista                 seg      label
               ('aula', 'Aula', 'blanc__blanc__blanc', pr, teExpulsionsSenseTramitar or hiHaUnaQualitativaOberta ,
                  (
                      ("Presencia", 'aula__horari__horari', pr, None, None ),
                      #("Alumnes", 'aula__alumnes__alumnes_i_assignatures', pr, None, None ),

                      ("Alumnes", 'aula__alumnes__blanc', pr, None,
                          ( 
                            ("Els meus alumnes", 'aula__alumnes__alumnes_i_assignatures', pr, None),
                          ),                        
                      ),                                                            

                      ("Incidències", 'aula__incidencies__blanc', pr, ( u'!', 'info' ) if teExpulsionsSenseTramitar else None,
                          (
                            ("Incidències", 'aula__incidencies__les_meves_incidencies', pr, ( u'!', 'info' ) if teExpulsionsSenseTramitar else None),
                            ("Nova Incidència (fora d'aula)", 'aula__incidencies__posa_incidencia', pr, None ),
                            ("Recull Expulsió", 'aula__incidencies__posa_expulsio', pr, None),
                          ),                        
                      ),                                      
                      ("Matèries", 'aula__materies__blanc', pr, None, 
                          ( 
                            ("Llistat entre dates", 'aula__materies__assistencia_llistat_entre_dates', pr, None),
                            ("Calculadora UF", 'aula__materies__calculadora_uf', pr, None )
                          )
                      ),         
                      ("Qualitativa", 'aula__qualitativa__les_meves_avaulacions_qualitatives', pr, ( u'!', 'info' ) if hiHaUnaQualitativaOberta else None, None ),
                   )
               ),

               #--Tutoria--------------------------------------------------------------------------
               ('tutoria', 'Tutoria', 'tutoria__actuacions__list', tu, None,
                   arbre_tutoria
               ),

               #--Gestió--------------------------------------------------------------------------
               ('gestio', 'Gestió', 'gestio__reserva_aula__list', co or pl, None,
                  (
                      ("Reserva Aula", 'gestio__reserva_aula__list', co or pl, None, None),                                        
                      ("Cerca Alumne", 'gestio__usuari__cerca', co or pl, None, None),
                      ("Cerca Professor", 'gestio__professor__cerca', co or pl, None, None),  
                   )
               ),
                            
               #--psicopedagog--------------------------------------------------------------------------
               ('psico', 'Psicopedagog', 'psico__informes_alumne__list', pg or di, None,
                  (
                      ("Alumne", 'psico__informes_alumne__list', pg or di, None, None ),
                      ("Actuacions", 'psico__actuacions__list', pg or di, None, None ),
                   )
               ),

               #--Coord.Pedag--------------------------------------------------------------------------
               ('coordinacio_pedagogica', 'Coord.Pedag', 'coordinacio_pedagogica__qualitativa__blanc', di, None,
                  (
                      ("Qualitativa", 'coordinacio_pedagogica__qualitativa__blanc', di, None, 
                          (
                              ("Avaluacions", 'coordinacio_pedagogica__qualitativa__avaluacions', di , None  ),
                              ("Items", 'coordinacio_pedagogica__qualitativa__items', di , None  ),
                              ("Resultats", 'coordinacio_pedagogica__qualitativa__resultats_qualitatives', di , None  ),
                          ),
                      ),
                      ("Seguiment Tutorial", "coordinacio_pedagogica__seguiment_tutorial__preguntes", di, None, None ),
                   ),
               ),

               #--Coord.Alumnes--------------------------------------------------------------------------
               ('coordinacio_alumnes', 'Coord.Alumnes', 'coordinacio_alumnes__ranking__list', di, None,
                  (
                      ("Alertes Incid.", 'coordinacio_alumnes__ranking__list', di, None, None ),
                      ("Alertes Assist.", 'coordinacio_alumnes__assistencia_alertes__llistat', di, None, None ),
                      ("Cartes", 'coordinacio_alumnes__assistencia__cartes', di, None, None ),
                      ("Sancions", 'coordinacio_alumnes__sancions__sancions', di, None, None ),
                      ("Passa llista grup", 'coordinacio_alumnes__presencia__passa_llista_a_un_grup_tria', di, None, None ),
                      ("Impressió Faltes i Incid.", 'coordinacio_alumnes__alumne__informe_faltes_incidencies', di, None, None ),
                      #[email protected]
                      ("Indicadors", 'coordinacio_alumnes__indicadors__llistat', di, None, None ),
                   )
               ),

               #--Coord.Profess.--------------------------------------------------------------------------
               ('professorat', 'Coord.Prof', 'professorat__baixes__blanc', di, None,
                  (
                      ("Feina Absència", 'professorat__baixes__blanc', di, None,
                         (
                            ('Posar feina', 'professorat__baixes__complement_formulari_tria', di, None),
                            ('Imprimir feina', 'professorat__baixes__complement_formulari_impressio_tria' ,di, None),
                         ), 
                      ),
                      ("Tutors", 'professorat__tutors__blanc', di, None,
                         (
                            ('Tutors Grups', 'professorat__tutors__tutors_grups', di, None),
                            ('Tutors individualitzat', 'professorat__tutors__tutors_individualitzats', di, None),
                         ), 
                      ),
                      ("Professors", 'professorat__professors__list', di, None, None ),
                      ("Estat Tramitació Exp.", 'professorat__expulsions__control_tramitacio', di, None, None ),
                   ),
               ),

               #--Administració--------------------------------------------------------------------------
               ('administracio', 'Admin', 'administracio__sincronitza__blanc', di, None,
                  (
                      ("Sincronitza", 'administracio__sincronitza__blanc', di, None, 
                        (
                          ("Alumnes ESO/BAT", 'administracio__sincronitza__esfera', di , None  ),
                          ("Alumnes Cicles", 'administracio__sincronitza__saga', di, None),
                          ("Horaris", 'administracio__sincronitza__kronowin', di , None  ),
                          ("Aules", 'gestio__aula__assignacomentari', di, None),
                          ("Reprograma", 'administracio__sincronitza__regenerar_horaris', di , None  ),
                        ),
                      ),
                      ("Reset Passwd", 'administracio__professorat__reset_passwd', di, None, None ),
                      ("Càrrega Inicial", 'administracio__configuracio__carrega_inicial', di, None, None ),
                      ("Promocions", 'administracio__promocions__llista', di, None, None),
#                      ("Nou Alumne", 'administracio__alumnes__noualumne', di, None, None),
# Aquesta pantalla encara no té implementada la seva funcionalitat.
# Queda pendent acabar-la, o eliminar-la de l'aplicació.
                   )
               ),
        
               #--relacio_families--------------------------------------------------------------------------
               ('relacio_families', u'Famílies', 'relacio_families__informe__el_meu_informe', al, None,
                  (
                      ("Informe", 'relacio_families__informe__el_meu_informe', al, None, None ),
                      ("Paràmetres", 'relacio_families__configuracio__canvi_parametres', al, None, None ),
                   )
               ),
             )
    
    arbre2 = (

               #--Varis--------------------------------------------------------------------------
               ('varis', 'Ajuda i Avisos', 'varis__about__about' if al else 'varis__elmur__veure', tots, nMissatges > 0,
                  (
                      ("Notificacions", 'varis__elmur__veure', di or pr or pl or co or pg , ( nMissatgesDelta, 'info' if nMissatgesDelta < 10 else 'danger' ) if nMissatgesDelta >0 else None, None ),
                      ("Missatge a professorat o PAS", 'varis__prof_i_pas__envia_professors_i_pas', pr or pl or co, None, None ),
                      ("Avisos de Seguretat", 'varis__avisos__envia_avis_administradors', tots, None, None ),
                      ("About", 'varis__about__about', tots, None, None ),
                   )
               ),

             )
    
    arbreSortides = ()
    if hasattr(settings, 'CUSTOM_MODUL_SORTIDES_ACTIU' ) and settings.CUSTOM_MODUL_SORTIDES_ACTIU and ( di or pr ):
        
        filtre = []
        socEquipDirectiu = User.objects.filter( pk=user.pk, groups__name = 'direcció').exists()
        socCoordinador = User.objects.filter( pk=user.pk, groups__name__in = [ 'sortides'] ).exists()
    
        #si sóc equip directiu només les que tinguin estat 'R' (Revisada pel coordinador)
        if socEquipDirectiu:
            filtre.append('R')
        #si sóc coordinador de sortides només les que tinguin estat 'P' (Proposada)
        if socCoordinador:
            filtre.append('P')
        
        n_avis_sortides = ( Sortida
                           .objects
                           .exclude( estat = 'E' )
                           .filter( estat__in = filtre )
                           .distinct()
                           .count()
                          )    
        
        n_avis_sortides_meves = ( Sortida
                           .objects
                           .filter( estat = 'E' )
                           .filter( professor_que_proposa__pk = user.pk )
                           .distinct( )
                           .count()
                          )  
        
        arbreSortides = (
               #--Varis--------------------------------------------------------------------------
               ('sortides', 'Activitats', 'sortides__meves__list', di or pr, n_avis_sortides + n_avis_sortides_meves> 0,
                  (
                      (u"Històric", 'sortides__all__list', di or so, None, None ),
                      (u"Gestió d'activitats", 'sortides__gestio__list', di or so, ( n_avis_sortides ,'info', ) if n_avis_sortides > 0 else None, None ),
                      (u"Les meves propostes d'activitats", 'sortides__meves__list', pr, ( n_avis_sortides_meves ,'info', ) if n_avis_sortides_meves > 0 else None, None ),
                   )
               ),                            
                         )
    
    arbre = arbre1 + arbreSortides + arbre2
    
    for item_id, item_label, item_url, item_condicio, alerta , subitems in arbre:

        if not item_condicio:
            continue
        actiu = ( menu_id == item_id )
        item = classebuida()
        item.label = item_label
        item.url = reverse( item_url )
        item.active = 'active' if actiu else ''
        item.alerta = alerta
        menu['items'].append( item )
        
        if actiu:
            for subitem_label, subitem_url, subitem__condicio, medalla, subsubitems in subitems:
                if not subitem__condicio:
                    continue
                actiu = ( submenu_id == subitem_url.split('__')[1] )
                subitem = classebuida()
                subitem.label = safe( subitem_label )
                subitem.url = reverse( subitem_url ) 
                subitem.active = 'active' if actiu else ''
                if medalla:
                    omedalla = classebuida()
                    omedalla.valor = medalla[0]
                    omedalla.tipus = medalla[1]
                    subitem.medalla = omedalla
                menu['subitems'].append(subitem)
                subitem.subsubitems = []
                if subsubitems:
                    for subitem_label, subitem_url, subitem_condicio, subitem_medalla in subsubitems:
                        subsubitem = classebuida()
                        subsubitem.label = safe( subitem_label )
                        subsubitem.url = reverse( subitem_url ) 
                        if subitem_medalla:
                            omedalla = classebuida()
                            omedalla.valor = subitem_medalla[0]
                            omedalla.tipus = subitem_medalla[1]
                            subsubitem.medalla = omedalla
                        subitem.subsubitems.append(subsubitem)
                    if actiu and subsubmenu_id == 'blanc':
                        menu['subsubitems'] = subitem.subsubitems

    return menu
 def test_end_date_in_event_list_page(self):
     d = date.today() + timedelta(days=4)
     event = create_event(end_date=d)
     rendered_html = self.instance.render_plugin()
     self.assertIn(print_date(d, "N j, Y"), rendered_html)
Example #60
0
def lastweek(day=date.today()):
    onthelastsunday = day + timedelta(days=-(date.weekday(day) + 7))
    onsunday = day + timedelta(days=-(date.weekday(day)))
    return (onthelastsunday, onsunday)