Example #1
0
    def __init__(self,parent,texto='',en=1,campos=['Ref','Descripcion','Precio'],tabla='',multi=False):
      #texto= texto inicial de busqueda, en=campo a buscar, campos=campos q se desplegaran, tabla=nombre de la tabla de la DB, multi=modo de seleccion de retorno
	QtGui.QDialog.__init__(self,parent)
	self.setupUi(self)
	self.cursor=parent.cursor
	self.parent=parent
	self.en=en
	self.campos=campos
	self.tabla=tabla
	self.modelo=QModeloTablaSql(self.parent.cursor,self)
	self.tvResulta.setModel(self.modelo)
	self.leFiltro.setText(str(texto))
	self.leFiltro.setFocus()
	#for k,i in campos.iteritems():
	  #self.head.append(k)
	  #self.campos.append(i)
	
	self.producto={}
	self.seleccionados=[]
	self.multi=multi #Indica si require seleccionar multiples productos
	if self.multi:
	  self.tvResulta.setSelectionMode(QAbstractItemView.ExtendedSelection)
	self.connect(self.leFiltro, QtCore.SIGNAL("returnPressed()"), self.listar)
	self.connect(self.pbBuscar, QtCore.SIGNAL("clicked()"), self.listar)
	
	self.connect(self.tvResulta,QtCore.SIGNAL('activated(const QModelIndex&)'),self.accept)
	#self.connect(self.tbDone,QtCore.SIGNAL('clicked()'),self.retornar)
	self.connect(self.tbCancelar,QtCore.SIGNAL('clicked()'),self.reject)
	#self.connect(self,QtCore.SIGNAL('accepted()'),self.retornar)
	
	self.listar(texto)
Example #2
0
class Selector(QDialog,Ui_Seleccion):
  def __init__(self,parent, entidad,tablename=False,columnas=False,heads=False,filtros=True,inicial=""):
    #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)
    self.texto.setText(inicial)

    
  def buscar(self,texto=False):
    texto=str(texto)
    if len(texto)>2 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):
    if len(self.tabla.selectedIndexes())>0:
      nrow=(len(self.tabla.selectedIndexes())/self.modelo.columnCount(self))
      ret = [range(self.modelo.columnCount(self)) for i in range(nrow)]
      offset=self.tabla.selectedIndexes()[0].row()
      for index in self.tabla.selectedIndexes():
	  #print index.row(),index.column()
	  ret[index.row()-offset][index.column()]=str(index.data().toString())
      self.retorno=ret
      self.done(1)
Example #3
0
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'])
    self.listar()
    
  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,  SUBSTR(clientes.nombre,1,12), usuarios.usuario,
      caja FROM 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'),SUBSTR(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)
Example #4
0
 def __init__(self,conexion,ventas,usuario,cliente,caja):
   #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.conexion=conexion
   self.wCambio.setVisible(False)
   self.ventas=ventas
   self.modelo=QModeloTablaSql(self.conexion.cursor,self)
   self.tabla.setModel(self.modelo)
   self.connect(self.leRecibo,SIGNAL("returnPressed()"),self.cobrar)
   self.connect(self.tbCobrar,SIGNAL("clicked()"),self.cobrar)
   self.iniciar()
Example #5
0
  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()
Example #6
0
  def __init__(self,parent, entidad,tablename=False,columnas=False,heads=False,filtros=True,inicial=""):
    #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)
    self.texto.setText(inicial)
Example #7
0
    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()
