def vehicles(): m = MZone() token = request.json["token"] m.set_token(token) search = request.json["search"] user = m.current_user() res = m.get_vehicles(extra="contains(registration,'"+search+"') or contains(unit_Description,'"+search+ "') or contains(description,'"+search+"')") return json.dumps(res)
def login(): username = request.form['username'] password = request.form['password'] m = MZone(username, password, env_cfg["mzone_secret"], "mz-a3tek") m.gettoken() res = dict() if m.check_token(): res = m.current_user() res["token"] = m.get_token() res["perfil"] = json.loads(res["phoneHome"])["perfil"] return res
def viajes(): m = MZone() viajes = [] token = request.json["token"] day = request.json["date"] m.set_token(token) user = m.current_user() perfil = json.loads(user["phoneHome"])["perfil"] vehicles = [v['id'] for v in m.get_vehicles()] tumsa = Tumsa(dbhost=env_cfg["dbhost"], dbuser=db_user, dbpass=db_pass, dbname=env_cfg["dbname"]) trips = tumsa.get_day_trips(day) if perfil != "admin": viajes = list(filter(lambda d: d['vehicle']["id"] in vehicles, trips)) else: viajes = trips return json.dumps(viajes)
def dailyreport2(): tumsa = Tumsa(dbhost=env_cfg["dbhost"], dbuser=db_user, dbpass=db_pass, dbname=env_cfg["dbname"], UTC=UTC) today = Utils.format_date(Utils.datetime_zone(datetime.now(), "America/Mexico_City"), '%Y-%m-%d') route = request.json["route"] token = request.json["token"] viajes = [] delay = 1 m = MZone() m.set_token(token) user = m.current_user() perfil = json.loads(user["phoneHome"])["perfil"] vehicles = [v['id'] for v in m.get_vehicles()] trips = tumsa.get_day_trips(today, route) print(trips) if perfil != "admin": viajes = list(filter(lambda d: d['vehicle']["id"] in vehicles, trips)) else: viajes = trips viajes = sorted(viajes, key=lambda i: i['priority']) pages = len(viajes) if pages > 0: pdf = HTML2PDF() for viaje in viajes: pdf = tumsa.get_pdf_report(pdf, viaje, token, pages=pages) else: pdf = PDFEmpty() pdf.add_page(orientation='L') pdf.ln(10) pdf.set_font('Arial', '', 25) pdf.cell(300, 50, "NO HAY VIAJES EN ESTE REPORTE", 0, 0, 'C') pdf.output('reporteDiario.pdf') pdf2 = open('reporteDiario.pdf') response = Response(pdf2.read(), mimetype="application/pdf", headers={"Content-disposition": "attachment; filename=reporteDiario.pdf"}) pdf2.close() os.remove('reporteDiario.pdf') return response
def dayreport(): pdf = HTML2PDF() tumsa = Tumsa(dbhost=env_cfg["dbhost"], dbuser=db_user, dbpass=db_pass, dbname=env_cfg["dbname"]) day = request.json["date"] route = request.json["route"] viajes = [] m = MZone() token = request.json["token"] m.set_token(token) user = m.current_user() perfil = json.loads(user["phoneHome"])["perfil"] vehicles = [v['id'] for v in m.get_vehicles()] trips = tumsa.get_day_trips(day, route=route) if perfil != "admin": viajes = list(filter(lambda d: d['vehicle']["id"] in vehicles, trips)) else: viajes = trips pages = len(viajes) for viaje in viajes: try: delay = int(viaje["delay"]) start_date = Utils.format_date(Utils.string_to_date(viaje["start_date"], "%Y-%m-%d %H:%M:%S") - timedelta(hours=UTC) - timedelta(minutes=40), "%Y-%m-%dT%H:%M:%S") + "Z" end_date = Utils.format_date(Utils.string_to_date(viaje["end_date"], "%Y-%m-%d %H:%M:%S") + timedelta(hours=UTC) + timedelta(minutes=40), "%Y-%m-%dT%H:%M:%S") + "Z" m.set_token(token) pdf.set_data(route=viaje["route"]["name"], vehicle=viaje["vehicle"]["description"], start_date=viaje["start_date"], tolerancia=delay, total_pages=pages) pdf.add_page(orientation='L') epw = pdf.w - 2 * pdf.l_margin fences = m.get_geofences( extra="vehicle_Id eq " + viaje["vehicle"]["id"] + " and entryUtcTimestamp gt " + start_date + " and entryUtcTimestamp lt " + end_date, orderby="entryUtcTimestamp asc") df = pd.DataFrame(fences) all = [[] for i in range(0, viaje["rounds"])] head = [] for he in viaje["route"]["points"]["places"]: head.append(he["description"]) trips = [] if "trip" in viaje["trip"]: trips = viaje["trip"]["trip"] else: trips = viaje["trip"] for place in trips: calc = {} calc["place_Id"] = place["id"] calc["description"] = place["description"] calc["estimated"] = place["hour"] calc["real"] = "" calc["real_hour"] = "" calc["delay"] = 0 calc["check"] = 0 calc["estimated_hour"] = "" calc["color"] = "black" fence = [] if place["hour"] != "": calc["estimated_hour"] = Utils.format_date(Utils.string_to_date(place["hour"], "%Y-%m-%d %H:%M:%S"), "%H:%M") start_date = Utils.format_date(Utils.string_to_date(place["hour"], "%Y-%m-%d %H:%M:%S") + timedelta(hours=UTC) - timedelta(minutes=30), "%Y-%m-%dT%H:%M:%S") + "Z" end_date = Utils.format_date(Utils.string_to_date(place["hour"], "%Y-%m-%d %H:%M:%S") + timedelta(hours=UTC) + timedelta(minutes=30), "%Y-%m-%dT%H:%M:%S") + "Z" if "place_Id" in df: row = df[df["place_Id"] == calc["place_Id"]] row2 = row[row["entryUtcTimestamp"] >= start_date] fence = row2[row2["entryUtcTimestamp"] <= end_date].to_dict(orient='records') if len(fence) > 0: real = Utils.string_to_date(fence[0]["entryUtcTimestamp"], "%Y-%m-%dT%H:%M:%SZ") - timedelta( hours=UTC) estimated = Utils.string_to_date(calc["estimated"], "%Y-%m-%d %H:%M:%S") calc["real"] = Utils.format_date(real, "%Y-%m-%d %H:%M:%S") calc["real_hour"] = Utils.format_date(real, "%H:%M") real_hour = Utils.string_to_date(Utils.format_date(real, "%Y-%m-%d %H:%M") + ":00", "%Y-%m-%d %H:%M:%S") diff = int((estimated - real_hour).total_seconds() / 60) if real_hour < (estimated - timedelta(minutes=delay)): calc["delay"] = abs(diff - delay) calc["color"] = "blue" else: if real_hour > (estimated + timedelta(minutes=delay)): calc["delay"] = abs(diff + delay) calc["color"] = "red" else: calc["delay"] = diff calc["color"] = "black" calc["check"] = 1 all[int(place["round"]) - 1].append(calc) col_width = epw / (len(head) + 1) pdf.set_font('Arial', 'B', 8) th = pdf.font_size pdf.set_fill_color(234, 230, 230) for data in head: pdf.cell(col_width, 2 * th, data, border=1, fill=True, align='C') head.append("ADNTO") head.append("RTRSO") col_width_f = 12 pdf.cell(col_width_f, 2 * th, "ADNTO", border=1, fill=True, align='C') pdf.cell(col_width_f, 2 * th, "RTRSO", border=1, fill=True, align='C') pdf.set_font('Arial', '', 7) pdf.ln(2 * th) th = pdf.font_size total_adelanto = 0 total_retraso = 0 for vuelta in all: atraso = 0 adelanto = 0 pos = -1 for point in vuelta: pos += 1 if point["color"] == "red": if pos != len(vuelta) - 1: atraso = atraso + int(point["delay"]) elif point["color"] == "blue": pdf.set_text_color(0, 0, 255) if pos != len(vuelta) - 1: adelanto = adelanto + int(point["delay"]) else: pdf.set_text_color(0, 0, 0) if point["check"] == 1: pdf.set_text_color(0, 0, 0) pdf.cell(col_width / 2, 2 * th, point["estimated_hour"], border=1, align='C') if point["color"] == "red": pdf.set_text_color(255, 0, 0) elif point["color"] == "blue": pdf.set_text_color(0, 0, 255) pdf.cell(col_width / 2, 2 * th, " " + point["real_hour"] + "(" + str(point["delay"]) + ")", border=1, align='C') else: pdf.cell(col_width / 2, 2 * th, point["estimated_hour"], border=1, align='C') pdf.cell(col_width / 2, 2 * th, "S/CHK", border=1, align='C') total_adelanto = total_adelanto + adelanto total_retraso = total_retraso + atraso pdf.set_text_color(0, 0, 255) pdf.cell(col_width_f, 2 * th, str(adelanto), border=1, align='C') pdf.set_text_color(255, 0, 0) pdf.cell(col_width_f, 2 * th, str(atraso), border=1, align='C') pdf.ln(2 * th) pdf.set_text_color(0, 0, 0) for i in head[:-2]: pdf.cell(col_width, 2 * th, " - ", border=1, fill=True, align='C') pdf.set_text_color(0, 0, 255) pdf.cell(col_width_f, 2 * th, str(total_adelanto), border=1, fill=True, align='C') pdf.set_text_color(255, 0, 0) pdf.cell(col_width_f, 2 * th, str(total_retraso), border=1, fill=True, align='C') pdf.ln(10) pdf.ln(10) pdf.set_text_color(0, 0, 0) # pdf.cell(50, 10, 'COMENTARIOS: ', 0, 0, 'L') pdf.ln(10) pdf.set_font('Arial', '', 15) if not viaje["comments"] or len(viaje["comments"]) < 1 or viaje["comments"] == "None": viaje["comments"] = "" pdf.cell(200, 10, viaje["comments"], 0, 0, 'L') except Exception as e: print("Can't create a report for this trip, check the log:") print(e) pdf.output(day+'.pdf') pdf2 = open(day+'.pdf') response = Response(pdf2.read(), mimetype="application/pdf", headers={"Content-disposition": "attachment; filename="+day+'.pdf'}) pdf2.close() os.remove(day+'.pdf') return response