Exemplo n.º 1
0
 def check_permissions(self, request, *args, **kwargs):
     # проверяем, что начался новый год и нет распределений
     return (
         super(StartDistributionYear, self).check_permissions(request, *args, **kwargs)
         and get_current_distribution_year() != get_distribution_year()
         and not Distribution.objects.active()
     )
Exemplo n.º 2
0
    def post(self, request, redirect_to=None):
        distribution_year = get_distribution_year()
        if request.POST.get('confirmation') == 'yes':
#            необходимо вернуть в очередь или снять с учета все заявки, которые
#            не были зачислены
            transitions_actions = (
                {'from':(STATUS_NOT_APPEAR, STATUS_NOT_APPEAR_EXPIRE),
                    'to':STATUS_REMOVE_REGISTRATION,
                    'transition': NOT_APPEAR_REMOVE_REGISTRATION,
                    'requestions_list':[]},
                {'from':(STATUS_ABSENT, STATUS_ABSENT_EXPIRE),
                    'to':STATUS_REMOVE_REGISTRATION,
                    'transition': ABSENT_REMOVE_REGISTRATION,
                    'requestions_list':[]},
                {'from':(STATUS_DECISION,), 'to':STATUS_REQUESTER,
                    'transition': DECISION_REQUESTER,
                    'requestions_list':[]},
                )
            for action in transitions_actions:
                requestions = Requestion.objects.filter(
                    status__in=action['from'])
                action['requestions_list'] = list(requestions)
                requestions.update(status=action['to'])
#            сохраняем статистику по выделению мест и зачислению в архив
            StatisticsArchive.objects.create_statistic_record(
                type=DECISION_STATISTICS)
            StatisticsArchive.objects.create_statistic_record(
                type=DISTRIBUTION_STATISTICS)
#            теперь начинаем новый учебный год
            for age_group in AgeGroup.objects.all():
                if age_group.next_age_group:
#                    для всех ДОУ у которых есть новая возрастная группа переводим
                    SadikGroup.objects.active().filter(
                        sadik__age_groups=age_group.next_age_group,
                        age_group=age_group
                        ).update(age_group=age_group.next_age_group,
                        year=distribution_year)
#                    для тех, кому не повезло устанавливаем льготный перевод
                    transfer_benefit_category = BenefitCategory.objects.get(
                        priority=FACILITY_TRANSFER_CATEGORY)
                    transfer_requestions = Requestion.objects.filter(
                        distributed_in_vacancy__sadik_group__age_group=age_group,
                        distributed_in_vacancy__sadik_group__active=True,
                        status=STATUS_DISTRIBUTED).exclude(
                        distributed_in_vacancy__sadik_group__sadik__age_groups=age_group.next_age_group
                        )
                    transfer_requestions_list = list(transfer_requestions)
                    transfer_requestions.update(
                            benefit_category=transfer_benefit_category,
                            status=STATUS_WANT_TO_CHANGE_SADIK,
                            registration_datetime=datetime.datetime.now())
#                    а группы, которые не могут быть переведены в новый год
#                    закрываем
                    SadikGroup.objects.active().filter(
                        age_group=age_group,
                        ).exclude(
                        sadik__age_groups=age_group.next_age_group
                        ).update(active=False)
                else:
#                    если нет более старшей группы, то заявки в архив
                    archive_requestions = Requestion.objects.filter(
                        distributed_in_vacancy__sadik_group__age_group=age_group,
                        distributed_in_vacancy__sadik_group__active=True
                        )
                    archive_requestions_list = list(archive_requestions)
                    archive_requestions.update(status=STATUS_ARCHIVE)
#                    а группы помечаем неактивными
                    SadikGroup.objects.active().filter(
                        age_group=age_group).update(active=False)
            transaction.commit()
            Logger.objects.create_for_action(START_NEW_YEAR,
                context_dict={},
                extra={'user': request.user, 'obj': None})
#            записываем в логи изменения заявок
            for action in transitions_actions:
                for requestion in action['requestions_list']:
                    context_dict = {'status': requestion.get_status_display()}
                    Logger.objects.create_for_action(action['transition'],
                        context_dict=context_dict,
                        extra={'user': request.user, 'obj': requestion})
#            записываем в логи информацию о заявках переводниках
            for requestion in transfer_requestions_list:
                Logger.objects.create_for_action(
                    action_flag=WANT_TO_CHANGE_SADIK,
                    extra={'user': request.user, 'obj': requestion})
#            записываем в логи информацию о заявках помещенных в архив
            for requestion in archive_requestions_list:
                Logger.objects.create_for_action(
                    action_flag=DISTRIBUTED_ARCHIVE,
                    extra={'user': request.user, 'obj': requestion})
            transaction.commit()
        return HttpResponseRedirect(redirect_to)