def update_submission_version(submission): # save actual version data data_fields = submission.form.tags version_data = { k: submission.data.get(k) for k in data_fields if k in submission.data } if submission.form.form_type == 'INCIDENT': if submission.incident_status: version_data['status'] = submission.incident_status.code version_data['description'] = submission.incident_description # get previous version previous = services.submission_versions.find( submission=submission).order_by( models.SubmissionVersion.timestamp.desc()).first() if previous: diff = DictDiffer(version_data, previous.data) # don't do anything if the data wasn't changed if not diff.added() and not diff.removed() and not diff.changed(): return # use participant ID as identity channel = 'ODK' identity = participant_auth.username() services.submission_versions.create(submission=submission, data=version_data, timestamp=datetime.utcnow(), channel=channel, identity=identity, deployment_id=submission.deployment_id)
def update_submission_version(sender, document, **kwargs): if sender != services.submissions.__model__: return # save actual version data data_fields = document.form.tags if document.form.form_type == 'INCIDENT': data_fields.extend(['status']) version_data = {k: document[k] for k in data_fields if k in document} # get previous version previous = services.submission_versions.find( submission=document).order_by('-timestamp').first() if previous: prev_data = json.loads(previous.data) diff = DictDiffer(version_data, prev_data) # don't do anything if the data wasn't changed if not diff.added() and not diff.removed() and not diff.changed(): return # use participant ID as identity channel = 'WEB' identity = participant_auth.username() services.submission_versions.create( submission=document, data=json.dumps(version_data), timestamp=datetime.utcnow(), channel=channel, identity=identity )
def update_submission_version(sender, document, **kwargs): if sender != services.submissions.__model__: return # save actual version data data_fields = document.form.tags if document.form.form_type == 'INCIDENT': data_fields.extend(['status']) version_data = {k: document[k] for k in data_fields if k in document} # get previous version previous = services.submission_versions.find( submission=document).order_by('-timestamp').first() if previous: prev_data = json.loads(previous.data) diff = DictDiffer(version_data, prev_data) # don't do anything if the data wasn't changed if not diff.added() and not diff.removed() and not diff.changed(): return # use participant ID as identity channel = 'WEB' identity = participant_auth.username() services.submission_versions.create(submission=document, data=json.dumps(version_data), timestamp=datetime.utcnow(), channel=channel, identity=identity)
def submission_version(submission_id, version_id): submission = services.submissions.get_or_404(pk=submission_id) version = services.submission_versions.get_or_404( pk=version_id, submission=submission) form = submission.form form_data = MultiDict(json.loads(version.data)) page_title = _('View submission') template_name = 'frontend/submission_history.html' diff = DictDiffer(submission._data, form_data) return render_template( template_name, page_title=page_title, diff=diff, form=form, submission=submission, submission_version=version, data=form_data )