# Path: stoqdrivers/enum.py
# class TaxType(IntEnum):
#     """
#     Enum for taxes
#     """
#     (ICMS,
#      SUBSTITUTION,
#      EXEMPTION,
#      NONE,
#      SERVICE,
#      CUSTOM) = range(40, 46)
# 
# class UnitType(IntEnum):
#     """
#     Enum for units
#     """
#     (WEIGHT,
#      METERS,
#      LITERS,
#      EMPTY,
#      CUSTOM) = range(20, 25)


from decimal import Decimal
from zope.interface import Interface, Attribute
from stoqdrivers.enum import TaxType, UnitType

    def coupon_identify_customer(customer, address, document):
        """ Identify the customer.  This method doesn't have mandatory
        execution (you can identify the customer only if you like), but when
        executed it must be called before calling any method.

        @param customer:
        @type customer:   str

        @param address:
        @type address:    str

        @param document:
        @type document:   str
        """

    def coupon_is_customer_identified():
        """ Returns True, if the customer have already been identified,
        False otherwise.
        """

    def has_open_coupon():
        """Returns True if the printer currently has an open coupon"""

    def coupon_open():
        """ This needs to be called before anything else (except
        identify_customer())
        """

    def coupon_add_item(code, description, price, taxcode,

# Path: stoqdrivers/enum.py
# class TaxType(IntEnum):
#     """
#     Enum for taxes
#     """
#     (ICMS,
#      SUBSTITUTION,
#      EXEMPTION,
#      NONE,
#      SERVICE,
#      CUSTOM) = range(40, 46)
# 
# class UnitType(IntEnum):
#     """
#     Enum for units
#     """
#     (WEIGHT,
#      METERS,
#      LITERS,
#      EMPTY,
#      CUSTOM) = range(20, 25)


# Path: stoqdrivers/interfaces.py
from decimal import Decimal
from zope.interface import Interface, Attribute
from stoqdrivers.enum import TaxType, UnitType


    def coupon_identify_customer(customer, address, document):
        """ Identify the customer.  This method doesn't have mandatory
        execution (you can identify the customer only if you like), but when
        executed it must be called before calling any method.

        @param customer:
        @type customer:   str

        @param address:
        @type address:    str

        @param document:
        @type document:   str
        """

    def coupon_is_customer_identified():
        """ Returns True, if the customer have already been identified,
        False otherwise.
        """

    def has_open_coupon():
        """Returns True if the printer currently has an open coupon"""

    def coupon_open():
        """ This needs to be called before anything else (except
        identify_customer())
        """

    def coupon_add_item(code, description, price, taxcode,

                        quantity=Decimal("1.0"), unit=UnitType.EMPTY,