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 })
def post_waduk_daily(self, data): data["obj"]["waktu"] = datetime.datetime.strptime( data["obj"]["waktu"], "%Y-%m-%d") try: wd = WadukDaily.selectBy(posID=data["obj"]["posID"], waktu=data["obj"]["waktu"])[0] wd.elevasi = data["obj"]["elevasi"] wd.volume = data["obj"]["volume"] wd.rembesan = data["obj"]["rembesan"] wd.curahhujan = data["obj"]["curahhujan"] wd.mtime = datetime.datetime.now() except IndexError: WadukDaily(**(data["obj"]))
def GET(self): '''''' web.header('Content-Type', 'application/json') web.header('Access-Control-Allow-Origin', '*') inp = web.input() sampling = inp.get('sampling') fields = 'curahhujan,tma6,vol6,tma12,vol12,tma18,vol18,inflow_q,inflow_v,intake_q,intake_v,spillway_q,spillway_v,vnotch_tin1,vnotch_q1,vnotch_tin2,vnotch_q2,vnotch_tin3,vnotch_q3,a1,b1,c1,a2,b2,c2,a3,b3,c3,a4,b4,c4,a5,b5,c5'.split(',') n = datetime.datetime.now() waktu = datetime.datetime(n.year, n.month, n.day) if sampling: d = to_date(sampling) waktu = datetime.datetime(d.year, d.month, d.day) wds = [d for d in WadukDaily.select(WadukDaily.q.waktu==waktu)] out = [] for d in wds: row = dict([(a, d.sqlmeta.asDict().get(a)) for a in fields]) row.update({'sampling': str(d.waktu), 'name': d.pos.table_name}) if d.pos and d.pos.prima_id: sql = "SELECT CONCAT(SamplingDate, ' ', SamplingTime) \ AS sampling, WLevel * 0.01 \ FROM %s \ WHERE CONCAT(SamplingDate, ' ', SamplingTime) <= NOW() \ ORDER BY SamplingDate DESC, SamplingTime DESC \ LIMIT 0, 1" % d.pos.table_name rst = conn.queryAll(sql) if rst: row.update({'sampling_wlevel': rst[0][0], 'wlevel': float(rst[0][1] or 0)}) out.append(row) return json.dumps(out)
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 })
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
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)
def GET(self, bd): '''Tampilkan data Piezometer untuk lokasi "bd" Default tampilkan data terakhir, kecuali ada sampling yang diinginkan Menampilkan data selama _bulan_terpilih_ ''' inp = web.input() sampling = inp.get('sampling', None) bendungans = dict( [a.strip().split() for a in open('agent_table.txt').readlines()]) id_bdg = bendungans.get(bd) if not id_bdg: return web.notfound() sql = "SELECT MAX(waktu) FROM waduk_daily WHERE pos_id=%s" % id_bdg rst = Agent._connection.queryAll(sql) if not sampling: sampling = rst[0] sampling = sampling and to_date(sampling) or None pos = Agent.get(id_bdg) if sampling.month == datetime.date.today().month: wds = [ wd for wd in WadukDaily.select( WadukDaily.q.pos == pos).orderBy('-waktu') if wd.waktu.year == sampling.year and wd.waktu.month == sampling.month ] else: wds = [ wd for wd in WadukDaily.select(WadukDaily.q.pos == pos) if wd.waktu.year == sampling.year and wd.waktu.month == sampling.month and wd.waktu.day <= datetime.date.today().day ] return render.bendungan.piezometer({ 'pos': pos, 'bulan': sampling, 'wds': wds })
def GET(self, bd): if bd[3:] in NO_VNOTCH: return render.bendungan.vnotch_fail({'bd': bd, 'no_vnotch': True}) if bd[3:] in FAIL_VNOTCH: return render.bendungan.vnotch_fail({ 'bd': bd, 'fail_vnotch': True }) inp = web.input() sampling = inp.get('sampling') sampling = sampling and to_date(sampling) or datetime.date.today() pos = [ a for a in Agent.select(Agent.q.AgentType == 3) if a.table_name == bd ][0] if sampling.month == datetime.date.today().month: wds = [ wd for wd in WadukDaily.select( WadukDaily.q.pos == pos).orderBy('waktu') if wd.waktu.year == sampling.year and wd.waktu.month == sampling.month ] else: wds = [ wd for wd in WadukDaily.select(WadukDaily.q.pos == pos) if wd.waktu.year == sampling.year and wd.waktu.month == sampling.month and wd.waktu.day <= datetime.date.today().day ] return render.bendungan.vnotch({ 'pos': pos, 'bulan': sampling, 'wds': wds })
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})
def GET(self, oid): try: bendung = Agent.get(int(oid)) except SQLObjectNotFound: return web.notfound() dari = datetime.date(2017, 3, 1) hingga = datetime.date(2017, 3, 31) meta = { "dari": dari, "hingga": hingga, "daily": WadukDaily.select( AND(WadukDaily.q.pos == bendung, WadukDaily.q.waktu >= dari, WadukDaily.q.waktu <= hingga)) } return render.bendungan.pemantauan(bendung, meta)
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)
def POST(self): inp = web.input() try: wd = WadukDaily.get(int(inp.get('pk'))) wd.set(**{inp.get('name'): float(inp.get('value', 0))}) wd = wd.sqlmeta.asDict() waktu = wd['waktu'] tgl = waktu.strftime('%Y-%m-%d') id = wd['posID'] tma6 = wd['tma6'] tma12 = wd['tma12'] tma18 = wd['tma18'] # memeriksa apakah table 'tma' telah terisi dari pos dan waktu if tma6: tmas = [ t for t in TinggiMukaAir.select( AND(TinggiMukaAir.q.agent == id, TinggiMukaAir.q.waktu == tgl, TinggiMukaAir.q.jam == '6')) ] if tmas == []: TinggiMukaAir( **{ 'agent': id, 'waktu': waktu, 'jam': '6', 'manual': tma6, 'origin': 'web' }) if tmas: tma = [t for t in tmas if t.jam == '6'][0] tma.set(**{'jam': '6', 'manual': tma6}) tma.syncUpdate() if tma12: tmas = [ t for t in TinggiMukaAir.select( AND(TinggiMukaAir.q.agent == id, TinggiMukaAir.q.waktu == tgl, TinggiMukaAir.q.jam == '12')) ] if tmas == []: TinggiMukaAir( **{ 'agent': id, 'waktu': waktu, 'jam': '12', 'manual': tma12, 'origin': 'web' }) if tmas: tma = [t for t in tmas if t.jam == '12'][0] tma.set(**{'jam': '12', 'manual': tma12}) tma.syncUpdate() if tma18: tmas = [ t for t in TinggiMukaAir.select( AND(TinggiMukaAir.q.agent == id, TinggiMukaAir.q.waktu == tgl, TinggiMukaAir.q.jam == '18')) ] if tmas == []: TinggiMukaAir( **{ 'agent': id, 'waktu': waktu, 'jam': '18', 'manual': tma18, 'origin': 'web' }) if tmas: tma = [t for t in tmas if t.jam == '18'][0] tma.set(**{'jam': '18', 'manual': tma18}) tma.syncUpdate() except SQLObjectNotFound: return web.notfound() return {"Ok": "true"}
#f = open('/tmp/out.txt', 'w') for l in lines: (n, d, data) = l.strip().split('\t', 2) # print n b = 11 waktu = datetime.date(th, b, 1) pows = data.strip().split('\t') for i in range(len(pows)): if not i % 2: while waktu.day <= 15: sql = "SELECT id FROM waduk_daily WHERE pos_id=%s AND waktu='%s'" % ( dict_agent[n], waktu) rst = conn.queryAll(sql) if rst: wd = WadukDaily.get(rst[0][0]) print wd.waktu, n wd.po_outflow_q = float(pows[i]) #print rst else: wd = WadukDaily(**dict(pos=dict_agent[n], waktu=waktu, po_outflow_q=float(pows[i]))) print n, waktu #print dict_agent[n], n, waktu, pows[i] waktu += datetime.timedelta(days=1) else: while waktu.day != 1: sql = "SELECT id FROM waduk_daily WHERE pos_id=%s AND waktu='%s'" % ( dict_agent[n], waktu) rst = conn.queryAll(sql)
def GET(self, oid): try: bendung = Agent.get(int(oid)) except SQLObjectNotFound: return web.notfound() inp = web.input() if inp.get('periode'): periode = to_date(inp.periode) else: periode = datetime.date.today() year = datetime.date.today().year if periode.month < 11 and periode.year == year: periode = datetime.date(periode.year - 1, 11, 1) # 1 Nop tahun lalu year = datetime.date.today().year start = datetime.date(year=year - 1, month=11, day=1) if periode.month > 10 and periode.year == year: periode = datetime.date(periode.year, 11, 1) # 1 Nop tahun lalu year = datetime.date.today().year + 1 start = datetime.date(year=year - 1, month=11, day=1) if periode.month < 11 and periode.year > year: periode = datetime.date(periode.year - 1, 11, 1) year = datetime.date.today().year + 1 start = datetime.date(year=year - 1, month=11, day=1) if periode.month > 10 and periode.year > year: periode = datetime.date(periode.year, 11, 1) year = datetime.date.today().year start = datetime.date(year=year - 1, month=11, day=1) if periode.month < 11 and periode.year < year: periode = datetime.date(periode.year - 1, 11, 1) year = datetime.date.today().year + 1 start = datetime.date(year=year - 1, month=11, day=1) if periode.month > 10 and periode.year < year: periode = datetime.date(periode.year, 11, 1) year = datetime.date.today().year start = datetime.date(year=year - 1, month=11, day=1) #print start oneday = datetime.timedelta(days=1) oneweek = datetime.timedelta(days=7) while start.weekday() != 0: start += oneday days = [] while start.year <= year: days.append(start.strftime("%Y-%m-%d")) start += oneweek if start.month == 11 and start.year == year: break #print days sql = "SELECT waktu, a1, b1, c1, a2, b2, c2, a3, b3, c3, a4, b4, c4, a5, b5, c5, vnotch_q1, vnotch_q2, vnotch_q3, vnotch_tin1, vnotch_tin2, vnotch_tin3 \ FROM waduk_daily \ WHERE waktu IN (%s) AND pos_id=%s \ ORDER BY waktu" % (','.join(["'" + str(i) + "'" for i in days]), oid) rst2 = Agent._connection.queryAll(sql) #-----menambahkan nilai curah hujan keesokan hari nya(manipulasi database hujan)------ j = [] for f in rst2: j.append(f[0]) day_ch = [] for dch in j: d_ch = dch + datetime.timedelta(days=1) day_ch.append(d_ch) c_h = [] for a in day_ch: wd = WadukDaily.select( AND(WadukDaily.q.waktu == a, WadukDaily.q.pos == oid)) try: wdch = wd[0].curahhujan except IndexError: wdch = None c_h.append(wdch) z = [] for b, d in zip(rst2, c_h): z.append((b, d)) #print rst2 #periode = datetime.date.today() #periode = datetime.date(periode.year - 1, 11, 1) # 1 Nop tahun lalu 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 waktu, po_tma, po_inflow_q, po_inflow_v, \ po_outflow_q, po_outflow_v, \ tma6, vol6, inflow_q, inflow_v, intake_q, intake_v, po_bona, po_bonb, vol_bona, vol_bonb \ FROM waduk_daily \ WHERE waktu IN (%s) AND pos_id=%s \ ORDER BY waktu" % (','.join(["'" + str(i) + "'" for i in rr]), oid) rst1 = Agent._connection.queryAll(sql) meta = { 'rst1': rst1, 'rst2': z, 'dari': periode, 'hingga': periode, 'tanggal': tanggal } return render.bendungan.keamanan.vnotchh(bendung, meta)