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():