Esempio n. 1
0
def kegiatan_embung_csv(embung_id):
    embung = Embung.query.get(embung_id)

    sampling, end, day = month_range(request.values.get('sampling'))
    all_kegiatan = KegiatanEmbung.query.filter(
        KegiatanEmbung.embung_id == embung_id,
        extract('month', KegiatanEmbung.sampling) == sampling.month,
        extract('year', KegiatanEmbung.sampling) == sampling.year).all()
    kegiatan = {}
    for i in range(day, 0, -1):
        sampl = datetime.datetime.strptime(
            f"{sampling.year}-{sampling.month}-{i}", "%Y-%m-%d")
        kegiatan[sampl] = []

    for keg in all_kegiatan:
        kegiatan[keg.sampling].append(keg)

    pre_csv = []
    pre_csv.append(['URAIAN KEGIATAN PETUGAS OP EMBUNG'])
    pre_csv.append(['NAMA EMBUNG', embung.nama])
    pre_csv.append([
        'LOKASI EMBUNG', f"{embung.desa} Kec. {embung.kec} Kab. {embung.kab}"
    ])
    pre_csv.append(['Bulan', sampling.strftime("%B")])
    pre_csv.append([
        'tanggal', 'bagian', 'lokasi kegiatan', 'rencana kegiatan',
        'pencapaian', 'jam mulai', 'jam selesai', 'kendala', '0%', '50%',
        '100%'
    ])
    for date, kegiat in kegiatan.items():
        if kegiat:
            for keg in kegiat:
                bag = keg.bagian.nama if keg.bagian else "Petugas OP"
                fotos = keg.fotos
                pre_csv.append([
                    date.strftime("%d %B %Y"), bag, keg.lokasi, keg.rencana,
                    keg.pencapaian, keg.mulai, keg.selesai, keg.kendala,
                    f"{request.url_root + fotos['0'].url if '0' in fotos else None}",
                    f"{request.url_root + fotos['50'].url if '50' in fotos else None}",
                    f"{request.url_root + fotos['100'].url if '100' in fotos else None}"
                ])
        else:
            pre_csv.append([
                date.strftime("%d %B %Y"), None, None, None, None, None, None,
                None, None, None
            ])
    output = io.StringIO()
    writer = csv.writer(output, delimiter='\t')
    for l in pre_csv:
        writer.writerow(l)
    output.seek(0)

    return Response(
        output,
        mimetype="text/csv",
        headers={
            "Content-Disposition":
            f"attachment;filename={embung.nama}-{sampling.strftime('%B %Y')}.csv"
        })
Esempio n. 2
0
def operasi_bendungan(bendungan_id):
    bend = Bendungan.query.get(bendungan_id)

    sampling, end, day = month_range(request.values.get('sampling'))

    manual_daily = ManualDaily.query.filter(
        ManualDaily.bendungan_id == bendungan_id,
        ManualDaily.sampling.between(sampling, end)).all()
    tma = ManualTma.query.filter(ManualTma.bendungan_id == bendungan_id,
                                 ManualTma.sampling.between(sampling,
                                                            end)).all()
    fotos = Foto.query.filter(Foto.obj_type == "manual_tma",
                              Foto.obj_id.in_([t.id for t in tma])).all()
    fotos = {f.obj_id: f for f in fotos}

    periodik = {}
    for i in range(day, 0, -1):
        sampl = datetime.datetime.strptime(
            f"{sampling.year}-{sampling.month}-{i}", "%Y-%m-%d")
        periodik[sampl] = {
            'daily': None,
            'tma': {
                '06': None,
                '12': None,
                '18': None,
                '06-foto': None,
                '12-foto': None,
                '18-foto': None
            }
        }
    for d in manual_daily:
        periodik[d.sampling]['daily'] = d
    for t in tma:
        sampl = t.sampling.replace(hour=0)
        jam = t.sampling.strftime("%H")
        periodik[sampl]['tma'][jam] = t
        periodik[sampl]['tma'][
            f'{jam}-foto'] = None if t.id not in fotos else fotos[t.id]

    return render_template('operasi/bendungan.html',
                           csrf=generate_csrf(),
                           name=bend.name,
                           bend_id=bend.id,
                           periodik=periodik,
                           sampling=end,
                           sampling_dt=sampling)
Esempio n. 3
0
def kegiatan_bendungan(bendungan_id):
    bend = Bendungan.query.get(bendungan_id)

    sampling, end, day = month_range(request.values.get('sampling'))
    all_kegiatan = Kegiatan.query.filter(
        Kegiatan.bendungan_id == bendungan_id,
        Kegiatan.sampling >= sampling.strftime("%Y-%m-%d"),
        Kegiatan.sampling <= end.strftime("%Y-%m-%d")).all()
    pemeliharaan = Pemeliharaan.query.filter(
        Pemeliharaan.bendungan_id == bendungan_id,
        Pemeliharaan.is_rencana == '0',
        Pemeliharaan.sampling >= sampling.strftime("%Y-%m-%d"),
        Pemeliharaan.sampling <= end.strftime("%Y-%m-%d")).all()
    kegiatan = {}
    for i in range(day, 0, -1):
        sampl = datetime.datetime.strptime(
            f"{sampling.year}-{sampling.month}-{i}", "%Y-%m-%d")
        kegiatan[sampl] = {
            'id': 0,
            'koordinator': [],
            'keamanan': [],
            'pemantauan': [],
            'operasi': [],
            'pemeliharaan': []
        }

    for keg in all_kegiatan:
        kegiatan[keg.sampling]['id'] = keg.id
        kegiatan[keg.sampling][keg.petugas.lower()].append(keg.uraian)
    for pem in pemeliharaan:
        kegiatan[pem.sampling]['id'] = pem.id
        kegiatan[pem.sampling]['pemeliharaan'].append(
            f"{pem.jenis}, {pem.keterangan}")

    return render_template('kegiatan/bendungan.html',
                           csrf=generate_csrf(),
                           bend_id=bend.id,
                           name=bend.name,
                           petugas=petugas,
                           kegiatan=kegiatan,
                           sampling=datetime.datetime.now() +
                           datetime.timedelta(hours=7),
                           sampling_dt=sampling)
