Ejemplo n.º 1
0
	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
Ejemplo n.º 2
0
	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
Ejemplo n.º 3
0
	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
Ejemplo n.º 4
0
	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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
 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
Ejemplo n.º 7
0
 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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
	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
Ejemplo n.º 10
0
 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
Ejemplo n.º 11
0
 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
Ejemplo n.º 12
0
 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()
Ejemplo n.º 13
0
 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()
Ejemplo n.º 14
0
 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()
Ejemplo n.º 15
0
 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]
Ejemplo n.º 16
0
    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()
Ejemplo n.º 17
0
 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()
Ejemplo n.º 18
0
	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()
Ejemplo n.º 19
0
	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
Ejemplo n.º 20
0
    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()
Ejemplo n.º 21
0
    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}')
Ejemplo n.º 22
0
	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
Ejemplo n.º 23
0
    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()
Ejemplo n.º 24
0
 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()
Ejemplo n.º 25
0
	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()
Ejemplo n.º 26
0
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]
Ejemplo n.º 27
0
	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()