[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