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
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
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
def get_defendant_services(defendant=None): """ Get services for a given defendant """ code, resp = DefendantsController.get_defendant_services(defendant) return code, resp
def get_defendant(defendant=None): """ Get a defendant """ code, resp = DefendantsController.show(defendant) return code, resp
def get_defendant_top20(): """ Get Abuse defendants top20 """ code, resp = DefendantsController.get_defendant_top20() return code, resp
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
def delete_defendant_tag(defendant=None, tag=None): """ Remove defendant tag """ code, resp = DefendantsController.remove_tag(defendant, tag, g.user) return code, resp