bygdis.fi

git clone https://git.tarina.org/bygdis.fi
Log | Files | Refs | README

commit 70e37b0d8c8caabed23210facbd8d19a51b177ff
parent 480743966548d1fef4c233cefe97b498def90685
Author: rob <rob@tarina.org>
Date:   Thu, 16 Mar 2023 13:05:19 +0200

auto fakturering done

Diffstat:
Mpublic_html/html/admin.html | 25++++++++++++++++++-------
Mpublic_html/html/fakturor.html | 3++-
Mpublic_html/html/index.html | 6++++--
Mserver.py | 72++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------
4 files changed, 80 insertions(+), 26 deletions(-)

diff --git a/public_html/html/admin.html b/public_html/html/admin.html @@ -3,7 +3,11 @@ $def with (anslagstavla, saysomething, bokningar, doordebug, str, log, getDorrko <div id="default"> <br> <h1>Bygdis.fi</h1> - <a href="/event">Event</a> | <a href="/protokoll">Protokoll</a> | <a href="/static/mlinvoice">Bokföring</a> | <a href="/logout">Logga ut</a><br> + <br> + <a href="/"><--------Tibaks</a> + <br> + <br> + <a href="/event">Event</a> | <a href="/protokoll">Protokoll</a> | <a href="/logout">Logga ut</a><br> <a href="/bilder">Byyns fotoalbum</a> | <a href="/dorrkoder">Dörrkoder</a> | <a href="/boka">Boka</a> | <a href="/fakturor">Fakturor</a> <br> @@ -37,19 +41,26 @@ $def with (anslagstavla, saysomething, bokningar, doordebug, str, log, getDorrko $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">Skicka faktura</a> | - <a href="/admin?doorcode=$i.id">Skicka dörrkod</a> | - <a href="/admin?remove=$i.id">Radera</a> + <a href="/admin?sendrules=$i.id">Skicka regler</a><br> + <a href="/fakturor?fakturera=$i.id&add=faktura&epost=$i.epost&produkt=$i.boka">Skicka faktura</a><br> + <br> + <form action="/nydorrkod?bokning=$i.id&namn=$i.namn&mail=$i.epost" method="post"> + <input type="submit" value="Skicka dörrkod" /> + </form> <br> <br> status: + <br> $if i.approved: godkändes $i.approved[8:10]-$i.approved[5:7]-$i.approved[2:4] och lades till i event - $if i.doorcode: - dörrkod $i.doorcode har skickats + <br> $if i.faktura: faktura har skickats $i.faktura + <br> + $if i.doorcode: + dörrkod har skickats $i.doorcode + <br> + <a href="/admin?remove=$i.id">Radera</a> </div> <h2>Skriklåda</h2> <div class="anslagstavla"> diff --git a/public_html/html/fakturor.html b/public_html/html/fakturor.html @@ -5,6 +5,7 @@ $def with (alla_fakturor,getkund,getmaksuja,round,getprodukt) <a href="/admin"><<-----tibaks</a> <h2>Fakturor</h2> <br> +<a href="/static/mlinvoice">Till Mlinvoice (fakturerings program)</a> <br> <br> $for i in alla_fakturor: @@ -25,7 +26,7 @@ $for i in alla_fakturor: $else: $p.description $round(p.price,2) € <br> - totalt: $tot<br> + totalt: $round(tot,2) €<br> <a href='/fakturor?faktura=$i.id'>öppna som pdf</a> <hr> diff --git a/public_html/html/index.html b/public_html/html/index.html @@ -4,9 +4,11 @@ $var upcomingevents = upcomingevents <div id="default"> $if displayname != '': <p>inloggad som <b><a href="/tuning">$displayname.displayname</a></b> ❃ | <a href="/logout">Logga ut</a> 🗝</p> - <a href="/admin">Till admin sidorna</a> + <a href="/admin">Till admin sidorna</a><br> $if displayname == '': - <b><a href="/login">Logga in / kirjaudu sisään </a></b> + <b><a href="/login">Logga in / kirjaudu sisään </a></b><br> +<br> +<a href="/boka?kod=jep">Dörrkod</a> | <a href="/boka?kod=jep">Ovikoodi</a> <br> <br> <h1>bygdis.fi</h1> diff --git a/server.py b/server.py @@ -14,6 +14,7 @@ import hashlib import random import bcrypt import sys +from virtuaaliviivakoodi import virtuaaliviivakoodi from bs4 import BeautifulSoup import requests basedir = os.path.dirname(os.path.realpath(__file__)) @@ -46,6 +47,7 @@ urls = ( "/dorrkoder?", "dorrkoder", "/nydorrkod?", "nydorrkod", "/dorrkoderapi?", "dorrkoderapi", + "/kod?","kod", "/register?", "register", "/forgotpass?", "forgotpass", "/ny", "ny", @@ -227,7 +229,14 @@ def getmaksuja(id): def getprodukt(id): try: + str(int(id)) produkt = db2.query("SELECT * FROM mlinvoice_product WHERE id='"+str(id)+"';")[0] + return produkt + except: + produkt = '' + try: + produkt = db2.query("SELECT * FROM mlinvoice_product WHERE product_name LIKE '%"+id[:-14]+"%';")[0] + return produkt except: produkt = '' return produkt @@ -339,13 +348,13 @@ class admin(): 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!" + msg = "Hej " + bokning.namn + " bokning " + bokning.datumtid + " godkändes, Tack!" sendmail(bokning.epost, 'Bokning av Bygdegården lyckades och är godkänd', msg, '') #update booking db.update('bokningar', where='id="'+i.approve+'"', approved=datetime.datetime.now()) #add to kalender events as privat bokning print(bokning.datumtid) - nyevent(None, bokning.datumtid, 'privat bokning', bokning.namn, None) + #nyevent(None, bokning.datumtid, 'privat bokning', bokning.namn, None) raise web.seeother('/admin') if i.sendrules != None: #Send mail to admin @@ -359,7 +368,7 @@ class admin(): db.update('bokningar', where='id="'+i.sendrules+'"', approved="") raise web.seeother('/admin') if i.fakturera != None: - db2.insert('mlinvoice_invoice', company_id=2, invoice_date=time.time()) + db.update('bokningar', where='id="'+i.fakturera+'"', faktura=datetime.datetime.now()) raise web.seeother('/admin') if i.doorcode != None: raise web.seeother('/admin?kakka') @@ -395,20 +404,22 @@ class boka(): 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', produkter, web.form.notnull, description="bokning"), - web.form.Textarea('event', web.form.notnull, description="event beskrivning och uppskattat antal gäster:"), + web.form.Dropdown('boka', produkter, web.form.notnull, description="hyr"), + web.form.Textarea('event', web.form.notnull, description="beskrivning och uppskattat antal gäster:"), 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 har läst och godkänner alla ovannämnda regler och villkor."), - web.form.Radio('privat', [u'Privat', u'Offentligt'], web.form.notnull, description="Evenemanget som ordnas är:"), + web.form.Radio('privat', [u'Privat', u'Offentligt'], web.form.notnull, description="I hurudant syfte?:"), web.form.Button('Skicka')) def GET(self): - i = web.input(id=None, cp=None, pdf=None) + i = web.input(id=None, cp=None, pdf=None, kod=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) + if i.kod=='jep': + form_boka.fill(year=now.year, month=now.month, day=now.day ,boka='Dörrkod / Ovikoodi | 15.00 €', privat='Privat', event='Dörrkod för användning av Bygdegården i privat syfte.') else: event = db.select('bokningar', where='bokningshash="'+i.id+'"')[0] now=datetime.datetime.strptime(event.datumtid, '%Y-%m-%d %H:%M:%S') @@ -497,15 +508,15 @@ class fakturor(): db.insert('mlinvoice_company', email=i.epost, company_name=i.kund) #LÄGG TILL VAROR # - pris=getprodukt(i.produkt) - pris=pris.unit_price - db2.insert('mlinvoice_invoice_row', invoice_id=senaste.id, product_id=i.produkt, pcs=1.00, price=float(pris)) + produkt=getprodukt(i.produkt) + pris=produkt.unit_price + db2.insert('mlinvoice_invoice_row', invoice_id=senaste.id, product_id=produkt.id, pcs=1.00, price=float(pris)) # print(payer.id) print(payer.company_name) db2.update('mlinvoice_invoice',where='id="'+str(senaste.id)+'"', invoice_no=invoice['invoice_no'], ref_number=invoice['ref_no'], company_id=payer.id, state_id=2) # - #Skicka epost + #### Skicka epost # url='https://bygdis.fi/static/mlinvoice/invoice.php' open_mlinvoice = ['curl','-b','X', url , '-i', '-b', basedir+'/sessions/cookies.txt', '-c',basedir+'/sessions/cookies.txt', '-d', 'id='+str(senaste.id)+'&template=15'] @@ -514,9 +525,36 @@ class fakturor(): bilaga=basedir+'/public_html/static/pdf/'+pdfhash+'.pdf' with open(bilaga,'wb') as binary_file: binary_file.write(pdf_file) - msg = 'faktura' + # + #Laga epost faktura me virtuellstreckod + # + base_company=db2.select('mlinvoice_base', where='id="'+str(2)+'"' )[0] + faktura = db2.query("SELECT * FROM mlinvoice_invoice WHERE id='"+str(senaste.id)+"' ;")[0] + msg='Hej ' + if faktura.deleted == 0: + if faktura.company_id: + msg+=getkund(faktura.company_id)+', här är fakturan\n\n' + msg+='nr:'+str(faktura.invoice_no)+'\n' + msg+='ref:'+str(faktura.ref_number)+'\n' + msg+='datum:'+str(faktura.invoice_date)+'\n' + msg+='sista betalningsdag:'+str(faktura.due_date)+'\n' + tot = 0 + for p in getmaksuja(faktura.id): + if p.deleted != 1: + tot = tot + p.price + if p.product_id: + msg+=getprodukt(p.product_id).product_name+' ' + else: + msg+=p.description+' ' + msg+=str(round(p.price,2))+' € \n' + msg+='totalt: '+str(round(tot,2))+' € \n' + due_date=datetime.datetime.strptime(str(faktura.due_date), '%Y%m%d') + vs = virtuaaliviivakoodi(base_company.bank_iban,faktura.ref_number,due_date=due_date,euro_amount=float(tot)) + msg += ' \nVirtuell streckkod: '+vs sendmail(i.epost, 'Faktura', msg, bilaga) - raise web.seeother('/fakturor?yes=lyckades') + if i.fakturera != None: + db.update('bokningar', where='id="'+i.fakturera+'"', faktura=datetime.datetime.now()) + raise web.seeother('/admin?fakturera='+i.fakturera) if i.faktura != None: url='https://bygdis.fi/static/mlinvoice/invoice.php' open_mlinvoice = ['curl','-b','X', url , '-i', '-b', basedir+'/sessions/cookies.txt', '-c',basedir+'/sessions/cookies.txt', '-d', 'id='+i.faktura+'&template=15'] @@ -844,12 +882,12 @@ class nydorrkod(): def POST(self): if session.login == 5: registerform = self.form() - i = web.input() + i = web.input(namn=None, mail=None, dorrkod=None, bokning=None) if i.namn == '': raise web.seeother('/nydorrkod?fail=namn') if '@' not in i.mail: raise web.seeother('/nydorrkod?fail=notmail') - if i.dorrkod == '': + if i.dorrkod == None: dorrkod = random.randint(1111,9999) elif isinstance(int(i.dorrkod), int) and len(i.dorrkod) == 4: dorrkod = str(i.dorrkod) @@ -860,8 +898,10 @@ class nydorrkod(): msg = "Wowowowoweeewaaa! Ny dörrkod! " + i.namn + ' ' + i.mail + ' ' + str(dorrkod) sendmail(postadmin, 'Wowowoweewaaa!', msg,'') #Send mail to new user - msg = "Gratulis " + i.namn + ", du har en dörrkod till Bygdegården: " + str(dorrkod) + msg = "Gratulis " + i.namn + ", du har en dörrkod till Bygdegården: \n\n" + str(dorrkod) sendmail(i.mail, 'Dörrkod till Bygdegården', msg,'') + if i.bokning != None: + db.update('bokningar', where='id="'+i.bokning+'"', doorcode=datetime.datetime.now()) return web.seeother('/dorrkoder') class dorrkoder():