diff --git a/app.py b/app.py index c808d61..bcb7d53 100644 --- a/app.py +++ b/app.py @@ -309,6 +309,7 @@ def init_db(): 'ALTER TABLE jobs ADD COLUMN meshy_credits_used INTEGER DEFAULT 0', 'ALTER TABLE jobs ADD COLUMN meshy_cost REAL DEFAULT 0', 'ALTER TABLE jobs ADD COLUMN meshy_margin_pct REAL DEFAULT 0', + 'ALTER TABLE clients ADD COLUMN acronyme TEXT DEFAULT ""', ] for sql in migrations: try: @@ -845,10 +846,11 @@ def new_client(): if request.method == 'POST': def _int(k): return int(request.form[k]) if request.form.get(k) else None conn.execute('''INSERT INTO clients - (name,email,notes,default_machine_profile_id,default_handling_profile_id, + (name,acronyme,email,notes,default_machine_profile_id,default_handling_profile_id, default_material_profile_id,default_pricing_profile_id) - VALUES(?,?,?,?,?,?,?)''', - (request.form['name'], request.form.get('email',''), request.form.get('notes',''), + VALUES(?,?,?,?,?,?,?,?)''', + (request.form['name'], request.form.get('acronyme','').upper().strip(), + request.form.get('email',''), request.form.get('notes',''), _int('default_machine_profile_id'), _int('default_handling_profile_id'), _int('default_material_profile_id'), _int('default_pricing_profile_id'))) conn.commit(); conn.close() @@ -863,10 +865,11 @@ def edit_client(id): client = conn.execute('SELECT * FROM clients WHERE id=?',(id,)).fetchone() if request.method == 'POST': def _int(k): return int(request.form[k]) if request.form.get(k) else None - conn.execute('''UPDATE clients SET name=?,email=?,notes=?, + conn.execute('''UPDATE clients SET name=?,acronyme=?,email=?,notes=?, default_machine_profile_id=?,default_handling_profile_id=?, default_material_profile_id=?,default_pricing_profile_id=? WHERE id=?''', - (request.form['name'], request.form.get('email',''), request.form.get('notes',''), + (request.form['name'], request.form.get('acronyme','').upper().strip(), + request.form.get('email',''), request.form.get('notes',''), _int('default_machine_profile_id'), _int('default_handling_profile_id'), _int('default_material_profile_id'), _int('default_pricing_profile_id'), id)) conn.commit(); conn.close() @@ -897,6 +900,25 @@ def delete_client(id): conn.commit(); conn.close() return redirect(url_for('clients')) + +@app.route('/export/indy') +def export_indy(): + """Page d'export des commandes au format Indy (produits/services).""" + conn = get_db() + jobs = conn.execute(''' + SELECT j.id, j.name, j.created_at, j.final_price, j.discount_pct, + j.tva_amount, j.order_qty, j.pieces_per_plate, j.plate_name, + j.description, + c.name as client_name, c.acronyme as client_acronyme + FROM jobs j + LEFT JOIN clients c ON j.client_id = c.id + ORDER BY j.created_at DESC + ''').fetchall() + s = get_settings() + tva_pct = float(s.get('tva_rate_pct', 20.0)) + conn.close() + return render_template('export_indy.html', jobs=jobs, tva_pct=tva_pct) + # ─── Projets ────────────────────────────────────────────────────────────────── @app.route('/projects') diff --git a/templates/base.html b/templates/base.html index 194681d..a14e2fa 100644 --- a/templates/base.html +++ b/templates/base.html @@ -213,6 +213,9 @@ + + + diff --git a/templates/client_form.html b/templates/client_form.html index dd28c19..b3ef74c 100644 --- a/templates/client_form.html +++ b/templates/client_form.html @@ -15,10 +15,19 @@