def format_transaction_table_output(self, audit_code, transaction, orderitem, transaction_amount_per_item=None,
                                        transaction_fee_per_item=None):
        """Generate an output row from an orderitem and transaction."""

        # Handle cases where per-item values are defaulted.
        if transaction:
            if transaction_amount_per_item is None:
                transaction_amount_per_item = transaction.amount
            if transaction_fee_per_item is None:
                transaction_fee_per_item = transaction.transaction_fee

        org_id = None
        if orderitem:
            org_id = get_org_id_for_course(orderitem.course_id)

        result = [
            audit_code[0],
            audit_code[1],
            audit_code[2],
            orderitem.payment_ref_id if orderitem else transaction.payment_ref_id,
            orderitem.order_id if orderitem else None,
            encode_id(orderitem.order_processor, "order_id", orderitem.order_id) if orderitem else None,
            orderitem.date_placed if orderitem else None,
            # transaction information
            transaction.date if transaction else None,
            transaction.transaction_id if transaction else None,
            encode_id(transaction.payment_gateway_id, "transaction_id", transaction.transaction_id) if transaction else None,
            transaction.payment_gateway_id if transaction else None,
            transaction.payment_gateway_account_id if transaction else None,
            transaction.transaction_type if transaction else None,
            transaction.payment_method if transaction else None,
            transaction.amount if transaction else None,
            transaction.iso_currency_code if transaction else None,
            transaction.transaction_fee if transaction else None,
            # mapping information: part of transaction that applies to this orderitem
            str(transaction_amount_per_item) if transaction_amount_per_item is not None else None,
            str(transaction_fee_per_item) if transaction_fee_per_item is not None else None,
            # orderitem information
            orderitem.line_item_id if orderitem else None,
            encode_id(orderitem.order_processor, "line_item_id", orderitem.line_item_id) if orderitem else None,
            orderitem.line_item_product_id if orderitem else None,
            orderitem.line_item_price if orderitem else None,
            orderitem.line_item_unit_price if orderitem else None,
            orderitem.line_item_quantity if orderitem else None,
            orderitem.refunded_amount if orderitem else None,
            orderitem.refunded_quantity if orderitem else None,
            orderitem.user_id if orderitem else None,
            orderitem.username if orderitem else None,
            orderitem.user_email if orderitem else None,
            orderitem.product_class if orderitem else None,
            orderitem.product_detail if orderitem else None,
            orderitem.course_id if orderitem else None,
            org_id if org_id is not None else None,
            orderitem.order_processor if orderitem else None,
        ]
        return (OrderTransactionRecord(*result).to_tsv(),)
 def test_round_trip(self, suffix):
     encoded_id = id_codec.encode_id(SCOPE + suffix, TYPE + suffix, VALUE + suffix)
     decoded = id_codec.decode_id(encoded_id)
     self.assertEquals((SCOPE + suffix, TYPE + suffix, VALUE + suffix), decoded)
    def format_transaction_table_output(self, audit_code, transaction, orderitem, transaction_amount_per_item=None,
                                        transaction_fee_per_item=None):
        """Generate an output row from an orderitem and transaction."""

        # Handle cases where per-item values are defaulted.
        if transaction:
            if transaction_amount_per_item is None:
                transaction_amount_per_item = transaction.amount
            if transaction_fee_per_item is None:
                transaction_fee_per_item = transaction.transaction_fee

        org_id = None
        if orderitem:
            org_id = get_org_id_for_course(orderitem.course_id)

        result = [
            audit_code[0],
            audit_code[1],
            audit_code[2],
            orderitem.partner_short_code if orderitem else self.default_partner_short_code,
            orderitem.payment_ref_id if orderitem else transaction.payment_ref_id,
            orderitem.order_id if orderitem else None,
            encode_id(orderitem.order_processor, "order_id", orderitem.order_id) if orderitem else None,
            orderitem.date_placed if orderitem else None,
            # transaction information
            transaction.date if transaction else None,
            transaction.transaction_id if transaction else None,
            encode_id(transaction.payment_gateway_id, "transaction_id", transaction.transaction_id) if transaction else None,
            transaction.payment_gateway_id if transaction else None,
            transaction.payment_gateway_account_id if transaction else None,
            transaction.transaction_type if transaction else None,
            transaction.payment_method if transaction else None,
            transaction.amount if transaction else None,
            transaction.iso_currency_code if transaction else None,
            transaction.transaction_fee if transaction else None,
            # mapping information: part of transaction that applies to this orderitem
            str(transaction_amount_per_item) if transaction_amount_per_item is not None else None,
            str(transaction_fee_per_item) if transaction_fee_per_item is not None else None,
            # orderitem information
            orderitem.line_item_id if orderitem else None,
            encode_id(orderitem.order_processor, "line_item_id", orderitem.line_item_id) if orderitem else None,
            orderitem.line_item_product_id if orderitem else None,
            orderitem.line_item_price if orderitem else None,
            orderitem.line_item_unit_price if orderitem else None,
            orderitem.line_item_quantity if orderitem else None,
            orderitem.coupon_id if orderitem else None,
            orderitem.discount_amount if orderitem else None,
            orderitem.voucher_id if orderitem else None,
            orderitem.voucher_code if orderitem else None,
            orderitem.refunded_amount if orderitem else None,
            orderitem.refunded_quantity if orderitem else None,
            orderitem.user_id if orderitem else None,
            orderitem.username if orderitem else None,
            orderitem.user_email if orderitem else None,
            orderitem.product_class if orderitem else None,
            orderitem.product_detail if orderitem else None,
            orderitem.course_id if orderitem else None,
            org_id if org_id is not None else None,
            orderitem.order_processor if orderitem else None,
        ]
        return (OrderTransactionRecord(*result).to_tsv(),)
 def test_round_trip(self, suffix):
     encoded_id = id_codec.encode_id(SCOPE + suffix, TYPE + suffix, VALUE + suffix)
     decoded = id_codec.decode_id(encoded_id)
     self.assertEquals((SCOPE + suffix, TYPE + suffix, VALUE + suffix), decoded)