Esempio n. 4
0
def kegiatan_embung(embung_id):
    embung = Embung.query.get(embung_id)

    if not embung:
        abort(404)

    sampling, end, day = month_range(request.values.get('sampling'))
    all_kegiatan = KegiatanEmbung.query.filter(
        KegiatanEmbung.embung_id == embung_id,
        extract('month', KegiatanEmbung.sampling) == sampling.month,
        extract('year', KegiatanEmbung.sampling) == sampling.year).all()
    all_fotos = Foto.query.filter(
        Foto.obj_type == "kegiatan_embung",
        Foto.obj_id.in_([k.id for k in all_kegiatan])).all()
    fotos = {k.id: {} for k in all_kegiatan}
    for f in all_fotos:
        length = len(f.keterangan)
        tag = f.keterangan[:length - 1]
        fotos[f.obj_id][tag] = f

    days = calendar.monthrange(sampling.year, sampling.month)[1]
    kegiatan = {}
    for i in range(days, 0, -1):
        sampl = datetime.datetime.strptime(
            f"{sampling.year}-{sampling.month}-{i}", "%Y-%m-%d")
        kegiatan[sampl] = []

    for keg in all_kegiatan:
        kegiatan[keg.sampling].append(keg)

    return render_template('kegiatan/embung/embung.html',
                           csrf=generate_csrf(),
                           emb_id=embung.id,
                           name=embung.nama,
                           bagian=embung.bagian,
                           kegiatan=kegiatan,
                           fotos=fotos,
                           sampling=datetime.datetime.now() +
                           datetime.timedelta(hours=7),
                           sampling_dt=sampling)
Esempio n. 5
0
def piket_bendungan(bendungan_id):
    bend = Bendungan.query.get(bendungan_id)

    sampling = request.values.get('sampling')
    now = utc2wib(datetime.datetime.now())
    sampling = sampling or now.strftime("%Y-%m-%d")
    start, end, days = month_range(sampling)
    # print(start, end, days)

    piket_banjir_query = PiketBanjir.query.filter(
                                        PiketBanjir.obj_type == 'bendungan',
                                        PiketBanjir.obj_id == bendungan_id,
                                        PiketBanjir.sampling.between(start, end)
                                    ).all()
    piket_banjir = {}
    for piket in piket_banjir_query:
        piket_banjir[piket.sampling] = piket

    reports = []
    relay = end - datetime.timedelta(hours=23)
    while True:
        if relay < start:
            break

        reports.append({
            'sampling': relay,
            'piket_banjir': piket_banjir[relay] if relay in piket_banjir else None
        })
        relay -= datetime.timedelta(days=1)

    sampling = datetime.datetime.strptime(sampling, "%Y-%m-%d")
    petugas = Petugas.query.filter(Petugas.bendungan_id==bendungan_id).order_by(Petugas.id).all()

    return render_template('piket/bendungan.html',
                            csrf=generate_csrf(),
                            sampling=sampling,
                            now=now,
                            bend=bend,
                            reports=reports,
                            petugas=petugas)
Esempio n. 6
0
def operasi_embung(embung_id):
    emb = Embung.query.get(embung_id)

    if not emb:
        abort(404)

    sampling, end, day = month_range(request.values.get('sampling'))

    manual_daily = ManualDailyEmbung.query.filter(
        ManualDailyEmbung.embung_id == embung_id,
        ManualDailyEmbung.sampling.between(sampling, end)).all()
    tma = ManualTmaEmbung.query.filter(
        ManualTmaEmbung.embung_id == embung_id,
        ManualTmaEmbung.sampling.between(sampling, end)).all()

    periodik = {}
    for i in range(day, 0, -1):
        sampl = datetime.datetime.strptime(
            f"{sampling.year}-{sampling.month}-{i}", "%Y-%m-%d")
        periodik[sampl] = {
            'daily': None,
            'tma': {
                '06': None,
                '12': None,
                '18': None
            }
        }
    for d in manual_daily:
        periodik[d.sampling]['daily'] = d
    for t in tma:
        sampl = t.sampling.replace(hour=0)
        jam = t.sampling.strftime("%H")
        periodik[sampl]['tma'][jam] = t

    return render_template('operasi/embung.html',
                           csrf=generate_csrf(),
                           embung=emb,
                           sampling=end,
                           sampling_dt=sampling,
                           periodik=periodik)