Web version updated to allow sending emails.
This commit is contained in:
134
web.py
134
web.py
@@ -2,9 +2,13 @@ from flask import Flask, render_template, request, redirect, url_for
|
||||
import json
|
||||
from decimal import *
|
||||
from datetime import *
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
import jinja2
|
||||
from fpdf import FPDF, HTMLMixin
|
||||
import smtplib
|
||||
import os
|
||||
|
||||
loader=jinja2.FileSystemLoader([os.path.join(os.path.dirname(__file__),"templates")])
|
||||
environment = jinja2.Environment(loader=loader)
|
||||
|
||||
from email.MIMEMultipart import MIMEMultipart
|
||||
from email.MIMEText import MIMEText
|
||||
@@ -21,6 +25,7 @@ def hello():
|
||||
loans.append( addLoan("2 Bear Houses LLC Loan", "9Kloan.json" ) )
|
||||
loans.append( addLoan("3 Brenda Mortgage", "brendamortgage.json" ) )
|
||||
loans.append( addLoan("4 Dad Mortgage", "dadmortgage.json") )
|
||||
loans.append( addLoan("5 Test Loan", "testloan.json"))
|
||||
|
||||
if 'loan' in request.args:
|
||||
filename = request.args["loan"]
|
||||
@@ -34,12 +39,49 @@ def hello():
|
||||
|
||||
@app.route('/update_file')
|
||||
def update_file():
|
||||
return
|
||||
loanFile = request.form['loan']
|
||||
return redirect( '/?loan=' + loan )
|
||||
|
||||
@app.route('/send_statement', methods=['POST'])
|
||||
def send_statement():
|
||||
loan = request.form["loan"]
|
||||
redirect( '/?loan=' + loan )
|
||||
loanFile = request.form["loan"]
|
||||
subject = request.form["subject"]
|
||||
message = request.form["message"]
|
||||
style = request.form["style"]
|
||||
|
||||
loan = loadLoanInformation('/Users/john/PycharmProjects/mortgage/' + loanFile)
|
||||
amortizeLoan(loan)
|
||||
|
||||
reportCreated = False
|
||||
textReport = pdfReport = htmlReport = None
|
||||
|
||||
if 'text' in request.form:
|
||||
textReport = transformTemplate(selectTemplate('text'), loan)
|
||||
reportCreated = True
|
||||
|
||||
if 'pdf' in request.form:
|
||||
pdfInterimReport = transformTemplate(selectTemplate('pdf'), loan)
|
||||
pdfReport = createPDF(pdfInterimReport)
|
||||
if style == 'embed':
|
||||
style = 'attach'
|
||||
reportCreated = True
|
||||
|
||||
if ('html' in request.form) or (reportCreated is False):
|
||||
htmlReport = transformTemplate(selectTemplate('html'), loan)
|
||||
|
||||
|
||||
# send email
|
||||
emailParameters = loan["email"]
|
||||
|
||||
msg = generateEmail( emailParameters["from_address"],
|
||||
emailParameters["to_address"],
|
||||
subject,
|
||||
message, pdfReport, htmlReport, textReport)
|
||||
|
||||
sendEmail(msg, emailParameters["from_address"], emailParameters["to_address"], emailParameters['password'])
|
||||
|
||||
|
||||
return render_template('email.html', filename=loanFile)
|
||||
|
||||
def addLoan(loanName, fileName):
|
||||
x = {}
|
||||
@@ -47,7 +89,10 @@ def addLoan(loanName, fileName):
|
||||
x['filename'] = fileName
|
||||
return x
|
||||
|
||||
'''from old code'''
|
||||
###################
|
||||
# from old code #
|
||||
###################
|
||||
|
||||
def getStatementHeader(datastore):
|
||||
return datastore['header']
|
||||
|
||||
@@ -238,6 +283,85 @@ def amortizeLoan(loan):
|
||||
loan["future_payments"] = future_payments
|
||||
return
|
||||
|
||||
def transformTemplate(template_fileName, loanModel):
|
||||
# template_filename = "statement.text.jinja"
|
||||
# setup jinja for creating the statement
|
||||
template = environment.get_template(template_fileName)
|
||||
|
||||
print loanModel
|
||||
report = template.render(model=loanModel)
|
||||
return report
|
||||
|
||||
|
||||
def generateEmail(from_address, to_address, subject, body, pdf, html, txt):
|
||||
msg = MIMEMultipart()
|
||||
msg['Subject'] = subject
|
||||
msg['From'] = from_address
|
||||
msg['To'] = to_address
|
||||
|
||||
msg.attach(MIMEText(body))
|
||||
|
||||
if (pdf != None):
|
||||
part = MIMEBase("application", "octet-stream")
|
||||
part.set_payload(pdf)
|
||||
Encoders.encode_base64(part)
|
||||
part.add_header('Content-Disposition', 'attachment; filename="statement.pdf"')
|
||||
msg.attach(part)
|
||||
|
||||
if (html != None):
|
||||
part = MIMEBase("text", "html")
|
||||
part.set_payload(html)
|
||||
Encoders.encode_base64(part)
|
||||
part.add_header('Content-Disposition', 'attachment; filename="statement.html"')
|
||||
msg.attach(part)
|
||||
|
||||
if (txt != None):
|
||||
part = MIMEBase("text", "plain")
|
||||
part.set_payload(txt)
|
||||
Encoders.encode_base64(part)
|
||||
part.add_header('Content-Disposition', 'attachment; filename="statement.txt"')
|
||||
msg.attach(part)
|
||||
|
||||
return msg
|
||||
|
||||
|
||||
def sendEmail(msg, from_address, to_address, passwd):
|
||||
try:
|
||||
server = smtplib.SMTP('smtp.gmail.com', 587)
|
||||
server.ehlo()
|
||||
server.starttls()
|
||||
server.login(from_address, passwd)
|
||||
|
||||
server.sendmail(from_address, to_address, msg.as_string())
|
||||
server.close()
|
||||
except:
|
||||
print "Couldn't send email."
|
||||
|
||||
|
||||
def createPDF(report):
|
||||
# create pdf
|
||||
class MyFPDF(FPDF, HTMLMixin):
|
||||
pass
|
||||
|
||||
pdf = MyFPDF()
|
||||
pdf.set_font(family='Arial', size=12)
|
||||
pdf.add_page()
|
||||
pdf.write_html(report)
|
||||
# pdf.output(name='test.pdf', dest='F')
|
||||
return pdf.output(dest='S')
|
||||
|
||||
|
||||
def selectTemplate(format):
|
||||
if format == 'html':
|
||||
return 'statement.html.jinja'
|
||||
|
||||
if format == 'pdf':
|
||||
return 'statement.pdf.jinja'
|
||||
|
||||
if format == 'text':
|
||||
return 'statement.text.jinja'
|
||||
|
||||
return 'statement.html.jinja'
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.debug = True
|
||||
|
||||
Reference in New Issue
Block a user