class Selector(QDialog,Ui_Seleccion): def __init__(self,parent, entidad,tablename=False,columnas=False,heads=False,filtros=True): #I.E. Selector(self,'proveedores','clientes','id,nombre,email','Id,Nombre del proveedor,E-Mail',"`nombre` like '%%%s%%' order by nombre desc limit 100") #Tablename, columnas y filtros vienen dadas por una cadena de elementos separados por comas y es lo que se pasa al query QDialog.__init__(self) self.setupUi(self) self.parent=parent self.nombre=entidad.capitalize() self.tablename=tablename.lower() self.columnas=columnas self.filtros=filtros if heads: self.heads=heads.split(',') else: self.heads=columnas.split(',') #print self.heads self.leEntidad.setText(self.nombre+':') self.setWindowTitle("Seleccionador de {0}".format(self.nombre)) self.modelo=QModeloTablaSql(self.parent.cursor,self) self.tabla.setModel(self.modelo) self.connect(self.texto,SIGNAL("textChanged(QString)"),self.buscar) self.connect(self.tabla,SIGNAL("activated(const QModelIndex&)"),self.seleccionado) def buscar(self,texto=False): texto=str(texto) if len(texto)>3 or texto=='*': if texto=='*': sql="SELECT {0} FROM {1};".format(self.columnas,self.tablename) else: sql="SELECT {0} FROM {1} where {2} ;".format(self.columnas,self.tablename,self.filtros.format(texto)) #print sql self.modelo.query(sql,self.heads) self.tabla.resizeColumnsToContents() def seleccionado(self): ret=[] for index in self.tabla.selectedIndexes(): if index.column()==0: ret.append([str(index.data().toString())]) else: ret[len(ret)-1].append(str(index.data().toString())) self.retorno=ret self.done(1)
class Pendientes(QWidget, Ui_Form): def __init__(self,parent,id): QWidget.__init__(self) self.setupUi(self) self.datos={'nombre':"Pendientes",'descripcion':"Control de cuentas pendientes",'version':"0.7",'id':id,'nivel':3} self.id=id self.action = QAction(self) self.parent=parent self.action.setIcon(QIcon(":/modulos/images/png/elegant/pending.png")) self.action.setIconVisibleInMenu(True) self.action.setText(self.datos['nombre']) self.connect(self.action, SIGNAL("triggered()"), self.ver ) self.modelo=QModeloTablaSql(parent.cursor,self) self.tvCuentas.setModel(self.modelo) self.init() self.setupEvents() def init(self): self.ids=False self.cliente=False def ver(self): self.parent.move(self.datos['nombre']) def listar(self): if self.cbTipo.currentIndex()==1: #Cuando se seleccione "Notas" head=['Id','Total','Fecha','Cliente','Vendedor','Caja'] sql="SELECT notas.id,total , fecha, SUBSTRING(clientes.nombre,1,12), usuarios.usuario, cajaFROM notas, clientes, usuarios where notas.usuario=usuarios.id_usuario and cliente=clientes.id and status=0 and tipo=0 order by fecha" else: #Cuando se seleccione "Todas las ventas" sql="SELECT notas.id, total,fecha,ELT(notas.tipo+1, 'Nota','Factura','Devolucion'),SUBSTRING(clientes.nombre,1,12), usuarios.usuario, caja FROM notas, clientes, usuarios where notas.usuario=usuarios.id_usuario and cliente=clientes.id and status=0 order by fecha" head=['Id','Total','Fecha','Tipo','Cliente','Vendedor','Caja'] self.modelo.query(sql,head) self.tvCuentas.resizeColumnsToContents() def setupEvents(self): self.connect(self.ncactualizar,SIGNAL("clicked()"), self.listar)
def __init__(self,parent,id): QWidget.__init__(self) self.setupUi(self) self.datos={'nombre':"Pendientes",'descripcion':"Control de cuentas pendientes",'version':"0.7",'id':id,'nivel':3} self.id=id self.action = QAction(self) self.parent=parent self.action.setIcon(QIcon(":/modulos/images/png/elegant/pending.png")) self.action.setIconVisibleInMenu(True) self.action.setText(self.datos['nombre']) self.connect(self.action, SIGNAL("triggered()"), self.ver ) self.modelo=QModeloTablaSql(parent.cursor,self) self.tvCuentas.setModel(self.modelo) self.init() self.setupEvents()
def __init__(self,parent, entidad,tablename=False,columnas=False,heads=False,filtros=True): #I.E. Selector(self,'proveedores','clientes','id,nombre,email','Id,Nombre del proveedor,E-Mail',"`nombre` like '%%%s%%' order by nombre desc limit 100") #Tablename, columnas y filtros vienen dadas por una cadena de elementos separados por comas y es lo que se pasa al query QDialog.__init__(self) self.setupUi(self) self.parent=parent self.nombre=entidad.capitalize() self.tablename=tablename.lower() self.columnas=columnas self.filtros=filtros if heads: self.heads=heads.split(',') else: self.heads=columnas.split(',') #print self.heads self.leEntidad.setText(self.nombre+':') self.setWindowTitle("Seleccionador de {0}".format(self.nombre)) self.modelo=QModeloTablaSql(self.parent.cursor,self) self.tabla.setModel(self.modelo) self.connect(self.texto,SIGNAL("textChanged(QString)"),self.buscar) self.connect(self.tabla,SIGNAL("activated(const QModelIndex&)"),self.seleccionado)
def __init__(self,parent): self.ui=parent self.index=7 self.ui.tvOfertas.setContextMenuPolicy(Qt.CustomContextMenu) self.modelo=QModeloTablaSql(parent.cursor,parent) self.ui.tvOfertas.setModel(self.modelo) self.ui.connect(self.ui.tOfertas, SIGNAL("clicked()"), self.ver) self.ui.connect(self.ui.tboHome, SIGNAL("clicked()"), self.ver) self.ui.connect(self.ui.tbOfertas, SIGNAL("clicked()"), self.ver) self.ui.connect(self.ui.verOfertas, SIGNAL("triggered()"), self.ver) self.ui.productos.popMenu.addAction(self.ui.verOfertas) #self.ui.tbrProductos.addAction(self.ui.verOfertas) action=self.ui.menuHerramientas.addAction("Calcular precios") self.ui.connect(action, SIGNAL("triggered()"), self.calcularPrecio) self.ui.connect(self.ui.leOFIltro, SIGNAL("returnPressed()"), lambda:self.listar(str(self.ui.leOFIltro.text()))) self.ui.connect(self.ui.tboAgregar, SIGNAL("clicked()"), self.agregar) self.ui.connect(self.ui.pboBuscar, SIGNAL("clicked()"), self.buscarProd) self.ui.connect(self.ui.tvOfertas,SIGNAL('customContextMenuRequested(const QPoint)'),self.ocm) #self.ui.connect(self.ui.deInicio, SIGNAL("dateChanged ( const QDate)"), self.listar) self.ui.connect(self.ui.deFecha, SIGNAL("dateChanged ( const QDate)"), self.listar) self.ui.connect(self.ui.tvOfertas,SIGNAL('activated(const QModelIndex&)'),self.editar) self.ui.deFecha.setDate(QDate.currentDate()) self.iniciarActions()
class Oferta: def __init__(self,parent): self.ui=parent self.index=7 self.ui.tvOfertas.setContextMenuPolicy(Qt.CustomContextMenu) self.modelo=QModeloTablaSql(parent.cursor,parent) self.ui.tvOfertas.setModel(self.modelo) self.ui.connect(self.ui.tOfertas, SIGNAL("clicked()"), self.ver) self.ui.connect(self.ui.tboHome, SIGNAL("clicked()"), self.ver) self.ui.connect(self.ui.tbOfertas, SIGNAL("clicked()"), self.ver) self.ui.connect(self.ui.verOfertas, SIGNAL("triggered()"), self.ver) self.ui.productos.popMenu.addAction(self.ui.verOfertas) #self.ui.tbrProductos.addAction(self.ui.verOfertas) action=self.ui.menuHerramientas.addAction("Calcular precios") self.ui.connect(action, SIGNAL("triggered()"), self.calcularPrecio) self.ui.connect(self.ui.leOFIltro, SIGNAL("returnPressed()"), lambda:self.listar(str(self.ui.leOFIltro.text()))) self.ui.connect(self.ui.tboAgregar, SIGNAL("clicked()"), self.agregar) self.ui.connect(self.ui.pboBuscar, SIGNAL("clicked()"), self.buscarProd) self.ui.connect(self.ui.tvOfertas,SIGNAL('customContextMenuRequested(const QPoint)'),self.ocm) #self.ui.connect(self.ui.deInicio, SIGNAL("dateChanged ( const QDate)"), self.listar) self.ui.connect(self.ui.deFecha, SIGNAL("dateChanged ( const QDate)"), self.listar) self.ui.connect(self.ui.tvOfertas,SIGNAL('activated(const QModelIndex&)'),self.editar) self.ui.deFecha.setDate(QDate.currentDate()) self.iniciarActions() def iniciar(self): #self.ui.ocultarTools() #self.ui.tbrProductos.show() self.ui.lboProducto.setText("") self.listar() def ver(self): self.ui.stack.setCurrentIndex(self.index) def iniciarActions(self): self.popMenu = QMenu(self.ui) #action=self.popMenu.addAction(QIcon("/usr/share/pyventa/images/16/plus_16.png"),"Nuevo impuesto") #self.ui.connect(action, SIGNAL("triggered()"), self.agregar) #self.ui.menuImpuestos.addAction(action) action= self.popMenu.addAction(QIcon(":/actions/images/actions/black_18/pencil.png"),"Editar") action.setIconVisibleInMenu(True) self.ui.connect(action, SIGNAL("triggered()"), self.editar) action=self.popMenu.addAction(QIcon(":/actions/images/actions/black_18/delete.png"),"Eliminar") action.setIconVisibleInMenu(True) self.ui.connect(action, SIGNAL("triggered()"), self.eliminar) def listar(self,nombre=''): if isinstance(nombre,QDate): nombre='' fecha=str(self.ui.deFecha.date().toString('yyyy-MM-dd')) head=['Id','Nombre de la promocion', 'Descuento','Inicia','Caduca','U. Minimas','U. Maximas'] if len(nombre)>0: nombre=" and nombre like '%{0}%' ".format(nombre) sql="SELECT id,nombre, descuento,inicio,fin,minimo, maximo FROM promociones WHERE DATE('{0}') between inicio and fin {1}; ".format(fecha,nombre) self.modelo.query(sql,head) self.ui.tvOfertas.resizeColumnsToContents() #self.modelo=self.ui.entabla(self.ui.tvOfertas,head,sql,self.modelo) def buscarProd(self): dlg=buscador(self.ui,'',['Ref','Descripcion','Familia']) if dlg.exec_()>0: producto=dlg.producto #print producto self.ui.lboProducto.setText("Ofertas de "+producto['Descripcion']) try: self.ui.cursor.execute("""SELECT departamento from familias where id=%s""",producto['Familia']) except: print "Hay un problema en la base de datos los campos del producto %s estan incompletos o corruptos."%producto['Ref'] else: row=self.ui.cursor.fetchone() if row!=None: producto['Dep']=row[0] self.checkPromos(producto) else: print "El producto %s no tiene una referencia hacia un departamento, verfique su familia."%producto['Ref'] def agregar(self): self.iniciar() editor=editorOfertas(self.ui) if editor.exec_()>0: print " Promocion agregada " self.listar() #self.ui.iniciarCombos() def eliminar(self,index=None): if index==None: index=self.ui.tvOfertas.selectedIndexes()[1] if isinstance(index,QModelIndex): key=str(index.sibling(index.row(),0).data().toString()) msgBox=QMessageBox(QMessageBox.Question,"Eliminar promocion","Confirma eliminar la promocion %s?"%key,QMessageBox.Yes|QMessageBox.No,self.ui, Qt.WindowStaysOnTopHint) ret=msgBox.exec_() if ret==QMessageBox.Yes: self.ui.cursor.execute("""DELETE FROM ofertas where promocion=%s""",key) self.ui.cursor.execute("delete from promociones where id="+str(key)) self.listar() def editar(self,index=None): if index==None: index=self.ui.tvOfertas.selectedIndexes()[1] if isinstance(index,QModelIndex): key=str(index.sibling(index.row(),0).data().toString()) editor=editorOfertas(self.ui,key) if editor.exec_()>0: self.listar() def ocm(self, point): point.setY(point.y()+25) point.setX(point.x()+30) self.popMenu.exec_(self.ui.tvOfertas.mapToGlobal(point) ) def checkPromos(self,prod): head=['id','nombre', 'descuento','Precio Pub.','Precio c/Desc','inicio','fin','minimo','maximo'] sql="SELECT P.id,P.nombre, P.descuento,precio, precio-(P.descuento*precio*.1),P.inicio,P.fin,P.minimo, maximo FROM ofertas as O,promociones as P, productos WHERE ref=conjunto and tipo=0 and (conjunto=%s OR conjunto=%s OR conjunto=%s) AND O.promocion=P.id AND curdate() BETWEEN P.inicio AND P.fin"%(prod['Ref'],prod['Familia'],prod['Dep']) self.ui.entabla(self.ui.tvOfertas,head,sql) def calcularPrecio(self): CP=CalculaPrecio(self.ui) CP.exec_()