'Deny this attempt.
Valid attempt statuses when calling this method:
`submitted`, `approved`, `denied`
Status after method completes: `denied`
Other fields that will be set by this method:
`reviewed_by_user_id`, `reviewed_by_service`, `error_msg`,
`error_code`
State Transitions:
`submitted` â `denied`
This is the usual flow, whether initiated by a staff user or an
external validation service.
`approved` â `denied`
This might happen if a staff member wants to override a decision
made by an external service or another staff member, or just correct
a mistake made during the approval process. In this case, the
previous values of `reviewed_by_user_id` and `reviewed_by_service`
will be changed to whoever is doing the denying. The only record
that this record was ever approved would be in our logs. This should
be a relatively rare occurence.
`denied` â `denied`
Update the error message and reviewing_user/reviewing_service. Just
lets you amend the error message in case there were additional
details to be made.'

@status_before_must_be('must_retry', 'submitted', 'approved', 'denied')
def deny(self, error_msg, error_code='', reviewing_user=None, reviewing_service=''):

    log.info(u"Verification    for    user    '{user_id}'    denied    by    '{reviewer}'.".format(user_id=self.user, reviewer=reviewing_user))
    self.error_msg = error_msg
    self.error_code = error_code
    self.reviewing_user = reviewing_user
    self.reviewing_service = reviewing_service
    self.status = 'denied'
    self.save()
