def __init__(self, id_bbdd=0): if id_bbdd < 1: return consulta = "SELECT id, id_empleado, desde, hasta, dias_tomados, tipo, comentario\ FROM licencia WHERE id = " + str(id_bbdd) Conexion.ejecutar(consulta) resultset = Conexion.fetchone() Conexion.cerrar() if resultset is None: return self._id = resultset[0] self.id_empleado = resultset[1] self.desde = resultset[2] self.hasta = resultset[3] self.dias_tomados = resultset[4] self.tipo = resultset[5] self.comentario = resultset[6] self._cambios = False self._nuevo = False
def de_empleado(id_empleado, tipo=""): if id_empleado < 1: return if tipo != "": consulta = "SELECT id FROM licencia WHERE tipo = '" + str(tipo) + "' AND id_empleado = " + str(id_empleado) + " ORDER BY desde DESC" else: consulta = "SELECT id FROM licencia WHERE id_empleado = " + str(id_empleado) + " ORDER BY desde DESC" Conexion.ejecutar(consulta) resultset = Conexion.fetchall() Conexion.cerrar() ls = [] for datos in resultset: l = Licencia(datos[0]) ls.append(l) return ls
def licencia(id_empleado, desde, ): l = Licencia() consulta = "SELECT id, id_empleado, desde, hasta, dias_tomados, tipo, comentario\ FROM licencia WHERE id_empleado = " + str(id_empleado) + " AND desde = cast('" + str(desde) + "' as date)" Conexion.ejecutar(consulta) resultset = Conexion.fetchone() Conexion.cerrar() if resultset is None: return l._id = resultset[0] l.id_empleado = resultset[1] l.desde = resultset[2] l.hasta = resultset[3] l.dias_tomados = resultset[4] l.tipo = resultset[5] l.comentario = resultset[6] l._cambios = False l._nuevo = False return l
def empleado(documento): e = Empleado() consulta = "SELECT * FROM empleado WHERE documento = " + str(documento) Conexion.ejecutar(consulta) resultset = Conexion.fetchone() Conexion.cerrar() if resultset is not None: e._id = resultset[0] e.documento = resultset[1] e.nombre = resultset[2] e.apellido = resultset[3] e.fecha_nacimiento = resultset[4] e.genero = resultset[5] e.domicilio = resultset[6] e.telefono = resultset[7] e.fecha_ingreso = resultset[8] e.cuil = resultset[9] e.nro_legajo = resultset[10] e.sit_revista = resultset[11] e.cargo = resultset[12] e.observaciones = resultset[13] e._cambios = False e._nuevo = False return e
def cargarPuntos(self, idai, ai): conexion = Conexion(self.config) cursor = conexion.getCursor() puntos = [] cursor.execute("SELECT id,x,y,h from puntos where idai=" + str(idai) + " ORDER BY id") for id, x, y, h in cursor.fetchall(): puntos.append(Punto(x, y, h, ai, id)) conexion.cerrar() return puntos
def seleccionar(cls): cursor = Conexion.obtenerCursor() logger.debug(cursor.mogrify(cls.__SELECCIONAR)) cursor.execute(cls.__SELECCIONAR) registros = cursor.fetchall() personas = [] for registro in registros: persona = Persona(registro[0], registro[1], registro[2], registro[3]) personas.append(persona) Conexion.cerrar() return personas
def cargarAreas(self, idrec): conexion = Conexion(self.config) cursor = conexion.getCursor() areasinteres = [] cursor.execute( "SELECT id, tipo, idpexacto from areainteres where idrec=" + str(idrec) + " ORDER BY id") for id, tipo, idpexacto in cursor.fetchall(): ai = AreaInteres(tipo, id) ai.setPuntos(self.cargarPuntos(id, ai)) areasinteres.append(ai) conexion.cerrar() return areasinteres
def seleccionar(cls): cursor = Conexion.obtenerCursor() logger.debug( cursor.mogrify(cls.__SELECCIONAR) ) # manda a imprimir el query q se va a ejecutar pero en la base de datos cursor.execute(cls.__SELECCIONAR) registros = cursor.fetchall() personas = [] for registro in registros: persona = Persona(registro[0], registro[1], registro[2], registro[3]) personas.append(persona) Conexion.cerrar() return personas
def eliminar(self, ): if self._nuevo: return if self.id == 0: return consulta = "DELETE FROM licencia WHERE id = " + str(self.id) Conexion.ejecutar(consulta) Conexion.cerrar() self._nuevo = True self._cambios = True
def cargarMisiones(self, idrec, r): conexion = Conexion(self.config) cursor = conexion.getCursor() misiones = [] cursor.execute( "SELECT id, fecha, umbral, resolucion, bateriaini, bateriafin, tiempo, disttotal, demora, movfotos from mision WHERE idrec=" + str(idrec) + " ORDER BY id") for id, fecha, umbral, resolucion, bateriaini, bateriafin, tiempo, disttotal, demora, movfotos in cursor.fetchall( ): misiones.append( Mision(r, id, fecha, umbral, resolucion, bateriaini, bateriafin, tiempo, disttotal, demora, movfotos, 0, self.cargarFotos(id, r))) conexion.cerrar() return misiones
def cargarFotos(self, idm, r): ##Para la carga de datos se abren otras conexiones que solo se usan para eso conexion = Conexion(self.config) cursor = conexion.getCursor() fotos = [] cursor.execute( "SELECT id,x,y,h,url,fecha, idp, rdetect, sdetect from foto where idm=" + str(idm) + " ORDER BY id") for id, x, y, h, url, fecha, idp, rdetect, sdetect in cursor.fetchall( ): fotos.append( Foto(x, y, h, r.obtenerPunto(idp), id, None, fecha, url, rdetect, sdetect, self)) conexion.cerrar() return fotos
def insertar(cls, persona): try: conexion = Conexion.obtenerConexion() cursor = Conexion.obtenerCursor() logger.debug(cursor.mogrify(cls.__INSERTAR)) logger.debug(f'Persona a insertar: {persona}') valores = (persona.get_nombre(), persona.get_apellido(), persona.get_email()) cursor.execute(cls.__INSERTAR, valores) conexion.commit() return cursor.rowcount except Exception as e: conexion.rollback() logger.error(f'Excepción al insertar persona: {e}') finally: Conexion.cerrar()
def actualizar(cls, persona): try: conexion = Conexion.obtenerConexion() cursor = Conexion.obtenerCursor() logger.debug(cursor.mogrify(cls.__ACTUALIZAR)) logger.debug(f'Persona a actualizar: {persona}') valores_persona = (persona.get_nombre(), persona.get_apellido(), persona.get_email(), persona.get_id_persona()) cursor.execute(cls.__ACTUALIZAR, valores_persona) conexion.commit() except Exception as e: conexion.rollback() logger.error(f'Excepcion al actualizar persona {e}') finally: Conexion.cerrar()
def eliminar(cls, persona): try: conexion = Conexion.obtenerConexion() cursor = Conexion.obtenerCursor() logger.debug(cursor.mogrify(cls.__ELIMINAR)) logger.debug(f'Persona a eliminar: {persona}') valores = (persona.get_id_persona(), ) cursor.execute(cls.__ELIMINAR, valores) conexion.commit() return cursor.rowcount except Exception as e: conexion.rollback() logger.error(f'Excepcion al eliminar') finally: Conexion.cerrar()
def cargarMisionesRecorridos(self): conexion = Conexion(self.config) cursor = conexion.getCursor() recorridos = [] misiones = [] cursor.execute( "SELECT id, tipo, velocidad, altura, padron, fotosxestaca, calculodist, umbral, solapamiento from recorrido ORDER BY id" ) for id, tipo, velocidad, altura, padron, fotosxestaca, calculodist, umbral, solapamiento in cursor.fetchall( ): r = Recorrido(padron, altura, velocidad, tipo, id, fotosxestaca, calculodist, umbral, solapamiento, self.cargarAreas(id)) misiones += self.cargarMisiones(id, r) recorridos.append(r) conexion.cerrar() return [recorridos, misiones]
def seleccionar(cls): try: Conexion.obtenerConexion() cursor = Conexion.obtenerCursor() logger.debug(f'Datos: {cursor.mogrify(cls.__SELECCIONAR)}') cursor.execute(cls.__SELECCIONAR) datos = cursor.fetchall() logger.debug(datos) except Exception as e: logger.error(f'Error de consulta: {e}') sys.exit() finally: Conexion.cerrar()
def eliminar(cls, persona): #El try bloque le permite probar un bloque de código en busca de errores. try: conexion = Conexion.obtenerConexion() cursor = Conexion.obtenerCursor() logger.debug(cursor.mogrify(cls.__ELIMINAR)) logger.debug(f'Persona a eliminar: {persona}') valores = (persona.get_id_persona(), ) cursor.execute(cls.__ELIMINAR, valores) conexion.commit() return cursor.rowcount #El except bloque le permite manejar el error. except Exception as e: conexion.rollback() logger.error(f'Excepción al eliminar persona:{e}') #El finally bloque le permite ejecutar código, independientemente del resultado de los bloques try y except. finally: Conexion.cerrar()
def eliminar(self): if self._nuevo: return if self.id == 0: return ls = Licencia.de_empleado(self._id) for l in ls: l.eliminar() consulta = "DELETE FROM empleado WHERE id = " + str(self.id) Conexion.ejecutar(consulta) Conexion.cerrar()
def licencias(): ls = [] consulta = "SELECT id FROM licencia" Conexion.ejecutar(consulta) resultset = Conexion.fetchall() Conexion.cerrar() for datos in resultset: l = Licencia(datos[0]) ls.append(l) return ls
def insertar(self, persona): try: Conexion.obtenerConexion() cursor = Conexion.obtenerConexion() logger.debug(f'Datos: {cursor.mogrify(cls.__INSERTAR)}') datos = (persona[0], persona[1], persona[2]) cursor.execute(cls.__INSERTAR, datos) logger.debug(f'Conexión exitosa') except Exception as e: logger.error(f'Error de consulta: {e}') sys.exit() finally: conexion.commit() Conexion.cerrar()
def eliminar(cls, persona): try: # necesito obtener el conexion para guardar en la BD conexion = Conexion.obtenerConexion() cursor = Conexion.obtenerCursor() logger.debug( cursor.mogrify(cls.__ELIMINAR) ) # manda a imprimir el query q se va a ejecutar pero en la base de datos logger.debug(f'Persona a eliminar: {persona}') valores = (persona.get_id_persona(), ) #valores a insertar cursor.execute(cls.__ELIMINAR, valores) conexion.commit() return cursor.rowcount except Exception as e: conexion.rollback() logger.error(f'Error al insertar una persona :{e}') finally: Conexion.cerrar() # if __name__ == "__main__": # probar el select # personas = PersonaDao.seleccionar() # for persona in personas: # logger.debug(persona) # logger.debug(persona.get_id_persona()) # Insertar el registro # persona = Persona(nombre ='Pedro', apellido='Najera', email='*****@*****.**') # personas_insertadas = PersonaDao.insertar(persona) # logger.debug(f'Registros Insertados: {personas_insertadas}') # Actualizar registros # persona = Persona(id_persona = 1, nombre ='Juan', apellido='Perez', email='*****@*****.**') # personas_modificadas = PersonaDao.actualizar(persona) # logger.debug(f'Registros actualizados: {personas_modificadas}') # Eliminar registro # persona = Persona(id_persona = 20) # personas_eliminadas = PersonaDao.eliminar(persona) # logger.debug(f'Registros Eliminados: {personas_eliminadas}')
def empleados(): empleados = [] consulta = "SELECT documento FROM empleado ORDER BY apellido, nombre" Conexion.ejecutar(consulta) resultset = Conexion.fetchall() Conexion.cerrar() for item in resultset: e = Empleado.empleado(item[0]) empleados.append(e) return empleados
def insertar(cls, persona): try: # necesito obtener el conexion para guardar en la BD conexion = Conexion.obtenerConexion() cursor = Conexion.obtenerCursor() logger.debug( cursor.mogrify(cls.__INSERTAR) ) # manda a imprimir el query q se va a ejecutar pero en la base de datos logger.debug(f'Persona a insertar: {persona}') valores = (persona.get_nombre(), persona.get_apellido(), persona.get_email()) #valores a insertar cursor.execute(cls.__INSERTAR, valores) conexion.commit() return cursor.rowcount except Exception as e: conexion.rollback() logger.error(f'Error al insertar una persona :{e}') finally: Conexion.cerrar()
def actualizar(cls, persona): try: cursor = Conexion.obtener_cursor() logger.debug(cursor.mogrify(cls.__ACTUALIZAR)) logger.debug(f'Persona a actualizar: {persona}') valores = ( persona.get_nombre(), persona.get_apellido(), persona.get_email(), persona.get_idPersona() ) cursor.execute(cls.__ACTUALIZAR, valores) Conexion.obtener_conexion().commit() return cursor.rowcount except Exception as e: Conexion.obtener_conexion().rollback() logger.error(f'Excepción al actualizar persona: {e}') finally: Conexion.cerrar()
def guardar(self): if not self._cambios: return if self.documento == 0: raise Exception("El campo 'documento' no puede estar vacío.") if self.nombre == "": raise Exception("El campo 'nombre' no puede estar vacío.") if self.apellido == "": raise Exception("El campo 'apellido' no puede estar vacío.") if self.fecha_nacimiento == "": raise Exception("El campo 'fecha de nacimiento' no puede estar vacío.") if self.genero == "": raise Exception("El campo 'género' no puede estar vacío.") if self.domicilio == "": raise Exception("El campo 'domicilio' no puede estar vacío.") if self.fecha_ingreso == "": raise Exception("El campo 'fecha de ingreso' no puede estar vacío.") if self.nro_legajo == "": raise Exception("El campo 'número de legajo' no puede estar vacío.") if self.sit_revista == "": raise Exception("El campo 'situación de revista' no puede estar vacío.") if self.cargo == "": raise Exception("El campo 'cargo' no puede estar vacío.") dic = {"a1" : "documento", "a2" : "nombre", "a3" : "apellido", "a4" : "fecha_nacimiento", "a5" : "genero", "a6" : "domicilio", "a7" : "telefono", "a8" : "fecha_ingreso", "a9" : "cuil", "a10" : "nro_legajo", "a11" : "sit_revista", "a12" : "cargo", "a13" : "observaciones", } vals = {"v1" : self._documento, "v2" : self._nombre, "v3" : self._apellido, "v4" : self._fecha_nacimiento, "v5" : self._genero, "v6" : self._domicilio, "v7" : self._telefono, "v8" : self._fecha_ingreso, "v9" : self._cuil, "v10" : self._nro_legajo, "v11" : self._sit_revista, "v12" : self._cargo, "v13" : self._observaciones, } if self._nuevo: consulta = "SELECT id FROM empleado WHERE documento = " + str(self.documento) Conexion.ejecutar(consulta) id_bbdd = Conexion.fetchone() Conexion.cerrar() if id_bbdd is not None: raise Exception("Ya existe un empleado con ese documento: " + str(self.documento)) consulta = "INSERT INTO empleado('a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'a10', 'a11', 'a12') \ VALUES('v1', 'v2', 'v3', 'v4', 'v5', 'v6', 'v7', 'v8', 'v9', 'v10', 'v11', 'v12', 'v13') RETURNING id" for i in range(1, 14): if vals["v" + str(i)]: consulta = consulta.replace("'a" + str(i) + "'", str(dic["a" + str(i)])) if isinstance(vals["v" + str(i)], int): consulta = consulta.replace("'v" + str(i) + "'", str(vals["v" + str(i)])) else: if '/' in str(vals["v" + str(i)]): consulta = consulta.replace("'v" + str(i) + "'", "cast('" + str(vals["v" + str(i)]) + "' as date)") else: consulta = consulta.replace("'v" + str(i) + "'", "'" + str(vals["v" + str(i)]) + "'") else: if "'v" + str(i) + "', " in consulta: consulta = consulta.replace("'a" + str(i) + "', ", "") consulta = consulta.replace("'v" + str(i) + "', ", "") elif ", " + "'v" + str(i) + "')" in consulta: consulta = consulta.replace(", " + "'a" + str(i) + "'", "") consulta = consulta.replace(", " + "'v" + str(i) + "'", "") else: consulta = "SELECT id FROM empleado WHERE documento = " + str(self.documento) Conexion.ejecutar(consulta) resultset = Conexion.fetchone() Conexion.cerrar() if resultset is not None: for id_bbdd in resultset: if id_bbdd != self.id: print id_bbdd, "", self.id raise Exception("Ya existe un empleado con ese documento: ", self.documento) consulta = "UPDATE empleado SET 'a1' = 'v1',\ 'a2' = 'v2',\ 'a3' = 'v3',\ 'a4' = 'v4',\ 'a5' = 'v5',\ 'a6' = 'v6',\ 'a7' = 'v7',\ 'a8' = 'v8',\ 'a9' = 'v9',\ 'a10' = 'v10',\ 'a11' = 'v11',\ 'a12' = 'v12',\ 'a13' = 'v13'\ WHERE id = " + str(self.id) for i in range(1, 14): consulta = consulta.replace("'a" + str(i) + "'", str(dic["a" + str(i)])) if isinstance(vals["v" + str(i)], int) or isinstance(vals["v" + str(i)], float): consulta = consulta.replace("'v" + str(i) + "'", str(vals["v" + str(i)])) else: if '/' in str(vals["v" + str(i)]): consulta = consulta.replace("'v" + str(i) + "'", "cast('" + str(vals["v" + str(i)]) + "' as date)") else: consulta = consulta.replace("'v" + str(i) + "'", "'" + str(vals["v" + str(i)]) + "'") Conexion.ejecutar(consulta) self._cambios = False if self._nuevo: self._id = Conexion.fetchone()[0] self._nuevo = False Conexion.cerrar()
class Persistencia(): def __init__(self, config): ##Esta es la conexión para las inserts #self.conexion=Conexion(config) self.config = config pass def iniciarConexion(self): self.conexion = Conexion(self.config) def getCursor(self): return self.conexion.getCursor() def commit(self): self.conexion.commit() def cerrarConexion(self): self.conexion.cerrar() def correrInsert(self, consulta, valores): #print consulta #print valores cursor = self.getCursor() cursor.execute(consulta, valores) id = int(cursor.fetchone()[0]) self.commit() return id #return 0 def borrarBD(self): cursor = self.getCursor() cursor.execute("DELETE FROM recorrido where 1=1") self.commit() def borrarFotos(self, idMision): cursor = self.getCursor() if idMision != '0': cursor.execute("DELETE FROM foto where url LIKE '" + idMision + "%'") else: cursor.execute("DELETE FROM foto where 1=1") self.commit() def guardarRecorrido(self, padron, alt, vel, tipo, fotosxestaca, calculodist, umbral, solapamiento): consulta = "INSERT INTO recorrido (padron, altura, velocidad, tipo, fotosxestaca, calculodist, umbral, solapamiento) values (%s,%s,%s,%s, %s, %s, %s, %s) RETURNING ID" valores = (padron, alt, vel, tipo, fotosxestaca, calculodist, umbral, solapamiento) return self.correrInsert(consulta, valores) def guardarAInteres(self, tipo, idrec): consulta = "INSERT INTO areainteres (tipo, idrec) values (%s,%s) RETURNING ID" valores = (tipo, idrec) return self.correrInsert(consulta, valores) def guardarPunto(self, x, y, h, idai, esExacto): #if nombre: # consulta = "INSERT INTO puntos (x,y,h,idai, nombre) values (%s,%s,%s,%s,%s) RETURNING ID" # valores = (x,y,h,idai,nombre) consulta = "INSERT INTO puntos (x,y,h,idai) values (%s,%s,%s,%s) RETURNING ID" valores = (x, y, h, idai) idp = self.correrInsert(consulta, valores) if esExacto is True: consulta = "UPDATE areainteres SET idpexacto=%s WHERE id=%s RETURNING ID" valores = (idp, idai) self.correrInsert(consulta, valores) return idp def guardarMision(self, idrec, fecha, umbral, resolucion, bateriaini, demora, movfotos): consulta = "INSERT INTO mision (idrec, fecha, umbral, resolucion, bateriaini, demora, movfotos) values (%s,%s,%s,%s,%s, %s, %s) RETURNING ID" valores = (idrec, fecha, umbral, resolucion, bateriaini, demora, movfotos) return self.correrInsert(consulta, valores) def actualizarMision(self, idm, bateriafin, tiempo, disttotal): consulta = "UPDATE mision SET bateriafin=%s, tiempo=%s, disttotal=%s WHERE id=%s RETURNING ID" #print "score:" + str(sdetect) valores = (bateriafin, tiempo, disttotal, idm) return self.correrInsert(consulta, valores) def actualizarFoto(self, idf, sdetect, rdetect): consulta = "UPDATE foto SET sdetect=%s, rdetect=%s WHERE id=%s RETURNING ID" #print "score:" + str(sdetect) valores = (sdetect, rdetect, idf) return self.correrInsert(consulta, valores) def guardarFotos(self, x, y, h, fecha, ruta, idm, idp): consulta = "INSERT INTO foto (x,y,h,fecha, url, idm,idp) values (%s,%s,%s, %s, %s,%s,%s) RETURNING ID" valores = (x, y, h, fecha, ruta, idm, idp) return self.correrInsert(consulta, valores) def cargarFotos(self, idm, r): ##Para la carga de datos se abren otras conexiones que solo se usan para eso conexion = Conexion(self.config) cursor = conexion.getCursor() fotos = [] cursor.execute( "SELECT id,x,y,h,url,fecha, idp, rdetect, sdetect from foto where idm=" + str(idm) + " ORDER BY id") for id, x, y, h, url, fecha, idp, rdetect, sdetect in cursor.fetchall( ): fotos.append( Foto(x, y, h, r.obtenerPunto(idp), id, None, fecha, url, rdetect, sdetect, self)) conexion.cerrar() return fotos def cargarPuntos(self, idai, ai): conexion = Conexion(self.config) cursor = conexion.getCursor() puntos = [] cursor.execute("SELECT id,x,y,h from puntos where idai=" + str(idai) + " ORDER BY id") for id, x, y, h in cursor.fetchall(): puntos.append(Punto(x, y, h, ai, id)) conexion.cerrar() return puntos def cargarAreas(self, idrec): conexion = Conexion(self.config) cursor = conexion.getCursor() areasinteres = [] cursor.execute( "SELECT id, tipo, idpexacto from areainteres where idrec=" + str(idrec) + " ORDER BY id") for id, tipo, idpexacto in cursor.fetchall(): ai = AreaInteres(tipo, id) ai.setPuntos(self.cargarPuntos(id, ai)) areasinteres.append(ai) conexion.cerrar() return areasinteres def cargarMisiones(self, idrec, r): conexion = Conexion(self.config) cursor = conexion.getCursor() misiones = [] cursor.execute( "SELECT id, fecha, umbral, resolucion, bateriaini, bateriafin, tiempo, disttotal, demora, movfotos from mision WHERE idrec=" + str(idrec) + " ORDER BY id") for id, fecha, umbral, resolucion, bateriaini, bateriafin, tiempo, disttotal, demora, movfotos in cursor.fetchall( ): misiones.append( Mision(r, id, fecha, umbral, resolucion, bateriaini, bateriafin, tiempo, disttotal, demora, movfotos, 0, self.cargarFotos(id, r))) conexion.cerrar() return misiones def cargarMisionesRecorridos(self): conexion = Conexion(self.config) cursor = conexion.getCursor() recorridos = [] misiones = [] cursor.execute( "SELECT id, tipo, velocidad, altura, padron, fotosxestaca, calculodist, umbral, solapamiento from recorrido ORDER BY id" ) for id, tipo, velocidad, altura, padron, fotosxestaca, calculodist, umbral, solapamiento in cursor.fetchall( ): r = Recorrido(padron, altura, velocidad, tipo, id, fotosxestaca, calculodist, umbral, solapamiento, self.cargarAreas(id)) misiones += self.cargarMisiones(id, r) recorridos.append(r) conexion.cerrar() return [recorridos, misiones]
def guardar(self, ): if not self._cambios: return if self.id_empleado == 0: raise Exception("El empleado no es válido.") if self.desde == "": raise Exception("La fecha desde no es válida.") if self.hasta == "": raise Exception("La fecha hasta no es válida.") if self.dias_tomados < 1: raise Exception("Las fechas no son válidas.") if self.tipo == "": raise Exception("El tipo de licencia no es válido.") if self._id_empleado == 0: raise Exception("El empleado no es válido.") dic = {"a1" : "id_empleado", "a2" : "desde", "a3" : "hasta", "a4" : "dias_tomados", "a5" : "tipo", "a6" : "comentario", } vals = {"v1" : self.id_empleado, "v2" : self.desde, "v3" : self.hasta, "v4" : self.dias_tomados, "v5" : self.tipo, "v6" : self.comentario, } #VALIDO QUE EXISTA EL EMPLEADO consulta = "SELECT id FROM empleado WHERE id = " + str(self.id_empleado) Conexion.ejecutar(consulta) resultset = Conexion.fetchone() Conexion.cerrar() if resultset is None: raise Exception("El empleado no es válido.") #VALIDO QUE NO EXISTA UNA LICENCIA EN EL MISMO PERIODO DE TIEMPO consulta = "SELECT id FROM licencia " +\ "WHERE (desde <= cast('" + str(self.desde) + "' as date) AND hasta >= cast('" + str(self.desde) + "' as date) " + \ "OR desde <= cast('" + str(self.hasta) + "' as date) AND hasta >= cast('" + str(self.hasta) + "' as date) " +\ "OR desde >= cast('" + str(self.desde) + "' as date) AND hasta <= cast('" + str(self.hasta) + "' as date)) " +\ "AND id != " + str(self.id) +\ " AND id_empleado = " + str(self.id_empleado) Conexion.ejecutar(consulta) resultset = Conexion.fetchone() Conexion.cerrar() if resultset is not None: raise Exception("El empleado ya se está tomando una licencia en esta fecha.") if self.tipo == "58": if self.dias_tomados > 1: raise Exception("La cantidad de días no es válida para una licencia de tipo 58.") ls = Licencia.de_empleado(self.id_empleado, "58") cant_por_anio = 0 for l in ls: anio = l.desde.split('/')[2] if anio == self.desde.split('/')[2] and l.id != self.id: cant_por_anio = cant_por_anio + 1 if cant_por_anio >= 6: raise Exception("El empleado ya se tomó 6 artículos 58 este año.") cant_por_mes = 0 for l in ls: mes = l.desde.split('/')[1] if mes == self.desde.split('/')[1] and l.id != self.id: cant_por_mes = cant_por_mes + 1 if cant_por_mes >= 2: raise Exception("El empleado ya se tomó 2 artículos 58 este mes.") if self._nuevo: consulta = "INSERT INTO licencia('a1', 'a2', 'a3', 'a4', 'a5', 'a6')\ VALUES('v1', 'v2', 'v3', 'v4', 'v5', 'v6') RETURNING id" for i in range(1, 7): if vals["v" + str(i)]: consulta = consulta.replace("'a" + str(i) + "'", str(dic["a" + str(i)])) if isinstance(vals["v" + str(i)], int): consulta = consulta.replace("'v" + str(i) + "'", str(vals["v" + str(i)])) else: if '/' in str(vals["v" + str(i)]): consulta = consulta.replace("'v" + str(i) + "'", "cast('" + str(vals["v" + str(i)]) + "' as date)") else: consulta = consulta.replace("'v" + str(i) + "'", "'" + str(vals["v" + str(i)]) + "'") else: if "'v" + str(i) + "', " in consulta: consulta = consulta.replace("'a" + str(i) + "', ", "") consulta = consulta.replace("'v" + str(i) + "', ", "") elif ", " + "'v" + str(i) + "')" in consulta: consulta = consulta.replace(", " + "'a" + str(i) + "'", "") consulta = consulta.replace(", " + "'v" + str(i) + "'", "") else: consulta = "SELECT id FROM licencia WHERE desde = cast('" + str(self.desde) + "' as date) AND id_empleado = " + str(self.id_empleado) Conexion.ejecutar(consulta) resultset = Conexion.fetchone() Conexion.cerrar() if resultset is not None: for id_bbdd in resultset: if id_bbdd != self.id: raise Exception("Ya existe esta licencia para este empleado.") consulta = "UPDATE licencia SET 'a1' = 'v1',\ 'a2' = 'v2',\ 'a3' = 'v3',\ 'a4' = 'v4',\ 'a5' = 'v5',\ 'a6' = 'v6'\ WHERE id = " + str(self.id) for i in range(1, 7): consulta = consulta.replace("'a" + str(i) + "'", str(dic["a" + str(i)])) if isinstance(vals["v" + str(i)], int) or isinstance(vals["v" + str(i)], float): consulta = consulta.replace("'v" + str(i) + "'", str(vals["v" + str(i)])) else: if '/' in str(vals["v" + str(i)]): consulta = consulta.replace("'v" + str(i) + "'", "cast('" + str(vals["v" + str(i)]) + "' as date)") else: consulta = consulta.replace("'v" + str(i) + "'", "'" + str(vals["v" + str(i)]) + "'") Conexion.ejecutar(consulta) if self._nuevo: self._id = Conexion.fetchone()[0] self._nuevo = False self._cambios = False Conexion.cerrar()