Пример #1
0
    def update_order_info(cls, cart, due, shipping_charges=0.0, applied_discount=0.0,
                          shipment_info=NoDefault,
                          bill=NoDefault, bill_info=NoDefault, notes=NoDefault, message=NoDefault, **details):

        cart.order_info.due = due
        cart.order_info.shipping_charges = shipping_charges
        cart.order_info.applied_discount = applied_discount
        cart.order_info.currencies = {'due': with_currency.float2cur(due),
                                      'shipping_charges': with_currency.float2cur(shipping_charges),
                                      'applied_discount': with_currency.float2cur(applied_discount)}

        if shipment_info is not NoDefault:
            cart.order_info.shipment_info.update(shipment_info)

        if bill is not NoDefault:
            cart.order_info.bill = bill

        if bill_info is not NoDefault:
            for k, v in bill_info.iteritems():
                setattr(cart.order_info.bill_info, k, v)
        if notes is not NoDefault:
            cart.order_info.notes = notes

        if message is not NoDefault:
            cart.order_info.message = message

        if details is not {}:
            for k, v in details.iteritems():
                setattr(cart.order_info.details, k, v)
Пример #2
0
    def net_per_vat_rate(self):
        def _item_discount_fraction(item, total):
            discount_chunk = self.applied_discount / total
            return int(item.gross_price * discount_chunk * 100)

        mapping = {}

        sorted_items = sorted(self.items, key=lambda i: i['rate'])
        for k, g in groupby(sorted_items, key=lambda i: i['rate']):
            mapping[k] = sum(imap(lambda i: (with_currency.float2cur(i.gross_price) + _item_discount_fraction(i, self.gross_total)) * i.qty, g))


        if self.currencies.due:
            # If we have currency values available, fix the rounding error
            current_total = sum(mapping.itervalues())
            expected_total = self.currencies.due - self.currencies.shipping_charges
            delta = expected_total - current_total
            mapping[sorted_items[-1]['rate']] += delta


        # Convert everything back to floats for visualization
        for k, g in mapping.iteritems():
            mapping[k] = with_currency.cur2float(g)

        return mapping