コード例 #1
0
ファイル: puntoventa.py プロジェクト: hey-mx/ventas_pygtk
    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()
コード例 #2
0
ファイル: Busqueda.py プロジェクト: hey-mx/ventas_pygtk
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()
コード例 #3
0
ファイル: Form.py プロジェクト: hey-mx/ventas_pygtk
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