|
| 1 | +from flask import Flask, request, redirect, session, url_for,flash |
| 2 | +from flask.templating import render_template |
| 3 | +from flask_sqlalchemy import SQLAlchemy |
| 4 | +from flask_migrate import Migrate, migrate |
| 5 | +from flask_session import Session |
| 6 | +from datetime import date, time, datetime,timedelta |
| 7 | +from time import time, sleep |
| 8 | +from werkzeug.security import generate_password_hash, check_password_hash |
| 9 | + |
| 10 | +today = datetime.now() |
| 11 | + |
| 12 | + |
| 13 | +app = Flask(__name__) |
| 14 | +app.debug = True |
| 15 | +app.config["SESSION_PERMANENT"] = True |
| 16 | +app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=5) |
| 17 | +app.config["SESSION_TYPE"] = "filesystem" |
| 18 | +Session(app) |
| 19 | +app.secret_key='akshat' |
| 20 | +# adding configuration for using a sqlite database |
| 21 | +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db' |
| 22 | + |
| 23 | +# Creating an SQLAlchemy instance |
| 24 | +db = SQLAlchemy(app) |
| 25 | +# Settings for migrations |
| 26 | +migrate = Migrate(app, db) |
| 27 | + |
| 28 | + |
| 29 | + |
| 30 | +class track(db.Model): |
| 31 | + current_date = db.Column(db.Date,primary_key=True) |
| 32 | + Total=db.Column(db.Integer, unique=False, nullable=False) |
| 33 | + def __repr__(self): |
| 34 | + return f"Total : {self.Total}" |
| 35 | + |
| 36 | + |
| 37 | +class Centre(db.Model): |
| 38 | + id = db.Column(db.Integer, primary_key=True) |
| 39 | + Name = db.Column(db.String(50), unique=False, nullable=False) |
| 40 | + dose = db.Column(db.Integer,unique=False, nullable=True) |
| 41 | + Address = db.Column(db.String(50), unique=False, nullable=False) |
| 42 | + pincode = db.Column(db.Integer, unique=False, nullable=False) |
| 43 | + |
| 44 | + def __repr__(self): |
| 45 | + return f"Name : {self.Name}, Age: {self.Address}" |
| 46 | + |
| 47 | + |
| 48 | +# Models User Table |
| 49 | +class User(db.Model): |
| 50 | + id = db.Column(db.Integer, primary_key=True) |
| 51 | + first_name = db.Column(db.String(20), unique=False, nullable=False) |
| 52 | + last_name = db.Column(db.String(20), unique=False, nullable=False) |
| 53 | + age = db.Column(db.Integer, nullable=False) |
| 54 | + gender = db.Column(db.String(20),unique=False,nullable=False) |
| 55 | + email = db.Column(db.String(20), unique=True, nullable=False) |
| 56 | + pas = db.Column(db.String(255), unique=False, nullable=False) |
| 57 | + status = db.Column(db.String(5), unique=False,nullable=False) |
| 58 | + |
| 59 | + @property |
| 60 | + def password(self): |
| 61 | + raise AttributeError('password is not a readable attribute') |
| 62 | + @password.setter |
| 63 | + def password(self, password): |
| 64 | + self.pas = generate_password_hash(password) |
| 65 | + def verify_password(self, password): |
| 66 | + return check_password_hash(self.pas, password) |
| 67 | + |
| 68 | + |
| 69 | +#Models Admin Table |
| 70 | +class Admin(db.Model): |
| 71 | + id = db.Column(db.Integer, primary_key=True) |
| 72 | + first_name = db.Column(db.String(20), unique=False, nullable=False) |
| 73 | + last_name = db.Column(db.String(20), unique=False, nullable=False) |
| 74 | + age = db.Column(db.Integer, nullable=False) |
| 75 | + role=db.Column(db.String(20),nullable=False) |
| 76 | + email = db.Column(db.String(20), unique=True, nullable=False) |
| 77 | + pas = db.Column(db.String(20), unique=False, nullable=False) |
| 78 | + |
| 79 | + |
| 80 | + # repr method represents how one object of this datatable |
| 81 | + # will look like |
| 82 | + def __repr__(self): |
| 83 | + return f"Name : {self.first_name}, Age: {self.age}" |
| 84 | + |
| 85 | + |
| 86 | + |
| 87 | +#home |
| 88 | +@app.route('/') |
| 89 | +def home(): |
| 90 | + return render_template('index.html') |
| 91 | + |
| 92 | + |
| 93 | +#admin login |
| 94 | +@app.route('/admin') |
| 95 | +def admin(): |
| 96 | + return render_template('admin.html') |
| 97 | + |
| 98 | + |
| 99 | +#user login |
| 100 | +@app.route('/user') |
| 101 | +def user(): |
| 102 | + return render_template('user.html') |
| 103 | + |
| 104 | + |
| 105 | +#User Authentication |
| 106 | +@app.route('/verifyuser',methods=['GET','POST']) |
| 107 | +def verifyuser(): |
| 108 | + user_name = request.form.get("email") |
| 109 | + pas = request.form.get("pas") |
| 110 | + users = User.query.all() |
| 111 | + flag=1 |
| 112 | + u=User() |
| 113 | + u.password=pas |
| 114 | + for data in users: |
| 115 | + if(data.email == user_name and u.verify_password(pas)): |
| 116 | + status=data.status |
| 117 | + session['user']=data.first_name |
| 118 | + flag=0 |
| 119 | + return redirect(url_for('sess')) |
| 120 | + |
| 121 | + if(flag): |
| 122 | + return render_template('user.html',login_result="Invalid Username or Password") |
| 123 | + |
| 124 | + |
| 125 | +@app.route('/sess') |
| 126 | +def sess(): |
| 127 | + if 'user' in session: |
| 128 | + user_name=session['user'] |
| 129 | + return render_template("user_home.html",b=True,name=user_name,msg="Welcome aboard, Hope you are doing well!",head= "Free Covid Precaution Dose" ,msg1="Now Precaution dose for 18-59 age group free at Government Vaccination Centre.") |
| 130 | + else: |
| 131 | + return redirect(url_for('verifyuser')) |
| 132 | + |
| 133 | + |
| 134 | +@app.route('/reg') |
| 135 | +def reg(): |
| 136 | + return render_template('register.html') |
| 137 | + |
| 138 | +# register users to database |
| 139 | +@app.route('/register', methods=["POST"]) |
| 140 | +def register(): |
| 141 | + first_name = request.form.get("first_name") |
| 142 | + last_name = request.form.get("last_name") |
| 143 | + age = request.form.get("age") |
| 144 | + gender = request.form.get("gender") |
| 145 | + email = request.form.get('email') |
| 146 | + pas=request.form.get('pas') |
| 147 | + u=User() |
| 148 | + u.password=pas |
| 149 | + try: |
| 150 | + if first_name != '' and last_name != '' and age is not None and email != '' and pas != '' : |
| 151 | + p = User(first_name=first_name, last_name=last_name, age=age,gender=gender,email=email,pas=u.pas,status=True) |
| 152 | + db.session.add(p) |
| 153 | + db.session.commit() |
| 154 | + session['user']=first_name |
| 155 | + return redirect(url_for('sess')) |
| 156 | + else: |
| 157 | + return render_template('register.html',login_result="Enter Valid Details") |
| 158 | + except: |
| 159 | + return render_template('register.html',login_result="email was already registered") |
| 160 | + |
| 161 | +@app.route('/searchcentres',methods=['POST']) |
| 162 | +def searchcentres(): |
| 163 | + if 'user' in session: |
| 164 | + name = request.form.get("centre") |
| 165 | + centres = Centre.query.all() |
| 166 | + return render_template('searchcentres.html',centres=centres,idd=int(name)) |
| 167 | + else: |
| 168 | + return redirect('verifyuser') |
| 169 | + |
| 170 | +@app.route('/apply/<int:id>') |
| 171 | +def apply(id): |
| 172 | + |
| 173 | + if 'user' in session: |
| 174 | + user_name=session['user'] |
| 175 | + data=Centre.query.get(id) |
| 176 | + if(data.dose<10): |
| 177 | + data.dose+=1 |
| 178 | + db.session.commit() |
| 179 | + return render_template('searchcentres.html',n=user_name,response="Applied Successfully",msg="Success ") |
| 180 | + else: |
| 181 | + return render_template('searchcentres.html',responsefailed="Sorry for the Inconvenience, Daily limit was Exceeded for this particular centre") |
| 182 | + |
| 183 | + |
| 184 | + else: |
| 185 | + return render_template('searchcentres.html',response="Applied Successfully") |
| 186 | + |
| 187 | + |
| 188 | + |
| 189 | + |
| 190 | + |
| 191 | +@app.route('/book') |
| 192 | +def book(): |
| 193 | + if 'user' in session: |
| 194 | + user_name=session['user'] |
| 195 | + centres = Centre.query.all() |
| 196 | + return render_template('searchcentres.html',n=user_name,centres=centres,msg="Book Your Slot") |
| 197 | + return redirect('verifyadmin') |
| 198 | + |
| 199 | + |
| 200 | + |
| 201 | + |
| 202 | +#Admin Authentication |
| 203 | +@app.route('/verifyadmin',methods=['GET','POST']) |
| 204 | +def verifyadmin(): |
| 205 | + user_name = request.form.get("email") |
| 206 | + pas = request.form.get("pas") |
| 207 | + admins = Admin.query.all() |
| 208 | + flag=1 |
| 209 | + for data in admins: |
| 210 | + if(data.email == user_name and data.pas==pas): |
| 211 | + session['user']=user_name |
| 212 | + flag=0 |
| 213 | + return redirect(url_for('sessadmin')) |
| 214 | + |
| 215 | + if(flag): |
| 216 | + return render_template('admin.html',login_result="Invalid Username or Password") |
| 217 | + |
| 218 | +@app.route('/sessadmin') |
| 219 | +def sessadmin(): |
| 220 | + if 'user' in session: |
| 221 | + user_name=session['user'] |
| 222 | + return render_template("admin_home.html",sum=sum) |
| 223 | + else: |
| 224 | + return redirect(url_for('verifyadmin')) |
| 225 | + |
| 226 | +@app.route('/adhome') |
| 227 | +def adhome(): |
| 228 | + if 'user' in session: |
| 229 | + centres=Centre.query.all() |
| 230 | + sum=0 |
| 231 | + for data in centres: |
| 232 | + sum+=data.dose |
| 233 | + return render_template('ad_home.html',sum=sum) |
| 234 | + else: |
| 235 | + return redirect('verifyadmin') |
| 236 | + |
| 237 | +@app.route('/update') |
| 238 | +def update(): |
| 239 | + if 'user' in session: |
| 240 | + centres=Centre.query.all() |
| 241 | + for data in centres: |
| 242 | + data.dose=0 |
| 243 | + db.session.commit() |
| 244 | + return render_template('admin_home.html',update_result='Updated Successfully') |
| 245 | + # return render_template('searchcentres.html',response="Applied Successfully",msg="Success ") |
| 246 | + else: |
| 247 | + return redirect('verifyadmin') |
| 248 | + |
| 249 | +@app.route('/Add_VC') |
| 250 | +def Add_VC(): |
| 251 | + |
| 252 | + if 'user' in session: |
| 253 | + return render_template("Add_VC.html") |
| 254 | + else: |
| 255 | + return redirect('verifyadmin') |
| 256 | + |
| 257 | +@app.route('/VC',methods=['POST']) |
| 258 | +def VC(): |
| 259 | + try: |
| 260 | + if 'user' in session: |
| 261 | + dose=request.form.get("dose") |
| 262 | + id = request.form.get("id") |
| 263 | + Name = request.form.get("Name") |
| 264 | + Address = request.form.get("Address") |
| 265 | + pincode = request.form.get("pincode") |
| 266 | + |
| 267 | + # create an object of the Profile class of models and |
| 268 | + # store data as a row in our datatable |
| 269 | + if Address != '' and Name != '' and pincode is not None: |
| 270 | + vc = Centre(id=id,Name=Name,dose=dose, Address=Address,pincode=pincode) |
| 271 | + db.session.add(vc) |
| 272 | + db.session.commit() |
| 273 | + return render_template("Add_VC.html",addresult='Added Successfully') |
| 274 | + else: |
| 275 | + return render_template("Add_VC.html",addresult="Enter Valid Details") |
| 276 | + |
| 277 | + else: |
| 278 | + return redirect('verifyadmin') |
| 279 | + except: |
| 280 | + return render_template("Add_VC.html",addresult="Centre ID was already created") |
| 281 | + |
| 282 | + |
| 283 | + |
| 284 | +@app.route('/RVC') |
| 285 | +def RVC(): |
| 286 | + if 'user' in session: |
| 287 | + centres = Centre.query.all() |
| 288 | + |
| 289 | + return render_template('Remove_VC.html', centres=centres) |
| 290 | + else: |
| 291 | + return redirect('verifyadmin') |
| 292 | + |
| 293 | +@app.route('/search',methods=['POST']) |
| 294 | +def search(): |
| 295 | + if 'user' in session: |
| 296 | + name = request.form.get("centre") |
| 297 | + centres = Centre.query.all() |
| 298 | + return render_template('rem.html',centres=centres,name=int(name)) |
| 299 | + else: |
| 300 | + return redirect('verifyadmin') |
| 301 | + |
| 302 | +@app.route('/dosage') |
| 303 | +def dosage(): |
| 304 | + if 'user' in session: |
| 305 | + centres = Centre.query.all() |
| 306 | + return render_template('dosage.html',centres=centres) |
| 307 | + else: |
| 308 | + return redirect('verifyadmin') |
| 309 | + |
| 310 | + |
| 311 | +@app.route('/logout') |
| 312 | +def logout(): |
| 313 | + session.pop('user',None) |
| 314 | + return render_template('index.html') |
| 315 | + |
| 316 | + |
| 317 | +#for deleting row in model or table |
| 318 | +@app.route('/delete/<int:id>') |
| 319 | +def delete(id): |
| 320 | + if 'user' in session: |
| 321 | + |
| 322 | + data = Centre.query.get(id) |
| 323 | + db.session.delete(data) |
| 324 | + db.session.commit() |
| 325 | + return render_template('Remove_VC.html',update_result='Removed Successfully') |
| 326 | + else: |
| 327 | + return redirect('verifyadmin') |
| 328 | + |
| 329 | + |
| 330 | + |
| 331 | +@app.route('/user_admin_tables') |
| 332 | +def user_admin_tables(): |
| 333 | + users = User.query.all() |
| 334 | + return render_template('user_admin_tables.html',users=users) |
| 335 | + |
| 336 | +if __name__ == '__main__': |
| 337 | + app.run() |
| 338 | + |
0 commit comments