Пример #1
0
    def POST(self):
        inp = web.input()
        try:
            wd = AgentBd.get(int(inp.get('pk')))
            wd.set(**{inp.get('name'): float(inp.get('value', 0))})
        except SQLObjectNotFound:
            return web.notfound()
        except ValueError:
            wd = AgentBd.get(int(inp.get('pk')))
            wd.set(**{inp.get('name'): inp.get('value', 0)})

        return {"Ok": "true"}
Пример #2
0
    def GET(self, table_name):
        try:
            pos = AgentBd.get(BENDUNGAN_DICT.get(table_name))
        except:
            return web.notfound()
        tgl = datetime.date.today()
        asset = Asset.select(Asset.q.table_name == table_name)
        kerusakan = Kerusakan.select(Kerusakan.q.table_name == table_name)

        rusak_list = []
        for k in kerusakan:
            rusak_list.append(k.asset.id)

        data = open('asset.csv').readlines()
        flist = []
        for item in data:
            l = item.strip().split("_")
            s = str(l[0] + " > " + l[1])
            flist.append(s)

        fflist = []
        for kategori in flist:
            if kategori not in fflist:
                fflist.append(kategori)

        return render.adm.bendungan.asset.index({
            'pos': pos,
            'tgl': tgl,
            'asset': asset,
            'data': fflist,
            'rusak_list': rusak_list
        })
Пример #3
0
 def GET(self, table_name):
     inp = web.input()
     ordering = '-waktu'
     try:
         pos = AgentBd.get(BENDUNGAN_DICT.get(table_name))
     except:
         return web.notfound()
     webinput = web.input(sampling=str(datetime.date.today()))
     tg = datetime.datetime.strptime(webinput.sampling, '%Y-%m-%d').date()
     #sql = "SELECT * FROM waduk_daily WHERE \
     #        pos_id=%s AND waktu='%s'" % (pos.id, tg)
     #rs = conn.queryAll(sql)
     if tg.month == datetime.date.today().month:
         rs = [
             r for r in WadukDaily.select(
                 WadukDaily.q.pos == pos).orderBy(ordering)
             if r.waktu.month == tg.month and r.waktu.year == tg.year
             and r.waktu.day <= tg.day
         ]
     else:
         rs = [
             r for r in WadukDaily.select(
                 WadukDaily.q.pos == pos).orderBy(ordering)
             if r.waktu.month == tg.month and r.waktu.year == tg.year
         ]
     msg = ''
     if session.has_key('err'):
         msg = session.pop('err')
     return render.adm.bendungan.keamanan({
         'bd': pos,
         'periodic': rs,
         'tanggal': tg,
         'msg': msg
     })
Пример #4
0
def bd_hari(sampling=datetime.date.today()):
    sp = datetime.date(2016, 1, 3)
    wds = AgentBd.select(AgentBd.q.AgentType == 3)
    rs = WadukDaily.select(
        AND(WadukDaily.q.waktu >= sp, WadukDaily.q.waktu <= sp)).orderBy(
            ('pos_id, waktu', ))
    for r in rs:
        print r.pos.cname, r.waktu
    return sampling
Пример #5
0
def import_rtow(file_input):
    '''Mengimport data RTOW (setahun) dari file excel
            nop1 | nop2 | des1 | des2 | ...
    tma
    outflow_q
    inflow_q
    bon_a
    bon_b


    '''
    # deteksi pemisah data TAB, ;,','
    seps = '\t_;_,_|'.split('_')
    lines = open(file_input).readlines()
    header = lines[1].strip()
    sep = None
    for s in seps:
        if len(header.split(s)) > 5:
            sep = s
            cols = header.split(s)
            numcol = len(cols)
            break
    if not sep:
        msg = 'Tidak ditemukan pemisah kolom yang valid. (' + '_'.join(seps)
        ret = dict(ok=False, msg=msg)
        return ret

    try:
        nama_bendungan = lines[0].strip().split(sep)[0]
    except IndexError:
        nama_bendungan = lines[0].strip()
    bd_names = dict([(a.table_name, a.AgentId)
                     for a in AgentBd.select(AgentBd.q.AgentType == 3)])
    if nama_bendungan not in bd_names.keys():
        ret = dict(ok=False, msg=','.join(bd_names))
        return ret
    data = []
    for i in range(len(lines) - 2):
        i += 2
        line = lines[i].strip().split(sep)
        waktu = to_date(line[0])
        val = dict(waktu=waktu, posID=bd_names.get(nama_bendungan))
        for j in (1, 2, 3, 4, 5, 6, 7, 8):
            try:
                val[cols[j]] = float(line[j].replace(',', '.'))
            except ValueError:
                val[cols[j]] = None
        data.append(val)
    ret = dict(ok=True,
               pos_id=bd_names.get(nama_bendungan),
               table_name=nama_bendungan,
               object=data)
    return ret
