OneCompiler

Flask v 2

165

from flask import Flask, render_template, request, redirect, url_for, session
from flask_session import Session
import psycopg2
from datetime import datetime

DB_HOST = '127.0.0.1'
DB_NAME = 'postgres'
DB_USER = 'postgres'
DB_PASSWORD = 'postgres123'

app = Flask(name)
app.config['SESSION_PERMANENT'] = False
app.config['SESSION_TYPE'] = 'filesystem'
app.secret_key = 'your_secret_key' # Required for session management
Session(app)

Database connection function

def connect_to_db():
try:
return psycopg2.connect(
host=DB_HOST,
database=DB_NAME,
user=DB_USER,
password=DB_PASSWORD
)
except Exception as error:
print(f"Database connection error: {error}")
return None

@app.route('/')
def home():
return redirect(url_for('login'))

@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
conn = connect_to_db()
if conn:
cursor = conn.cursor()
query = "SELECT * FROM check_admin WHERE username=%s AND password=%s"
cursor.execute(query, (username, password))
result = cursor.fetchone()
cursor.close()
conn.close()
if result:
session['login'] = True
return redirect(url_for('index')) # Redirect to index after login
return render_template('login.html')

@app.route('/index', methods=['GET', 'POST'])
def index():
if not session.get('login'):
return redirect(url_for('login'))

if request.method == 'POST':
    telephone_no = request.form['telephone_number']
    session['telephone_number'] = telephone_no  # Store in session
    return redirect(url_for('receipt'))

return render_template('index.html')

@app.route('/receipt')
def receipt():
if not session.get('login'):
return redirect(url_for('login'))

telephone_no = session.get('telephone_number')
if not telephone_no:
    return redirect(url_for('index'))

conn = connect_to_db()
if conn:
    cursor = conn.cursor()
    query = "SELECT * FROM Customer_info WHERE Telephone_No=%s"
    cursor.execute(query, (telephone_no,))
    result = cursor.fetchone()
    cursor.close()
    conn.close()

    if result:
        customer_name, telephone_no, telephone_exchange, monthly_plan, billed_month, amount_payable = result[:6]
        payment_method = 'Cash'
        paid_dt_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        name_of_account_officer = "Admin"

        # Update payment status
        conn = connect_to_db()
        if conn:
            cursor = conn.cursor()
            update_query = """
                UPDATE Customer_info 
                SET Payment_Status='Paid', paid_dt_time=NOW(), Name_of_the_Accounts_Officer=%s 
                WHERE Telephone_No=%s
            """
            cursor.execute(update_query, (name_of_account_officer, telephone_no))
            conn.commit()
            cursor.close()
            conn.close()

        return render_template('receipt.html', customer_name=customer_name, telephone_no=telephone_no, 
                               telephone_exchange=telephone_exchange, monthly_plan=monthly_plan, 
                               billed_month=billed_month, amount_payable=amount_payable, 
                               payment_method=payment_method, paid_dt_time=paid_dt_time, 
                               name_of_account_officer=name_of_account_officer)

return "Error retrieving customer information"

@app.route('/logout')
def logout():
session.clear()
return redirect(url_for('login'))

if name == 'main':
app.run(debug=True)