Exemple #1
0
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
Exemple #2
0
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
Exemple #3
0
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