Пример #6
0
 def GET(self):
     inp = web.input()
     if inp.get('sampling'):
         sampling = to_date(inp.sampling)
     else:
         sampling = datetime.date.today()
     tanggal = sampling
     bdgs = AgentBd.select(AgentBd.q.AgentType == 3).orderBy('wilayah')
     poses = dict([(a.table_name, a) for a in bdgs])
     daily_bd = dict([
         (w.pos.table_name, w)
         for w in WadukDaily.select(WadukDaily.q.waktu == tanggal)
     ])
     poses = [(poses.get(p), daily_bd.get(p))
              for p in [p.table_name for p in bdgs]]
     return render.adm.bendungan.index({'poses': poses, 'tanggal': tanggal})
Пример #7
0
    def GET(self, table_name):
        inp = web.input()
        csv = inp.get('csv')
        ordering = csv and 'waktu' or '-waktu'
        try:
            pos = AgentBd.get(BENDUNGAN_DICT.get(table_name))
        except:
            return web.notfound()
        webinput = web.input(sampling=str(datetime.date.today()))
        tg = datetime.datetime.strptime(webinput.sampling, '%Y-%m-%d').date()
        #sql = "SELECT * FROM waduk_daily WHERE \
        #        pos_id=%s AND waktu='%s'" % (pos.id, tg)
        #rs = conn.queryAll(sql)
        if tg.month == datetime.date.today().month:
            rs = [
                r for r in WadukDaily.select(
                    WadukDaily.q.pos == pos).orderBy(ordering)
                if r.waktu.month == tg.month and r.waktu.year == tg.year
                and r.waktu.day <= tg.day
            ]
        else:
            rs = [
                r for r in WadukDaily.select(
                    WadukDaily.q.pos == pos).orderBy(ordering)
                if r.waktu.month == tg.month and r.waktu.year == tg.year
            ]
        if csv:

            web.header('Content-Type', 'application/cnd.ms-excel')
            web.header('Content-Disposition',
                       'attachment; filename="' + table_name + '.csv"')
            cols = "waktu,curahhujan,tma6,vol6,tma12,vol12,tma18,vol18,inflow_q,inflow_v,intake_q,intake_v,outflow_q,outflow_v,spillway_q,spillway_v,vnotch_tin1,vnotch_q1,vnotch_tin2,vnotch_q2,vnotch_tin3,vnotch_q3,a1,a2,a3,a4,a5,b1,b2,b3,b4,b5,c1,c2,c3,c4,c5".split(
                ',')
            out = ",".join(cols)
            for r in rs:
                out += "\n" + ",".join([str(getattr(r, c)) for c in cols])
                #out += "\n"
            return out
        msg = ''
        if session.has_key('err'):
            msg = session.pop('err')
        return render.adm.bendungan.show({
            'bd': pos,
            'periodic': rs,
            'tanggal': tg,
            'msg': msg
        })
