commit 52420bbf60e935faa61148491565d93fee784a81
parent 3f0219aeca1414a794f0429550dc4c0273a26adf
Author: rob <rob@tarina.org>
Date: Tue, 7 Mar 2023 20:28:46 +0200
myky nytt
Diffstat:
8 files changed, 236 insertions(+), 47 deletions(-)
diff --git a/public_html/html/admin.html b/public_html/html/admin.html
@@ -1,17 +1,60 @@
-$def with (anslagstavla, saysomething)
+$def with (anslagstavla, saysomething, bokningar, doordebug, str, log, getDorrkoduser,roskis)
<div id="container">
<div id="default">
<br>
<h1>Bygdis.fi</h1>
<a href="/event">Event</a> | <a href="/protokoll">Protokoll</a> | <a href="/static/mlinvoice">Fakturera</a> | <a href="/logout">Logga ut</a><br>
- <a href="/bilder">Byyns fotoalbum</a> | <a href="/dorrkoder">Dörrkoder</a>
+ <a href="/bilder">Byyns fotoalbum</a> | <a href="/dorrkoder">Dörrkoder</a> | <a href="/boka">Boka</a>
<br>
+ <br>
+ $if doordebug.doorstate == 'False':
+ Dörren är stängd. <br>
+ $doordebug.datum.strftime('%d-%m-%y %H:%M')
+ <br>
+ Senaste i dörrloggen<br>
+ $for i in log:
+ $i.datum.strftime('%d-%m-%y %H:%M')
+ $i.dorrkod
+ $getDorrkoduser(i.dorrkod)
+ <br>
+ <br>
+ <a href="/admin?emptytrash=now">Skicka efter roskis tömning</a> <br>
+ Senast skickat: $roskis.datum.strftime('%d-%m-%y %H:%M')
+
+ <h2>bokningar</h2>
+ $for i in bokningar:
+ <div class="anslagstavla" id="$i.bokningshash">
+ <h3>$i.datumtid[:-8]</h3>
+ <b>$i.namn</b><br>
+ evenemang: $i.event <br>
+ $i.boka<br>
+ epost: $i.epost <br>
+ tfn: $i.telefon <br>
+ villkor godkända: $i.villkor <br>
+ $i.privat <br><br>
+ <a href="/admin?approve=$i.id" method="post">Godkänn</a> |
+ <a href="/boka?id=$i.bokningshash">Ändra</a> |
+ <a href="/admin?sendrules=$i.id">Skicka regler</a> |
+ <a href="/admin?fakturera=$i.id">Fakturera</a> |
+ <a href="/admin?doorcode=$i.id">Skicka dörrkod</a> |
+ <a href="/admin?remove=$i.id">Radera</a>
+ <br>
+ <br>
+ status:
+ $if i.approved:
+ godkändes $i.approved och lades till i event
+ $if i.doorcode:
+ dörrkod $i.doorcode har skickats
+ $if i.faktura:
+ faktura har skickats $i.faktura
+ </div>
<div class="anslagstavla">
<h4>Säg någå</h4>
<form method="POST">
$:saysomething.render()
</form>
</div>
+
$for i in anslagstavla:
<div class=anslagstavla>
<h3>$i.datumtid[8:10] $i.datumtid[5:7] kl. $i.datumtid[10:16]</h3>
diff --git a/public_html/html/base.html b/public_html/html/base.html
@@ -5,7 +5,7 @@ $def with (content)
<title>Hommansby Ungdomsförening</title>
<meta name="description" content="Hommansby Ungdomsförening. Bygdegården." />
<meta name="viewport" content="width=device-width; initial-scale=1.0;">
- <link rel="stylesheet" href="/static/leipuri.css" type="text/css" rel="stylesheet"/>
+ <link rel="stylesheet" href="/static/leipuri.css?v=123" type="text/css" rel="stylesheet"/>
<meta name="google-site-verification" content="88dInqkR1qhmPAMVnlopcopq6t_5-6RQ5_VEl5ja6GA" />
</HEAD>
<body>
diff --git a/public_html/html/boka.html b/public_html/html/boka.html
@@ -0,0 +1,49 @@
+$def with (boka)
+<div id="container">
+<div id="default">
+<h2>Boka Bygdegården</h2>
+<pre>
+<b>Villkor och regler.</b>
+
+1. Max 230 personer får vistas samtidigt i lokalen.
+
+2. Rökning förbjuden inomhus. Ute på gården intill ingången finns kärl för fimpar.
+
+3. Fester kräver uppvisande av nöjestillstånd. Undantag är familjefester som tex. 50-årskalas, bröllop och dop där inget nöjestillstånd krävs.
+
+4. Den som hyr lokalen ansvarar för att lokalen och gårdsplanen är städad senast dagen efter tillställningen.
+
+<b>Städregler</b>
+
+1. Bord och stolar torkas och placeras på samma sätt som vid uthyrning av lokalen.
+
+2. Kökets arbetsytor torkas.
+
+3. Golven sopas med borste.
+
+4. Golvet i köket, serveringrummet, hallen och toaletter skall våttorkas.
+
+<u>5. Salsgolvet och scenen tvättas med lätt fuktad trasa!</u>
+
+6. Sopor sorteras i paff, glas och metall som förs till återvinningkärlen på gårdsplanen. Övriga sopor förs till sopkärlet vid köksingången.
+
+<b>Övriga villkor</b>
+
+1. Värmepumparnas inställningar skall sättas till ursprunglit läge efter användning.
+
+2. Eventuella skador på lokalen eller lösöret meddelas till lokalens bokningsansvariga (tel.0447624040) senast följande dag och skadorna ersättas till sitt fulla pris på räkning.
+
+3. Tillställningar som avbokas två veckor före tillställningen faktureras inte. Tillställningar som avbokas senare än två veckor före tillställningen faktureras till halva priset. Oavbokade tilställningar faktureras till fullt pris.
+
+4. Ifall lokalen lämnas ostädad, faktureras hyresgästen en städavgift. Denna avgift beror på städningens omfattning och fastställs enligt rådande avtal med städfirman som föreningen anlitar.
+</pre>
+<h2>Boknings formulär</h2>
+<div id="addevent">
+<form method="POST">
+$:boka.render()
+</form>
+</div>
+<b><p></p></b>
+</div>
+</div>
+</div>
diff --git a/public_html/html/dorrkoder.html b/public_html/html/dorrkoder.html
@@ -2,26 +2,24 @@ $def with (dorrkoder, log, getDorrkoduser)
<br>
<h1>Bygdis.fi</h1>
+<a href="/admin"><<-----tibaks</a>
<h2>Dörrkoder</h2>
<a href="/nydorrkod">Lägg till</a>
-<table style="max-width:800px">
+<br>
+<br>
$for i in dorrkoder:
- <tr>
- <th>$i.dorrkod</th>
- <th>$i.name</th>
- <th>$i.mail</th>
- <th>$i.datum.strftime('%d-%m-%y %H:%M')</th>
- <th><form action="/dorrkoder/$i.id" method="post"><input type="submit" value="radera"></form></th>
- <th><form action="/dorrkoder/$i.id" method="post"><input type="submit" value="uppdatera"></form></th>
- </tr>
+ <b>$i.dorrkod</b> <u>$i.name</u> | $i.mail | $i.datum.strftime('%d-%m-%y %H:%M') | <a href="/dorrkoder?radera=$i.id" >radera</a> |
+ <a href="/dorrkoder?uppdatera=$i.id">uppdatera</a>
+ <a href="/dorrkoder?fakturera=$i.id">fakturera</a>
+ <hr>
+ <br>
</table>
-<h2>Logg</h2>
-<table style="max-width:800px">
+<h2>Dörr logg</h2>
+<br>
+Senaste i dörrloggen<br>
$for i in log:
- <tr>
- <th>$i.datum.strftime('%d-%m-%y %H:%M')</th>
- <th>$i.dorrkod</th>
- <th>$getDorrkoduser(i.dorrkod)</th>
- </tr>
-</table>
-
+ $i.datum.strftime('%d-%m-%y %H:%M')
+ $i.dorrkod
+ $getDorrkoduser(i.dorrkod)
+ <br>
+
diff --git a/public_html/html/event.html b/public_html/html/event.html
@@ -8,7 +8,7 @@ $var upcomingevents = upcomingevents
<a href="/admin">Tillbaka</a> | <a href="/addevent">Lägg till</a> | <a href="/logout">Logga ut</a>
$for i in upcomingevents:
<div id=event>
- <h4>$i.event</h4>$i.veckodag $i.datumtid[8:10] $i.datumtid[5:7] kl. $i.datumtid[10:16] $i.admin <br> $i.info<a href="/addevent?id=$i.id">Ändra/Muuta</a> <a href="/removeevent/$i.id" method="post">Delete</a>
+ <h4>$i.event</h4>$i.veckodag $i.datumtid[8:10] $i.datumtid[5:7] kl. $i.datumtid[10:16] $i.admin <br> $i.info <br><a href="/addevent?id=$i.id">Ändra/Muuta</a> <a href="/addevent?id=$i.id©event=$i.id">Kopiera/Kopio</a> <a href="/removeevent/$i.id" method="post">Delete</a>
</div>
</div>
</div>
diff --git a/public_html/html/index.html b/public_html/html/index.html
@@ -7,7 +7,8 @@ $if displayname != '':
$if displayname == '':
<b><a href="/login">Logga in / kirjaudu sisään </a></b>
<br>
-<h1>Bygdis.fi</h1>
+<h1>bygdis.fi</h1>
+<h2>Hommansby Ungdomsförening</h2>
<p><a href="#styrelsen">styrelsen</a> | <a href="#bokningar">bokningar</a> | <a href="/om">om sidan</a> | <a href="/bilder">Byyns fotoalbum</a>
$for i in upcomingevents:
<div class=anslagstavla>
@@ -19,9 +20,9 @@ $if displayname == '':
<div id="styrelsen">
<h1>Styrelsen</h1>
-Lars-Erik Kullström | ordförande </a><br>
+Mia Wigren | ordförande </a><br>
Robin Bäckman | sekreterare | <a href="tel:0447624040">0447624040</a><br>
-Benjamin Bäckman, Frieda Ramstedt, Johanna Granqvist, Tom Granqvist, Mia Wigren<br>
+Ronja Wiik, Benjamin Bäckman, Frieda Ramstedt, Johanna Granqvist, Tom Granqvist, Lars-Erik Kullström<br>
</div>
<div id="bokningar">
<h1>Bokningar</h1>
diff --git a/server.py b/server.py
@@ -16,6 +16,7 @@ import bcrypt
import sys
basedir = os.path.dirname(os.path.realpath(__file__))
sys.path.append(basedir)
+import settings
urls = (
"/", "index",
@@ -38,6 +39,7 @@ urls = (
"/tuning?", "tuning",
"/senaste", "senaste",
"/admin", "admin",
+ "/boka", "boka",
"/dorrkoder?", "dorrkoder",
"/nydorrkod?", "nydorrkod",
"/dorrkoderapi?", "dorrkoderapi",
@@ -48,6 +50,8 @@ urls = (
"/nope", "nope"
)
+postadmin = settings.postadmin
+postadmin_signature = settings.postadmin_signature
render = web.template.render(basedir + "/public_html/html/", base="base")
render2 = web.template.render(basedir + "/public_html/html/", base="base2")
render3 = web.template.render(basedir + "/public_html/html/", base="base3")
@@ -87,6 +91,18 @@ def nyevent(id, datumtid, event, admin_visible, info):
print("event added to database")
return
+def copyevent(id, datumtid, event, admin_visible, info):
+ veckodagar = u'Måndag', u'Tisdag', u'Onsdag', u'Torsdag', u'Fredag', u'Lördag', u'Söndag'
+ veckodag = datumtid.weekday()
+ db.insert('kalender', datumtid=datumtid, veckodag=veckodagar[veckodag], event=event, admin=admin_visible, info=info)
+ print("event added to database")
+ return
+
+def getbokningar():
+ bokningar = db.query("SELECT * FROM bokningar ORDER BY datumtid DESC")
+ #events = db.select('kalender', what='id, datumtid, event', order='datumtid ASC')
+ return bokningar
+
def getposts():
posts = db.query("SELECT * FROM posts ORDER BY datumtid DESC")
#events = db.select('kalender', what='id, datumtid, event', order='datumtid ASC')
@@ -166,8 +182,11 @@ def addDorrkod(dorrkod, name, mail):
def dorrLogger(dorrkod):
db.insert('dorrlogger', dorrkod=dorrkod, datum=datetime.datetime.now())
-def getDorrlog():
- log=db.query("SELECT * FROM dorrlogger ORDER BY datum DESC")
+def getDorrlog(limit):
+ if limit == 0:
+ log=db.query("SELECT * FROM dorrlogger ORDER BY datum DESC")
+ else:
+ log=db.query("SELECT * FROM dorrlogger ORDER BY datum DESC LIMIT "+str(limit))
return log
def getDorrkoduser(dorrkod):
@@ -184,8 +203,8 @@ def getDorrkoder():
def sendmail(email, subject, msg):
#Send mail
- echomsg = subprocess.Popen(('echo', msg), stdout=subprocess.PIPE)
- sendmsg = subprocess.check_output(('mail', '-r', 'rob@bygdis.fi', '-s', subject, email), stdin=echomsg.stdout)
+ echomsg = subprocess.Popen(('echo', msg+'\n'+postadmin_signature), stdout=subprocess.PIPE)
+ sendmsg = subprocess.check_output(('mail', '-r', postadmin, '-s', subject, email), stdin=echomsg.stdout)
echomsg.wait()
#subprocess.call(['echo', msg, '|', 'mail', '-r', 'rob@tarina.org','-s', subject, email])
@@ -242,26 +261,94 @@ class admin():
def GET(self):
print(session.login)
if session.login == 5:
+ doordebug = db.select('doordebug')[0]
saysomething = self.form()
anslagstavla = getposts()
- return render2.admin(anslagstavla, saysomething)
+ bokningar = getbokningar()
+ roskis=db.select('roskis')[0]
+ i = web.input(approve=None,sendrules=None,fakturera=None,doorcode=None,remove=None,emptytrash=None)
+ if i.approve != None:
+ #Send mail to admin
+ bokning = db.select('bokningar', where='id="'+i.approve+'"')[0]
+ msg = "Bokning godkänd av " + bokning.namn + ' epost: ' + bokning.epost
+ sendmail(postadmin, 'Bokning godkänd!', msg)
+ #Send mail to user
+ msg = "Hej " + bokning.namn + " tack din bokning godkändes, du får fakturan inom kort och en dörrkod när fakturan är betald. Tack!"
+ sendmail(bokning.epost, 'Bokning av Bygdegården lyckades och är godkänd', msg)
+ db.update('bokningar', where='id="'+i.approve+'"', approved=datetime.datetime.now())
+ raise web.seeother('/admin?kakka')
+ if i.sendrules != None:
+ raise web.seeother('/admin?kakka')
+ if i.fakturera != None:
+ raise web.seeother('/admin?kakka')
+ if i.doorcode != None:
+ raise web.seeother('/admin?kakka')
+ if i.remove != None:
+ raise web.seeother('/admin?kakka')
+ if i.emptytrash == 'now':
+ db.update('roskis', where='id=1',datum=datetime.datetime.now())
+ raise web.seeother('/admin')
+ log = getDorrlog(10)
+ return render2.admin(anslagstavla,saysomething,bokningar,doordebug,str,log,getDorrkoduser,roskis)
else:
raise web.seeother('/login')
def POST(self):
if session.login == 5:
+ i = web.input(post=None,approve=None,sendrules=None,fakturera=None,doorcode=None,remove=None)
saysomething = self.form()
- if not saysomething.validates():
- return render2.admin(anslagstavla, saysomething)
- else:
- i = web.input()
+ if i.post != None:
print('ADDDDDDDDDDDDDING TO database post ' + i.post)
now = datetime.datetime.now()
print('ADDDDDDDDDDDDDING TO database date' + str(now))
nypost(now, i.post)
- raise web.seeother('/admin')
+ raise web.seeother('/admin')
else:
raise web.seeother('/login')
+class boka():
+ form = web.form.Form(
+ web.form.Textbox('year', web.form.notnull, web.form.regexp('\d+', 'yyyy'), description="år:"),
+ web.form.Textbox('day', web.form.notnull, web.form.regexp('\d+', 'dd'), description="dag:", autofocus="autofocus"),
+ web.form.Textbox('month', web.form.notnull, web.form.regexp('\d+', 'MM'), description="månad:"),
+ web.form.Dropdown('boka', [u'Veckoslut hela huset (medlem) 200€', u'Veckoslut hela huset (icke medlem) 350 €', u'Veckoslut serveringsrummet och kök (medlem) 100€', u'Veckoslut serveringsrummet och kök (icke medlem) 150€', u'En dag hela huset (medlem) 100€', u'En dag hela huset (icke medlem) 150€', u'En dag serveringsrummet och kök (medlem) 80€', u'En dag serveringsrummet och kök (icke medlem) 120€'], web.form.notnull, description="bokning"),
+ web.form.Textarea('event', web.form.notnull, description="beskrivning:"),
+ web.form.Textbox('namn', web.form.notnull, description="namn:"),
+ web.form.Textbox('epost', web.form.notnull, description="e-post:"),
+ web.form.Textbox('telefon', web.form.regexp('\d+', 'nummer tack'), description="telefon:"),
+ web.form.Radio('villkor', [u'Nej', u'Ja'], web.form.notnull, description="Jag godkänner alla regler och villkor."),
+ web.form.Radio('privat', [u'Privat', u'Offentligt'], web.form.notnull, description="Evenemanget som ordnas är:"),
+ web.form.Button('Skicka'))
+ def GET(self):
+ i = web.input(id=None, cp=None)
+ form_boka = self.form()
+ if i.id==None:
+ now = datetime.datetime.now()
+ form_boka.fill(year=now.year, month=now.month, day=now.day)
+ else:
+ event = db.select('bokningar', where='bokningshash="'+i.id+'"')[0]
+ now=datetime.datetime.strptime(event.datumtid, '%Y-%m-%d %H:%M:%S')
+ form_boka.fill(year=now.year, month=now.month, day=now.day, boka=event.boka, event=event.event, namn=event.namn, epost=event.epost, telefon=event.telefon, villkor=event.villkor, privat=event.privat)
+ return render.boka(form_boka)
+ def POST(self):
+ form_boka = self.form()
+ if not form_boka.validates():
+ return render.boka(form_boka)
+ else:
+ i = web.input(id=None, copyevent=None)
+ try:
+ year = int(i.year)
+ month = int(i.month)
+ day = int(i.day)
+ datum = datetime.datetime(year, month, day)
+ except ValueError:
+ return render.nope()
+ if i.id == None:
+ bokningshash = hashlib.md5(str(random.getrandbits(256)).encode('utf-8')).hexdigest()
+ db.insert('bokningar', datumtid=datum, boka=i.boka, event=i.event, namn=i.namn, epost=i.epost, telefon=i.telefon, villkor=i.villkor, privat=i.privat, bokningshash=bokningshash)
+ else:
+ db.update('bokningar', where='bokningshash="'+i.id+'"', datumtid=datum, boka=i.boka, event=i.event, namn=i.namn, epost=i.epost, telefon=i.telefon, villkor=i.villkor, privat=i.privat)
+ raise web.seeother('/admin')
+
class event():
def GET(self):
if session.login == 5:
@@ -273,8 +360,8 @@ class event():
class addevent():
form = web.form.Form(
web.form.Textbox('year', web.form.notnull, web.form.regexp('\d+', 'yyyy'), description="år:"),
- web.form.Textbox('month', web.form.notnull, web.form.regexp('\d+', 'MM'), description="månad:"),
web.form.Textbox('day', web.form.notnull, web.form.regexp('\d+', 'dd'), description="dag:", autofocus="autofocus"),
+ web.form.Textbox('month', web.form.notnull, web.form.regexp('\d+', 'MMM'), description="månad:"),
web.form.Textbox('tid', web.form.notnull, web.form.regexp('^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$', 'Skriv tiden såhär 07:20'), description="klockslag:"),
web.form.Dropdown('upprepa', [u'Nej', u'Varje vecka', u'Varannan vecka', u'Varje månad'], web.form.notnull, description="återkommande"),
web.form.Textbox('antal', web.form.regexp('\d+', 'nummer tack'), description="hur många gånger:"),
@@ -283,7 +370,7 @@ class addevent():
web.form.Textarea('admin', description="synligt för admin:"),
web.form.Button('skicka'))
def GET(self):
- i = web.input(id=None)
+ i = web.input(id=None, cp=None)
if session.login == 5:
kalender = self.form()
if i.id==None:
@@ -302,7 +389,7 @@ class addevent():
if not kalender.validates():
return render.addevent(kalender)
else:
- i = web.input(id=None)
+ i = web.input(id=None, copyevent=None)
try:
tidh = int(i.tid[:2])
tidm = int(i.tid[-2:])
@@ -328,7 +415,10 @@ class addevent():
manydatum.append(datum + datetime.timedelta(days=c))
c = c + dayz
for d in manydatum:
- nyevent(i.id, d, i.event, i.admin, i.info)
+ if copyevent != None:
+ copyevent(i.id, d, i.event, i.admin, i.info)
+ else:
+ nyevent(i.id, d, i.event, i.admin, i.info)
return web.seeother('/event')
else:
raise web.seeother('/login')
@@ -353,8 +443,6 @@ class undo():
else:
raise web.seeother('/login')
-
-
class editevent():
def POST(self):
s = web.input().signal
@@ -440,7 +528,7 @@ class forgotpass():
elif i.error == 'nej':
fejl = 'nej hörru dedär gaar inga / ei käy'
elif i.error == 'stopresetpass':
- fejl = 'Nytt lösenord ha skickats åt dej! int ha du väl nu igen tappat bort ditt lösen? hmm.. om de e problematiskt ta kontakt med rob@bygdis.fi / sama på finska'
+ fejl = 'Nytt lösenord ha skickats åt dej! int ha du väl nu igen tappat bort ditt lösen? hmm.. om de e problematiskt ta kontakt med '+postadmin+' / sama på finska'
if session.login < 3:
loginform = self.form()
return render.forgotpass(loginform, fejl)
@@ -538,7 +626,7 @@ class register():
adduser(i.user, i.password, i.mail.lower())
#Send mail to Madbaker
msg = "Wowowowoweeewaaa! Ny användare på bygdis.fi! " + i.user + ' ' + i.mail
- sendmail('rob@bygdis.fi', 'Wowowoweewaaa!', msg)
+ sendmail(postadmin, 'Wowowoweewaaa!', msg)
#Send mail to new user
msg = "Gratulis " + i.user + ", du har nu ett konto opa bygdis.fi! Logga in med användarnamn å lösenord på sidan https://bygdis.fi/login"
sendmail(i.mail, 'Byyns eji fotoalbum', msg)
@@ -588,9 +676,9 @@ class nydorrkod():
addDorrkod(dorrkod, i.namn, i.mail.lower())
#Send mail to Madbaker
msg = "Wowowowoweeewaaa! Ny dörrkod! " + i.namn + ' ' + i.mail + ' ' + str(dorrkod)
- sendmail('rob@bygdis.fi', 'Wowowoweewaaa!', msg)
+ sendmail(postadmin, 'Wowowoweewaaa!', msg)
#Send mail to new user
- msg = "Gratulis " + i.namn + ", du har en dörrkod ti bygdis: " + str(dorrkod)
+ msg = "Gratulis " + i.namn + ", du har en dörrkod till Bygdegården: " + str(dorrkod)
sendmail(i.mail, 'Dörrkod till Bygdegården', msg)
return web.seeother('/dorrkoder')
@@ -598,9 +686,13 @@ class dorrkoder():
def GET(self):
if session.login == 5:
dorrkoder = getDorrkoder()
- log = getDorrlog()
+ log = getDorrlog(0)
+ i = web.input(radera=None,uppdatera=None,fakturera=None,emptytrash=None)
+ if i.radera != None:
+ db.delete('dorrkoder', where='id="'+i.radera+'"')
+ raise web.seeother('/dorrkoder')
print(dorrkoder)
- return render.dorrkoder(dorrkoder, log, getDorrkoduser)
+ return render.dorrkoder(dorrkoder,log,getDorrkoduser)
else:
web.seeother('/')
diff --git a/settings.py b/settings.py
@@ -0,0 +1,6 @@
+#!/usr/bin/python3
+# -*- coding: utf-8 -*-
+
+postadmin="info@bygdis.fi"
+postadmin_signature="-~-\nWebadmin\nHommansby Ungdomsförening r.f.\ninfo@bygdis.fi\n+358 44 7624 040"
+