def update_from_case_update(self, case_update, xformdoc, other_forms=None): self._apply_case_update(case_update, xformdoc) transaction = CaseTransaction.form_transaction(self.case, xformdoc) if transaction not in self.case.get_tracked_models_to_create(CaseTransaction): # don't add multiple transactions for the same form self.case.track_create(transaction)
def update_from_case_update(self, case_update, xformdoc, other_forms=None): self._apply_case_update(case_update, xformdoc) types = [CaseTransaction.type_from_action_type_slug(a.action_type_slug) for a in case_update.actions] transaction = CaseTransaction.form_transaction(self.case, xformdoc, types) if transaction not in self.case.get_tracked_models_to_create(CaseTransaction): # don't add multiple transactions for the same form self.case.track_create(transaction)
def add_transaction_for_form(case, case_update, form): types = [CaseTransaction.type_from_action_type_slug(a.action_type_slug) for a in case_update.actions] transaction = CaseTransaction.form_transaction(case, form, case_update.guess_modified_on(), types) for trans in case.get_tracked_models_to_create(CaseTransaction): if transaction == trans: trans.type |= transaction.type break else: case.track_create(transaction)
def create_form_for_test(domain, case_id=None, attachments=None, save=True, state=XFormInstanceSQL.NORMAL): """ Create the models directly so that these tests aren't dependent on any other apps. Not testing form processing here anyway. :param case_id: create case with ID if supplied :param attachments: additional attachments dict :param save: if False return the unsaved form :return: form object """ from corehq.form_processor.utils import get_simple_form_xml form_id = uuid4().hex user_id = 'user1' utcnow = datetime.utcnow() form_xml = get_simple_form_xml(form_id, case_id) form = XFormInstanceSQL( form_id=form_id, xmlns='http://openrosa.org/formdesigner/form-processor', received_on=utcnow, user_id=user_id, domain=domain, state=state ) attachments = attachments or {} attachment_tuples = map( lambda a: Attachment(name=a[0], raw_content=a[1], content_type=a[1].content_type), attachments.items() ) attachment_tuples.append(Attachment('form.xml', form_xml, 'text/xml')) FormProcessorSQL.store_attachments(form, attachment_tuples) cases = [] if case_id: case = CommCareCaseSQL( case_id=case_id, domain=domain, type='', owner_id=user_id, opened_on=utcnow, modified_on=utcnow, modified_by=user_id, server_modified_on=utcnow, ) case.track_create(CaseTransaction.form_transaction(case, form)) cases = [case] if save: FormProcessorSQL.save_processed_models(ProcessedForms(form, None), cases) return form
def _create_case(domain=None, form_id=None, case_type=None, user_id=None, closed=False): """ Create the models directly so that these tests aren't dependent on any other apps. Not testing form processing here anyway. :return: case_id """ domain = domain or DOMAIN form_id = form_id or uuid.uuid4().hex case_id = uuid.uuid4().hex user_id = user_id or 'user1' utcnow = datetime.utcnow() form = XFormInstanceSQL( form_id=form_id, xmlns='http://openrosa.org/formdesigner/form-processor', received_on=utcnow, user_id=user_id, domain=domain ) cases = [] if case_id: case = CommCareCaseSQL( case_id=case_id, domain=domain, type=case_type or '', owner_id=user_id, opened_on=utcnow, modified_on=utcnow, modified_by=user_id, server_modified_on=utcnow, closed=closed or False ) case.track_create(CaseTransaction.form_transaction(case, form)) cases = [case] FormProcessorSQL.save_processed_models(ProcessedForms(form, None), cases) return CaseAccessorSQL.get_case(case_id)
def _create_case_transaction(self, case, form=None, submitted_on=None, action_types=None): form = form or self._create_form() submitted_on = submitted_on or datetime.utcnow() return CaseTransaction.form_transaction(case, form, submitted_on, action_types)