From 3c2e3033ed19b1d54b020338a8532a941239a83c Mon Sep 17 00:00:00 2001
From: Ethan-clay03 <ethanclay2017@gmail.com>
Date: Mon, 17 Feb 2025 14:42:35 +0000
Subject: [PATCH] Update checkout page and begin to update receipt and boarding
 passes

---
 app/__init__.py                             |  22 +++++++-----
 app/bookings/routes.py                      |   2 --
 app/main/utils.py                           |  38 +++++++++++++++++---
 app/models/bookings.py                      |   2 ++
 app/static/core/1.jpg                       | Bin 0 -> 15777 bytes
 app/templates/bookings/payment_success.html |  28 +++++++++------
 barcode.png                                 | Bin 0 -> 12058 bytes
 7 files changed, 68 insertions(+), 24 deletions(-)
 create mode 100644 app/static/core/1.jpg
 create mode 100644 barcode.png

diff --git a/app/__init__.py b/app/__init__.py
index 1cbd84a..02e52f4 100644
--- a/app/__init__.py
+++ b/app/__init__.py
@@ -6,7 +6,7 @@ from flask_login import LoginManager, current_user
 from flask_principal import Principal, Permission, RoleNeed, identity_loaded
 from flask_wtf.csrf import CSRFProtect
 from dotenv import load_dotenv
-from app.logger import auth_logger
+from app.logger import auth_logger, error_logger
 from functools import wraps
 import os
 import pymysql
@@ -36,17 +36,23 @@ user_permission = Permission(RoleNeed('user'))
 
 
 def create_database_if_not_exists(db_host, db_user, db_password, db_name):
-    # Connect using Root to create schema if doesn't exist and then create user for that schema
-    connection = pymysql.connect(
-        host=db_host,
-        user='root',
-        password=db_password
-    )
+    try:
+        connection = pymysql.connect(
+            host=db_host,
+            user='root',
+            password=db_password
+        )
+    except:
+        error_message = 'Unable to connect to database as the root user, is the docker database running? If issue persists check README.md for help'
+        print(error_message)
+        error_logger.error(error_message)
+        exit()
+        
 
     try:
         with connection.cursor() as cursor:
             cursor.execute(f"CREATE DATABASE IF NOT EXISTS {db_name}")
-            # Create the user from .env details
+            # Create the user 
             cursor.execute(f"CREATE USER IF NOT EXISTS '{db_user}'@'%' IDENTIFIED BY '{db_password}'")
             cursor.execute(f"GRANT ALL PRIVILEGES ON {db_name}.* TO '{db_user}'@'%'")
             cursor.execute(f"FLUSH PRIVILEGES")
diff --git a/app/bookings/routes.py b/app/bookings/routes.py
index ec50e6c..102b876 100644
--- a/app/bookings/routes.py
+++ b/app/bookings/routes.py
@@ -340,8 +340,6 @@ def filter_bookings():
     results_html = render_template('_results.html', items=paginated_items, page=page, total_pages=total_pages, discount=discount, days_away=days_away, seat_type=seat_type)
     return jsonify({'html': results_html})
 
-
-
 def process_images(listings):
     for item in listings:
         main_image = next((img for img in item.listing_images if img.main_image), None)
diff --git a/app/main/utils.py b/app/main/utils.py
index e362fda..949e0da 100644
--- a/app/main/utils.py
+++ b/app/main/utils.py
@@ -8,6 +8,7 @@ import qrcode
 import barcode
 from barcode.writer import ImageWriter
 from io import BytesIO
+import os
 from PIL import Image
 
 def allowed_image_files(filename):
@@ -50,32 +51,61 @@ def pretty_time(unformatted_time, to_12_hour=True):
     return formatted_time
 
 
+
+def get_static_files(*path_parts):
+    return os.path.join(current_app.root_path, 'static', *path_parts)
+
 def create_receipt(seat_num, seat_type, depart_date, listing):
     pdf = FPDF()
     pdf.add_page()
     pdf.set_font("Arial", size=12)
     
+    # Add company logo
+    company_logo_path = get_static_files('core', '1.jpg')
+    pdf.image(company_logo_path, x=10, y=8, w=33)
+    
+    # Adjust y position to avoid overlapping
+    pdf.set_xy(10, 45)
     pdf.cell(200, 10, txt="Receipt", ln=True, align='C')
-
+    
     pdf.cell(200, 10, txt=f"Seat Number: {seat_num}", ln=True)
     pdf.cell(200, 10, txt=f"Seat Type: {seat_type}", ln=True)
     pdf.cell(200, 10, txt=f"Departure Date: {depart_date}", ln=True)
     pdf.cell(200, 10, txt=f"Departure Location: {listing.depart_location}", ln=True)
     pdf.cell(200, 10, txt=f"Destination Location: {listing.destination_location}", ln=True)