Example #8
0
class buscadorPop(QtGui.QDialog, Ui_Dialog):
    def __init__(self,parent,texto='',en=1,campos=['Ref','Descripcion','Precio'],tabla='',multi=False):
      #texto= texto inicial de busqueda, en=campo a buscar, campos=campos q se desplegaran, tabla=nombre de la tabla de la DB, multi=modo de seleccion de retorno
	QtGui.QDialog.__init__(self,parent)
	self.setupUi(self)
	self.cursor=parent.cursor
	self.parent=parent
	self.en=en
	self.campos=campos
	self.tabla=tabla
	self.modelo=QModeloTablaSql(self.parent.cursor,self)
	self.tvResulta.setModel(self.modelo)
	self.leFiltro.setText(str(texto))
	self.leFiltro.setFocus()
	#for k,i in campos.iteritems():
	  #self.head.append(k)
	  #self.campos.append(i)
	
	self.producto={}
	self.seleccionados=[]
	self.multi=multi #Indica si require seleccionar multiples productos
	if self.multi:
	  self.tvResulta.setSelectionMode(QAbstractItemView.ExtendedSelection)
	self.connect(self.leFiltro, QtCore.SIGNAL("returnPressed()"), self.listar)
	self.connect(self.pbBuscar, QtCore.SIGNAL("clicked()"), self.listar)
	
	self.connect(self.tvResulta,QtCore.SIGNAL('activated(const QModelIndex&)'),self.accept)
	#self.connect(self.tbDone,QtCore.SIGNAL('clicked()'),self.retornar)
	self.connect(self.tbCancelar,QtCore.SIGNAL('clicked()'),self.reject)
	#self.connect(self,QtCore.SIGNAL('accepted()'),self.retornar)
	
	self.listar(texto)
	
	
	
    def listar(self,texto=False):
      if not texto:
	texto=str(self.leFiltro.text())	
      where=''
      if len(texto)>0:
	where=" WHERE  `%s` like '%%%s%%' "%(self.campos[self.en],texto)
      sql="SELECT %s from %s %s "%(','.join(self.campos), self.tabla, where)
      #print sql
      self.modelo.query(sql,self.campos)    
      self.tvResulta.resizeColumnsToContents()  
    
    def selected(self,cols=()):
      #cols es un conjunto de numeros de columnas que se retornara
      indices=self.tvResulta.selectedIndexes()
      dic={}
      for index in indices:
	if index.column()==0:
	  dic[index.row()]=[str(index.data().toString())]
	elif index.column() in cols:
	  dic[index.row()].append(str(index.data().toString()))
      return [item for key,item in dic.iteritems()]
	
	
    def getFilas(self):
      return libutil.seleccionarFilas(self.tvResulta, self.modelo)
      
    def retornar(self):
	self.done(1)
Example #9
0
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=EditorOferta(self.ui)
	if editor.exec_()>0:
	  print " Promocion agregada "
	  self.listar()
	  #self.ui.iniciarCombos()
	  
    #def showEditor(self):
      
      
    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=EditorOferta(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=CalculaDescuentos(self.ui)
	CP.exec_()
Example #10
0
class Cobrador(QDialog,Ui_Cobrador):
  def __init__(self,conexion,ventas,usuario,cliente,caja):
    #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.conexion=conexion
    self.wCambio.setVisible(False)
    self.ventas=ventas
    self.modelo=QModeloTablaSql(self.conexion.cursor,self)
    self.tabla.setModel(self.modelo)
    self.connect(self.leRecibo,SIGNAL("returnPressed()"),self.cobrar)
    self.connect(self.tbCobrar,SIGNAL("clicked()"),self.cobrar)
    self.iniciar()

    
  def iniciar(self):
    self.retorno=False
    venta=Venta(self.conexion)
    total=venta.sumaTotales(" id in ({ide}) and status=0".format(ide=",".join(self.ventas)))
    if total!=None:
      if total[0]==None:
	print "Todas las ventas ya estan pagadas"
	self.reject()
      else:
	self.total=float(total[0])
	self.dsbTotal.setValue(self.total)
	self.modelo.query("""Select notas.id, usuarios.usuario, cajas.nombre,total from notas,usuarios,cajas 
	where status=0 and notas.id in ({ide}) and id_usuario=notas.usuario and cajas.num_caja=caja """.format(ide=",".join(self.ventas)),
	    "id,usuario,caja,total".split(','))
	self.tabla.resizeColumnsToContents()  
	self.leRecibo.selectAll()


  def cobrar(self):
    if len(str(self.leRecibo.text()))>0:
      recibo=float(self.leRecibo.text())
      cambio=recibo-self.total
      if cambio<0:
	self.leRecibo.selectAll()
      else:
	venta=Venta(self.conexion)
	self.retorno=venta.cambiarEstado(self.ventas,1)
	if self.retorno:
	  self.dsbCambio.setValue(cambio)
	  self.wCambio.setVisible(True)
	  self.leRecibo.setEnabled(False)
	  self.tbCobrar.setEnabled(False)
	  #self.tbCerrar.setFocus(True)
	  QTimer.singleShot(10000,self.accept)
  
    
  #def seleccionado(self):
    #if len(self.tabla.selectedIndexes())>0:
      #nrow=(len(self.tabla.selectedIndexes())/self.modelo.columnCount(self))
      #ret = [range(self.modelo.columnCount(self)) for i in range(nrow)]
      #offset=self.tabla.selectedIndexes()[0].row()
      #for index in self.tabla.selectedIndexes():
	  ##print index.row(),index.column()
	  #ret[index.row()-offset][index.column()]=str(index.data().toString())
      #self.retorno=ret
      #self.done(1)