Source code for stoqlib.domain.invoice

# -*- coding: utf-8 -*-
# vi:si:et:sw=4:sts=4:ts=4

##
## Copyright (C) 2007 Async Open Source <http://www.async.com.br>
## All rights reserved
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU Lesser General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU Lesser General Public License for more details.
##
## You should have received a copy of the GNU Lesser General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., or visit: http://www.gnu.org/.
##
##
##  Author(s): Stoq Team <stoq-devel@async.com.br>
##
"""Invoice domain classes; field, layout and printer
"""

# pylint: enable=E1101

from storm.references import Reference
from zope.interface import implementer

from stoqlib.database.properties import IntCol, UnicodeCol, IdCol, BoolCol
from stoqlib.domain.base import Domain
from stoqlib.domain.interfaces import IDescribable


@implementer(IDescribable)
[docs]class InvoicePrinter(Domain): """An invoice printer is a representation of a physical printer connected to a branch station. It has a layout assigned which will be used to format the data sent to the printer """ __storm_table__ = 'invoice_printer' #: a operating system specific identifier for the #: device used to send the printer job, /dev/lpX on unix device_name = UnicodeCol() #: a human friendly description of the printer, this #: will appear in interfaces description = UnicodeCol() #: the station this printer is connected to station_id = IdCol() station = Reference(station_id, 'BranchStation.id') #: the layout used to format the invoices layout_id = IdCol() layout = Reference(layout_id, 'InvoiceLayout.id')
[docs] def get_description(self): """ Gets the description of the printer. :returns: description """ return self.description
@classmethod
[docs] def get_by_station(cls, station, store): """Gets the printer given a station. If there's no invoice printer configured for this station, return None. :param station: the station :param store: a store :returns: an InvoiceLayout or None """ return store.find(InvoicePrinter, station=station).one()
@implementer(IDescribable)
[docs]class InvoiceLayout(Domain): """A layout of an invoice. """ __storm_table__ = 'invoice_layout' #: description of the layout, this is human friendly #: string which is displayed in interfaces. description = UnicodeCol() #: the width in units of the layout width = IntCol() #: the height in units of the layout height = IntCol() #: Indicates the type of paper used to print the layout continuous_page = BoolCol() @property def size(self): return self.width, self.height @property def fields(self): """Fetches all the fields tied to this layout :returns: a sequence of InvoiceField """ return self.store.find(InvoiceField, layout=self)
[docs] def get_description(self): """Gets the description of the field :returns: description. """ return self.description
[docs]class InvoiceField(Domain): """Represents a field in an InvoiceLayout. """ __storm_table__ = 'invoice_field' #: x position of the upper left corner of the field x = IntCol() #: y position of the upper left corner of the field y = IntCol() #: the width of the field, must be larger than 0 width = IntCol() #: the height of the field, must be larger than 0 height = IntCol() #: the name of the field, this is used to identify #: and fetch the data when printing the invoice field_name = UnicodeCol() #: the free text of the field content = UnicodeCol(default=u'') #: the layout this field belongs to layout_id = IdCol() layout = Reference(layout_id, 'InvoiceLayout.id')