Beispiel #1
0
def show(report_id):
    """
        Get report
    """
    try:
        report = Report.objects.filter(id=report_id).values(*REPORT_FIELDS)[0]
    except (IndexError, ValueError):
        return 404, {'status': 'Not Found', 'code': 404}

    # Convert date
    for key, val in report.iteritems():
        if isinstance(val, datetime):
            report[key] = time.mktime(val.timetuple())

    # Add related infos
    if report.get('plaintiff'):
        report['plaintiff'] = model_to_dict(Plaintiff.objects.get(id=report['plaintiff']))
    if report.get('service'):
        report['service'] = model_to_dict(Service.objects.get(id=report['service']))
    if report.get('defendant'):
        report['defendant'] = DefendantsController.show(report['defendant'])[1]
    if report.get('provider'):
        report['provider'] = ProvidersController.show(report['provider'])[1]

    tags = Report.objects.get(id=report['id']).tags.all()
    report['tags'] = [model_to_dict(tag) for tag in tags]

    return 200, report
Beispiel #2
0
def update_defendant(body, report):
    """ Update report defendant
    """
    # Convert defendant object in body to Defendant db object
    try:
        defendant = DefendantsController.get_or_create(customer_id=body['defendant']['customerId'])
        body['defendant'] = defendant.id
        if not defendant:
            return 400, {'status': 'Bad Request', 'code': 400, 'message': 'Defendant not found'}
    except KeyError:
        return 400, {'status': 'Bad Request', 'code': 400, 'message': 'Missing customerId in defendant object'}

    # If this report is attached to a ticket and the defendant is different
    # Try to attach ticket to an existing
    # else, unset ticket and set status to "New"
    #
    if report.ticket and report.ticket.defendant and (report.ticket.defendant != defendant):
        # If related ticket has just this report attached, close this ticket
        if report.ticket.reportTicket.count() == 1 and report.ticket.reportTicket.all()[0].id == int(report.id):
            try:
                ticket = Ticket.objects.get(id=report.ticket.id)
                ticket.status = 'Closed'
                ticket.save()
            except ObjectDoesNotExist:
                pass
        if all((report.category, defendant, report.service)):
            try:
                ticket = Ticket.objects.get(
                    ~Q(status='Closed'),
                    category=report.category.pk,
                    defendant=body['defendant'],
                    service=report.service,
                    update=True
                )
                report.ticket = ticket
                body['status'] = 'Attached'
            except ObjectDoesNotExist:
                report.ticket = None
                body['status'] = 'New'
        else:
            report.ticket = None
            body['status'] = 'New'

        report.save()
        body.pop('ticket', None)

    return 200, body
Beispiel #3
0
def add_defendant_tag(defendant=None):
    """ Add tag to defendant
    """
    body = request.get_json()
    code, resp = DefendantsController.add_tag(defendant, body, g.user)
    return code, resp
Beispiel #4
0
def get_defendant_services(defendant=None):
    """
        Get services for a given defendant
    """
    code, resp = DefendantsController.get_defendant_services(defendant)
    return code, resp
Beispiel #5
0
def get_defendant(defendant=None):
    """ Get a defendant
    """
    code, resp = DefendantsController.show(defendant)
    return code, resp
Beispiel #6
0
def get_defendant_top20():
    """ Get Abuse defendants top20
    """
    code, resp = DefendantsController.get_defendant_top20()
    return code, resp
Beispiel #7
0
def get_defendant_reports_stats(defendant=None):
    """
        Get reports stats for a given defendant
    """
    code, resp = DefendantsController.get_defendant_stats(defendant=defendant, nature='reports')
    return code, resp
Beispiel #8
0
def delete_defendant_tag(defendant=None, tag=None):
    """ Remove defendant tag
    """
    code, resp = DefendantsController.remove_tag(defendant, tag, g.user)
    return code, resp