Пример #8
0
    def GET(self, table_name, id=None):
        inp = web.input()
        tgl = to_date(
            inp.get('sampling',
                    datetime.date.today().strftime('%Y-%m-%d')))
        bd_id = BENDUNGAN_DICT.get(table_name)
        pos = AgentBd.get(int(bd_id))
        if id:
            kegiatan = Kegiatan.get(int(id))
            return render.adm.bendungan.kegiatan_show(kegiatan=kegiatan)
        if inp.get('sampling') and inp.get('paper'):
            sql = "SELECT k.id, k.petugas, k.uraian, f.id, f.filepath FROM \
                    kegiatan k, foto f \
                    WHERE f.obj_type='kegiatan' AND k.id=f.obj_id AND DATE(k.sampling)='%s' \
                    AND k.table_name='%s'" % (tgl.strftime('%Y-%m-%d'),
                                              table_name)
            rst = [{
                'kid': r[0],
                'p': r[1],
                'u': r[2],
                'fid': r[3],
                'f': r[4]
            } for r in conn.queryAll(sql)]
            print rst
            return render_plain.adm.bendungan.kegiatan_paper(pos, tgl, rst)

        sql = "SELECT k.petugas, DATE(k.sampling), k.uraian, k.id \
                FROM kegiatan k, foto f \
                WHERE f.obj_type='kegiatan' AND k.id=f.obj_id \
                AND k.table_name='%s' AND YEAR(k.sampling)=%s \
                AND MONTH(k.sampling)=%s \
                ORDER BY DATE(k.sampling) DESC" % (table_name, tgl.year,
                                                   tgl.month)
        rows = [r for r in conn.queryAll(sql)]
        tgls = list(set(r[1] for r in rows))
        result = dict([(t, {}) for t in tgls])
        for r in rows:
            if r[0] in result[r[1]]:
                result[r[1]][r[0]].append({'uraian': r[2], 'kid': r[3]})
            else:
                result[r[1]][r[0]] = [{'uraian': r[2], 'kid': r[3]}]
        return render.adm.bendungan.kegiatan(
            dict(pos=pos,
                 urutan_kegiatan=sorted(result, reverse=True),
                 petugas=PETUGAS_CHOICES,
                 kegiatan=result,
                 tgl=tgl))
Пример #9
0
 def GET(self, table_name):
     inp = web.input()
     bd = dict([(a.table_name, a.AgentId)
                for a in AgentBd.select(AgentBd.q.AgentType == 3)])
     if table_name not in bd.keys():
         return 'table_name: ' + table_name + ' tidak ditemukan'
     rows = export_rtow(bd.get(table_name))
     web.header('Content-Type', 'application/vnd.ms-excel')
     web.header('Content-Disposition',
                'attachment;filename=' + table_name + '.csv')
     s = table_name + '\n'
     for r in rows:
         s += '\t'.join(
             map(
                 lambda x: type(x) == datetime.datetime and x.strftime(
                     '%Y-%m-%d') or str(x), r)) + '\n'
     return s
Пример #10
0
 def POST(self, table_name):
     fi = web.input(rtow_file={})
     data = fi['rtow_file'].file.read()
     fname = '/tmp/' + table_name + '.csv'
     with open(fname, 'w') as f:
         f.write(data)
     data_in = import_rtow(fname)
     pos_id = data_in.get('pos_id')
     pos = AgentBd.get(pos_id)
     date_list = ','.join(
         ["'" + str(d.get('waktu')) + "'" for d in data_in.get('object')])
     for d in data_in.get('object'):
         try:
             wd = WadukDaily.select(
                 AND(WadukDaily.q.pos == pos,
                     WadukDaily.q.waktu == d.get('waktu')))[0]
             wd.set(**d)
         except IndexError:
             wd = WadukDaily(**d)
     return web.redirect('/adm/bendungan/rotw', absolute=True)
