~georgeyk/stoqlib/cezar-all

« back to all changes in this revision

Viewing changes to stoqlib/gui/search/productionsearch.py

  • Committer: georgeyk
  • Date: 2009-09-18 19:19:28 UTC
  • mfrom: (3111.5.18 stoqlib)
  • Revision ID: georgeyk.dev@gmail.com-20090918191928-oudcvs49kvdsj5ui
Manage production items.

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
##
24
24
""" Search dialogs for production objects """
25
25
 
 
26
 
 
27
from decimal import Decimal
 
28
 
 
29
from kiwi.enums import SearchFilterPosition
 
30
from kiwi.ui.objectlist import SearchColumn
 
31
from kiwi.ui.search import ComboSearchFilter
 
32
 
 
33
from stoqlib.database.runtime import new_transaction, finish_transaction
26
34
from stoqlib.domain.person import PersonAdaptToBranch
27
35
from stoqlib.domain.product import ProductComponent
28
 
from stoqlib.domain.views import ProductComponentView
 
36
from stoqlib.domain.production import ProductionOrder
 
37
from stoqlib.domain.views import ProductComponentView, ProductionItemView
 
38
from stoqlib.gui.base.dialogs import run_dialog
 
39
from stoqlib.gui.base.search import SearchDialog
29
40
from stoqlib.gui.editors.producteditor import ProductionProductEditor
 
41
from stoqlib.gui.editors.productioneditor import (ProductionItemProducedEditor,
 
42
                                                  ProductionItemLostEditor)
30
43
from stoqlib.gui.search.productsearch import ProductSearch
31
44
from stoqlib.lib.translation import stoqlib_gettext
32
45
 
51
64
 
52
65
    def get_editor_model(self, product_component):
53
66
        return product_component.product
 
67
 
 
68
 
 
69
class ProductionItemsSearch(SearchDialog):
 
70
    title = _(u'Production Items')
 
71
    table = search_table = ProductionItemView
 
72
    size = (750, 450)
 
73
 
 
74
    def _run_editor(self, editor_class):
 
75
        trans = new_transaction()
 
76
        production_item = self.results.get_selected().production_item
 
77
        model = trans.get(production_item)
 
78
        retval = run_dialog(editor_class, self, self.conn, model)
 
79
        if finish_transaction(trans, retval):
 
80
            self.search.refresh()
 
81
        trans.close()
 
82
 
 
83
    #
 
84
    # SearchDialog
 
85
    #
 
86
 
 
87
    def setup_widgets(self):
 
88
        self._produced_button = self.add_button(_(u'_Produced...'),
 
89
                                                image='add24px.png')
 
90
        self._produced_button.connect('clicked',
 
91
                                      self._on_produced_button__clicked)
 
92
        self._produced_button.set_sensitive(False)
 
93
        self._produced_button.show()
 
94
 
 
95
        self._lost_button = self.add_button(_(u'_Lost...'),
 
96
                                            image='remove24px.png')
 
97
        self._lost_button.connect('clicked', self._on_lost_button__clicked)
 
98
        self._lost_button.set_sensitive(False)
 
99
        self._lost_button.show()
 
100
 
 
101
    def create_filters(self):
 
102
        self.set_text_field_columns(['description',])
 
103
        self.set_searchbar_labels(_(u'matching:'))
 
104
 
 
105
        statuses = [(desc, i) for i, desc in ProductionOrder.statuses.items()]
 
106
        statuses.insert(0, (_(u'Any'), None))
 
107
        status_filter = ComboSearchFilter(_('order status:'), statuses)
 
108
        self.add_filter(status_filter, columns=['order_status'],
 
109
                        position=SearchFilterPosition.TOP)
 
110
 
 
111
    def get_columns(self):
 
112
        return [SearchColumn('order_id', title=_(u'Order'), data_type=int,
 
113
                              sorted=True, format='%04d'),
 
114
                SearchColumn('category_description', title=_(u'Category'),
 
115
                              data_type=str),
 
116
                SearchColumn('description', title=_(u'Description'),
 
117
                              data_type=str, expand=True),
 
118
                SearchColumn('unit_description', title=_(u'Unit'),
 
119
                              data_type=str),
 
120
                SearchColumn('quantity', title=_(u'To Produce'),
 
121
                              data_type=Decimal),
 
122
                SearchColumn('produced', title=_(u'Produced'),
 
123
                              data_type=Decimal),
 
124
                SearchColumn('lost', title=_(u'Lost'), data_type=Decimal,
 
125
                              visible=False),]
 
126
 
 
127
    def update_widgets(self):
 
128
        view = self.results.get_selected()
 
129
        has_selected = view is not None
 
130
        if has_selected:
 
131
            can_produce = view.quantity - view.lost > view.produced
 
132
            # the same situation
 
133
            can_lose = can_produce
 
134
        else:
 
135
            can_produce = False
 
136
            can_lose = False
 
137
        self._produced_button.set_sensitive(can_produce)
 
138
        self._lost_button.set_sensitive(can_lose)
 
139
 
 
140
    #
 
141
    # Callbacks
 
142
    #
 
143
 
 
144
    def _on_produced_button__clicked(self, widget):
 
145
        self._run_editor(ProductionItemProducedEditor)
 
146
 
 
147
    def _on_lost_button__clicked(self, widget):
 
148
        self._run_editor(ProductionItemLostEditor)