Source code for stoqlib.gui.slaves.sellableslave

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

##
## Copyright (C) 2005, 2006 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>
##
""" Slaves for sellables """

from kiwi.currency import currency
from kiwi.datatypes import ValidationError
from kiwi.ui.objectlist import Column


from stoqlib.domain.person import ClientCategory
from stoqlib.domain.sellable import ClientCategoryPrice, Sellable
from stoqlib.gui.editors.baseeditor import (BaseRelationshipEditorSlave,
                                            BaseEditorSlave)
from stoqlib.gui.editors.sellableeditor import CategoryPriceEditor
from stoqlib.lib.formatters import get_formatted_cost
from stoqlib.lib.message import info
from stoqlib.lib.translation import stoqlib_gettext

_ = stoqlib_gettext


[docs]class SellableDetailsSlave(BaseEditorSlave): """This is base slave for product or service details.""" gladefile = 'SellableDetailsSlave' proxy_widgets = ['notes'] model_type = Sellable image_model = None def __init__(self, store, model=None, db_form=None, visual_mode=False): self.db_form = db_form BaseEditorSlave.__init__(self, store, model, visual_mode) # # BaseEditorSlave hooks #
[docs] def setup_proxies(self): self.proxy = self.add_proxy(self.model, SellableDetailsSlave.proxy_widgets)
[docs]class CategoryPriceSlave(BaseRelationshipEditorSlave): """A slave for changing the suppliers for a product. """ target_name = _(u'Category') editor = CategoryPriceEditor model_type = ClientCategoryPrice def __init__(self, store, sellable, visual_mode=False): self._sellable = sellable BaseRelationshipEditorSlave.__init__(self, store, visual_mode=visual_mode)
[docs] def get_targets(self): cats = self.store.find(ClientCategory).order_by(ClientCategory.name) return [(c.get_description(), c) for c in cats]
[docs] def get_relations(self): return self._sellable.get_category_prices()
def _format_markup(self, obj): return '%0.2f%%' % obj
[docs] def get_columns(self): return [Column('category_name', title=_(u'Category'), data_type=str, expand=True, sorted=True), Column('price', title=_(u'Price'), data_type=currency, format_func=get_formatted_cost, width=150), Column('markup', title=_(u'Markup'), data_type=str, width=100, format_func=self._format_markup)]
[docs] def create_model(self): sellable = self._sellable category = self.target_combo.get_selected_data() if sellable.get_category_price_info(category): product_desc = sellable.get_description() info(_(u'%s already have a price for category %s') % (product_desc, category.get_description())) return model = ClientCategoryPrice(sellable=sellable, category=category, price=sellable.price, max_discount=sellable.max_discount, store=self.store) return model
[docs]class OnSaleInfoSlave(BaseEditorSlave): """A slave for price and dates information when a certain product or service is on sale. """ gladefile = 'OnSaleInfoSlave' model_type = Sellable proxy_widgets = ('on_sale_price', 'on_sale_start_date', 'on_sale_end_date') # # BaseEditorSlave hooks #
[docs] def setup_proxies(self): self.proxy = self.add_proxy(self.model, self.proxy_widgets)
# # Kiwi callbacks #
[docs] def on_on_sale_price__validate(self, entry, value): if value < 0: return ValidationError(_("Sale price can not be 0"))