24
24
""" Search dialogs for production objects """
27
from decimal import Decimal
29
from kiwi.enums import SearchFilterPosition
30
from kiwi.ui.objectlist import SearchColumn
31
from kiwi.ui.search import ComboSearchFilter
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
52
65
def get_editor_model(self, product_component):
53
66
return product_component.product
69
class ProductionItemsSearch(SearchDialog):
70
title = _(u'Production Items')
71
table = search_table = ProductionItemView
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):
87
def setup_widgets(self):
88
self._produced_button = self.add_button(_(u'_Produced...'),
90
self._produced_button.connect('clicked',
91
self._on_produced_button__clicked)
92
self._produced_button.set_sensitive(False)
93
self._produced_button.show()
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()
101
def create_filters(self):
102
self.set_text_field_columns(['description',])
103
self.set_searchbar_labels(_(u'matching:'))
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)
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'),
116
SearchColumn('description', title=_(u'Description'),
117
data_type=str, expand=True),
118
SearchColumn('unit_description', title=_(u'Unit'),
120
SearchColumn('quantity', title=_(u'To Produce'),
122
SearchColumn('produced', title=_(u'Produced'),
124
SearchColumn('lost', title=_(u'Lost'), data_type=Decimal,
127
def update_widgets(self):
128
view = self.results.get_selected()
129
has_selected = view is not None
131
can_produce = view.quantity - view.lost > view.produced
133
can_lose = can_produce
137
self._produced_button.set_sensitive(can_produce)
138
self._lost_button.set_sensitive(can_lose)
144
def _on_produced_button__clicked(self, widget):
145
self._run_editor(ProductionItemProducedEditor)
147
def _on_lost_button__clicked(self, widget):
148
self._run_editor(ProductionItemLostEditor)