Admin and Project overview API

This commit is contained in:
Setyo Nugroho 2022-02-03 22:37:02 +07:00 committed by Setyo Nugroho
parent e44aa8f418
commit 0b13c49b3d
3 changed files with 144 additions and 2 deletions

View file

@ -10,6 +10,8 @@ for name, model in component.PRICE_MODEL.items():
router.register(r'settings', views.DynamicSettingViewSet, basename='settings')
router.register(r'invoice', views.InvoiceViewSet, basename='invoice')
router.register(r'admin_overview', views.AdminOverviewViewSet, basename='admin_overview')
router.register(r'project_overview', views.AdminOverviewViewSet, basename='project_overview')
urlpatterns = [
path('', include(router.urls)),

View file

@ -7,8 +7,9 @@ from rest_framework.decorators import action
from rest_framework.response import Response
from api.serializers import InvoiceSerializer, SimpleInvoiceSerializer
from core.models import Invoice, BillingProject
from core.component import component
from core.component.component import INVOICE_COMPONENT_MODEL
from core.models import Invoice, BillingProject
from core.utils.dynamic_setting import get_dynamic_settings, get_dynamic_setting, set_dynamic_setting, BILLING_ENABLED
@ -116,4 +117,135 @@ class InvoiceViewSet(viewsets.ModelViewSet):
# create not accepting tenant_id, delete it
del payload['tenant_id']
handler.create(payload)
handler.create(payload)
class AdminOverviewViewSet(viewsets.ViewSet):
def list(self, request):
return Response({})
@action(detail=False, methods=['GET'])
def total_resource(self, request):
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
data['label'].append(k)
data['data'].append(v.objects.filter(invoice__state=Invoice.InvoiceState.IN_PROGRESS).count())
return Response(data)
@action(detail=False, methods=['GET'])
def active_resource(self, request):
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
data['label'].append(k)
data['data'].append(
v.objects.filter(invoice__state=Invoice.InvoiceState.IN_PROGRESS, end_date=None).count())
return Response(data)
@action(detail=False, methods=['GET'])
def price_total_resource(self, request):
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
sum_of_price = sum([q.price_charged.amount for q in
v.objects.filter(invoice__state=Invoice.InvoiceState.IN_PROGRESS).all()])
data['label'].append(k)
data['data'].append(sum_of_price)
return Response(data)
@action(detail=False, methods=['GET'])
def price_active_resource(self, request):
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
sum_of_price = sum([q.price_charged.amount for q in
v.objects.filter(invoice__state=Invoice.InvoiceState.IN_PROGRESS, end_date=None).all()])
data['label'].append(k)
data['data'].append(sum_of_price)
return Response(data)
class ProjectOverviewViewSet(viewsets.ViewSet):
def list(self, request):
return Response({})
@action(detail=False, methods=['GET'])
def total_resource(self, request):
tenant_id = self.request.query_params.get('tenant_id', None)
project = BillingProject.objects.filter(tenant_id=tenant_id)
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
data['label'].append(k)
data['data'].append(
v.objects.filter(invoice__project=project, invoice__state=Invoice.InvoiceState.IN_PROGRESS).count())
return Response(data)
@action(detail=False, methods=['GET'])
def active_resource(self, request):
tenant_id = self.request.query_params.get('tenant_id', None)
project = BillingProject.objects.filter(tenant_id=tenant_id)
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
data['label'].append(k)
data['data'].append(
v.objects.filter(invoice__project=project, invoice__state=Invoice.InvoiceState.IN_PROGRESS,
end_date=None).count())
return Response(data)
@action(detail=False, methods=['GET'])
def price_total_resource(self, request):
tenant_id = self.request.query_params.get('tenant_id', None)
project = BillingProject.objects.filter(tenant_id=tenant_id)
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
sum_of_price = sum([q.price_charged.amount for q in
v.objects.filter(invoice__project=project,
invoice__state=Invoice.InvoiceState.IN_PROGRESS).all()])
data['label'].append(k)
data['data'].append(sum_of_price)
return Response(data)
@action(detail=False, methods=['GET'])
def price_active_resource(self, request):
tenant_id = self.request.query_params.get('tenant_id', None)
project = BillingProject.objects.filter(tenant_id=tenant_id)
data = {
'label': [],
'data': [],
}
for k, v in INVOICE_COMPONENT_MODEL.items():
sum_of_price = sum([q.price_charged.amount for q in
v.objects.filter(invoice__project=project,
invoice__state=Invoice.InvoiceState.IN_PROGRESS, end_date=None).all()])
data['label'].append(k)
data['data'].append(sum_of_price)
return Response(data)

View file

@ -88,6 +88,14 @@ class Invoice(BaseModel, TimestampMixin):
return price
@property
def total_resource(self):
total = 0
for component_relation_label in labels.INVOICE_COMPONENT_LABELS:
total += getattr(self, component_relation_label).count()
return total
def close(self, date, tax_percentage):
self.state = Invoice.InvoiceState.FINISHED
self.end_date = date