def on_productos_agotados_reporte_item_activate(self, widget): reporte_productos = Productos(True) def on_configuracion_button_clicked(self, widget): config_factory = ConfiguracionesFactory(self) self.__add_tab('Configuración', config_factory) def __add_tab(self, label, content_object): if label not in self.pages: self.pages.append(label) self.notebook.append_page(content_object, gtk.Label(label)) content_object.show() page_number = self.pages.index(label) self.notebook.set_current_page(page_number) def __load_reportes_menu(self, menu): self.reportes_button.set_menu(menu) self.reportes_button.show() if __name__ == "__main__": ventasModel = DataModel('VENTA') columns = ventasModel.get_colums(); if 'pago_recibido' not in columns: query = 'ALTER TABLE VENTA ADD COLUMN pago_recibido REAL default 0'; ventasModel.execute(query) if 'cambio' not in columns: query = 'ALTER TABLE VENTA ADD COLUMN cambio REAL default 0'; ventasModel.execute(query) hwg = MainWindowGtk() gtk.main()
class BusquedaWindow: def __init__(self, table_name, on_value_selected, search_fields={}, display_fields=[]): self.on_value_selected = on_value_selected self.model = DataModel(table_name) builder = gtk.Builder() builder.add_from_file("busqueda.glade") builder.connect_signals(self) self.window = builder.get_object("window1") self._search_fields = search_fields self.search_entry = builder.get_object("search_entry") self.tree = builder.get_object("treeview1") self.combo = builder.get_object("search_fields_combo") self._load_search_fields() self._build_treeview(display_fields) self.window.show() def _build_treeview(self, fields): if len(fields) == 0: self.column_names = self.model.get_colums() else: self.column_names = fields self.store = gtk.ListStore(*([str] * len(self.column_names))) count = 0 for column in self.column_names: renderer = gtk.CellRendererText() label = self._get_column_label(column) self.tree.append_column(gtk.TreeViewColumn(label, renderer, text=count)) count += 1 self._get_data() self._ensure_tree_view() def _ensure_tree_view(self): self.tree.set_model(self.store) self.tree.show() def _load_search_fields(self): self.store_combo = gtk.ListStore(str, str) for key in self._search_fields.keys(): self.store_combo.append([key, self._get_column_label(key)]) self.combo.set_model(self.store_combo) self.combo.set_active(0) self.combo.show() def _get_data(self, query="", values=None): if len(query) == 0: data = self.model.get_records() else: data = self.model.get_records_from_query(query, values) for row in data: current_row = [] for column in self.column_names: current_row.append(str(row[column])) if len(current_row) > 0: self.store.append(current_row) def _get_column_label(self, column_name): return column_name.replace('_', ' ').title() def on_buscar_button_clicked(self, widget): current_selection = self.combo.get_active() field = self.store_combo[current_selection][0] match_type = self._search_fields[field] value = self.search_entry.get_text() query = "SELECT * FROM %s WHERE %s %s ? ORDER BY %s ASC" % (self.model.table_name, field, ('=' if match_type == 'match' else 'like'), field) values = [(value if match_type == 'match' else "%%%s%%" % value)] model = self.tree.get_model() model.clear() self._get_data(query, values) self._ensure_tree_view() def on_cancelar_button_clicked(self, widget): self.window.destroy() def on_aceptar_btn_clicked(self, widget): selection = self.tree.get_selection() model, treeiter = selection.get_selected() if treeiter != None: index = None try: index = self.column_names.index('id') except: pass if index is not None and self.on_value_selected is not None: self.on_value_selected(model[treeiter][index]) self.window.destroy() else: dialog = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, "Debe seleccionar un registro para continuar") dialog.run() dialog.destroy()
class FormBuilder: __fields = [] def __init__(self, builder, entity): self.builder = builder self.entity = entity self.model = DataModel(entity) self.__fields = self.model.get_colums() def get_entity(self, entity_id): row = self.model.get_record(entity_id) if row is not None: for field in self.__fields: self.load_widget_value(field, row[field]) def save_entity(self, upsert=False, custom_id=False): id = self.__get_id() values = {} for field in self.__fields: if field != 'id' or (field == 'id' and custom_id == True): values[field] = self.get_widget_value(field) if id == 0 or id == '': self.model.create_record(values) else: self.model.update_record(values, id, upsert) self.clear_form() def delete_entity(self): id = self.__get_id() if id > 0 or id != '': dialog = gtk.MessageDialog(None, gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION, gtk.BUTTONS_YES_NO, "¿Desea eliminar el registro actual?") response = dialog.run() dialog.destroy() if response == gtk.RESPONSE_YES: self.model.delete_record(id) self.clear_form() def clear_form(self): for field in self.__fields: self.load_widget_value(field, '') def load_widget_value(self, widget_name, value): widget = self.builder.get_object(widget_name) if isinstance(widget, gtk.Entry) or isinstance(widget, gtk.Label): widget.set_text(str(value)) if isinstance(widget, gtk.ComboBox): model = widget.get_model() count = 0 for row in model: if row[0] == value: widget.set_active(count) count += 1 if isinstance(widget, gtk.CheckButton): widget.set_active(True if value else False) if isinstance(widget, gtk.Calendar): widget.select_month(value[1], value[0]) widget.select_day(value[2]) def get_widget_value(self, widget_name): value = None widget = self.builder.get_object(widget_name) if isinstance(widget, gtk.Entry) or isinstance(widget, gtk.Label): value = widget.get_text() if isinstance(widget, gtk.ComboBox): model = widget.get_model() tree_iter = widget.get_active_iter() if tree_iter != None: value = str(model[tree_iter][0]) if isinstance(widget, gtk.CheckButton): value = widget.get_active() if isinstance(widget, gtk.Calendar): value = widget.get_date() return value def get_model(self): return self.model def __get_id(self): id = 0 widget = self.builder.get_object('id') if isinstance(widget, gtk.Label) or isinstance(widget, gtk.Entry): id = widget.get_text() return id