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

71
app.py
View File

@@ -1,8 +1,9 @@
from flask import Flask, render_template, request, flash, redirect
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.orm import sessionmaker
import pymysql
app = Flask(__name__)
app.config['SECRET_KEY'] = 'fa6166b0218186fb852429060105aca18e0f979240be8ebf'
@@ -14,31 +15,31 @@ class Dates(Base):
__tablename__ = 'Dates'
id = Column(Integer, primary_key=True, autoincrement=True)
dateTypeID = Column(Integer)
dateValue = Column(String)
dateValue = Column(Date)
class DatesMetadata(Base):
__tablename__ = 'DatesMetadata'
id = Column(Integer, primary_key=True, autoincrement=True)
dateTypeID = Column(Integer)
DateTypeName = Column(String)
DateTypeName = Column(String(50))
class Settings(Base):
__tablename__ = 'Settings'
id = Column(Integer, primary_key=True, autoincrement=True)
settingType = Column(Integer)
settingValue = Column(String)
settingValue = Column(String(50))
class SettingsMetadata(Base):
__tablename__ = 'SettingsMetadata'
id = Column(Integer, primary_key=True, autoincrement=True)
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)
Settings.__table__.create(bind=engine, checkfirst=True)
DatesMetadata.__table__.create(bind=engine, checkfirst=True)
@@ -63,58 +64,92 @@ def index():
# alerts = {'text': False, 'email': True}
# 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 request.method == 'POST':
dates['plant'] = request.form['plantDate']
dates['last'] = request.form['lastDate']
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=2).update({Dates.dateValue: dates['last']})
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()
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
else:
# result = session.query(Dates).filter_by(dateTypeID=1).first()
dates['plant'] = session.query(Dates).filter_by(dateTypeID=1).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['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)
@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')
def install():
session = Session()
populateDate = datetime.datetime.strftime(datetime.datetime.now(), '%Y-%m-%d')
populateDate = datetime.date.today()
# Populate Dates Table
session.add(Dates(dateTypeID=1, dateValue=populateDate))
session.add(Dates(dateTypeID=2, dateValue=populateDate))
session.add(Dates(dateTypeID=3, dateValue=populateDate))
session.add(Dates(dateTypeID=4, dateValue='14'))
# Populate DatesMetadata
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Plant Date'))
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Last Feeding Date'))
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Next Feeding Date'))
session.add(DatesMetadata(dateTypeID=1, DateTypeName='Feeding Frequency'))
session.add(DatesMetadata(dateTypeID=2, DateTypeName='Last Feeding Date'))
session.add(DatesMetadata(dateTypeID=3, DateTypeName='Next Feeding Date'))
# Populate Settings
session.add(Settings(settingType=1, settingValue='False'))
session.add(Settings(settingType=2, settingValue='False'))
session.add(Settings(settingType=3, settingValue='14'))
# Populate SettingsMetadata
session.add(SettingsMetadata(settingTypeID=1, settingTypeName='Text'))
session.add(SettingsMetadata(settingTypeID=2, settingTypeName='Email'))
session.add(SettingsMetadata(settingTypeID=3, settingTypeName='Feeding Frequency'))
session.commit()
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() {
return null;
fetch('/updateFeed')
}

View File

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

View File

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