def process_submission(self, sms, sub_type, return_submission=False): """Método que realiza o processamento de submissões novas e retorna uma resposta ao usuário""" # Defaults submission_status = Submission.NOT_CONFIRMED if self.requires_confirmation else Submission.CONFIRMED default_answer = self.ans_default or Config.get("ans_confirmed") \ if not self.requires_confirmation else self.ans_waiting_confirmation # Form conditions action, answer, new_value, extra_vars = Condition.process_conditions(self.conditions.all(), sms.text) if new_value: sms.text = new_value if action == Submission.CANCELED and answer: self.save_submission(sms, action) return answer # Fields parsing text_fields = self.split_fields(sms.text) if len(text_fields) != self.fields.count(): submission = self.save_submission(sms, Submission.INVALID, text_fields, raw=True) processed_answer = self.ans_incorrect_num_fields else: instance_fields = self.instatiate_fields(text_fields) # Fields conditions action, answer = self.process_field_conditions(instance_fields) if action: submission_status = action context = self.get_context(instance_fields) if context and extra_vars: context = dict(context.items() + extra_vars.items()) submission = self.save_submission(sms, submission_status, instance_fields, sub_type=sub_type, context=context) # Remote server calls r_answer = submission.remote_process_submission() if r_answer: answer = r_answer else: if not answer: answer = self.process_answer_template(default_answer, context) processed_answer = self.process_answer_template(answer, context) if return_submission: return processed_answer, submission else: return processed_answer
def process_confirmation_conditions(self, message): """Processa as condições em caso de mensagem de confirmação de envio""" return Condition.process_conditions(self.confirmation_conditions.all(), message)