コード例 #1
0
ファイル: selector.py プロジェクト: dravix/pyventa
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)
コード例 #2
0
ファイル: pendientes.py プロジェクト: dravix/pyventa
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)
コード例 #3
0
ファイル: pendientes.py プロジェクト: dravix/pyventa
  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()
コード例 #4
0
ファイル: selector.py プロジェクト: dravix/pyventa
 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)
コード例 #5
0
ファイル: ofertas.py プロジェクト: dravix/pyventa
    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()
コード例 #6
0
ファイル: ofertas.py プロジェクト: dravix/pyventa
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_()