def check_missing(self, date_from, date_until): """ :param date_from: :param date_until: :return: """ from date_tools import DateTools from os_class import Class from os_class_schedule import ClassSchedule T = current.T db = current.db dt = DateTools() error = False message = '' classes_added = 0 days_between = dt.days_between_dates(date_from, date_until) if days_between == False: error = True message = T("From date has to be smaller then until date.") if days_between > 92: error = True message = T("Gap between dates can not be more then 3 months") if not error: date = date_from while date <= date_until: cs = ClassSchedule(date) classes = cs.get_day_list() for cls in classes: if not cls['Cancelled'] or cls['Holiday']: # Check if item in db.teachers_payment_classes query = (db.teachers_payment_classes.classes_id == cls['ClassesID']) & \ (db.teachers_payment_classes.ClassDate == date) if db(query).count() == 0: os_cls = Class(cls['ClassesID'], date) result = os_cls.get_teacher_payment() if not result['error']: classes_added += 1 date += datetime.timedelta(days=1) message = classes_added return dict(error=error, message=message)
def get_classes_revenue_summary_day(self, date): """ :param date: :return: """ from os_class import Class from os_class_schedule import ClassSchedule # Get class schedule for days cs = ClassSchedule(date) schedule = cs.get_day_list() revenue = { 'data': [], 'revenue_total': 0, 'teacher_payments': 0, 'balance': 0 } for cls in schedule: clsID = cls['ClassesID'] # Get revenue for each class class_revenue = self.get_class_revenue_summary(clsID, date) cls_object = Class(clsID, date) teacher_payment = cls_object.get_teacher_payment() if not teacher_payment['error']: tp_amount = teacher_payment['data']['ClassRate'] else: tp_amount = 0 cls['RevenueTotal'] = class_revenue['total']['amount'] cls['TeacherPayment'] = tp_amount cls['Balance'] = (cls['RevenueTotal'] - cls['TeacherPayment']) revenue['revenue_total'] += cls['RevenueTotal'] revenue['teacher_payments'] += cls['TeacherPayment'] revenue['balance'] += cls['Balance'] revenue['data'].append(cls) return revenue
def _get_class_revenue_summary_pdf_template(self, clsID, date, quick_stats=True): """ Print friendly display of a Workshop """ from general_helpers import max_string_length from os_class import Class get_sys_property = current.globalenv['get_sys_property'] represent_float_as_amount = current.globalenv[ 'represent_float_as_amount'] response = current.response template = get_sys_property('branding_default_template_class_revenue' ) or 'class_revenue/default.html' template_file = 'templates/' + template tables = self.get_class_revenue_summary_formatted(clsID, date) cls = Class(clsID, date) teacher_payment = cls.get_teacher_payment() html = response.render( template_file, dict( class_info=cls.get_info(), revenue=self.get_class_revenue_summary(clsID, date, quick_stats), teacher_payment=teacher_payment, logo=self._get_class_revenue_summary_pdf_template_get_logo(), max_string_length=max_string_length, represent_float_as_amount=represent_float_as_amount, )) return html
def get_class_revenue_summary_formatted(self, clsID, date, quick_stats=True): """ Format output from self.get_class_revenue_summary :param clsID: db.classes.id :param date: datetime.date :param quickstats: boolean :return: html table """ from os_class import Class from general_helpers import max_string_length T = current.T represent_float_as_amount = current.globalenv[ 'represent_float_as_amount'] revenue = self.get_class_revenue_summary(clsID=clsID, date=date, quick_stats=quick_stats) header = THEAD( TR( TH(T('Type')), TH(T('Amount')), TH(T('Attendance count')), TH(T('Total')), )) trial_without_membership = TR( TD(T('Trial without membership')), TD( represent_float_as_amount( revenue['trial']['no_membership']['amount'])), TD(revenue['trial']['no_membership']['count']), TD( represent_float_as_amount( revenue['trial']['no_membership']['amount'] * revenue['trial']['no_membership']['count'])), ) trial_with_membership = TR( TD(T('Trial with membership')), TD( represent_float_as_amount( revenue['trial']['membership']['amount'])), TD(revenue['trial']['membership']['count']), TD( represent_float_as_amount( revenue['trial']['membership']['amount'] * revenue['trial']['membership']['count'])), ) dropin_without_membership = TR( TD(T('Drop-in without membership')), TD( represent_float_as_amount( revenue['dropin']['no_membership']['amount'])), TD(revenue['dropin']['no_membership']['count']), TD( represent_float_as_amount( revenue['dropin']['no_membership']['amount'] * revenue['dropin']['no_membership']['count'])), ) dropin_with_membership = TR( TD(T('Drop-in with membership')), TD( represent_float_as_amount( revenue['dropin']['membership']['amount'])), TD(revenue['dropin']['membership']['count']), TD( represent_float_as_amount( revenue['dropin']['membership']['amount'] * revenue['dropin']['membership']['count'])), ) table_revenue = TABLE(header, trial_without_membership, trial_with_membership, dropin_without_membership, dropin_with_membership, _class='table table-striped table-hover') # subscriptions for s in sorted(revenue['subscriptions']): amount = revenue['subscriptions'][s]['amount'] count = revenue['subscriptions'][s]['count'] table_revenue.append( TR(TD(max_string_length(s, 42)), TD(represent_float_as_amount(amount)), TD(count), TD(represent_float_as_amount(amount * count)))) # class cards for c in sorted(revenue['classcards']): amount = revenue['classcards'][c]['amount'] count = revenue['classcards'][c]['count'] table_revenue.append( TR(TD(max_string_length(c, 42)), TD(represent_float_as_amount(amount)), TD(count), TD(represent_float_as_amount(amount * count)))) # Complementary table_revenue.append( TR( TD(T('Complementary')), TD(), TD(revenue['complementary']['count']), TD(), )) # Total footer = TFOOT( TR( TH(T('Total')), TH(), TH(revenue['total']['count']), TH(represent_float_as_amount(revenue['total']['amount'])), )) table_revenue.append(footer) ## # table total ## cls = Class(clsID, date) teacher_payment = cls.get_teacher_payment() if not teacher_payment['error']: tp_amount = teacher_payment['data']['ClassRate'] tp_display = represent_float_as_amount(tp_amount) else: tp_amount = 0 tp_display = teacher_payment['data'] header = THEAD(TR( TH(T('Description')), TH(T('Amount')), )) attendance = TR( TD(T('Attendance')), TD(represent_float_as_amount(revenue['total']['amount']))) teacher_payment = TR(TD(T('Teacher payment')), TD(tp_display)) total = represent_float_as_amount(revenue['total']['amount'] - tp_amount) footer = TFOOT(TR(TH(T('Total')), TH(total))) table_total = TABLE(header, attendance, teacher_payment, footer, _class='table table-striped table-hover') return dict(table_revenue=table_revenue, table_total=table_total)