[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
Fri Jul 28 17:03:15 BRT 2006


http://bugs.async.com.br/show_bug.cgi?id=2304  


Henrique Romano <henrique at async.com.br> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Attachment #3365|                            |review-
               Flag|                            |




--- Comment #17 from Henrique Romano <henrique at async.com.br>  2006-07-28 17:03 BRT ---
(From update of attachment 3365)
>Index: stoqlib/gui/dialogs/productretention.py
>===================================================================

>+class ProductRetentionDialog(BaseEditor):

>+    def __init__(self, conn, model, storable, sellable):
>+        self.sellable = sellable
>+        self.storable = storable

eu não gosto desses "storable" e "sellable" -- por que o callsite tem que
fornecer eles? por que você tem que guardar como atributos da instância?

>+        BaseEditor.__init__(self, conn, model)
>+        self.warehouse = sysparam(self.conn).CURRENT_WAREHOUSE

guardar warehouse também não faz sentido.

>+        self.max = self.storable.get_full_balance(self.warehouse)
>+        self.quantity.set_range(1, self.max)

pode remover self.max também (vide comment abaixo)

>+
>+    def setup_proxies(self):
>+        self.add_proxy(self.model, self.proxy_widgets)
>+        self.add_proxy(self.sellable, self.product_widgets)
>+        self.add_proxy(self.storable, self.storable_widgets)

o produto recebido como model é sempre suposto à possuir as facetas ISellable e
IStorable? se sim, então:

self.add_proxy(self.model, ProductRetentionDialog.proxy_widgets)
self.add_proxy(ISellable(self.model, connection=self.conn),
               ProductRetentionDialog.sellable_widgets)
self.add_proxy(IStorable(self.model, connection=self.conn),
               ...)

>+    def on_confirm(self):
>+        if self.max == 0:
>+            return

Você não precisa disso, se o produto não tem estoque, esse diálogo nem deveria
ser executado.

>+        else:
>+            self.storable.decrease_stock(self.quantity.get_value_as_int(),
>+                                         self.warehouse)
>+            self.conn.commit()

Quem cuida do commit é o callsite, não pode ser aqui.

>Index: stoqlib/domain/product.py
>===================================================================
>--- stoqlib/domain/product.py	(revisão 3986)
>+++ stoqlib/domain/product.py	(cópia de trabalho)
>@@ -91,10 +91,18 @@

> class Product(Domain):
>     """Class responsible to store basic products informations."""
> 
>     suppliers = MultipleJoin('ProductSupplierInfo')
>+    retention = MultipleJoin('ProductRetentionHistory')

Acho que essa referência deveria estar no adapter para IStorable

>@@ -448,6 +456,10 @@
>         sellable = ISellable(adapted, connection=conn)
>         return u"%s %s" % (full_balance, sellable.get_unit_description())
> 
>+    def get_full_balance_by_current_branch(self):
>+        current = sysparam(self.get_connection()).CURRENT_WAREHOUSE
>+        return self.get_full_balance(current)

Teria como colocar em uma linha e evitar a variavel temporaria?


More information about the Stoq-devel mailing list