Akcesoria
# app.py
from flask import Flask, render_template, request, redirect, url_for, flash, send_file
from flask_sqlalchemy import SQLAlchemy
from reportlab.pdfgen import canvas
import os
app = Flask(__name__)
app.secret_key = 'your_secret_key’
app.config[’SQLALCHEMY_DATABASE_URI’] = 'sqlite:///database.db’
app.config[’SQLALCHEMY_TRACK_MODIFICATIONS’] = False
db = SQLAlchemy(app)
# Models
class Client(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
email = db.Column(db.String(100), nullable=False)
phone = db.Column(db.String(20), nullable=True)
orders = db.relationship(’Order’, backref=’client’, lazy=True)
class Accessory(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), nullable=False)
price = db.Column(db.Float, nullable=False)
class Order(db.Model):
id = db.Column(db.Integer, primary_key=True)
client_id = db.Column(db.Integer, db.ForeignKey(’client.id’), nullable=False)
accessories = db.relationship(’OrderAccessory’, backref=’order’, lazy=True)
class OrderAccessory(db.Model):
id = db.Column(db.Integer, primary_key=True)
order_id = db.Column(db.Integer, db.ForeignKey(’order.id’), nullable=False)
accessory_id = db.Column(db.Integer, db.ForeignKey(’accessory.id’), nullable=False)
# Routes
@app.route(’/’)
def index():
clients = Client.query.all()
accessories = Accessory.query.all()
orders = Order.query.all()
return render_template(’index.html’, clients=clients, accessories=accessories, orders=orders)
@app.route(’/add_client’, methods=[’POST’])
def add_client():
name = request.form[’name’]
email = request.form[’email’]
phone = request.form[’phone’]
new_client = Client(name=name, email=email, phone=phone)
db.session.add(new_client)
db.session.commit()
flash(’Client added successfully!’, 'success’)
return redirect(url_for(’index’))
@app.route(’/add_accessory’, methods=[’POST’])
def add_accessory():
name = request.form[’name’]
price = request.form[’price’]
new_accessory = Accessory(name=name, price=float(price))
db.session.add(new_accessory)
db.session.commit()
flash(’Accessory added successfully!’, 'success’)
return redirect(url_for(’index’))
@app.route(’/create_order’, methods=[’POST’])
def create_order():
client_id = request.form[’client_id’]
accessory_ids = request.form.getlist(’accessory_ids’)
new_order = Order(client_id=client_id)
db.session.add(new_order)
db.session.commit()
for accessory_id in accessory_ids:
order_accessory = OrderAccessory(order_id=new_order.id, accessory_id=accessory_id)
db.session.add(order_accessory)
db.session.commit()
flash(’Order created successfully!’, 'success’)
return redirect(url_for(’index’))
@app.route(’/export_order/’)
def export_order(order_id):
order = Order.query.get_or_404(order_id)
client = order.client
accessories = [OrderAccessory.query.get(item.id).accessory_id for item in order.accessories]
filename = f’order_{order_id}.pdf’
filepath = os.path.join(’exports’, filename)
os.makedirs(’exports’, exist_ok=True)
c = canvas.Canvas(filepath)
c.drawString(100, 750, f’Order ID: {order.id}’)
c.drawString(100, 730, f’Client: {client.name} – {client.email}’)
y = 700
total = 0
for accessory in accessories:
acc = Accessory.query.get(accessory)
c.drawString(100, y, f'{acc.name} – ${acc.price}’)
total += acc.price
y -= 20
c.drawString(100, y – 20, f’Total: ${total}’)
c.save()
return send_file(filepath, as_attachment=True)
if __name__ == '__main__’:
db.create_all()
app.run(debug=True)