Пример #11
0
def import_rtow(file_input):
    '''Mengimport data RTOW (setahun) dari file excel
            nop1 | nop2 | des1 | des2 | ...
    tma
    outflow_q
    inflow_q
    bon_a
    bon_b


    '''
    lines = open(file_input).readlines()
    nama_bendungan = lines[0].strip()
    bd_names = dict([(a.table_name, a.AgentId)
                     for a in AgentBd.select(AgentBd.q.AgentType == 3)])
    if nama_bendungan not in bd_names.keys():
        ret = dict(ok=False, msg=','.join(bd_names))
        return ret
    if len(lines) != 26:
        ret = dict(ok=False, msg='Data harus dari Nop - Okt / 24 baris')
        return ret
    cols = lines[1].strip().split('\t')
    data = []
    for i in range(24):
        i += 2
        line = lines[i].split('\t')
        waktu = datetime.datetime.strptime(line[0], '%Y-%m-%d').date()
        val = dict(waktu=waktu, posID=bd_names.get(nama_bendungan))
        for j in (1, 2, 3, 4, 5, 6, 7, 8):
            try:
                val[cols[j]] = float(line[j].strip())
            except ValueError:
                val[cols[j]] = None
        data.append(val)
    ret = dict(ok=True,
               pos_id=bd_names.get(nama_bendungan),
               table_name=nama_bendungan,
               object=data)
    return ret
Пример #12
0
 def GET(self, table_name, id=None):
     kerusakan_id = id
     if kerusakan_id:
         return "Detail kerusakan dengan ID " + id
     else:
         try:
             pos = AgentBd.get(BENDUNGAN_DICT.get(table_name))
         except:
             return web.notfound()
         tgl = datetime.date.today()
         kerusakan = Kerusakan.select(Kerusakan.q.table_name == table_name)
         kf = Kerusakan
         if session.is_admin == 3:  #user petugas bendungan
             return render.adm.bendungan.kerusakan.index({
                 'pos': pos,
                 'tgl': tgl,
                 'kerusakan': kerusakan,
                 'kf': kf
             })
         elif session.is_admin == 3 and not session.table_name:  #user upb
             return render.adm.bendungan.kerusakan.index({
                 'pos': pos,
                 'tgl': tgl,
                 'kerusakan': kerusakan,
                 'kf': kf
             })
         elif session.is_admin == 4:  #user peltek
             return render_peltek.adm.bendungan.kerusakan.index({
                 'pos':
                 pos,
                 'tgl':
                 tgl,
                 'kerusakan':
                 kerusakan,
                 'kf':
                 kf
             })
