Exemplo n.º 1
0
def main():
    tumsa = Tumsa(dbhost="127.0.0.1",
                  dbuser="******",
                  dbpass="******",
                  dbname="tumsadev")
    start_date = Utils.format_date(
        Utils.string_to_date("2020-10-04 06:33:00", "%Y-%m-%d %H:%M:%S") -
        timedelta(hours=5) - timedelta(minutes=40), "%Y-%m-%dT%H:%M:%S") + "Z"
    end_date = Utils.format_date(
        Utils.string_to_date("2020-10-04 18:21:00", "%Y-%m-%d %H:%M:%S") +
        timedelta(hours=5) + timedelta(minutes=40), "%Y-%m-%dT%H:%M:%S") + "Z"

    m = MZone()
    token = {
        "access_token":
        "eyJhbGciOiJSUzI1NiIsImtpZCI6IkVGMUUxMkVFOTQ1NTdBNDg5MzlCMUJBNjJFQUUxQzFBN0ZDNTY2MkQiLCJ0eXAiOiJKV1QiLCJ4NXQiOiI3eDRTN3BSVmVraVRteHVtTHE0Y0duX0ZaaTAifQ.eyJuYmYiOjE2MDE5NDkxOTksImV4cCI6MTYwMTk1Mjc5OSwiaXNzIjoiaHR0cHM6Ly9sb2dpbi5tem9uZXdlYi5uZXQiLCJhdWQiOlsiaHR0cHM6Ly9sb2dpbi5tem9uZXdlYi5uZXQvcmVzb3VyY2VzIiwibXo2LWFwaSJdLCJjbGllbnRfaWQiOiJtei1hM3RlayIsInN1YiI6IjUzYTkwNjMwLTk4OTctNGNkNS05MjJiLTM1NTZhYjI5M2UzOSIsImF1dGhfdGltZSI6MTYwMTk0OTE5OSwiaWRwIjoibG9jYWwiLCJtel91c2VybmFtZSI6IlRVTVNBLUFQSSIsIm16X3VzZXJncm91cF9pZCI6IjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCIsIm16X3NoYXJkX2NvZGUiOiJBM1RFSyIsInNjb3BlIjpbIm16X3VzZXJuYW1lIiwib3BlbmlkIiwibXo2LWFwaS5hbGwiXSwiYW1yIjpbInB3ZCJdfQ.ZHTW-sLBNFmwqUz-eSFCvleQcoXpjbFCfGJ7Yw4-vYfUV9n4WsBootTKTDeD1usHfEQRy2SGAJPdeLVVYUP27zshmY66IirUxUHAdi7i1DAcHteMlzt4lXQ9NYbRktHOdDmAoNeZm6PE8dhfIws1_NA2YjFZOd9B8EeRi7yLcoi-4wglyZ8Z3INL7tMjruSvlqtXdWnElcGaNqkpaEGtR1AJHlUjPlUldXOKocX0KRK2ZscV22xYH94Vd0MuOWFkIei9uyHprTFP2C7Xsz9-2ZSYXC12OMbbUedhVAcJeo1I0DKO60u0fc6ZeT9w41iMH-oX0S7Ilg-dJCoKlaPxlIlumD4BzTqEvZDq_72WZFHAD_QAJn5WAI3s8ta0Y7u91V1QhOvOYA0GrVXSM0MVs8b3HHHMjXQCR74cH56tLbOwxhkFUVI5UPNGbqaTvm3HKq1CusoBlpgmVvNDJomkE6n6cFop78cmFHqETNjD-UpDLJBB0n_0mQf78pi1V2h32fz5Dr5N80qCjqBX6aa89PCeCQDCD59b_nOyadzDFppaBIlfhGViXqw_YMqllvAb84sopaRkk_7vMN1AOAfCZUI16wIB-O7p3NJLoFq-7R22xT9xs5PtGy0KsFVSzmTFCzdUyrPDlehz31FmpPImJ7TnmzISyhDgJo4e8Xvgod4",
        "expires_in": 3600,
        "token_type": "Bearer",
        "valid_until": "2020-10-05 21:53:19.472393"
    }
    m.set_token(token)
    v = m.get_vehicles()
    fences = m.get_geofences(
        extra=
        "vehicle_Id eq b1772001-3173-467d-9b6c-5f97a05a4b9a and entryUtcTimestamp gt "
        + start_date + " and entryUtcTimestamp lt " + end_date,
        orderby="entryUtcTimestamp asc")
    for f in fences:
        print(f)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
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
Exemplo n.º 5
0
def create_trips():
    m = MZone()
    tumsa = Tumsa(dbhost=env_cfg["dbhost"], dbuser=db_user, dbpass=db_pass, dbname=env_cfg["dbname"])
    token = request.json["token"]
    m.set_token(token)
    camiones = request.json["camiones"].split(',')
    route = tumsa.get_ruta(request.json["ruta"])
    roles = tumsa.get_roles(request.json["ruta"])
    delay = int(request.json["delay"])
    day = request.json["day"]
    if len(roles) == len(camiones):
        i = 0
        for camion in camiones:
            vehicle = m.get_vehicles(extra="description eq '" + camion + "'")
            if len(vehicle) > 0:
                viaje = {}
                print(i)
                print(roles[i])
                viaje["priority"] = int(roles[i]["priority"])
                calc = tumsa.calc_trip(route[0], day, roles[i])
                viaje["vehicle"] = json.dumps(vehicle[0])
                viaje["start_date"] = str(calc["start_date"])
                viaje["end_date"] = str(calc["end_date"])
                viaje["trip"] = {"trip": calc["trip"]}
                viaje["rounds"] = roles[i]["rounds"]
                viaje["start_point"] = calc["start_point"]
                viaje["total_time"] = int(calc["total_time"])
                viaje["end_point"] = calc["end_point"]
                viaje["route"] = json.dumps(route[0])
                viaje["comments"] = ""
                viaje["delay"] = delay
                tumsa.insert_viaje(viaje)
                i = i + 1
        return json.dumps({"status": "ok"})
    else:
        return json.dumps({"status": "error"})
Exemplo n.º 6
0
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
Exemplo n.º 7
0
def allvehicles():
    m = MZone()
    token = request.json["token"]
    m.set_token(token)
    res = m.get_vehicles()
    return json.dumps(res)