Switched from sqlite to mysql database. Moved feeding frequency to the settings table. Got the alert checkboxes working correctly. Started to add update feed method and button to site.

This commit is contained in:
dan
2022-02-05 14:52:29 -05:00
parent 92578b53ae
commit 3e3daf9a98
4 changed files with 69 additions and 53 deletions

75
app.py
View File

@@ -1,8 +1,9 @@
from flask import Flask, render_template, request, flash, redirect from flask import Flask, render_template, request, flash, redirect
import datetime import datetime
from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy import create_engine, Column, Integer, String, Date
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
import pymysql
app = Flask(__name__) app = Flask(__name__)
app.config['SECRET_KEY'] = 'fa6166b0218186fb852429060105aca18e0f979240be8ebf' app.config['SECRET_KEY'] = 'fa6166b0218186fb852429060105aca18e0f979240be8ebf'
@@ -14,31 +15,31 @@ class Dates(Base):
__tablename__ = 'Dates' __tablename__ = 'Dates'
id = Column(Integer, primary_key=True, autoincrement=True) id = Column(Integer, primary_key=True, autoincrement=True)
dateTypeID = Column(Integer) dateTypeID = Column(Integer)
dateValue = Column(String) dateValue = Column(Date)
class DatesMetadata(Base): class DatesMetadata(Base):
__tablename__ = 'DatesMetadata' __tablename__ = 'DatesMetadata'
id = Column(Integer, primary_key=True, autoincrement=True) id = Column(Integer, primary_key=True, autoincrement=True)
dateTypeID = Column(Integer) dateTypeID = Column(Integer)
DateTypeName = Column(String) DateTypeName = Column(String(50))
class Settings(Base): class Settings(Base):
__tablename__ = 'Settings' __tablename__ = 'Settings'
id = Column(Integer, primary_key=True, autoincrement=True) id = Column(Integer, primary_key=True, autoincrement=True)
settingType = Column(Integer) settingType = Column(Integer)
settingValue = Column(String) settingValue = Column(String(50))
class SettingsMetadata(Base): class SettingsMetadata(Base):
__tablename__ = 'SettingsMetadata' __tablename__ = 'SettingsMetadata'
id = Column(Integer, primary_key=True, autoincrement=True) id = Column(Integer, primary_key=True, autoincrement=True)
settingTypeID = Column(Integer) settingTypeID = Column(Integer)
settingTypeName = Column(String) settingTypeName = Column(String(50))
engine = create_engine('sqlite:///static/db.db') engine = create_engine('mysql+pymysql://hydro:pRnCWH/M)dujdifi@db.dandembinski.com:3306/Hydro')
Dates.__table__.create(bind=engine, checkfirst=True) Dates.__table__.create(bind=engine, checkfirst=True)
Settings.__table__.create(bind=engine, checkfirst=True) Settings.__table__.create(bind=engine, checkfirst=True)
DatesMetadata.__table__.create(bind=engine, checkfirst=True) DatesMetadata.__table__.create(bind=engine, checkfirst=True)
@@ -63,58 +64,92 @@ def index():
# alerts = {'text': False, 'email': True} # alerts = {'text': False, 'email': True}
# Get the feeding frequency and set it to an int # Get the feeding frequency and set it to an int
dates['freq'] = int(session.query(Dates).filter_by(dateTypeID=4).first().dateValue) dates['freq'] = int(session.query(Settings).filter_by(settingType=3).first().settingValue)
alerts = {'text': False, 'email': True} alerts = {'text': False, 'email': False}
# If clicked the update button for dates, grab the new values and save them to the db. Then render the template # If clicked the update button for dates, grab the new values and save them to the db. Then render the template
if request.method == 'POST': if request.method == 'POST':
dates['plant'] = request.form['plantDate'] dates['plant'] = request.form['plantDate']
dates['last'] = request.form['lastDate'] dates['last'] = request.form['lastDate']
dates['next'] = datetime.datetime.strptime(dates['last'],'%Y-%m-%d') + datetime.timedelta(days=dates['freq']) dates['next'] = datetime.datetime.strptime(dates['last'], '%Y-%m-%d') + datetime.timedelta(days=dates['freq'])
session.query(Dates).filter_by(dateTypeID=1).update({Dates.dateValue: dates['plant']}) session.query(Dates).filter_by(dateTypeID=1).update({Dates.dateValue: dates['plant']})
session.query(Dates).filter_by(dateTypeID=2).update({Dates.dateValue: dates['last']}) session.query(Dates).filter_by(dateTypeID=2).update({Dates.dateValue: dates['last']})
session.query(Dates).filter_by(dateTypeID=3).update({Dates.dateValue: dates['next']}) session.query(Dates).filter_by(dateTypeID=3).update({Dates.dateValue: dates['next']})
# grab text message alert box. Set 'True' if checked or null if unchecked
if request.form.get('AlertText'):
alerts['text'] = 'True'
else:
alerts['text'] = None
# grab email message alert box. Set 'True' if checked or null if unchecked
if request.form.get('AlertEmail'):
alerts['email'] = 'True'
else:
alerts['email'] = None
session.query(Settings).filter_by(settingType=1).update({Settings.settingValue: alerts['text']})
session.query(Settings).filter_by(settingType=2).update({Settings.settingValue: alerts['email']})
session.commit() session.commit()
return render_template("index.html", plant=dates, alerts=alerts) # return render_template("index.html", plant=dates, alerts=alerts)
return redirect('index.html')
# If regular page load, grab all the dates from the db and render the template # If regular page load, grab all the dates from the db and render the template
else: else:
# result = session.query(Dates).filter_by(dateTypeID=1).first()
dates['plant'] = session.query(Dates).filter_by(dateTypeID=1).first().dateValue dates['plant'] = session.query(Dates).filter_by(dateTypeID=1).first().dateValue
dates['last'] = session.query(Dates).filter_by(dateTypeID=2).first().dateValue dates['last'] = session.query(Dates).filter_by(dateTypeID=2).first().dateValue
dates['next'] = session.query(Dates).filter_by(dateTypeID=3).first().dateValue dates['next'] = session.query(Dates).filter_by(dateTypeID=3).first().dateValue
# dates['freq'] = session.query(Dates).filter_by(dateTypeID=4).first().dateValue
# print(datetime.datetime.strptime(dates['plant'], '%Y-%m-%d')) alerts['text'] = session.query(Settings).filter_by(settingType=1).first().settingValue
alerts['email'] = session.query(Settings).filter_by(settingType=2).first().settingValue
return render_template("index.html", plant=dates, alerts=alerts) return render_template("index.html", plant=dates, alerts=alerts)
@app.route('/updateFeed')
def updateFeed():
session = Session()
dates = {'plant': '', 'last': '', 'next': '', 'freq': ''}
dates['freq'] = int(session.query(Settings).filter_by(settingType=3).first().settingValue)
dates['last'] = datetime.date.today()
dates['next'] = dates['last'] + datetime.timedelta(days=dates['freq'])
session.query(Dates).filter_by(dateTypeID=2).update({Dates.dateValue: dates['last']})
session.query(Dates).filter_by(dateTypeID=3).update({Dates.dateValue: dates['next']})
session.commit()
session.close()
return redirect('/index.html')
@app.route('/install.html') @app.route('/install.html')
def install(): def install():
session = Session() session = Session()
populateDate = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d') populateDate = datetime.date.today()
# Populate Dates Table # Populate Dates Table
session.add(Dates(dateTypeID=1, dateValue=populateDate)) session.add(Dates(dateTypeID=1, dateValue=populateDate))
session.add(Dates(dateTypeID=2, dateValue=populateDate)) session.add(Dates(dateTypeID=2, dateValue=populateDate))
session.add(Dates(dateTypeID=3, dateValue=populateDate)) session.add(Dates(dateTypeID=3, dateValue=populateDate))
session.add(Dates(dateTypeID=4, dateValue='14'))
#Populate DatesMetadata # Populate DatesMetadata
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Plant Date')) session.add(DatesMetadata(dateTypeID=1, DateTypeName='Plant Date'))
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Last Feeding Date')) session.add(DatesMetadata(dateTypeID=2, DateTypeName='Last Feeding Date'))
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Next Feeding Date')) session.add(DatesMetadata(dateTypeID=3, DateTypeName='Next Feeding Date'))
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Feeding Frequency'))
# Populate Settings # Populate Settings
session.add(Settings(settingType=1, settingValue='False')) session.add(Settings(settingType=1, settingValue='False'))
session.add(Settings(settingType=2, settingValue='False')) session.add(Settings(settingType=2, settingValue='False'))
session.add(Settings(settingType=3, settingValue='14'))
# Populate SettingsMetadata # Populate SettingsMetadata
session.add(SettingsMetadata(settingTypeID=1, settingTypeName='Text')) session.add(SettingsMetadata(settingTypeID=1, settingTypeName='Text'))
session.add(SettingsMetadata(settingTypeID=2, settingTypeName='Email')) session.add(SettingsMetadata(settingTypeID=2, settingTypeName='Email'))
session.add(SettingsMetadata(settingTypeID=3, settingTypeName='Feeding Frequency'))
session.commit() session.commit()
return redirect('index.html') return redirect('index.html')