Пример #13
0
    def POST(self, table_name):
        try:
            try:
                pos = [
                    a for a in AgentBd.select(AgentBd.q.AgentType == 3)
                    if a.table_name == table_name
                ][0]
            except IndexError:
                return web.notfound()
            inp = web.input()
            fields = 'curahhujan,tma,vol,inflow_q,inflow_v,intake_q,intake_v,spillway_q,spillway_v'.split(
                ',')
            koloms = 'tanggal,jam,tma'.split(',')
            form2_fields = 'tma,vol'.split(',')
            form3_fields = 'vnotch_tin1,vnotch_q1,vnotch_tin2,vnotch_q2,vnotch_tin3,vnotch_q3'.split(
                ',')
            form4_fields = 'a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4,a5,b5,c5'.split(
                ',')
            # memeriksa apakah record pada Pos dan waktu(tgl) sudah ada pada tabel 'waduk_daily'
            try:
                wd = WadukDaily.select(
                    AND(WadukDaily.q.waktu == to_date(inp.waktu),
                        WadukDaily.q.pos == pos))[0]
                is_wd_exist = True
            except IndexError:
                wd = None
                is_wd_exist = False

            # memeriksa apakah table 'tma' telah terisi dari pos dan waktu
            tmas = [
                t for t in TinggiMukaAir.select(
                    AND(TinggiMukaAir.q.agent == pos, TinggiMukaAir.q.waktu ==
                        to_date(inp.waktu)))
            ]

            if inp.tahap == 'pagi':
                obj = {}
                for f in fields:
                    if inp.get(f):
                        nilai = float(inp.get(f))
                    else:
                        nilai = None
                    if f in 'tma,vol'.split(','):
                        obj.update({f + '6': nilai})
                    else:
                        obj.update({f: nilai})
                obj.update({'pos': pos, 'waktu': to_date(inp.waktu)})
                if not is_wd_exist:
                    wd = WadukDaily(**obj)
                else:
                    wd.set(**obj)
                # Mengupdate / Insert data TinggiMukaAir
                try:
                    tma = [t for t in tmas if t.jam == '6'][0]
                    tma.set(**{'jam': '6', 'manual': obj.get('tma6')})
                    tma.syncUpdate()
                except:
                    tma = TinggiMukaAir(
                        **{
                            'agent': pos,
                            'waktu': obj.get('waktu'),
                            'jam': '6',
                            'manual': obj.get('tma6'),
                            'origin': 'web'
                        })
                    tma.syncUpdate()
            elif inp.tahap in ('siang', 'sore'):
                # jika data pagi belum ada, untuk WadukDaily perlu error
                if not is_wd_exist:
                    session[
                        'err'] = "<strong style='margin-right: 10px'>P e r h a t i a n</strong>Data TMA Pagi tidak ditemukan."
                    return web.redirect('/adm/bendungan/' + table_name +
                                        '?sampling=' +
                                        inp.waktu.replace('/', '-'),
                                        absolute=True)
                per = inp.tahap == 'siang' and '12' or '18'
                if per == '12':
                    wd.tma12 = float(inp.get('tma'))
                    wd.vol12 = float(inp.get('vol'))
                elif per == '18':
                    wd.tma18 = float(inp.get('tma'))
                    wd.vol18 = float(inp.get('vol'))

                # Mengupdate / Insert data TinggiMukaAir
                try:
                    tma = [t for t in tmas if t.jam == per][0]
                    tma.set(**{'jam': per, 'manual': float(inp.get('tma'))})
                    tma.syncUpdate()
                except:
                    tma = TinggiMukaAir(
                        **{
                            'agent': pos,
                            'waktu': to_date(inp.waktu),
                            'jam': per,
                            'manual': float(inp.get('tma')),
                            'origin': 'web'
                        })
                    tma.syncUpdate()
            elif inp.tahap == 'vnotch':  # inputan vnotch
                # jika data pagi belum ada, untuk WadukDaily perlu error
                if not is_wd_exist:
                    session[
                        'err'] = "<strong style='margin-right: 10px'>P e r h a t i a n</strong>Data TMA Pagi tidak ditemukan."
                    return web.redirect('/adm/bendungan/' + table_name +
                                        '?sampling=' +
                                        inp.waktu.replace('/', '-'),
                                        absolute=True)
                obj = {}
                for f in form3_fields:
                    if inp.get(f):
                        obj.update({f: float(inp.get(f))})
                wd.set(**obj)
            elif inp.tahap == 'piezometer':
                # jika data pagi belum ada, untuk WadukDaily perlu error
                if not is_wd_exist:
                    session[
                        'err'] = "<strong style='margin-right: 10px'>P e r h a t i a n</strong>Data TMA Pagi tidak ditemukan."
                    return web.redirect('/adm/bendungan/' + table_name +
                                        '?sampling=' +
                                        inp.waktu.replace('/', '-'),
                                        absolute=True)
                obj = {}
                for f in form4_fields:
                    if inp.get(f):
                        obj.update({f: float(inp.get(f))})
                wd.set(**obj)

            return web.redirect('/adm/bendungan/' + table_name, absolute=True)

        except AttributeError:
            try:
                bendungan = [
                    a for a in AgentBd.select(AgentBd.q.AgentType == 3)
                    if a.table_name == table_name
                ][0]
                bendungan_id = bendungan.id
                print bendungan_id
            except IndexError:
                return web.notfound()
            inp = web.input()
            # memeriksa apakah record pada bendungan_id, tanggal dan jam sudah ada pada tabel 'bendung_alert'
            if inp.tahap == 'banjir':
                try:
                    ba = BendungAlert.select(
                        AND(BendungAlert.q.tanggall == to_date(inp.tanggall),
                            BendungAlert.q.bendungan == bendungan_id,
                            BendungAlert.q.jam == inp.jam))[0]
                    print ba
                    is_ba_exist = True
                except IndexError:
                    ba = None
                    is_ba_exist = False

                if inp.tahap == 'banjir':
                    obj = {
                        'bendunganID': bendungan_id,
                        'tanggall': to_date(inp.tanggall),
                        'jam': inp.jam,
                        'tmab': float(inp.tmab),
                        'spillwayb_q': float(inp.spillwayb_q)
                    }
                    if not is_ba_exist:
                        ba = BendungAlert(**obj)
                    else:
                        ba.set(**obj)
                return web.redirect('/adm/bendungan/' + table_name,
                                    absolute=True)

            if inp.tahap == 'chterkini':
                # memeriksa apakah record pada bendungan__id, tanggal dan jam sudah ada pada tabel 'curahhujan_terkini'

                try:
                    chkini = CurahHujanTerkini.select(
                        AND(
                            CurahHujanTerkini.q.tanggall == to_date(
                                inp.tanggall),
                            CurahHujanTerkini.q.bendungan == bendungan_id,
                            CurahHujanTerkini.q.jam == inp.jam))[0]
                    print chkini
                    is_chkini_exist = True
                except IndexError:
                    chkini = None
                    is_chkini_exist = False

                if inp.tahap == 'chterkini':
                    objj = {
                        'bendunganID': bendungan_id,
                        'tanggall': to_date(inp.tanggall),
                        'jam': inp.jam,
                        'ch_terkini': float(inp.ch_terkini)
                    }
                    if not is_chkini_exist:
                        chkini = CurahHujanTerkini(**objj)
                    else:
                        chkini.set(**objj)
                return web.redirect('/adm/bendungan/' + table_name,
                                    absolute=True)
