import os, mysql.connector, streamlit as st from datetime import datetime def mysql_conn(): password= os.getenv("MYSQL_PWD"), conn = mysql.connector.connect( host="mysql-omni-omni.b.aivencloud.com", port="21906", user="avnadmin", password= password, database = "defaultdb" ) cursor = conn.cursor() return cursor, conn def mysql_check(): cursor, conn = mysql_conn() cursor.execute("SHOW TABLES;") # cursor.execute("DESCRIBE receipt_headers_allvarchar;") cursor.close() conn.close() def mysql_create_receipt_table(): cursor, conn = mysql_conn() cursor.execute(""" CREATE TABLE IF NOT EXISTS receipt_headers ( receipt_id INT AUTO_INCREMENT PRIMARY KEY, store_name VARCHAR(255), slogan VARCHAR(255), address VARCHAR(255), store_manager VARCHAR(255), phone_number VARCHAR(50), transaction_id VARCHAR(255), date DATE, time TIME, cashier VARCHAR(255), subtotal DECIMAL(10,2), sales_tax DECIMAL(10,2), total DECIMAL(10,2), gift_card DECIMAL(10,2), charged_amount DECIMAL(10,2), card_type VARCHAR(50), auth_code VARCHAR(50), chip_read VARCHAR(50), aid VARCHAR(50), issuer VARCHAR(255), policy_id VARCHAR(50), expiration_date DATE, survey_message TEXT, survey_website VARCHAR(255), user_id VARCHAR(255), password VARCHAR(255), eligibility_note TEXT ) """) # Create line_items table cursor.execute(""" CREATE TABLE IF NOT EXISTS line_items ( line_item_id INT AUTO_INCREMENT PRIMARY KEY, receipt_id INT, sku VARCHAR(255), description VARCHAR(255), details TEXT, price DECIMAL(10,2), FOREIGN KEY (receipt_id) REFERENCES receipt_headers(receipt_id) ) """) conn.commit() cursor.close() conn.close() def mysql_create_receipt_table_allvarchar(): cursor, conn = mysql_conn() cursor.execute(""" CREATE TABLE IF NOT EXISTS receipt_headers_allvarchar ( receipt_id INT AUTO_INCREMENT PRIMARY KEY, store_name VARCHAR(255), slogan VARCHAR(255), address VARCHAR(255), store_manager VARCHAR(255), phone_number VARCHAR(50), transaction_id VARCHAR(255), date VARCHAR(50), time VARCHAR(50), cashier VARCHAR(255), subtotal DECIMAL(10,2), sales_tax DECIMAL(10,2), total DECIMAL(10,2), gift_card DECIMAL(10,2), charged_amount DECIMAL(10,2), card_type VARCHAR(50), auth_code VARCHAR(50), chip_read VARCHAR(50), aid VARCHAR(50), issuer VARCHAR(255), policy_id VARCHAR(50), expiration_date VARCHAR(50), survey_message TEXT, survey_website VARCHAR(255), user_id VARCHAR(255), password VARCHAR(255), eligibility_note TEXT ) """) # Create line_items table cursor.execute(""" CREATE TABLE IF NOT EXISTS line_items_allvarchar ( line_item_id INT AUTO_INCREMENT PRIMARY KEY, receipt_id INT, sku VARCHAR(255), description VARCHAR(255), details TEXT, price DECIMAL(10,2), FOREIGN KEY (receipt_id) REFERENCES receipt_headers(receipt_id)) """) conn.commit() cursor.close() conn.close() def mysql_insert_receipt(receipt_data): cursor, conn = mysql_conn() # Insert into receipt_headers header_insert_query = """ INSERT INTO receipt_headers (store_name, slogan, address, store_manager, phone_number, transaction_id, date, time, cashier, subtotal, sales_tax, total, gift_card, charged_amount, card_type, auth_code, chip_read, aid, issuer, policy_id, expiration_date, survey_message, survey_website, user_id, password, eligibility_note) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s) """ header_info = receipt_data['receipt_headers'] line_items = receipt_data['line_items'] # Format date, time, and expiration_date formatted_date = datetime.strptime(header_info['date'], '%m/%d/%Y').strftime('%Y-%m-%d') formatted_time = datetime.strptime(header_info['time'], '%I:%M %p').strftime('%H:%M:%S') # formatted_expiration_date = datetime.strptime(header_info['expiration_date'], '%m/%d/%Y').strftime('%Y-%m-%d') formatted_expiration_date = datetime.strptime(header_info['expiration_date'], '%m/%d/%Y').strftime('%Y-%m-%d') if header_info['expiration_date'] else '01/01/2023' formatted_expiration_date = datetime.strptime(header_info['expiration_date'], '%m/%d/%Y') if header_info['expiration_date'] else datetime.strptime('01/01/1000', '%m/%d/%Y') # Prepare header values header_values = ( header_info['store_name'], header_info['slogan'], header_info['address'], header_info['store_manager'], header_info['phone_number'], header_info['transaction_id'], formatted_date, formatted_time, header_info['cashier'], header_info['subtotal'], header_info['sales_tax'], header_info['total'], header_info['gift_card'], header_info['charged_amount'], header_info['card_type'], header_info['auth_code'], header_info['chip_read'], header_info['aid'], header_info['issuer'], header_info['policy_id'], formatted_expiration_date, header_info['survey_message'], header_info['survey_website'], header_info['user_id'], header_info['password'], header_info['eligibility_note'] ) # Insert header values cursor.execute(header_insert_query, header_values) receipt_id = cursor.lastrowid # Prepare and insert line items line_item_insert_query = """ INSERT INTO line_items (receipt_id, sku, description, details, price) VALUES (%s, %s, %s, %s, %s) """ for item in line_items: price = float(item['price']) line_item_values = ( receipt_id, item['sku'], item['description'], item.get('details', ''), price ) cursor.execute(line_item_insert_query, line_item_values) # Commit and close the connection conn.commit() cursor.close() conn.close()