def after_restore_requestion(sender, **kwargs): transition = kwargs['transition'] request = kwargs['request'] requestion = kwargs['requestion'] form = kwargs['form'] # проверяем наличие заявок с таким же подтвержденным документом confirmed_requestions = requestion.other_requestions_with_ident_document() if confirmed_requestions: req_list = ";".join([unicode(req) for req in confirmed_requestions]) err_msg = u"Такой же идентифицирующий документ уже подтвежден у " \ u"следующих заявок: {} операция невозможна".format(req_list) raise TransitionNotAllowed(err_msg) # проверяем статус ребенка в ЭС if active_child_exist(requestion.get_birth_cert().document_number): raise TransitionNotAllowed( u"Ребенок с таким номером свидетельства о рождении посещает ДОУ") other_requestions_with_document = requestion.set_ident_document_authentic() messages.success(request, u"Заявка {} была возвращена в очередь.".format( requestion.requestion_number)) messages.success(request, u'Следующие заявки имели такой же идентифицирующий документ и были сняты с учета: %s' % ";".join([unicode(other_requestion) for other_requestion in other_requestions_with_document])) Logger.objects.create_for_action( transition.index, context_dict={'other_requestions': other_requestions_with_document}, extra={'user': request.user, 'obj': requestion}, reason=form.cleaned_data.get('reason'))
def clean(self): cleaned_data = self.cleaned_data document_number = self.cleaned_data.get('document_number') template = self.cleaned_data.get('template') # проверяем, что номер документа соответствует шаблону if document_number and template and not re.match( template.regex, document_number): self._errors["document_number"] = self.error_class([u'Неверный формат']) del cleaned_data['document_number'] del cleaned_data['template'] # проверяем на наличие подтвержденных заявок с таким же документом else: documents = EvidienceDocument.objects.filter( document_number=document_number, confirmed=True, template=template) if documents: requestions_ids = documents.values_list('object_id', flat=True) # заявки в статусе "Выпущен из ДОУ" могут содержать # повторяющиеся номера документов requestions = Requestion.objects.filter( id__in=requestions_ids).exclude(status=STATUS_KG_LEAVE) if requestions.exists(): self._errors["document_number"] = self.error_class( [u"Документ с таким номером уже занят"]) del cleaned_data['document_number'] # возвращаем значение, чтобы не выполнять ненужных проверок # на наличие ребенка в ЭС return cleaned_data # проверяем по номеру документа наличие и статус ребенка в ЭС if active_child_exist(document_number): self._errors["document_number"] = self.error_class( [u"Ребенок с таким документом уже посещает ДОУ"]) del cleaned_data['document_number'] return cleaned_data