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() )
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)