コード例 #1
0
 def __run_reporte(self):
     model_producto = DataModel('Producto')
     model_proveedor = DataModel('Proveedor')
     if self.__agotados:
         productos = model_producto.get_records_from_query('SELECT * FROM Producto WHERE existencia <= 0 ORDER BY nombre ASC')
     else:
         productos = model_producto.get_records(order='nombre ASC')
     c = canvas.Canvas('ReporteProductos.pdf', pagesize=landscape(letter))
     self.__add_page_header(c)
     total = 0
     if len(productos) > 0:
         y = 490
         for producto in productos:
             c.drawString(20, y, str(producto['id']))
             nombre = producto['nombre'] if len(producto['nombre']) <= 20 else producto['nombre'][:19]
             c.drawRightString(270, y, nombre)
             proveedor = model_proveedor.get_record(producto['proveedor'])
             if proveedor:
                 prov_nombre = proveedor['nombre'] if len(proveedor['nombre']) <= 20 else proveedor['nombre'][:19]
                 c.drawRightString(460, y, prov_nombre)
             try:
                 c.drawRightString(550, y, '{:20,.2f}'.format(float(producto['precio_compra'])))
                 c.drawRightString(660, y, '{:20,.2f}'.format(float(producto['precio_venta'])))
                 c.drawRightString(760, y, str(producto['existencia']))
             except:
                 pass
             y -= 20
             if y <= 80:
                 self.__add_page_footer(c)
                 y = 490
                 c.showPage()
                 self.__add_page_header(c)
             total += 1
     c.drawRightString(650, 60, 'T O T A L   D E   P R O D U C T O S:   ' + str(total))
     self.__add_page_footer(c)
     c.showPage()
     c.save()
     reader = get_pdf_reader()
     if reader and reader['valor'] != '':
         subprocess.Popen([reader['valor'], "ReporteProductos.pdf"])
コード例 #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
ファイル: ReporteVentas.py プロジェクト: hey-mx/ventas_pygtk
 def _run_reporte(self, fecha_inicio, fecha_fin):
     model_venta = DataModel('Venta')
     model_venta_detalle = DataModel('VentaDetalle')
     model_producto = DataModel('Producto')
     fecha_inicio = datetime.datetime(fecha_inicio[0], fecha_inicio[1] + 1,
         fecha_inicio[2])
     fecha_fin = datetime.datetime(fecha_fin[0], fecha_fin[1] + 1,
         fecha_fin[2])
     fecha_inicio_param = fecha_inicio.strftime("%Y%m%d000000")
     fecha_fin_param = fecha_fin.strftime("%Y%m%d235959")
     query = 'SELECT id, fecha_sistema, sub_total, impuesto, total, pago_recibido, cambio FROM Venta ' +\
         'WHERE fecha_hora >= ? AND fecha_hora <= ?'
     ventas = model_venta.get_records_from_query(query, [fecha_inicio_param, 
         fecha_fin_param])
     c = canvas.Canvas('ReporteVentas.pdf', pagesize=letter)
     if len(ventas) > 0:
         self.__add_page_header(c, fecha_inicio, fecha_fin)
         c.drawString(30, 680, 'Id Venta')
         c.drawString(90, 680, 'Fecha')
         c.drawString(180, 680, 'Sub Total')
         c.drawString(310, 680, 'IVA')
         c.drawString(390, 680, 'Total')
         c.drawString(460, 680, 'Pagado')
         c.drawString(520, 680, 'Cambio')
         y = 650
         total = 0.00
         for venta in ventas:
             total_string = str(venta['total'])
             c.drawString(43, y, str(venta['id']))
             c.drawString(80, y, venta['fecha_sistema'])
             c.drawRightString(230, y, '{:20,.2f}'.format(float(venta['sub_total'])))
             c.drawRightString(340, y, '{:20,.2f}'.format(float(venta['impuesto'])))
             c.drawRightString(420, y, '{:20,.2f}'.format(float(total_string)))
             c.drawRightString(500, y, '{:20,.2f}'.format(float(venta['pago_recibido'])))
             c.drawRightString(560, y, '{:20,.2f}'.format(float(venta['cambio'])))
             total += float(total_string)
             items = model_venta_detalle.get_records(venta_id=venta['id'])
             y -= 30
             if len(items) > 0:
                 
                 c.drawString(133, y, 'Producto')
                 c.drawString(253, y, 'Precio')
                 c.drawString(313, y, 'Cantidad')
                 c.drawString(413, y, 'Subtotal')
                 total_registros = len(items)
                 actual = 0
                 for item in items:
                     y -= 20
                     nombre = item['nombre'] if len(item['nombre']) <= 20 else item['nombre'][:19]
                     c.drawRightString(213, y, nombre)
                     c.drawRightString(280, y, '{:20,.2f}'.format(float(item['producto_precio'])))
                     c.drawRightString(353, y, str(item['producto_cantidad']))
                     c.drawRightString(453, y, '{:20,.2f}'.format(float(item['subtotal'])))
                 y -= 20
                 c.line(10, y, 600, y)
                 y -= 20
                 actual += 1
             if y <= 120:
                 self.__add_page_footer(c)
                 y = 680
                 c.showPage()
                 self.__add_page_header(c, fecha_inicio, fecha_fin)
         c.drawString(360, y - 20, 'T O T A L:')
         c.drawRightString(520, y - 20, '{:20,.2f}'.format(total))
         self.__add_page_footer(c)
         c.showPage()
         c.save()
         reader = get_pdf_reader()
         if reader and reader['valor'] != '':
             subprocess.Popen([reader['valor'], "ReporteVentas.pdf"])