View File

@@ -1,12 +1,3 @@
function updateAlerts() {
var text = document.querySelector('#alert_text');
var email = document.querySelector('#alert_email');
alert(text.checked);
alert(email.checked);
fetch('/updateAlerts')
}
function updateFeed() { function updateFeed() {
return null; fetch('/updateFeed')
} }

View File

@@ -1,8 +1,10 @@
<html> <html>
<head> <head>
<title>Hydro</title> <title>Hydro</title>
</head> </head>
<body> <body>
<script type="text/javascript" src="/static/scripts.js"></script>
<div>Hydro: <a href="index.html">home</a></div> <div>Hydro: <a href="index.html">home</a></div>
<br> <br>
{% with messages = get_flashed_messages() %} {% with messages = get_flashed_messages() %}

View File

@@ -1,38 +1,26 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block content %} {% block content %}
<body>
<h1>Information</h1> <h1>Information</h1>
<form method="post"> <form method="post">
<label>Plant Date</label> <label>Plant Date</label>
<input type="date" name="plantDate" <input type="date" name="plantDate" value= {{ plant.plant }}>
value= {{ plant.plant }}>
<br> <br>
<label>Last Feed Date</label> <label>Last Feed Date</label>
<input type="date" name="lastDate" <input type="date" name="lastDate" value= {{ plant.last }}>
value= {{ plant.last }}>
<br> <br>
<label>Next Feed Date</label> <label>Next Feed Date</label>
<input type="date" name="nextDate" <input type="date" name="nextDate" value= {{ plant.next }}>
value= {{ plant.next }}>
<br> <br>
Feed Frequency: {{ plant.freq }} days Feed Frequency: {{ plant.freq }} days
<br> <br>
<button type="submit">Update</button> <br>
<h1>Alerts</h1>
<input type="checkbox" id="alert_text" name="AlertText" value={{ alerts.text }} {{ "checked" if alerts.text else "" }}>
<label for="alert_text">Text Message</label>
<input type="checkbox" id="alert_email" name="AlertEmail" value={{ alerts.email }} {{ "checked" if alerts.email else "" }}>
<label for="alert_email">Email</label><br>
<input type="submit" id="DateSubmitForm" name="DateSubmitForm" value="Save">
</form> </form>
<button class=button onclick="updateFeed()">Update Feed</button>
<h1>Alerts</h1>
<div>
<form method="post">
<input type="checkbox" id="alert_text" name="AlertText" value=alerts.text {{ "checked" if alerts.text else "" }}>
<label for="alert_text">Text Message</label>
<input type="checkbox" id="alert_email" name="AlertEmail" value=alerts.email {{ "checked" if alerts.email else "" }}>
<label for="alert_email">Email</label><br>
<button type="submit">Save</button>
</form>
</div>
<br><br>
<div>
<button class=button onclick="updateFeed()">Update Feed</button>
</div>
{% endblock %} {% endblock %}