-
+    
     if seat_type.lower() == 'economy':
         cost = listing.economy_fair_cost
     elif seat_type.lower() == 'business':
         cost = listing.business_fair_cost
     
     pdf.cell(200, 10, txt=f"Total Cost: {cost}", ln=True)
-
+    
+    # Generate barcode
+    receipt_data = f"{seat_num},{seat_type},{depart_date},{listing.depart_location},{listing.destination_location},{cost}"
+    code128 = barcode.get('code128', receipt_data, writer=ImageWriter())
+    barcode_image = BytesIO()
+    code128.write(barcode_image)
+    barcode_image.seek(0)
+    
+    # Save barcode image
+    with open("barcode.png", "wb") as f:
+        f.write(barcode_image.read())
+    
+    pdf.image("barcode.png", x=150, y=8, w=50)
+    
+    # Add thank you message
+    pdf.set_font("Arial", size=16, style='B')
+    pdf.set_xy(10, 250)
+    pdf.cell(200, 10, txt="Thanks for choosing Horizon Travels!", ln=True, align='C')
+    
     output = BytesIO()
     pdf.output(output)
     output.seek(0)
-
+    
     return output
 
+
 def create_plane_ticket(seat_num, seat_type, depart_date, listing, booking_id):
     for i in range(seat_num):
         seat_number = f"{seat_num + 1 - i:02d}"
diff --git a/app/models/bookings.py b/app/models/bookings.py
index eb1e650..34b1551 100644
--- a/app/models/bookings.py
+++ b/app/models/bookings.py
@@ -11,6 +11,8 @@ class Bookings(UserMixin, db.Model):
     seat_type = db.Column(db.String(50), nullable=False)
     num_seats = db.Column(db.Integer, nullable=False) 
     cancelled = db.Column(db.Boolean, default=False)
+    booking_date = db.Column(db.Date, nullable=False)
+    last_four_card_nums = db.Column(db.String(4), nullable=False)
 
     @staticmethod
     def create_booking(listing_id, user_id, amount_paid, seat_type, num_seats):
diff --git a/app/static/core/1.jpg b/app/static/core/1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..7efd61d2d445c696b4f4689a845e8274123d2656
GIT binary patch
literal 15777
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
QIqkZ`|Fo+}kk0>`0PVa46aWAK

literal 0
HcmV?d00001

diff --git a/app/templates/bookings/payment_success.html b/app/templates/bookings/payment_success.html
index 65a99ea..5cfb912 100644
--- a/app/templates/bookings/payment_success.html
+++ b/app/templates/bookings/payment_success.html
@@ -1,15 +1,23 @@
 {% extends 'base.html' %}
 {% block content %}
-
 <body>
-    <h1>Payment Successful!</h1>
-    <p>Your payment has been processed successfully.</p>
-    <p>Click the buttons below to download your receipt and plane ticket:</p>
-    <form action="{{ url_for('bookings.generate_receipt', id=id) }}" method="get">
-        <button type="submit">Download Receipt</button>
-    </form>
-    <form action="{{ url_for('bookings.generate_ticket', id=id) }}" method="get">
-        <button type="submit">Download Plane Ticket</button>
-    </form>     
+    <div class="container text-center mt-5">
+        <h1 class="text-success">Payment Successful!</h1>
+        <p class="lead">Your payment has been processed successfully.</p>
+        <p>Click the buttons below to download your receipt and plane ticket:</p>
+        <div class="mt-4">
+            <form action="{{ url_for('bookings.generate_receipt', id=id) }}" method="get" class="d-inline">
+                <button type="submit" class="btn btn-success btn-lg">Download Receipt</button>
+            </form>
+            <form action="{{ url_for('bookings.generate_ticket', id=id) }}" method="get" class="d-inline">
+                <button type="submit" class="btn btn-primary btn-lg">Download Plane Ticket</button>
+            </form>
+        </div>
+        <div class="mt-4">
+            <a href="{{ url_for('main.index') }}" class="btn btn-warning btn-lg">
+                <i class="fas fa-home"></i> Go Home
+            </a>
+        </div>
+    </div>
 </body>
 {% endblock %}
diff --git a/barcode.png b/barcode.png
new file mode 100644
index 0000000000000000000000000000000000000000..6316549fa9149ba0f79c580fc4d8ab0adf42cdb3
GIT binary patch
literal 12058
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

literal 0
HcmV?d00001

-- 
GitLab