fossasia/open-event-orga-server

View on GitHub
app/api/admin_sales/invoices.py

Summary

Maintainability
A
0 mins
Test Coverage
from flask_rest_jsonapi import ResourceList
from marshmallow_jsonapi import fields
from marshmallow_jsonapi.flask import Schema

from app.api.bootstrap import api
from app.api.helpers.utilities import dasherize
from app.models import db
from app.models.event_invoice import EventInvoice


class AdminSalesInvoicesSchema(Schema):
    """
    Sales invoices
    """

    class Meta:
        type_ = 'admin-sales-invoices'
        self_view = 'v1.admin_sales_invoices'
        inflect = dasherize

    id = fields.String()
    identifier = fields.String()
    status = fields.String()
    amount = fields.Float()
    created_at = fields.DateTime()
    completed_at = fields.DateTime()
    event_name = fields.Method('format_event_name')
    sent_to = fields.Method('format_sent_to')

    @staticmethod
    def format_event_name(self):
        return f'{self.event.name}'

    @staticmethod
    def format_sent_to(self):
        return f'{self.user.fullname} <{self.user.email}>'


class AdminSalesInvoicesList(ResourceList):
    """
    Resource for sales invoices
    """

    methods = ['GET']
    decorators = (api.has_permission('is_admin'),)
    schema = AdminSalesInvoicesSchema
    data_layer = {'model': EventInvoice, 'session': db.session}