Ejemplo n.º 1
0
    def sell_to_customer_create_invoice(self, ccdID):
        """
            Add an invoice after adding a classcard
        """
        from os_customer_classcard import CustomerClasscard
        from os_invoice import Invoice

        db = current.db
        T = current.T

        classcard = CustomerClasscard(ccdID)

        igpt = db.invoices_groups_product_types(ProductType='classcard')

        iID = db.invoices.insert(
            invoices_groups_id=igpt.invoices_groups_id,
            Description=classcard.get_name(),
            Status='sent'
        )

        # create object to set Invoice# and due date
        invoice = Invoice(iID)

        # link invoice to customer
        invoice.link_to_customer(classcard.get_auth_customer_id())

        # add classcard item
        invoice.item_add_classcard(ccdID)
Ejemplo n.º 2
0
    def item_add_classcard(self, ccdID):
        """
            :param ccdID: Add customer classcard to invoice
            :return: None
        """
        from os_customer_classcard import CustomerClasscard

        db = current.db
        T = current.T

        classcard = CustomerClasscard(ccdID)
        # link invoice to classcard sold to customer
        db.invoices_customers_classcards.insert(invoices_id=self.invoices_id,
                                                customers_classcards_id=ccdID)

        # add item to invoice
        next_sort_nr = self.get_item_next_sort_nr()
        price = classcard.price

        iiID = db.invoices_items.insert(
            invoices_id=self.invoices_id,
            ProductName=T("Class card"),
            Description=classcard.name.decode('utf-8') + u' (' +
            T("Class card") + u' ' + unicode(ccdID) + u')',
            Quantity=1,
            Price=price,
            Sorting=next_sort_nr,
            tax_rates_id=classcard.school_classcard.tax_rates_id,
        )

        self.set_amounts()

        self.on_update()

        return iiID
Ejemplo n.º 3
0
    def sell_to_customer_create_invoice(self, ccdID):
        """
            Add an invoice after adding a classcard
        """
        from os_customer_classcard import CustomerClasscard
        from os_invoice import Invoice

        db = current.db
        T = current.T

        classcard = CustomerClasscard(ccdID)

        igpt = db.invoices_groups_product_types(ProductType='classcard')

        iID = db.invoices.insert(invoices_groups_id=igpt.invoices_groups_id,
                                 Description=classcard.get_name(),
                                 Status='sent')

        # link invoice to classcard
        db.invoices_customers_classcards.insert(invoices_id=iID,
                                                customers_classcards_id=ccdID)

        # create object to set Invoice# and due date
        invoice = Invoice(iID)
        next_sort_nr = invoice.get_item_next_sort_nr()

        price = classcard.price

        iiID = db.invoices_items.insert(
            invoices_id=iID,
            ProductName=T("Class card"),
            Description=T("Class card") + ' ' + unicode(ccdID),
            Quantity=1,
            Price=price,
            Sorting=next_sort_nr,
            tax_rates_id=classcard.school_classcard.tax_rates_id,
        )

        invoice.set_amounts()
        invoice.link_to_customer(classcard.get_auth_customer_id())
Ejemplo n.º 4
0
    def get_class_revenue_classcard(self, row):
        """
            :param row: row from db.classes_attendance with left join on db.customers_subscriptions
            :return: Revenue for class taken on a card
        """
        db = current.db

        from os_customer_classcard import CustomerClasscard
        from os_invoice import Invoice

        ccdID = row.classes_attendance.customers_classcards_id
        classcard = CustomerClasscard(ccdID)

        left = [
            db.invoices_items.on(db.invoices_items_customers_classcards.
                                 invoices_items_id == db.invoices_items.id)
        ]
        query = (db.invoices_items_customers_classcards.customers_classcards_id
                 == ccdID)
        rows = db(query).select(db.invoices_items.ALL, left=left)

        if not rows:
            revenue_in_vat = 0
            revenue_ex_vat = 0
            revenue_vat = 0
        else:
            row = rows.first()
            invoice = Invoice(row.invoices_id)
            amounts = invoice.get_amounts()

            price_in_vat = amounts.TotalPriceVAT
            price_ex_vat = amounts.TotalPrice

            # Divide by classes taken on card
            if classcard.unlimited:
                # Count all classes taken on card
                query = (
                    db.classes_attendance.customers_classcards_id == ccdID)
                count_classes = db(query).count()

                revenue_in_vat = price_in_vat / count_classes
                revenue_ex_vat = price_ex_vat / count_classes
                revenue_vat = revenue_in_vat - revenue_ex_vat
            else:
                revenue_in_vat = price_in_vat / classcard.classes
                revenue_ex_vat = price_ex_vat / classcard.classes
                revenue_vat = revenue_in_vat - revenue_ex_vat

        return dict(revenue_in_vat=revenue_in_vat,
                    revenue_ex_vat=revenue_ex_vat,
                    revenue_vat=revenue_vat)
Ejemplo n.º 5
0
    def set_status_cancelled(self, force=False):
        """
            Set status cancelled
        """
        from os_cache_manager import OsCacheManager

        T = current.T
        db = current.db
        ocm = OsCacheManager()
        NOW_LOCAL = current.NOW_LOCAL
        return_message = T('Cancelled class')

        # check hours in advance policy
        if self.get_cancellation_possible() or force:
            # Set booking status to cancelled
            self.row.BookingStatus = 'cancelled'
            self.row.update_record()

            # Remove credits taken from customer for attending a class
            query = (db.customers_subscriptions_credits.classes_attendance_id
                     == self.id)
            db(query).delete()

            # Update classes taken for class card
            if self.row.customers_classcards_id:
                from os_customer_classcard import CustomerClasscard
                cc = CustomerClasscard(self.row.customers_classcards_id)
                cc.set_classes_taken()

            # Refresh cache for this customer for both cards & subscriptions
            ocm.clear_customers_classcards(self.row.auth_customer_id)
            ocm.clear_customers_subscriptions(self.row.auth_customer_id)

        else:
            return_message = T("This class can no longer be cancelled")

        return return_message