def _get_parameter_value(self, obj): """Given a ParameterData object, returns a string representation of its current value. """ detail = sysparam.get_detail_by_name(obj.field_name) if detail.type == unicode: data = sysparam.get_string(obj.field_name) elif detail.type == bool: data = sysparam.get_bool(obj.field_name) elif detail.type == int: data = sysparam.get_int(obj.field_name) elif detail.type == decimal.Decimal: data = sysparam.get_decimal(obj.field_name) elif isinstance(detail.type, basestring): data = sysparam.get_object(self.store, obj.field_name) else: raise NotImplementedError(detail.type) if isinstance(data, Domain): if not (IDescribable in providedBy(data)): raise TypeError(u"Parameter `%s' must implement IDescribable " "interface." % obj.field_name) return data.get_description() elif detail.options: return detail.options[int(obj.field_value)] elif isinstance(data, bool): return [_(u"No"), _(u"Yes")][data] elif obj.field_name == u'COUNTRY_SUGGESTED': return dgettext("iso_3166", data) elif isinstance(data, unicode): # FIXME: workaround to handle locale specific data return _(data) return unicode(data)
def setup_slaves(self): self._slave = None self.detail = sysparam.get_detail_by_name(self.model.field_name) field_type = self.detail.get_parameter_type() if issubclass(field_type, Image): self._setup_image_slave() elif issubclass(field_type, Domain): self._setup_comboboxentry_slave() elif self.detail.editor == 'file-chooser': self._setup_entry_with_filechooser_button_slave() elif self.detail.editor == 'directory-chooser': self._setup_entry_with_filechooser_button_slave(dir_only=True) elif issubclass(field_type, bool): self._setup_radio_slave() elif issubclass(field_type, (int, float, Decimal)): if self.detail.options: self._setup_options_combo_slave() elif self.detail.range: self._setup_spin_entry_slave() else: self._setup_entry_slave() elif issubclass(field_type, basestring): if self.detail.multiline: self._setup_text_view_slave() elif self.detail.combo_data: self._setup_comboboxentry_slave(data=self.detail.combo_data()) else: self._setup_entry_slave() else: raise TypeError("ParameterData for `%s' has an invalid " "type: %r" % (self.model.field_name, field_type))
def _setup_comboboxentry_slave(self, data=None): widget = ProxyComboEntry() widget.props.sensitive = self.sensitive widget.model_attribute = "field_value" widget.data_type = unicode detail = sysparam.get_detail_by_name(self.model.field_name) is_mandatory = not detail.allow_none self._block_none_value = is_mandatory widget.set_property('mandatory', is_mandatory) if not data: field_type = detail.get_parameter_type() # FIXME: DEFAULT_PAYMENT_METHOD needs to filter information from # domain because it cannot be any non-creatable method. # Find a way to implement this in a generic on ParameterDetails if self.model.field_name == "DEFAULT_PAYMENT_METHOD": result = PaymentMethod.get_creatable_methods( self.store, Payment.TYPE_IN, False) else: result = self.store.find(field_type) data = [(res.get_description(), unicode(res.id)) for res in result] widget.prefill(data) self.proxy.add_widget("field_value", widget) self.container.add(widget) widget.show() widget.connect('validation-changed', self._on_entry__validation_changed)
def test_confirm(self): parameter_data = self.create_parameter_data() detail = sysparam.get_detail_by_name(parameter_data.field_name) editor = SystemParameterEditor(self.store, detail) parameter_data.field_value = None self.assertFalse(editor.validate_confirm()) self.assertFalse(editor.confirm()) editor.model.field_value = self.create_account().id self.assertTrue(editor.confirm()) self.check_editor(editor, 'editor-systemparameter-confirm', [editor.retval])
def __init__(self, store, model): if not model: raise ValueError("This editor can't be called without a model") # By default, if the user sets a value to None (e.g. selecting nothing # on a comboentry) we block it's update. Change this to False if the # param itself can accept None. self._block_none_value = True self.sensitive = True if model.field_name in ["DEMO_MODE", "LOCAL_BRANCH", "SYNCHRONIZED_MODE"]: self.sensitive = False self._parameter_details = sysparam.get_detail_by_name(model.field_name) BaseEditor.__init__(self, store, model) self._setup_widgets()
def test_image(self): detail = sysparam.get_detail_by_name(u'CUSTOM_LOGO_FOR_REPORTS') editor = SystemParameterEditor(self.store, detail) self.check_editor(editor, 'editor-systemparameter-image')
def test_text_view_entry(self): detail = sysparam.get_detail_by_name(u'BOOKLET_INSTRUCTIONS') editor = SystemParameterEditor(self.store, detail) self.check_editor(editor, 'editor-systemparameter-text-view-entry')
def test_spin_entry(self): detail = sysparam.get_detail_by_name(u'MAX_SEARCH_RESULTS') editor = SystemParameterEditor(self.store, detail) editor._entry.update(456) self.check_editor(editor, 'editor-systemparameter-spin-entry')
def test_combo_entry(self): detail = sysparam.get_detail_by_name(u'COUNTRY_SUGGESTED') editor = SystemParameterEditor(self.store, detail) self.check_editor(editor, 'editor-systemparameter-combo-entry')
def test_get_parameter_data_domain(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'TILLS_ACCOUNT') value = search._get_parameter_value(parameter) self.assertEqual(value, 'Tills')
def test_get_parameter_data_unicode(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'STATE_SUGGESTED') value = search._get_parameter_value(parameter) self.assertEquals(value, u'SP')
def test_get_parameter_data_bool(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'DISABLE_COOKIES') value = search._get_parameter_value(parameter) self.assertEquals(value, 'No')
def test_create(self): parameter_data = self.create_parameter_data() detail = sysparam.get_detail_by_name(parameter_data.field_name) editor = SystemParameterEditor(self.store, detail) self.check_editor(editor, 'editor-systemparameter-show')
def test_get_parameter_data_unicode(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'STATE_SUGGESTED') value = search._get_parameter_value(parameter) self.assertEqual(value, u'SP')
def test_get_parameter_data_else(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'DEFAULT_AREA_CODE') value = search._get_parameter_value(parameter) self.assertEqual(value, u'16')
def get_short_description(self): from stoqlib.lib.parameters import sysparam return sysparam.get_detail_by_name(self.field_name).short_desc
def get_group(self): from stoqlib.lib.parameters import sysparam return sysparam.get_detail_by_name(self.field_name).group
def test_radio(self): detail = sysparam.get_detail_by_name(u'DISABLE_COOKIES') editor = SystemParameterEditor(self.store, detail) self.check_editor(editor, 'editor-systemparameter-radio')
def test_get_parameter_data_domain(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'TILLS_ACCOUNT') value = search._get_parameter_value(parameter) self.assertEquals(value, 'Tills')
def test_options_combo(self): detail = sysparam.get_detail_by_name(u'SCALE_BARCODE_FORMAT') editor = SystemParameterEditor(self.store, detail) self.check_editor(editor, 'editor-systemparameter-options-combo')
def test_get_parameter_data_country_suggested(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'COUNTRY_SUGGESTED') value = search._get_parameter_value(parameter) self.assertEqual(value, u'Brazil')
def test_get_parameter_data_country_suggested(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'COUNTRY_SUGGESTED') value = search._get_parameter_value(parameter) self.assertEquals(value, u'Brazil')
def test_entry_insensitive(self): with self.sysparam(USER_HASH=u'45b27f4258024de58d2308753fcfff21'): detail = sysparam.get_detail_by_name(u'USER_HASH') editor = SystemParameterEditor(self.store, detail) self.check_editor(editor, 'editor-systemparameter-entry-insensitive')
def test_get_parameter_data_else(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'DEFAULT_AREA_CODE') value = search._get_parameter_value(parameter) self.assertEquals(value, u'16')
def test_get_parameter_data_options(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'SCALE_BARCODE_FORMAT') value = search._get_parameter_value(parameter) self.assertEqual(value, u'4 Digits Code with Price')
def test_entry(self): detail = sysparam.get_detail_by_name(u'CITY_SUGGESTED') editor = SystemParameterEditor(self.store, detail) editor._entry.update('any city') self.check_editor(editor, 'editor-systemparameter-entry')
def test_get_parameter_data_bool(self): search = ParameterSearch(self.store) parameter = sysparam.get_detail_by_name(u'DISABLE_COOKIES') value = search._get_parameter_value(parameter) self.assertEqual(value, 'No')