예제 #1
0
    def listarDepartamentos(self):
	sql="SELECT * FROM departamentos;"
	self.cursor.execute(sql)
	qry=self.cursor.fetchall()
	if qry !=None:
	   ut.entablar(self.tablaDeps,qry,['id','Nombre'])
예제 #2
0
    def continuar(self):
	current=self.stack.currentIndex()
	if (current+1==1): 			#Si es el primer paso selecciona los departamentos
	  self.lbStatus.setText("Preparacion de la tabla de conteo")

	  lista=self.tablaDeps.selectedItems()
	  self.deps=[]
	  for item in lista:	#Agrupa en una lista los id de los departamentos tomando de la listWidget los que fueron seleccionados
	    if self.tablaDeps.column(item)==0:
	      self.deps.append(str(item.text()))
	  self.stack.setCurrentIndex(current+1)
	
	elif (current+1==2):			#Si es el segundo paso ordena las columnas y prepara el query
	  self.lbStatus.setText("Vista previa de los productos")
	  self.cols=""
	  lista=self.lsColumnas.selectedItems()
	  for i in range(int(self.lsColumnas.count())):
	    if self.lsColumnas.item(i).checkState()==2:
	      if len(self.cols)>0:self.cols+="," # Coma inteligente para evitar que sobren o falten
	      self.cols+=self.columnas[str(self.lsColumnas.item(i).text())] #convierte en texto las columnas
	  for val,radio in self.ordenes.iteritems():	#Por cada radiobutton si este esta checado toma su valor para ordenar
	    if radio.isChecked()==True:
		self.orden=val
	  #print "columnas %s\nordenadas por %s"%(self.cols,self.orden)
	  #Lo siguiente es para comprobar que todos los productos tienen una existencia asociada y si no la tiene la crean
	  self.setCursor(QtGui.QCursor(16))
	  sql="INSERT INTO existencia SELECT ref,1,0,0,0 FROM productos WHERE ref NOT IN (SELECT producto from existencia)"
	  self.cursor.execute(sql)
	  qry=self.cursor.fetchall()
	  if qry !=None:
	    #for prod in qry:
	      #self.cursor.execute("INSERT INTO existencia VALUES(%s,1,0,0,0)"%prod[0])
	    self.ui.conexion.commit()
	  #Hasta este punto si todo sale bien registra los cambios en la base de datos
	  self.filde=''
	  if len(self.deps)>0:
	    rcv=str(self.deps.pop())
	    self.filde=' AND (departamento='+rcv
	    for dep in self.deps:
	      self.filde+=' OR departamento=%s'%dep
	    self.deps.append(rcv)
	    self.filde+=') '
	  self.query="SELECT %s from productos, familias as f, existencia as e where familia=f.id and e.producto=ref %s order by %s "%(self.cols,self.filde,self.orden)
	  #print self.query
	  self.cursor.execute(self.query)
	  resul=self.cursor.fetchall()
	  if resul !=None:
	    ut.entablar(self.tablaProductos,resul,self.cols.split(','))
	    #self.tablaProductos.setColumnCount (self.tablaProductos.columnCount()+1) #Pone una columna extra en la tabla
	  self.setCursor(QtGui.QCursor(0))
	  self.stack.setCurrentIndex(self.stack.currentIndex()+1)
#Al pasar a la etapa de conteo	  
	elif current+1==3:
	  self.lbStatus.setText("Etapa de conteo")	  
	  msgBox=QtGui.QMessageBox(QtGui.QMessageBox.Question,"Confirmacion","A continuacion se procedera a contar y no sera posible cancelar o editar las configuraciones del inventario hasta que se de por terminado.<h3>Desea continuar?</h3>",QtGui.QMessageBox.Yes|QtGui.QMessageBox.No,self)
	  if msgBox.exec_()==QtGui.QMessageBox.Yes:
	    self.tbCancelar.setEnabled(False)
	    self.tbAtras.setEnabled(False)
	    try:
	      sql="INSERT INTO inventarios VALUES(Null, Now(),0,'%s','%s',1,%s,%s)"%(','.join(self.deps),self.orden,self.auditor,self.gerente)
	      self.cursor.execute(sql)
	    except :
	      print "Error, %s"%(sql) 
	    else:
	      self.ui.conexion.commit()
	      sql=self.ui.conexion.lastId()
	      self.cursor.execute(sql)
	      self.inventario=self.cursor.fetchone()[0]	    
	      sql="UPDATE existencia as e,productos, familias as f set inconsistencia=0, stock_fisico=stock_logico  where   familia=f.id and e.producto=ref %s ;"%(self.filde)
	      self.cursor.execute(sql)
	      self.ui.conexion.commit()
	      self.iniConteo()
	    self.stack.setCurrentIndex(self.stack.currentIndex()+1)
#Al terminar de contar	    
	elif (current+1==4):
	  msgBox=QtGui.QMessageBox(QtGui.QMessageBox.Question,"Confirmacion","En este punto, todos los productos deben estar contabilizados, y se procedera a cerrar el inventario.<h3>Desea seguro que desea terminar el inventario?</h3>",QtGui.QMessageBox.Yes|QtGui.QMessageBox.No,self)
	  self.gerente=self.autentificacion(2)
	  if msgBox.exec_()==QtGui.QMessageBox.Yes and self.gerente!=False:	  
	    self.stack.setCurrentIndex(self.stack.currentIndex()+1)
	    self.setCursor(QtGui.QCursor(16))
	    sql="UPDATE existencia set   stock_logico=stock_fisico where inventario=%s"%(self.inventario)
	    self.curser.execute(sql)	
	    self.curser.execute("UPDATE inventarios set estado=0,auditor=%s, gerente=%s, saldo=(select round(sum(costo*inconsistencia),3) from existencia,productos where producto=ref and inventario=id_inventario) where id_inventario=%s"%(self.auditor,self.gerente['id_usuario'],self.inventario))	
	    self.ui.conexion.commit()
	    self.setCursor(QtGui.QCursor(0))
	    self.cursor.execute("select count(*),round(sum(costo*inconsistencia),3) as balance,round(sum(costo*stock_logico),3) as valor from existencia,productos where producto=ref and inventario=%s;"%self.inventario)
	    data=self.cursor.fetchone()
	    self.cursor.execute("select count(*) from existencia,productos where producto=ref and inventario=%s and inconsistencia!=0;"%self.inventario)
	    data2=self.cursor.fetchone()
	    filde=self.filde.replace('departamento','id')
	    self.cursor.execute("select nombre from departamentos where id>0 %s ;"%filde)
	    data3=self.cursor.fetchall()
	    depa=''
	    for item in data3:
	      depa+=" %s "%(item)
	    campos={'$fecha':self.fecha,'$empresa':'','$deps':'','$nacontados':'','$invalor':'','$naicon':'','$baincon':''}	    
	    campos['$deps']=depa
	    campos['$empresa']=str(self.cfg.getDato('empresa','nombre'))
	    
	    if data!=None:
	      campos['$nacontados']=str(data[0])	      
	      campos['$invalor']=str(data[2])
	      campos['$naicon']=str(data2[0])
	      campos['$baincon']=str(data[1])
	    html=str(self.qteResumen.toHtml())
	    for key,item in campos.iteritems():
	      html=html.replace(key,str(item))
	    self.qteResumen.setHtml(html)
	    
	elif (current+1==5):
	    self.listarIncon()
	    self.tbAdelante.setText("Finalizar")
	elif    (current+1==6):
	  self.done(1)