commit 70e37b0d8c8caabed23210facbd8d19a51b177ff
parent 480743966548d1fef4c233cefe97b498def90685
Author: rob <rob@tarina.org>
Date: Thu, 16 Mar 2023 13:05:19 +0200
auto fakturering done
Diffstat:
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():