Пример #14
0
 def GET(self):
     bdgs = AgentBd.select(AgentBd.q.AgentType == 3).orderBy('wilayah')
     poses = bdgs
     return render.adm.bendungan.teknis({'poses': poses})
Пример #15
0
    def GET(self):
        inp = web.input()
        try:
            pola_operasi = open('pola_operasi.txt').read()
        except:
            pola_operasi = "Basah"
        if inp.get('periode'):
            periode = to_date(inp.periode)
        else:
            periode = datetime.date.today()
        if periode.month < 11:
            periode = datetime.date(periode.year - 1, 11,
                                    1)  # 1 Nop tahun lalu
        else:
            periode = datetime.date(periode.year, 11, 1)

        tanggal = periode
        if periode.month > 10:
            tanggal = datetime.date(tanggal.year + 1, 11, 1)

        if tanggal.year <= 2018:
            jhar = [30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31]
            rr = []
            for i in range(12):
                rr.append(periode.replace(day=1))
                rr.append(periode.replace(day=16))
                periode += datetime.timedelta(days=jhar[i])
        if tanggal.year > 2018:
            jhar = [30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31]
            rr = []
            for i in range(12):
                rr.append(periode.replace(day=15))
                rr.append(periode.replace(day=jhar[i]))
                periode += datetime.timedelta(days=jhar[i])
        sql = "SELECT pos_id, waktu, po_outflow_q, po_tma, po_outflow_v, id, po_bona, po_bonb, vol_bona, vol_bonb \
                FROM waduk_daily \
                WHERE waktu IN (%s) \
                ORDER BY pos_id, waktu" % ','.join(
            ["'" + str(i) + "'" for i in rr])
        rst = conn.queryAll(sql)
        bdgs = dict([(a.AgentId, a)
                     for a in AgentBd.select(AgentBd.q.AgentType == 3)])
        bids = list(set([r[0] for r in rst]))
        data = []
        bid = 0
        row = []
        for r in rst:
            if bid != r[0]:
                bid = r[0]
                row = [{
                    'id': r[5],
                    'tma': r[3],
                    'q': r[2],
                    'v': r[4],
                    'bona': r[6],
                    'bonb': r[7],
                    'volbona': r[8],
                    'volbonb': r[9]
                }]
                data.append((r[0], row))
                continue
            row.append({
                'id': r[5],
                'tma': r[3],
                'q': r[2],
                'v': r[4],
                'bona': r[6],
                'bonb': r[7],
                'volbona': r[8],
                'volbonb': r[9]
            })
        return render.adm.bendungan.rotw({
            'data': data,
            'bendungan': bdgs,
            'periode': rr,
            'pola_operasi': pola_operasi,
            'tanggal': tanggal
        })