[Stoq-devel] [Bug 2688] - Inconsistências no wizard de pedido de compra

bugzilla-daemon at async.com.br bugzilla-daemon at async.com.br
Tue Jul 18 17:29:49 BRT 2006


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





--- Comment #8 from Henrique Romano <henrique at async.com.br>  2006-07-18 17:29 BRT ---
(From update of attachment 3324)
>Index: data/glade/ChooseItemStep.glade
>===================================================================

O nome aqui é muito genérico para o que o gladefile representa. Talvez
"SellableTypeItemStep"?

>Index: data/glade/AbstractProductStep.glade
>===================================================================
>--- data/glade/AbstractProductStep.glade	(revisão 3920)
>+++ data/glade/AbstractProductStep.glade	(cópia de trabalho)
...
>@@ -194,29 +195,26 @@
>                                 </child>
>                                 <child>
>                                     <widget class="GtkButton" id="add_product_button">
>+                                        <property name="is_focus">True</property>

Hmmm. Tem certeza de que você realmente quer essa mudança? Por que o botão
"add/edit" tem que estar com foco? Não seria a entry do combo? Poderia testar
isso?

>Index: stoqlib/gui/wizards/purchase.py
>===================================================================

>@@ -240,13 +247,29 @@
...
>         # We must commit now since we must rollback self.conn if the user
>         # abort ProductEditor
>         self.conn.commit()
>-        if run_dialog(ProductEditor, self, self.conn, product):
>+        sellables_editors = {Service: ServiceEditor,
>+                             Product: ProductEditor,
>+                             GiftCertificate: GiftCertificateTypeEditor}

s/sellables_editors/sellable_editors

>+        if item is not None:
>+            for Class, Editor in sellables_editors.items():

Acho que você não precisa dessa iteração, e do dicionário também não:

if item:
  editors = {Product: ProductEditor,
             Service: ServiceEditor,
             GiftCertificate: GiftCertificateTypeEditor,}
  try:
    editor = editors[item.get_adapted()]
  except KeyError:
    raise DatabaseIncosistency("Invalid sellable type: %r" 
                               % item.get_adapted())
  model = run_dialog(editor, self, self.conn, item)
else:
  model = run_dialog(SelectionItemWizard, self, self.conn)
if model:
  self.conn.commit()
  self.setup_product_entry()

Talvez algo assim fique melhor

>Index: stoqlib/gui/wizards/purchaseitemselection.py
>===================================================================
>--- stoqlib/gui/wizards/purchaseitemselection.py	(revisão 0)
>+++ stoqlib/gui/wizards/purchaseitemselection.py	(revisão 0)
>@@ -0,0 +1,108 @@
>+# -*- 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

Lembre-se, quando criando um novo módulo, coloque somente o ano atual.

>+class SelectionItemWizard(BaseWizard):
...
>+    def create_model(self, conn):
>+        model = Settable(teste='a')
>+        return model

teste?

>+class SelectionItemStep(WizardEditorStep):
...

Precisa pensar num nome melhor pra essas duas classes também. Talvez algo
derivado da sugestão que eu dei pro gladefile...

>+
>+    def __init__(self, wizard, conn, model, combo_product):
>+        self.combo = combo_product
>+        WizardEditorStep.__init__(self, conn, wizard, model)
>+        self.update_widgets()

Por que você precisa de combo_product aqui?

>+    def update_widgets(self):
>+        a = self.radio_product.get_active()
>+        b = self.radio_service.get_active()
>+        c = self.radio_gift.get_active()
>+        if a:
>+            self.editor = ProductEditor
>+        if b:
>+            self.editor = ServiceEditor
>+        if c:
>+            self.editor = GiftCertificateTypeEditor

renomeia update_widgets para get_item_editor e mude a implementação também, não
precisa das 3 variaveis:

if self.radio_product.get_active():
  return ProductEditor
elif self.radio_service.get_active():
  return ServiceEditor
elif self.radio_gift.get_active():
  return GiftEditor
else:
  raise StoqlibError("blabla")

>+    def next_step(self):
>+        if run_dialog(self.editor, self, self.conn, model=None):

E aqui, no lugar de self.editor, vc usa self.get_item_editor()

>+    def on_radio_product__toggled(self, widget):
>+        self.update_widgets()
>+
>+    def on_radio_service__toggled(self, widget):
>+        self.update_widgets()
>+
>+    def on_radio_gift__toggled(self, widget):
>+        self.update_widgets()

...e pode ser livrar dessas callbacks

>Index: stoqlib/gui/wizards/abstract.py
>===================================================================
>--- stoqlib/gui/wizards/abstract.py	(revisão 3920)
>+++ stoqlib/gui/wizards/abstract.py	(cópia de trabalho)
>@@ -294,14 +294,6 @@
>     def _update_widgets(self):
>         has_product_str = self.product.get_text() != ''
>         self.add_item_button.set_sensitive(has_product_str)
>-        if self.add_item_button.get_property('visible'):
>-            has_product = (self.product_proxy.model and
>-                           self.product_proxy.model.product is not None)
>-            if has_product:
>-                text = _('Edit Product...')
>-            else:
>-                text = _('Add Product...')
>-            self.add_product_button.set_label(text)

Hmmm. Que tal ao invés de termos "Add/Edit item" como label do botão, trocarmos
de "Add item" para "Edit Item" quando tiver item selecionado, igual era feito
antes aqui?


More information about the Stoq-devel mailing list