'Add credit requirement status for given username.
Args:
username(str): Username of the user
requirement(CreditRequirement): \'CreditRequirement\' object
status(str): Status of the requirement
reason(dict): Reason of the status'

@classmethod
@transaction.atomic
def add_or_update_requirement_status(cls, username, requirement, status='satisfied', reason=None):

    (requirement_status, created) = cls.objects.get_or_create(username=username, requirement=requirement, defaults={'reason': reason, 'status': status})
    if (not created):
        if ((status == 'failed') and (requirement_status.status == 'satisfied')):
            log.info(u'Can    not    change    status    of    credit    requirement    "%s"    from    satisfied    to    failed    ', requirement_status.requirement_id)
            return
        requirement_status.status = status
        requirement_status.reason = reason
        requirement_status.save()
