class Conexion: def __init__(self, parent, config=False,datos=False): self.parent=parent if datos and isinstance(datos,dict) and len(datos)>0: self._host=datos['host'] self._user=datos['user'] self._pass=datos['pass'] self._schema=datos['schema'] self.conectar() else: if not config: self.cfg = Configurador(parent) else : self.cfg=config if self.cfg.stat: self._host=self.cfg.getDato('mysql','host') self._user=self.cfg.getDato('mysql','user') self._pass=base64.b64decode(self.cfg.getDato('mysql','pass')) self._schema=self.cfg.getDato('mysql','db') self.conectar() else: self.stat=False def asistente(self): print "Configurando base de datos" ui = BDConfig(self.cfg) dialog=ui.exec_() if (dialog==1): self.__init__(self.parent) else: self.stat=False def lastId(self): if self.cfg.getDato('pyventa','motor')=="sqlite3": return "SELECT last_insert_rowid();" else: return "SELECT LAST_INSERT_ID();" def conectar(self): if self.cfg.getDato('pyventa','motor')=="sqlite3": dbpath=os.path.join(home,"pyventa.sqlite") if os.path.exists(dbpath): self.db=sqlite3.connect(dbpath) self.db.create_function("NOW", 0, ahora) self.db.create_function("CURDATE", 0, hoy) self.db.create_function("DATE_FORMAT", 2, dateformat) self.db.create_function("ELT", -1, elt) self.cursor=self.db.cursor() self.curser=self.db.cursor() self.stat=True else: try: shutil.copy("perfil/pyventa.sqlite",dbpath) except shutil.Error, e: print "No se encontro el archivo de la base de datos y no se pudo copiar una nueva" raise(e) else: self.conectar()
def recargar(self,modulo): for key in self.modulos[modulo]: try: print self.modulos[modulo][key].text() self.cfg.set(modulo,key,str(self.modulos[modulo][key].text())) except: pass self.cfg.guardar() self.kfg=Configurador() msgBox=QtGui.QMessageBox() msgBox.setText("Se han guardado las configuraciones") msgBox.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) msgBox.exec_()
def __init__(self): QDialog.__init__(self) self.setupUi(self) self.curser=None self.cursor=None self.home=home self.cfg=Configurador(self) if self.cfg.stat: self.conexion=Conexion(self,self.cfg) if self.conexion.stat: self.cursor=self.conexion.cursor self.curser=self.conexion.curser self.conexion.db.text_factory = str self.iniciarEstilo() self.iniciarSesion() else: print "Error al iniciar configuraciones" sys.exit() #Inicio de funciones self.showMaximized() self.stack.setCurrentIndex(1) self.impuesto=Impuestos(self) self.departamento=Departamentos(self) self.familia=Familias(self) self.unidad=Unidades(self) self.productos=Productos(self) self.clientes=Clientes(self,True) self.proveedores=Proveedores(self,True) self.usuarios=Usuarios(self) self.ofertas=Oferta(self) self.cajas=Cajas(self,True) self.inv=Inventario(self) self.faltantes=Faltantes(self) self.compras=Compras(self) try: self.conexiones=Conexiones(self) except: self.tConexiones.setVisible() #Inicio de combos self.iniciarCombos() #self.familias=self.familia.getLista() self.menuHerramientas.addAction("Recargar estilo",self.iniciarEstilo) self.iniciarEstilo()
def __init__(self, parent, config=False,datos=False): self.parent=parent if datos and isinstance(datos,dict) and len(datos)>0: self._host=datos['host'] self._user=datos['user'] self._pass=datos['pass'] self._schema=datos['schema'] self.conectar() else: if not config: self.cfg = Configurador(parent) else : self.cfg=config if self.cfg.stat: self._host=self.cfg.getDato('mysql','host') self._user=self.cfg.getDato('mysql','user') self._pass=base64.b64decode(self.cfg.getDato('mysql','pass')) self._schema=self.cfg.getDato('mysql','db') self.conectar() else: self.stat=False
class Administrador(QMainWindow, Ui_admin): def __init__(self): QDialog.__init__(self) self.setupUi(self) self.curser=None self.cursor=None self.home=home self.cfg=Configurador(self) if self.cfg.stat: self.conexion=Conexion(self,self.cfg) if self.conexion.stat: self.cursor=self.conexion.cursor self.curser=self.conexion.curser self.conexion.db.text_factory = str self.iniciarEstilo() self.iniciarSesion() else: print "Error al iniciar configuraciones" sys.exit() #Inicio de funciones self.showMaximized() self.stack.setCurrentIndex(1) self.impuesto=Impuestos(self) self.departamento=Departamentos(self) self.familia=Familias(self) self.unidad=Unidades(self) self.productos=Productos(self) self.clientes=Clientes(self,True) self.proveedores=Proveedores(self,True) self.usuarios=Usuarios(self) self.ofertas=Oferta(self) self.cajas=Cajas(self,True) self.inv=Inventario(self) self.faltantes=Faltantes(self) self.compras=Compras(self) try: self.conexiones=Conexiones(self) except: self.tConexiones.setVisible() #Inicio de combos self.iniciarCombos() #self.familias=self.familia.getLista() self.menuHerramientas.addAction("Recargar estilo",self.iniciarEstilo) self.iniciarEstilo() def conexion(): self.conexion=Conexion(self,self.cfg) if self.conexion.stat: self.cursor=self.conexion.cursor self.curser=self.conexion.curser self.iniciarEstilo() self.iniciarSesion() def iniciarEstilo(self): try: kcss = open(os.path.join(os.path.dirname(os.path.realpath(__file__)),"perfil","estilos",self.cfg.get("pyventa","estilo")),"r") estilo=kcss.read() self.setStyleSheet(estilo) kcss.close() except: try: kcss = open(os.path.join(self.home,"estilos",self.cfg.get("pyventa","estilo")),"r") estilo=kcss.read() self.setStyleSheet(estilo) kcss.close() except: print "No se cargo el estilo "+self.cfg.get("pyventa","estilo") def iniciarSesion(self): dlg=Seguridad(self,nivel=5,logo=":/actions/images/padmin.simple.logo.png", nombre="Administrador de Pyventa") acceso=dlg.exec_() if acceso>-1: self.usuario=dlg.usuario self.cursor=dlg.cursor self.curser=dlg.curser else: sys.exit() def iniciarCombos(self): #self.cbpDepartamentos.clear() #self.cbpFamilias.clear() self.cbeFamilias.clear() self.cbeImpuestos.clear() self.cbeUnidades.clear() #combo=self.departamento.getModelo() #self.cbpDepartamentos.setModel(combo) #self.cbpDepartamentos.setModelColumn(1) #self.cbpFamilias.setModel(self.familia.getModelo()) self.cbeFamilias.setModel(self.familia.getModelo()) #self.cbpFamilias.setModelColumn(1) self.cbeFamilias.setModelColumn(1) self.cbeImpuestos.setModel(self.impuesto.getModelo()) self.cbeImpuestos.setModelColumn(1) self.cbeUnidades.setModel(self.unidad.getModelo()) self.cbeUnidades.setModelColumn(1) def goHome(self): self.stack.setCurrentIndex(0) #self.tbrProductos.hide() def tabular(self,tabla,sql,head): #Recibe una consulta de sql la ejecuta y tabula el resultado lista=[] try: self.cursor.execute(sql) result = self.cursor.fetchall() except MySQLdb.Error, e: print e else:
class Configs(QtGui.QDialog, Ui_Form): def __init__(self,parent,id=0): QtGui.QDialog.__init__(self) self.setupUi(self) self.stack.setCurrentIndex(0) self.curser=parent.curser self.cursor=parent.cursor self.datos={'nombre':"Configurador",'descripcion':"Configura el funcionamiento del programa, ademas de guardar las personalizaciones .",'version':"0.05",'id':id,'nivel':2} self.id=id self.parent=parent self.action = QtGui.QAction(self) self.action.setObjectName(self.datos['nombre']+str(id)) self.action.setToolTip("Configuraciones globales de este punto de venta.") #self.action.setShortcut("F4") #self.action.setShortcut(QtGui.QApplication.translate("Principal", "F4", None, QtGui.QApplication.UnicodeUTF8)) icono = QtGui.QIcon() icono.addPixmap(QtGui.QPixmap(":/modulos/images/png/elegant/config.png"), 0, QtGui.QIcon.Off) self.icono=":/modulos/images/png/elegant/config.png" icono.addPixmap(QtGui.QPixmap(self.icono), 2, QtGui.QIcon.Off) self.action.setIcon(icono) self.action.setIconVisibleInMenu(True) self.action.setText(self.datos['nombre']) #self.connect(self.action, QtCore.SIGNAL("triggered()"), lambda: parent.stackMove(self.id) ) self.connect(self.action, QtCore.SIGNAL("triggered()"), self.launch ) #self.connect(self.benter, QtCore.SIGNAL("clicked()"), lambda: self.stack.setCurrentIndex(1) ) #self.connect(self.bdata, QtCore.SIGNAL("clicked()"), lambda: self.stack.setCurrentIndex(0) ) #self.connect(self.bpyventa, QtCore.SIGNAL("clicked()"), lambda: self.stack.setCurrentIndex(2) ) #self.connect(self.tbFormas, QtCore.SIGNAL("clicked()"), lambda: self.stack.setCurrentIndex(3) ) #self.connect(self.bRespaldo, QtCore.SIGNAL("clicked()"), lambda: self.stack.setCurrentIndex(4) ) self.connect(self.cbPath, QtCore.SIGNAL("clicked()"), self.cambiarFolderFacturas ) self.connect(self.ctPrinter, QtCore.SIGNAL("clicked()"), self.cambiarImpresoraTickets ) self.connect(self.pbEditar, QtCore.SIGNAL("clicked()"), self.editar ) #self.connect(parent.stack, QtCore.SIGNAL("currentChanged(int)"),lambda: parent.aut(self.id,2) ) #self.connect(self.tablaImpuestos, QtCore.SIGNAL("currentItemChanged(QTableWidgetItem*,QTableWidgetItem*)"), self.cambiarImp) #self.connect(parent.stack, QtCore.SIGNAL("currentChanged(int)"), self.inicia) self.connect(self.rlBackup, QtCore.SIGNAL("clicked()"), self.respaldarLocal) self.connect(self.cpgrespaldo, QtCore.SIGNAL("clicked()"), self.respaldarRemoto) self.connect(self.rsServer, QtCore.SIGNAL("editingFinished ()"), lambda: self.setCambio('respaldo','server',self.rsServer.text())) self.connect(self.rsUser, QtCore.SIGNAL("editingFinished ()"), lambda: self.setCambio('respaldo','user',self.rsUser.text())) self.connect(self.rsPass, QtCore.SIGNAL("editingFinished ()"), lambda: self.setCambio('respaldo','pass',self.rsPass.text())) self.connect(self.rsPath, QtCore.SIGNAL("editingFinished ()"), lambda: self.setCambio('respaldo','rpath',self.rsPath.text())) self.connect(self.rlPeriod, QtCore.SIGNAL("valueChanged ( int )"), lambda: self.setCambio('respaldo','autolocal',self.rlPeriod.value())) self.connect(self.rsPeriod, QtCore.SIGNAL("valueChanged ( int )"), lambda: self.setCambio('respaldo','autoremoto',self.rsPeriod.value())) self.connect(self.bprobar, QtCore.SIGNAL("clicked()"), self.conexion ) self.connect(self.bset, QtCore.SIGNAL("clicked()"), self.setDB ) self.connect(self.bclose, QtCore.SIGNAL("clicked()"), self.close ) self.connect(self.bcreate, QtCore.SIGNAL("clicked()"), self.crearDB ) self.connect(self.brecargar, QtCore.SIGNAL("clicked()"),lambda: self.recargar('empresa') ) self.connect(self.cbEstilos,QtCore.SIGNAL("activated(const QString)"),self.cambiarEstilo) self.connect(self.cbPrinters,QtCore.SIGNAL("activated(const QString)"),self.setPrinter) self.connect(self.cbDrivers,QtCore.SIGNAL("activated(const QString)"),self.setDriver) self.connect(self.clrExplorar,QtCore.SIGNAL("clicked()"),self.cambiarFolderRespaldo) self.connect(self.cbpreview,QtCore.SIGNAL("clicked()"),self.editarTicket) self.connect(self.pbfEditar,QtCore.SIGNAL("clicked()"),self.editarFactura) self.connect(self.pbpEditar_,QtCore.SIGNAL("clicked()"),self.editarPresupuesto) self.connect(self.pbEditarCorte,QtCore.SIGNAL("clicked()"),self.editarCorte) self.connect(self.rlRestore,QtCore.SIGNAL("clicked()"),self.restaurar) self.connect(self.rlRestoreDB,QtCore.SIGNAL("clicked()"),lambda:self.restaurar(True,False)) self.connect(self.rlRestoreConf,QtCore.SIGNAL("clicked()"),lambda:self.restaurar(False,True)) self.connect(self.sbCaja,QtCore.SIGNAL("editingFinished ()"),lambda: self.setCambio('pyventa','caja',self.sbCaja.value())) self.connect(self.tbBuscarCaja,QtCore.SIGNAL("clicked()"),self.buscador) self.connect(self.tbLogo,QtCore.SIGNAL("clicked()"),self.cambiarLogo) self.connect(self.tbRecargarEstilo,QtCore.SIGNAL("clicked()"),self.parent.iniciarEstilo) self.connect(self.chbRecibePagos,QtCore.SIGNAL("stateChanged ( int )"),self.setRecibePagos) self.connect(self.chbImprimirCopia,QtCore.SIGNAL("stateChanged ( int )"),self.setImprimeCopiaRecibo) self.connect(self.chbImprimirTicket,QtCore.SIGNAL("stateChanged ( int )"),self.setImprimeTicket) #self.connect(self.gbTickets,QtCore.SIGNAL("clicked()"),lambda: self.setCambio('ticket','default',self.boolint(self.gbTickets.isChecked()))) #self.connect(self.gbFacturas,QtCore.SIGNAL("clicked()"),lambda: self.setCambio('facturas','default',self.boolint(self.gbFacturas.isChecked()))) #self.connect(self.bfSave, QtCore.SIGNAL("clicked()"), self.cambiarFolderFacturas ) self.mysql={'host':'','user':'','pass':'','db':'tpv'} self.mysql['db']='tpv' self.ruta=join(self.parent.home,"config.cfg") #self.cfg = ConfigParser.ConfigParser() self.modulos={'empresa':{},'respaldo':{},'mysql':{},'ticket':{},'factura':{},'nota':{},'pyventa':{}} self.inicia() self.checkRespaldo() self.setupMenus() #self.listarImp() def launch(self): if self.parent.aut(self.datos['nivel'])>0: self.show() def inicia(self): self.kfg=Configurador() if (self.kfg.cfg!=None): self.cfg=self.kfg mysql=['host','user','pass','db'] for key in mysql: if self.cfg.has_option("mysql", key): self.mysql[key]=self.kfg.getDato('mysql',key) self.modulos['empresa']['nombre']=self.lenombre self.modulos['empresa']['rfc']=self.lerfc self.modulos['empresa']['slogan']=self.leslogan self.modulos['empresa']['direccion']=self.ledir self.modulos['empresa']['ciudad']=self.leciudad self.modulos['empresa']['estado']=self.leestado self.modulos['empresa']['cp']=self.lecp self.modulos['empresa']['email']=self.lemail self.modulos['empresa']['telefono']=self.letel self.modulos['empresa']['pagina']=self.leweb self.modulos['empresa']['logo']=self.leLogo self.lblLogo.setPixmap(QtGui.QPixmap(self.kfg.getDato('empresa','logo'))) self.modulos['mysql']['host']=self.tserver self.modulos['mysql']['user']=self.tuser self.modulos['mysql']['pass']=self.tpass self.modulos['mysql']['db']=self.tdb self.modulos['respaldo']['lpath']=self.rlPath self.modulos['respaldo']['server']=self.rsServer self.modulos['respaldo']['user']=self.rsUser self.modulos['respaldo']['pass']=self.rsPass self.modulos['respaldo']['rpath']=self.rsPath remoto=self.kfg.getDato('respaldo','remoto') local=self.kfg.getDato('respaldo','local') #if (remoto!=1): #self.gbRemoto.setChecked(False) #if local!=1: #self.gbLocal.setChecked(False) for modulo in self.modulos: for key in self.modulos[modulo]: try: self.modulos[modulo][key].setText(self.kfg.getDato(modulo,key)) except: pass self.sbCaja.setValue(float(self.kfg.getDato("pyventa","caja"))) self.chbRecibePagos.setCheckState(int(self.kfg.getDato("pyventa","cobra"))) #self.gbTickets.setChecked(bool(int(self.kfg.getDato("ticket","default")))) #self.gbFacturas.setChecked(bool(int(self.kfg.getDato("factura","default")))) self.gbBox.setChecked(bool(int(self.kfg.getDato("pyventa","caja")))) for files in os.walk(join(self.parent.home,"estilos")): for i,name in enumerate(files[2]): tipo=name.split('.') if tipo[1]=='css': self.cbEstilos.addItem(str(name)) #----Impresiones try: conn = cups.Connection () printers = conn.getPrinters() self.cbPrinters.addItems([str(p) for p in conn.getPrinters ()]) self.cbPrinters.setCurrentIndex(self.cbPrinters.findText(self.kfg.getDato("ticket","impresora"))) except: self.cbPrinters.addItem("Predeterminada") self.dsbCopia.setValue(float(self.kfg.getDato("ticket","copia-trigger"))) self.dsbTicketTigger.setValue(float(self.kfg.getDato("ticket","trigger"))) self.chbImprimirCopia.setCheckState(int(self.kfg.getDato("ticket","copia"))) self.chbImprimirTicket.setCheckState(int(self.kfg.getDato("ticket","default"))) driverpath=join(self.parent.home,'drivers') self.cbDrivers.addItems([ f[0:-3] for f in os.listdir(driverpath) if isfile(join(driverpath,f)) and f[-1]=='y' ]) self.cbDrivers.setCurrentIndex(self.cbDrivers.findText(self.kfg.getDato("ticket","driver"))) def setupMenus(self): respaldos=self.parent.menuPyventa.addMenu("Respaldos") respaldos.addAction("Generar respaldo",self.respaldarLocal) respaldos.addAction("Restaurar todo",lambda:self.restaurar(True,True)) respaldos.addSeparator() respaldos.addAction("Restaurar base de datos",lambda:self.restaurar(True,False)) respaldos.addAction("Restaurar configuraciones",lambda:self.restaurar(False,True)) self.parent.menuHerramientas.addAction("Configuraciones",self.launch) def cambiarLogo(self): File = QtGui.QFileDialog() saveFile = str(File.getOpenFileName(self, "Seleccione la imagen",expanduser("~"),self.tr("Imagenes (*.png *.jpg *.jpeg)"))) if (saveFile!=""): self.lblLogo.setPixmap(QtGui.QPixmap(saveFile)) self.leLogo.setText(saveFile) self.setCambio('empresa','logo',saveFile) def recargar(self,modulo): for key in self.modulos[modulo]: try: print self.modulos[modulo][key].text() self.cfg.set(modulo,key,str(self.modulos[modulo][key].text())) except: pass self.cfg.guardar() self.kfg=Configurador() msgBox=QtGui.QMessageBox() msgBox.setText("Se han guardado las configuraciones") msgBox.setStandardButtons(QtGui.QMessageBox.Ok | QtGui.QMessageBox.Cancel) msgBox.exec_() def setCambio(self,modulo,propiedad,valor): try: self.cfg.set(str(modulo),str(propiedad),str(valor)) except ConfigParser.Error,e: print "({0},{1},{2}), No se guardo la configuracion".format(modulo,propiedad,valor),e else:
def inicia(self): self.kfg=Configurador() if (self.kfg.cfg!=None): self.cfg=self.kfg mysql=['host','user','pass','db'] for key in mysql: if self.cfg.has_option("mysql", key): self.mysql[key]=self.kfg.getDato('mysql',key) self.modulos['empresa']['nombre']=self.lenombre self.modulos['empresa']['rfc']=self.lerfc self.modulos['empresa']['slogan']=self.leslogan self.modulos['empresa']['direccion']=self.ledir self.modulos['empresa']['ciudad']=self.leciudad self.modulos['empresa']['estado']=self.leestado self.modulos['empresa']['cp']=self.lecp self.modulos['empresa']['email']=self.lemail self.modulos['empresa']['telefono']=self.letel self.modulos['empresa']['pagina']=self.leweb self.modulos['empresa']['logo']=self.leLogo self.lblLogo.setPixmap(QtGui.QPixmap(self.kfg.getDato('empresa','logo'))) self.modulos['mysql']['host']=self.tserver self.modulos['mysql']['user']=self.tuser self.modulos['mysql']['pass']=self.tpass self.modulos['mysql']['db']=self.tdb self.modulos['respaldo']['lpath']=self.rlPath self.modulos['respaldo']['server']=self.rsServer self.modulos['respaldo']['user']=self.rsUser self.modulos['respaldo']['pass']=self.rsPass self.modulos['respaldo']['rpath']=self.rsPath remoto=self.kfg.getDato('respaldo','remoto') local=self.kfg.getDato('respaldo','local') #if (remoto!=1): #self.gbRemoto.setChecked(False) #if local!=1: #self.gbLocal.setChecked(False) for modulo in self.modulos: for key in self.modulos[modulo]: try: self.modulos[modulo][key].setText(self.kfg.getDato(modulo,key)) except: pass self.sbCaja.setValue(float(self.kfg.getDato("pyventa","caja"))) self.chbRecibePagos.setCheckState(int(self.kfg.getDato("pyventa","cobra"))) #self.gbTickets.setChecked(bool(int(self.kfg.getDato("ticket","default")))) #self.gbFacturas.setChecked(bool(int(self.kfg.getDato("factura","default")))) self.gbBox.setChecked(bool(int(self.kfg.getDato("pyventa","caja")))) for files in os.walk(join(self.parent.home,"estilos")): for i,name in enumerate(files[2]): tipo=name.split('.') if tipo[1]=='css': self.cbEstilos.addItem(str(name)) #----Impresiones try: conn = cups.Connection () printers = conn.getPrinters() self.cbPrinters.addItems([str(p) for p in conn.getPrinters ()]) self.cbPrinters.setCurrentIndex(self.cbPrinters.findText(self.kfg.getDato("ticket","impresora"))) except: self.cbPrinters.addItem("Predeterminada") self.dsbCopia.setValue(float(self.kfg.getDato("ticket","copia-trigger"))) self.dsbTicketTigger.setValue(float(self.kfg.getDato("ticket","trigger"))) self.chbImprimirCopia.setCheckState(int(self.kfg.getDato("ticket","copia"))) self.chbImprimirTicket.setCheckState(int(self.kfg.getDato("ticket","default"))) driverpath=join(self.parent.home,'drivers') self.cbDrivers.addItems([ f[0:-3] for f in os.listdir(driverpath) if isfile(join(driverpath,f)) and f[-1]=='y' ]) self.cbDrivers.setCurrentIndex(self.cbDrivers.findText(self.kfg.getDato("ticket","driver")))