svv/orders.py
changeset 31 e1b63e4d10f4
parent 29 9c7ddcaa2e90
child 32 10c48a6843ad
equal deleted inserted replaced
30:97d5d37333d2 31:e1b63e4d10f4
     4 """
     4 """
     5 
     5 
     6 from svv.controllers import PageHandler, DocumentHandler
     6 from svv.controllers import PageHandler, DocumentHandler
     7 from svv.html import tags
     7 from svv.html import tags
     8 from svv import database as db
     8 from svv import database as db
     9 from svv import pdf
     9 from svv import pdf, markup
    10 
    10 
    11 import datetime
    11 import datetime
    12 import logging
    12 import logging
    13 import collections
    13 import collections
    14 
    14 
  1218             # XXX: can't fail
  1218             # XXX: can't fail
  1219             form.process(data)
  1219             form.process(data)
  1220 
  1220 
  1221         return form
  1221         return form
  1222 
  1222 
  1223     def load_order (self, id):
  1223     def process (self, id):
  1224         """
  1224         """
  1225             Return OrderModel object for given ID
  1225             Return OrderModel object for given ID
  1226         """
  1226         """
  1227 
  1227 
  1228         # XXX: really need that OrderModel object :)
  1228         # db session
  1229         form = OrderForm(self.app)
  1229         self.session = self.app.session()
  1230         form.load(id)
  1230         
  1231 
  1231         # order object
  1232         return form
  1232         self.order = self.session.query(Order).options(db.eagerload(Order.customer), db.eagerload(Order.contact)).get(id)
       
  1233 
       
  1234         # form params
       
  1235         self.params = self.load_params(self.POST)
  1233     
  1236     
  1234     def generate_document (self, id) :
  1237     def generate_document (self, id) :
  1235 
  1238         """
  1236         # retrieve from db
  1239             Return PDF document to generate
  1237         order = self.load_order(id)
  1240         """
  1238 
  1241 
  1239         # params set by form
  1242         order = self.order
  1240         params = self.load_params(self.POST)
  1243         params = self.params
  1241 
  1244 
  1242         title = "Teekkarispeksi Ry - Vuokrasopimus"
  1245         title = "Teekkarispeksi Ry - Vuokrasopimus"
  1243         author = "Teekkarispeksi Ry"
  1246         author = "Teekkarispeksi Ry"
  1244 
  1247 
  1245         tpl = pdf.PageTemplate('page',
  1248         tpl = pdf.PageTemplate('page',
  1246             header_columns  = (
  1249             header_columns  = (
  1247                 ("", ""),
  1250                 ("", ""),
  1248                 ("", ""),
  1251                 ("", ""),
  1249                 ("", ""),
  1252                 ("", ""),
  1250                 ("Vuokrasopimus", [order.customer_name, order.event_name, 'dd.mm.yy hh:mm-hh:mm']),
  1253                 ("Vuokrasopimus", [order.customer.name, order.event_name, 'dd.mm.yy hh:mm-hh:mm']),
  1251             ),
  1254             ),
  1252             footer_columns  = (
  1255             footer_columns  = (
  1253                 ("Teekkarispeksi Ry", ("www.teekkarispeksi.fi", )),
  1256                 ("Teekkarispeksi Ry", ("www.teekkarispeksi.fi", )),
  1254                 ("Tekniikkavastaava", ("Juha Kallas", "045 xxx yyzz", "jskallas@cc.hut.fi")),
  1257                 ("Tekniikkavastaava", ("Juha Kallas", "045 xxx yyzz", "jskallas@cc.hut.fi")),
  1255                 ("Varastovastaava", ("Joel Pirttimaa", "045 xxx yyzz", "jhpirtti@cc.hut.fi")),
  1258                 ("Varastovastaava", ("Joel Pirttimaa", "045 xxx yyzz", "jhpirtti@cc.hut.fi")),
  1260         doc = pdf.DocumentTemplate([tpl],
  1263         doc = pdf.DocumentTemplate([tpl],
  1261             title = title, author = author,
  1264             title = title, author = author,
  1262         )
  1265         )
  1263 
  1266 
  1264         # stylesheet
  1267         # stylesheet
  1265         styles = pdf.Styles
  1268         styles = pdf.Styles()
  1266 
  1269 
  1267         from reportlab.platypus import Paragraph as p
  1270         from reportlab.platypus import Paragraph as p
  1268 
  1271         
  1269         # contract terms
  1272 
  1270         list_seq = pdf.ListItem.seq
  1273         text = u"""\
  1271         terms = pdf.ListItem("Sopimusehdot", styles.h2, None, list_seq(), [
  1274 # Vuokrasopimus
  1272             pdf.ListItem("Osapuolet", styles.list_h2, None, list_seq(), [
  1275 ### Teekkarispeksi ry AV-tekniikka
  1273                 pdf.ListItem(None, None, "Teekkarispeksi ry (Y-tunnus 1888541-7), jäljempänä “Vuokranantaja”."),
  1276 
  1274                 pdf.ListItem(None, None, order.customer_name + u", jäljempänä “Vuokraaja”. 1.1 ja 1.2 jäljempänä yhdessä “osapuolet”.")
  1277 ## Sopimusehdot
  1275             ]),
  1278 
  1276             pdf.ListItem("Kaluston lainaaminen", styles.list_h2, None, list_seq(), [
  1279 1.  ## Osapuolet
  1277                 pdf.ListItem("Yleistä", styles.list_h3, "Tässä sopimuksessa sovitaan toiminnasta Vuokranantajan lainatessa tanssimattoja Vuokraajalle"),
  1280     1.  Teekkarispeksi ry (Y-tunnus 1888541-7), jäljempänä “Vuokranantaja”.
  1278                 pdf.ListItem("Vuokranantajan velvollisuudet", styles.list_h3, "Vuokranantaja sitoutuu toimittamaan sovittuna ajankohtana Vuokraajalle erikseen sovittava (liite) määrä tanssimattoja."),
  1281     2.  {order.customer.name}, jäljempänä “Vuokraaja”. 1.1 ja 1.2 jäljempänä yhdessä “osapuolet”.
  1279                 pdf.ListItem("Blaa Blaa", styles.list_h3, "Etc."),
  1282 
  1280             ]),
  1283 2.  ## Kaluston lainaaminen
  1281             pdf.ListItem("Tätä sopimusta ja sitä koskevia erimielisyyksiä koskevat määräykset", styles.list_h2, None, list_seq(), [
  1284     1.  ### Yleistä
  1282                 pdf.ListItem("Sopimuksen voimassaolo", styles.list_h3, "Sopimus on osapuolia sitova sen jälkeen, kun osapuolet ovat sen allekirjoittaneet."),
  1285         Tässä sopimuksessa sovitaan toiminnasta Vuokranantajan lainatessa tanssimattoja Vuokraajalle.
  1283                 pdf.ListItem("Muutosten tekeminen", styles.list_h3, "Muutokset sopimukseen on tehtävä kirjallisesti molempien osapuolten kesken."),
  1286 
  1284                 pdf.ListItem("Blaa Blaa", styles.list_h3, "Etc."),
  1287     2.  ### Vuokranantajan velvollisuudet
  1285             ]),
  1288         Vuokranantaja sitoutuu toimittamaan sovittuna ajankohtana Vuokraajalle erikseen sovittava (liite) määrä tanssimattoja.
  1286         ])
  1289 
  1287 
  1290     3.  ### Blaa Blaa
  1288 
  1291         Etc.
       
  1292 
       
  1293 3. ## Tätä sopimusta ja sitä koskevia erimielisyyksiä koskevat määräykset
       
  1294     1.  ### Sopimuksen voimassaolo
       
  1295         Sopimus on osapuolia sitova sen jälkeen, kun osapuolet ovat sen allekirjoittaneet.
       
  1296 
       
  1297     2.  ### Muutosten tekeminen
       
  1298         Muutokset sopimukseen on tehtävä kirjallisesti molempien osapuolten kesken.
       
  1299 
       
  1300     3.  ### Blaa Blaa
       
  1301 
       
  1302         Etc.
       
  1303 
       
  1304 ## Nouto
       
  1305     Aika: _______________       Paikka: _______________
       
  1306 
       
  1307 ## Palautus
       
  1308     Aika: _______________       Paikka: _______________
       
  1309 
       
  1310         """
       
  1311 
       
  1312         # format
       
  1313         text = text.format(
       
  1314             order       = order,
       
  1315         )
       
  1316         
       
  1317         # parse to doc tree
       
  1318         root = markup.Markup().parse(text)
       
  1319 
       
  1320         # format to flowables
       
  1321         text_elements = list(pdf.Markup(styles).render(root))
  1289 
  1322 
  1290         sig_prefill = {}
  1323         sig_prefill = {}
  1291 
  1324 
  1292         if params.prefill_placetime :
  1325         if params.prefill_placetime :
  1293             sig_prefill[('Vuokranantaja', 'Aika ja paikka')] = sig_prefill[('Vuokraaja', 'Aika ja paikka')] = params.prefill_placetime
  1326             sig_prefill[('Vuokranantaja', 'Aika ja paikka')] = sig_prefill[('Vuokraaja', 'Aika ja paikka')] = params.prefill_placetime
  1294 
  1327 
  1295         if params.prefill_ourname :
  1328         if params.prefill_ourname :
  1296             sig_prefill[('Vuokranantaja', 'Nimen selvennys')] = params.prefill_ourname
  1329             sig_prefill[('Vuokranantaja', 'Nimen selvennys')] = params.prefill_ourname
  1297 
  1330 
  1298         elements = [
  1331         elements = text_elements + [
  1299                 p("Vuokrasopimus", styles.h1),
       
  1300                 p("Teekkarispeksi ry AV-tekniikka", styles.h3),
       
  1301         ] + list(terms.render_pdf()) + [
       
  1302                 p("Nouto", styles.h2),
       
  1303                 p("\t\tAika: _______________\tPaikka: _______________", styles.text),
       
  1304                 p("Palautus", styles.h2),
       
  1305                 p("\t\tAika: _______________\tPaikka: _______________", styles.text),
       
  1306                 
       
  1307                 pdf.SignatureBlock(("Vuokranantaja", "Vuokraaja"), ("%(column)s", "Nimen selvennys", "Aika ja paikka"), sig_prefill),
  1332                 pdf.SignatureBlock(("Vuokranantaja", "Vuokraaja"), ("%(column)s", "Nimen selvennys", "Aika ja paikka"), sig_prefill),
       
  1333 
  1308         ]
  1334         ]
  1309 
  1335 
  1310         # ok
  1336         # ok
  1311         return doc, elements
  1337         return doc, elements
  1312        
  1338