def on_guardar(self, *args): #armar el vehiculo para guardarlo a la base de datos nombreVehiculo = self.ids.nombreVehiculo.text valorTacometro = self.ids.valorTacometro.text tipoCombustible = self.ids.spinner_0.text tipoVehiculo = self.ids.spinner_1.text marcaVehiculo = self.ids.spinner_2.text modeloVehiculo = self.ids.spinner_3.text if nombreVehiculo == "" or valorTacometro == "" or tipoCombustible == "Combustible" or tipoVehiculo == "Tipo vehiculo" or marcaVehiculo == "marca" or modeloVehiculo == "modelo": self.ids.advertenciaAgregarVehiculo.text = "Complete todos los campos." return [False, None] else: print( "Valores cargados validando existencia para escribir la base de datos" ) self.combustible = Combustible.GetCombustible( Combustible, self.ids.spinner_0.text) self.lineaSelect = LineaVehiculo.selectLinea( LineaVehiculo, self.ids.spinner_3.text, self.lineas) self.nombre = self.ids.nombreVehiculo.text self.kilometraje = self.ids.valorTacometro.text print("vehiculo a agregar") print("tipo:", self.tipoSelect) print("marca", self.marcaSelect) print("linea:", self.lineaSelect) print("combustible", self.combustible) print("Valor tacometro:", self.kilometraje) print("Nombre vehiculo:", self.nombre) if Vehiculo.existeVehiculo(Vehiculo, self.nombre): #no lo puedo agregar a la base de datos self.ids.advertenciaAgregarVehiculo.text = "ya existe ese vehiculo." return [False, None] else: #como no existe lo agrego a la base de datos veh = Vehiculo.addVehiculo(Vehiculo, self.nombre, self.lineaSelect.id, self.combustible.id) print("TIPO DEL KILOMETRAJE", type(self.kilometraje)) Tacometro.addTacometro(Tacometro, veh.id, int(self.kilometraje)) #aqui agrego la latitud y longitud a la table de geolocaclizacion geopos = Creator.ConseguirPOS(Creator) UbicacionVehiculo.makeUV(UbicacionVehiculo, veh.id, geopos['latitude'], geopos['longitude']) return [True, nombreVehiculo, veh]
def eliminarVehiculo(self): nombre = self.parent.children[2].text idvehiculo = Vehiculo.getIdvehiculo(Vehiculo, nombre) print("VEHICULO ID, eliminando.................:", nombre, idvehiculo) Vehiculo.deleteVehiculo(Vehiculo, nombre) Tacometro.eliminarByVehiculo(Tacometro, idvehiculo) Recarga.eliminarByVehiculo(Recarga, idvehiculo) Mantenimiento.eliminarByVehiculo(Mantenimiento, idvehiculo) UbicacionVehiculo.eliminarByVehiculo(UbicacionVehiculo, idvehiculo) #aqui eliminar las recargas, los mantenimientos, las ubicacionnes, tacometros que tengan el id del vehiculo self.parent.parent.remove_widget(self.parent)
def makeRecarga(self, nombreVehiculo, precioCombustible, kilometraje): print("HACIENDO RECARGA DE GASOLINA, OBTENIENDO PARAMETROS NECCESARIO") print("VEHICULO:", nombreVehiculo) print("KILOMETROS", int(kilometraje)) print("PRECIO DE LA RECARGA", precioCombustible) newid = self.getIdMax(self) preciorecarga = int(precioCombustible) fecha = datetime.date.today() #fechastr = "20/5/2019" #fecha = datetime.datetime.strptime(fechastr, "%d/%m/%Y").date() #meterfechas para ahcer pruebas cuando se liste para el informe idtacometro = Tacometro.getIdMax(Tacometro) kms = int(kilometraje) idveh = Vehiculo.getIdvehiculo(Vehiculo, nombreVehiculo) Tacometro.addTacometro(Tacometro, idveh, kms) Session = sessionmaker(bind=self.eng) ses = Session() recarga = _Recarga(id=newid, precioCombustible=preciorecarga, fecha=fecha, idTacometro=idtacometro, idVehiculo=idveh) ses.add(recarga) ses.commit() #res = self.makeTacometro(self, tac) ses.close()
def ubicacionVehiculo(self): #integracion base de datos nombre = self.parent.children[2].text print ("ubicar vehiculo", nombre)#bd print("id vehiculo: ", Vehiculo.getIdvehiculo(Vehiculo, nombre)) idv = Vehiculo.getIdvehiculo(Vehiculo, nombre) geo_data = Creator.ConseguirPOS(Creator) UbicacionVehiculo.actualizarUbicacion(UbicacionVehiculo,idv, geo_data['latitude'], geo_data['longitude'] ) #Agregar ubicacion DB #print(self.parent.children[2].text) #Para obtener el nombre del vehiculo. #print(geo_data['latitude'], geo_data['longitude']) self.popup = Popup(title="ESTADO",content=Label(text="Ubicacion guardada correctamente"),size_hint=(0.7, 0.2)) self.popup.open()
def agregarMantenimiento(self): c = Creator() filejson = c.makeConfigJSON() nombreVehiculo = filejson["nameVehicule"] idVehiculo = Vehiculo.getIdvehiculo(Vehiculo, nombreVehiculo) if self.ids.precioMantenimiento.text=="" or self.ids.kilometrosMantenimiento.text=="" or self.ids.descripcionMantenimiento.text=="": self.ids.datosIncompletosMantenimiento.text="Ingrese todos los datos" elif Tacometro.validarTacometro2(Tacometro,int(self.ids.kilometrosMantenimiento.text), idVehiculo): self.ids.datosIncompletosMantenimiento.text="Esos kilometros ya fueron registrados debe ser superior" else: km = self.ids.kilometrosMantenimiento.text descripcion = self.ids.descripcionMantenimiento.text precio = self.ids.precioMantenimiento.text Mantenimiento.makeMantenimiento(Mantenimiento,idVehiculo,descripcion, km, precio) self.ids.datosIncompletosMantenimiento.text="" box=BoxLayout(orientation="horizontal") box.add_widget(Label(text=str(time.strftime("%d/%m/%Y")))) box.add_widget(Label(text=self.ids.precioMantenimiento.text)) box.add_widget(Label(text=self.ids.kilometrosMantenimiento.text)) box.add_widget(Label(text=self.ids.descripcionMantenimiento.text)) box.add_widget(Label(text=nombreVehiculo)) self.ids.contenedorMantenimientos.add_widget(box)
def visualizarVehiculos( self ): #Muestro los marcadores con las ubicaciones actualizadas en el mapa ip_request = requests.get('https://get.geojs.io/v1/ip.json') my_ip = ip_request.json()['ip'] #con mi ip obtengo mi geolocalizacion geo_request = requests.get('https://get.geojs.io/v1/ip/geo/' + my_ip + '.json') geo_data = geo_request.json() self.longitudActual = float(geo_data['longitude']) self.latitudActual = float(geo_data['latitude']) self.ids.mapview.center_on( self.latitudActual, self.longitudActual) #mapa centrado en ubicacion actual self.ids.mapview.zoom = 5 mapmarkerpopupUbicacionActual = MapMarkerPopup(lat=self.latitudActual, lon=self.longitudActual, popup_size=(120, 70)) bubbleUbicacionActual = Bubble() labelUbicacionActual = Label(text="[b]Ubicaion actual![/b]", markup=True, halign="center") bubbleUbicacionActual.add_widget(labelUbicacionActual) mapmarkerpopupUbicacionActual.add_widget( bubbleUbicacionActual ) #creo un marcador con etique para saber la ubicacion actual, es de color rojo #self.ids.mapview.center_on(4.795100942698568, -75.6890602859938) #Me centra en la utp. if len(self.listaMarker) > 0: for marker in range(len(self.listaMarker)): self.ids.mapview.remove_widget(self.listaMarker[marker]) self.listaMarker = [ ] #La reseteo para poder meter los mapMarker de los vehiculos actualizados. #Se hace la consulta a la BD para obtener las lat y lon de los vehiculos-----------------------BD self.listaMarker.append(mapmarkerpopupUbicacionActual) #hacer consulta base de datos pos = UbicacionVehiculo.obtenerData(UbicacionVehiculo) for e in pos: mapmarkerpopup = MapMarkerPopup( lat=float(e[1]), lon=float(e[2]), color=(0, 1, 1, 1), popup_size=(120, 70)) #acepta 1,0,1,1 o 0,0,0,1 o 0,1,1,1 bubble = Bubble() label = Label(text="[b]" + Vehiculo.getNamevehiculo(Vehiculo, e[0]) + "[/b]", markup=True, halign="center") bubble.add_widget(label) mapmarkerpopup.add_widget(bubble) self.listaMarker.append(mapmarkerpopup) for i in range(len(pos)): self.ids.mapview.add_widget(self.listaMarker[i])
def scrollVehiculos(self): # CONSULTA BASE DE DATOS PARA LISTAR TODOS LOS VEHICULOS for e in Vehiculo.listarNameVehiculos(Vehiculo): self.vehiculosinapp.append(e) #self.vehiculosinapp.append() for i in range(len(self.vehiculosinapp)): #print(self.vehiculosinapp) #self.l.append(BoxLayout(orientation="horizontal")) #self.ids.contenedorFilas.add_widget(self.l[-1]) #al gridlayout le agrego lo boxlayout necesarios, en cada boxlayout puedo posicionar #mis tres botones. self.ids.contenedorFilas.add_widget(BoxLayout(orientation="horizontal")) for i, n in enumerate(self.ids.contenedorFilas.children): n.add_widget(BotonVehiculo(text=(self.vehiculosinapp[i].nombre))) n.add_widget(BotonUbicacion(text="ubicacion")) #Los ids son iguales y corresponden al nombre del vehiculo n.add_widget(BotonEliminar(text="Eliminar"))
def agregarRecarga(self): #obtener el nombre del vehiculo c = Creator() filejson = c.makeConfigJSON() nombreVehiculo = filejson["nameVehicule"] idVehiculo = Vehiculo.getIdvehiculo(Vehiculo, nombreVehiculo) if self.ids.precioRecarga.text=="" or self.ids.kilometrosRecarga.text=="": self.ids.datosIncompletosRecarga.text="Ingrese todos los datos" elif Tacometro.validarTacometro(Tacometro,int(self.ids.kilometrosRecarga.text), idVehiculo): self.ids.datosIncompletosRecarga.text="Esos kilometros ya fueron registrados debe ser superior" else: self.ids.datosIncompletosRecarga.text="" Recarga.makeRecarga(Recarga, nombreVehiculo,self.ids.precioRecarga.text, self.ids.kilometrosRecarga.text) box=BoxLayout(orientation="horizontal") box.add_widget(Label(text=str(time.strftime("%d/%m/%Y")))) box.add_widget(Label(text=self.ids.precioRecarga.text)) box.add_widget(Label(text=self.ids.kilometrosRecarga.text)) box.add_widget(Label(text=nombreVehiculo)) self.ids.contenedorRecargas.add_widget(box)
def enviarReporte(self): c = Creator() filejson = c.makeConfigJSON() nombreVehiculo = filejson["nameVehicule"] idVehiculo = Vehiculo.getIdvehiculo(Vehiculo, nombreVehiculo) #self.ids.correopantalla.text = filejson["mail"] import csv import smtplib import mimetypes # Importamos los módulos necesarios from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.encoders import encode_base64 fechai = 0 fechaf = -1 validarFecha = True try: fechai = datetime.strptime(self.ids.fechaInicial.text, "%d/%m/%Y").date() fechaf = datetime.strptime(self.ids.fechaFinal.text, "%d/%m/%Y").date() except: validarFecha=False #si la fecha esta mal print("entramos a la excepcion") if fechai > fechaf: self.ids.advertenciaResporte.text="fechas invalidas" elif validarFecha: self.ids.advertenciaResporte.text="" mto = Mantenimiento.getAllMtos(Mantenimiento, fechai, fechaf,idVehiculo) rec = Recarga.getAllRecargas(Recarga, fechai, fechaf, idVehiculo) f=open("reporteVehiculo.csv", "w") f.close() with open('reporteVehiculo.csv', 'w') as csvfile: spamwriter = csv.writer(csvfile, delimiter=' ', quotechar='|', quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(['Recargas del Vehiculo']) spamwriter.writerow(['Fecha', 'Precio', 'Kilometros recorridos']) for i in range(len(rec)): #spamwriter.writerow(['Fecha'+str(i)]+ ['Precio'+str(i)]+ ['Kilometros recorridos'+str(i)]) spamwriter.writerow( [[rec[i][2] ] + [ str(rec[i][1]) ] + [ str(Tacometro.getValorTacByID(Tacometro,rec[i][3])) ]]) spamwriter.writerow(['Mantenimientos del Vehiculo']) spamwriter.writerow(['Fecha', 'Precio', 'Kilometros recorridos', 'Descripcion']) for i in range(len(mto)): #spamwriter.writerow(['Fecha'+str(i)]+ ['Precio'+str(i)]+ ['Kilometros recorridos'+str(i)]) spamwriter.writerow([ [ mto[i][3] ] + [str(mto[i][1]) ] + [str(Tacometro.getValorTacByID(Tacometro,mto[i][4] )) ] + [mto[i][2] ]]) # Creamos objeto Multipart, quien será el recipiente que enviaremos msg = MIMEMultipart() msg['From']="*****@*****.**" msg['To'] = self.ids.correopantalla.text msg['Subject']="Reporte del vehiculo: " + nombreVehiculo # Adjuntamos Imagen file = open("reporteVehiculo.csv", "r") attach_image = MIMEText(file.read()) attach_image.add_header('Content-Disposition', 'attachment; filename = "reporteVehiculo.csv"') msg.attach(attach_image) # Autenticamos mailServer = smtplib.SMTP('smtp.gmail.com',587) mailServer.ehlo() mailServer.starttls() mailServer.ehlo() mailServer.login("*****@*****.**","laboratoriodesw20191") # Enviamos mailServer.sendmail("*****@*****.**", self.ids.correopantalla.text, msg.as_string()) # Cerramos conexión mailServer.close()
def crearReporte(self): validarFecha=True fechai = 0 fechaf = -1 c = Creator() filejson = c.makeConfigJSON() nombreVehiculo = filejson["nameVehicule"] idVehiculo = Vehiculo.getIdvehiculo(Vehiculo, nombreVehiculo) try: fechai = datetime.strptime(self.ids.fechaInicial.text, "%d/%m/%Y").date() fechaf = datetime.strptime(self.ids.fechaFinal.text, "%d/%m/%Y").date() except: validarFecha=False #si la fecha esta mal print("entramos a la excepcion") if self.ids.tipoReporte.text=="Tipo de reporte" or self.ids.fechaInicial.text=="" or self.ids.fechaFinal.text=="": self.ids.advertenciaResporte.text="Complete todos los datos" elif fechai > fechaf: self.ids.advertenciaResporte.text="fechas invalidas" elif validarFecha: self.ids.advertenciaResporte.text="" print("Creando reporte") if self.ids.tipoReporte.text=="Reporte de recargas": self.ids.elegirListaReporte.clear_widgets() #Se elimina toda la lista del reporte elegido anteriormente nombreColumnas=BoxLayout(size_hint_y=0.1) #Box con los nombres de cada columna scrollReportes=ScrollView() gridReportes=GridLayout(cols=1, size_hint_y=None, row_default_height=self.height*0.1) #Va a contener todas las filas del repo gridReportes.bind(minimum_height=gridReportes.setter('height')) #es para que el scroll se pueda mover. columna= Label(text="Fecha Recarga", color=(1,1,0,1)) nombreColumnas.add_widget(columna) columna= Label(text="Precio Recarga", color=(1,0,1,1)) nombreColumnas.add_widget(columna) columna= Label(text="Kilometros Recorridos", color=(0,0,1,1)) nombreColumnas.add_widget(columna)#;Recarga.getAllRecargas(Recarga, fechai, fechaf) rec = Recarga.getAllRecargas(Recarga, fechai, fechaf, idVehiculo) for i in range(len(rec)): gridReportes.add_widget(BoxLayout(orientation="horizontal")) for i, n in enumerate(gridReportes.children): print("") n.add_widget(Label(text= rec[i][2])) n.add_widget(Label(text= str(rec[i][1]))) n.add_widget(Label(text= str(Tacometro.getValorTacByID(Tacometro,rec[i][3])))) elif self.ids.tipoReporte.text=="Reporte de mantenimiento": self.ids.elegirListaReporte.clear_widgets() nombreColumnas=BoxLayout(size_hint_y=0.1) scrollReportes=ScrollView() gridReportes=GridLayout(cols=1, size_hint_y=None, row_default_height=self.height*0.1) gridReportes.bind(minimum_height=gridReportes.setter('height')) #es para que el scroll se pueda mover. columna= Label(text="Fecha Mantenimiento", color=(1,1,0,1)) nombreColumnas.add_widget(columna) columna= Label(text="Precio Mantenimiento", color=(1,0,1,1)) nombreColumnas.add_widget(columna) columna= Label(text="Kilometros Recorridos", color=(0,0,1,1)) nombreColumnas.add_widget(columna) mto = Mantenimiento.getAllMtos(Mantenimiento, fechai, fechaf,idVehiculo) for i in range(len(mto)): gridReportes.add_widget(BoxLayout(orientation="horizontal")) for i, n in enumerate(gridReportes.children): n.add_widget(Label(text= mto[i][3] )) n.add_widget(Label(text= str(mto[i][1]) )) n.add_widget(Label(text= str(Tacometro.getValorTacByID(Tacometro,mto[i][4] )))) #Creo la lista de reportes para la huella de carbono----------->DB elif self.ids.tipoReporte.text=="Reportes de huella de carbono": self.ids.elegirListaReporte.clear_widgets() nombreColumnas=BoxLayout(size_hint_y=0.1) scrollReportes=ScrollView() gridReportes=GridLayout(cols=1, size_hint_y=None, row_default_height=self.height*0.1) gridReportes.bind(minimum_height=gridReportes.setter('height')) #es para que el scroll se pueda mover. columna= Label(text="Fecha Recarga Comb", color=(1,1,0,1)) nombreColumnas.add_widget(columna) columna= Label(text="Cantidad combustible", color=(1,0,1,1)) nombreColumnas.add_widget(columna) columna= Label(text="Huella Carbono (gr)", color=(0,0,1,1)) nombreColumnas.add_widget(columna) for i in range(10): gridReportes.add_widget(BoxLayout(orientation="horizontal")) for i, n in enumerate(gridReportes.children): n.add_widget(Label(text=str(time.strftime("%d/%m/%Y")))) n.add_widget(Label(text="cantidad"+str(i))) n.add_widget(Label(text="huella"+str(i))) self.ids.elegirListaReporte.add_widget(nombreColumnas) scrollReportes.add_widget(gridReportes) self.ids.elegirListaReporte.add_widget(scrollReportes) else: self.ids.advertenciaResporte.text="No ha ingresado una fecha correcta..." validarFecha=True