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)
Exemple #2
0
    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)