[Stoq-devel] [Bug 2304] - Implementar diálogo para emissão de retenção de produtos
bugzilla-daemon at async.com.br
bugzilla-daemon at async.com.br
Mon Jul 31 14:25:51 BRT 2006
http://bugs.async.com.br/show_bug.cgi?id=2304
Henrique Romano <henrique at async.com.br> changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #3370|review?(henrique at async.com.b|review-
Flag|r) |
--- Comment #24 from Henrique Romano <henrique at async.com.br> 2006-07-31 14:25 BRT ---
(From update of attachment 3370)
>Index: stoqlib/gui/dialogs/productretention.py
>===================================================================
>+class ProductRetentionDialog(BaseEditor):
>+ def __init__(self, conn, storable):
>+ self.model = self.create_model(conn, storable)
não precisa dessa linha, o create_model é chamado internamente por BaseEditor;
mas eu entendo o problema.. você tem um objeto storable, mas o model_type é
outro, e então o BaseEditor não permite continuar com essa situação.
uma solução seria:
def __init__(self, conn, storable):
model = self._get_model(storable)
BaseEditor.__init__(self, conn, model)
def _get_model(self, storable):
return ProductRetentionHistory(storable=storable,
connection=conn)
>+ BaseEditor.__init__(self, conn, self.model)
>+ self.max = self.model.storable.get_full_balance(
>+ sysparam(self.conn).CURRENT_WAREHOUSE)
>+ self.quantity.set_range(1,
>+ self.model.storable.get_full_balance(
>+ sysparam(self.conn).CURRENT_WAREHOUSE))
esse tipo de código no construtor é errado -- crie um método setup_widgets e
chame ele quando setup_proxies acabar seu prog
>+ def create_model(self, conn, storable):
>+ return ProductRetentionHistory(connection=conn,
>+ storable=storable)
s/create_model/_get_model
>+
>+ def setup_proxies(self):
>+ model_sellable = Product.getAdapterClass(ISellable).selectBy(
>+ _originalID=self.model.storable._originalID,
>+ connection=self.conn)[0]
product = self.model.get_adapted()
model_sellable = product.iget(ISellable, product.id)
>+ self.add_proxy(self.model, self.proxy_widgets)
>+ self.add_proxy(model_sellable, self.sellable_widgets)
mas eu não entendo... que informação da faceta sellable você precisa alterar
nesse diálogo?
>+ self.add_proxy(self.model.storable.get_adapted(),
>+ self.product_widgets)
e que informação de Product?
>+
>+ def validate_confirm(self):
>+ if self.reason.get_buffer().get_char_count() == 0:
>+ warning(_(u'You can not retain a product without a reason!'))
>+ return False
>+ return True
if not self.model.reason:
warning(...)
return False
return True
>+
>+ def on_confirm(self):
>+ self.model.storable.decrease_stock(self.quantity.get_value_as_int(),
>+ sysparam(self.conn).CURRENT_WAREHOUSE)
>+ return True
self.model.storable.decrease_stock(self.model.quantity,
sysparam(self.conn).CURRENT_WAREHOUSE)
>Index: stoqlib/domain/product.py
>===================================================================
>@@ -91,6 +91,13 @@
>+class ProductRetentionHistory(Domain):
>+ """Class responsible to store information about product's retention."""
>+
>+ quantity = DecimalCol(default=0)
>+ reason = UnicodeCol(default='')
>+ storable = ForeignKey('ProductAdaptToStorable')
Armazenar uma referência para o product (original) aqui seria melhor, pois
evita, nos callsites, de termos que pegar o adapted e depois uma outra faceta.
>@@ -448,6 +457,10 @@
> sellable = ISellable(adapted, connection=conn)
> return u"%s %s" % (full_balance, sellable.get_unit_description())
>
>+ def get_full_balance_by_current_branch(self):
>+ return self.get_full_balance(
>+ sysparam(self.get_connection()).CURRENT_WAREHOUSE)
>+
s/by/for
More information about the Stoq-devel
mailing list