Skip to content

Commit

Permalink
Added helper functions for invoice dashboard
Browse files Browse the repository at this point in the history
Implemented function for event invoice calculation

Added net_revenue & gross_revenue

added logic for pdf and saved to DB

Scheduled job on 1st of every month

Hound & codacy
  • Loading branch information
mrsaicharan1 committed Jul 1, 2019
1 parent 3ed0142 commit 7e8e4cf
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 3 deletions.
3 changes: 2 additions & 1 deletion app/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
from app.api.helpers.auth import AuthManager
from app.api.helpers.scheduled_jobs import send_after_event_mail, send_event_fee_notification, \
send_event_fee_notification_followup, change_session_state_on_event_completion, \
expire_pending_tickets
expire_pending_tickets, send_monthly_event_invoice
from app.models.event import Event
from app.models.role_invite import RoleInvite
from app.views.healthcheck import health_check_celery, health_check_db, health_check_migrations, check_migrations
Expand Down Expand Up @@ -242,6 +242,7 @@ def update_sent_state(sender=None, headers=None, **kwargs):
scheduler.add_job(send_event_fee_notification_followup, 'cron', day=15)
scheduler.add_job(change_session_state_on_event_completion, 'cron', hour=5, minute=30)
scheduler.add_job(expire_pending_tickets, 'cron', minute=45)
scheduler.add_job(send_monthly_event_invoice, 'cron', day=1, month=1-12)
scheduler.start()


Expand Down
21 changes: 21 additions & 0 deletions app/api/helpers/event_invoices.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import datetime

from app.models.event_invoice import EventInvoice


def fetch_event_invoices(invoice_status):
"""
Helper function to fetch event invoices based on status
"""

if invoice_status == 'due':
event_invoices = EventInvoice.query.filter(EventInvoice.created_at + datetime.timedelta(days=30) <=
datetime.datetime.now(),
EventInvoice.paid_via is None).all()
elif invoice_status == 'paid':
event_invoices = EventInvoice.query.filter(EventInvoice.paid_via is not None).all()
elif invoice_status == 'upcoming':
event_invoices = EventInvoice.query.filter(EventInvoice.created_at + datetime.timedelta(days=30) >
datetime.datetime.now(),
EventInvoice.paid_via is None).all()
return event_invoices
33 changes: 32 additions & 1 deletion app/api/helpers/scheduled_jobs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import pytz
from dateutil.relativedelta import relativedelta
from flask import render_template

from app.api.helpers.db import safe_query, save_to_db
from app.api.helpers.mail import send_email_after_event, send_email_for_monthly_fee_payment, \
Expand All @@ -10,14 +11,17 @@
send_notif_after_event
from app.api.helpers.query import get_upcoming_events, get_user_event_roles_by_role_name
from app.api.helpers.utilities import monthdelta
from app.api.helpers.files import create_save_pdf
from app.api.helpers.storage import UPLOAD_PATHS
from app.models import db
from app.models.event import Event
from app.models.event_invoice import EventInvoice
from app.models.order import Order
from app.models.speaker import Speaker
from app.models.session import Session
from app.models.ticket import Ticket
from app.models.ticket_fee import get_fee
from app.models.ticket_fee import TicketFees, get_fee

from app.settings import get_settings


Expand Down Expand Up @@ -150,3 +154,30 @@ def expire_pending_tickets():
(Order.created_at + datetime.timedelta(minutes=30)) <= datetime.datetime.now()).\
update({'status': 'expired'})
db.session.commit()


def send_monthly_event_invoice():
from app import current_app as app
with app.app_context():
events = Event.query.all()
for event in events:
# calculate net & gross revenues
currency = event.payment_currency
ticket_fee_object = db.session.query(TicketFees).filter_by(currency=currency).one()
ticket_fee_percentage = ticket_fee_object.service_fee
ticket_fee_maximum = ticket_fee_object.maximum_fee
orders = Order.query.filter_by(event=event).all()
gross_revenue = event.revenue
ticket_fees = event.tickets_sold * ticket_fee_percentage
if ticket_fees > ticket_fee_maximum:
ticket_fees = ticket_fee_maximum
net_revenue = gross_revenue - ticket_fees
# save invoice as pdf
pdf = create_save_pdf(render_template('pdf/event_invoice.html', orders=orders,
ticket_fee_object=ticket_fee_object, gross_revenue=gross_revenue,
net_revenue=net_revenue), UPLOAD_PATHS['pdf']['event_invoice'],
dir_path='/static/uploads/pdf/event_invoices/', identifier=event.identifier)
# save event_invoice info to DB

event_invoice = EventInvoice(amount=net_revenue, invoice_pdf_url=pdf, event_id=event.id)
save_to_db(event_invoice)
3 changes: 2 additions & 1 deletion app/api/helpers/storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,8 @@
'pdf': {
'ticket_attendee': 'attendees/tickets/pdf/{identifier}',
'order': 'orders/invoices/pdf/{identifier}',
'tickets_all': 'orders/tickets/pdf/{identifier}'
'tickets_all': 'orders/tickets/pdf/{identifier}',
'event_invoice': 'events/organizer/invoices/pdf/{identifier}'
}
}

Expand Down
Empty file.

0 comments on commit 7e8e4cf

Please sign in to comment.