def _get_instance(xml, new_uuid, submitted_by, status, xform, checksum, request=None): history = None instance = None message_verb = SUBMISSION_EDITED # check if its an edit submission old_uuid = get_deprecated_uuid_from_xml(xml) if old_uuid: instance = Instance.objects.filter(uuid=old_uuid, xform_id=xform.pk).first() history = InstanceHistory.objects.filter( xform_instance__xform_id=xform.pk, uuid=new_uuid).only('xform_instance').first() if instance: # edits check_edit_submission_permissions(submitted_by, xform) last_edited = timezone.now() InstanceHistory.objects.create(checksum=instance.checksum, xml=instance.xml, xform_instance=instance, uuid=old_uuid, user=submitted_by, geom=instance.geom, submission_date=instance.last_edited or instance.date_created) instance.xml = xml instance.last_edited = last_edited instance.uuid = new_uuid instance.checksum = checksum instance.save() # call webhooks process_submission.send(sender=instance.__class__, instance=instance) elif history: instance = history.xform_instance if old_uuid is None or (instance is None and history is None): # new submission message_verb = SUBMISSION_CREATED instance = Instance.objects.create(xml=xml, user=submitted_by, status=status, xform=xform, checksum=checksum) # send notification on submission creation send_message(instance_id=instance.id, target_id=instance.xform.id, target_type=XFORM, user=instance.user or instance.xform.user, message_verb=message_verb) return instance
def _get_instance(xml, new_uuid, submitted_by, status, xform, checksum): history = None instance = None # check if its an edit submission old_uuid = get_deprecated_uuid_from_xml(xml) if old_uuid: instance = Instance.objects.filter(uuid=old_uuid, xform_id=xform.pk).first() history = InstanceHistory.objects.filter( xform_instance__xform_id=xform.pk, uuid=new_uuid).only('xform_instance').first() if instance: # edits check_edit_submission_permissions(submitted_by, xform) last_edited = timezone.now() InstanceHistory.objects.create(checksum=instance.checksum, xml=instance.xml, xform_instance=instance, uuid=old_uuid, user=submitted_by, geom=instance.geom, submission_date=instance.last_edited or instance.date_created) instance.xml = xml instance.last_edited = last_edited instance.uuid = new_uuid instance.checksum = checksum instance.save() # call webhooks process_submission.send(sender=instance.__class__, instance=instance) elif history: instance = history.xform_instance if old_uuid is None or (instance is None and history is None): # new submission instance = Instance.objects.create(xml=xml, user=submitted_by, status=status, xform=xform, checksum=checksum) return instance
def _get_instance(xml, new_uuid, submitted_by, status, xform, checksum): history = None instance = None # check if its an edit submission old_uuid = get_deprecated_uuid_from_xml(xml) if old_uuid: instance = Instance.objects.filter(uuid=old_uuid, xform_id=xform.pk).first() history = InstanceHistory.objects.filter( xform_instance__xform_id=xform.pk, uuid=new_uuid).only('xform_instance').first() if instance: # edits check_edit_submission_permissions(submitted_by, xform) last_edited = timezone.now() InstanceHistory.objects.create( checksum=instance.checksum, xml=instance.xml, xform_instance=instance, uuid=old_uuid, user=submitted_by, geom=instance.geom, submission_date=instance.last_edited or instance.date_created) instance.xml = xml instance.last_edited = last_edited instance.uuid = new_uuid instance.checksum = checksum instance.save() # call webhooks process_submission.send(sender=instance.__class__, instance=instance) elif history: instance = history.xform_instance if old_uuid is None or (instance is None and history is None): # new submission instance = Instance.objects.create( xml=xml, user=submitted_by, status=status, xform=xform, checksum=checksum) return instance