def before_distributed_requester(sender, **kwargs): u""" Проверки на допустимость возврата в очередь из статуса "Зачислен" или "Зачислен через ЭС" """ requestion = kwargs['requestion'] today = datetime.date.today() max_age_allowed = today.replace(year=today.year - settings.MAX_CHILD_AGE) # проверяем, что возраст ребенка не превышает максимально разрешенный if requestion.birth_date < max_age_allowed: raise TransitionNotAllowed( u"Невозможно выполнить операцию, так как возраст, " u"указанный в заявке, превышает максимально допустимый") birth_cert = requestion.get_birth_cert() # проверяем, что у заявки есть свидетельство и что оно подтверждено if not (birth_cert and birth_cert.confirmed): raise TransitionNotAllowed( u"Невозможно проверить статус свидетельства о рождении") # пробуем найти ребенка с таким свидтельством в ЭлектроСаде try: child_data = get_child_from_es(birth_cert.document_number) except Exception: raise TransitionNotAllowed( u"Невозможно проверить статус ребенка в Электросаде, " u"попробйте позже") # если импортировать при инициализации, возникает кольцо from sadiki.api.views import STATUS_OK from sadiki.api.utils import is_active_child_status if child_data['status_code'] == STATUS_OK: if is_active_child_status(child_data['data']['status']): raise TransitionNotAllowed( u"Ребенок с таким свидетельством о рождении числится активным " u"в Электросаде")
def active_child_exist(birth_cert): u""" Проверяем, если ли в ЭС активные дети с заданным свидетельством о рождении """ # во время тестирования api ЭС недоступно, возвращаем "dummy" объект if settings.TEST_MODE: return False try: child_data = get_child_from_es(birth_cert) except Exception: from sadiki.core.exceptions import TransitionNotAllowed raise TransitionNotAllowed( u"Ошибка при проверке номера документа в Электросаде, " u"повторите попытку позднее") from sadiki.api.views import STATUS_OK from sadiki.api.utils import is_active_child_status if child_data['status_code'] == STATUS_OK and 'status' in child_data['data']: if is_active_child_status(child_data['data']['status']): return True return False