Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
lib-py-b2b / refund.py
Size: Mime:
from datetime import datetime
from decimal import Decimal
from lib_b2b.base import BaseClass
from lib_b2b.order_line import OrderLineCancellation


class RefundLine(BaseClass):
    def __init__(self, line_id, quantity: int, line_item_id, product_id: str, amount: Decimal):
        self.amount = amount
        self.product_id = product_id
        self.line_item_id = line_item_id
        self.quantity = quantity
        self.line_id = line_id


class Refund(BaseClass):
    def __init__(self, refund_id, order_id: str, created_at: datetime, note: str, lines: [RefundLine]):
        self.order_id = order_id
        self.lines = lines
        self.note = note
        self.created_at = created_at
        self.refund_id = refund_id

    @property
    def amount(self):
        return sum(r.amount for r in self.lines)

    def as_cancellations(self) -> [OrderLineCancellation]:
        _cancellations = []
        if not self.lines:
            return _cancellations
        else:
            for line in self.lines:
                _cancellations.append(
                    OrderLineCancellation(
                        cancellation_id=f"{self.refund_id}-{line.line_id}",
                        cancellation_reason=self.note or 'Refunded by Shopify',
                        cancelled_at=self.created_at,
                        cancel_qty=line.quantity,
                        order_id=self.order_id,
                        channel_line_id=line.line_item_id
                    )
                )
        return _cancellations