diff --git a/app_new/interventions/crud.py b/app_new/interventions/crud.py index d64a2f5..465dde1 100644 --- a/app_new/interventions/crud.py +++ b/app_new/interventions/crud.py @@ -404,19 +404,27 @@ def detail(id): def save_work_details(id): """Enregistre les informations de travaux depuis la fiche intervention.""" intervention = Intervention.query.get_or_404(id) - intervention.execution_mode = request.form.get('execution_mode', 'interne') - service_id = request.form.get('department_service_id') - intervention.department_service_id = int(service_id) if service_id and service_id.isdigit() else None - company_id = request.form.get('company_id') - intervention.company_id = int(company_id) if company_id and company_id.isdigit() else None - intervention.quote_status = request.form.get('quote_status', 'non_requis') - intervention.quote_reference = request.form.get('quote_reference') or None - intervention.quote_amount_ht = float(request.form['quote_amount_ht']) if request.form.get('quote_amount_ht') else None - intervention.quote_amount_ttc = float(request.form['quote_amount_ttc']) if request.form.get('quote_amount_ttc') else None + if 'execution_mode' in request.form: + intervention.execution_mode = request.form.get('execution_mode') or 'interne' + if 'department_service_id' in request.form: + service_id = request.form.get('department_service_id') + intervention.department_service_id = int(service_id) if service_id and service_id.isdigit() else None + if 'company_id' in request.form: + company_id = request.form.get('company_id') + intervention.company_id = int(company_id) if company_id and company_id.isdigit() else None + if 'quote_status' in request.form: + intervention.quote_status = request.form.get('quote_status') or 'non_requis' + if 'quote_reference' in request.form: + intervention.quote_reference = request.form.get('quote_reference') or None + for field in ('quote_amount_ht', 'quote_amount_ttc'): + if field in request.form: + setattr(intervention, field, float(request.form[field]) if request.form.get(field) else None) for field in ('department_request_date', 'chief_validation_date', 'department_validation_date', 'quote_date', 'quote_valid_until'): - value = request.form.get(field) - setattr(intervention, field, datetime.strptime(value, '%Y-%m-%d').date() if value else None) - intervention.work_notes = request.form.get('work_notes') or None + if field in request.form: + value = request.form.get(field) + setattr(intervention, field, datetime.strptime(value, '%Y-%m-%d').date() if value else None) + if 'work_notes' in request.form: + intervention.work_notes = request.form.get('work_notes') or None db.session.commit() flash('Workflow travaux enregistré.', 'success') return redirect(url_for('interventions.detail', id=id)) @@ -499,7 +507,9 @@ def change_status(id): """Changer le statut d'une intervention.""" intervention = Intervention.query.get_or_404(id) old_status = intervention.status - new_status = request.form.get('status') + # Les anciennes fiches utilisent ``to_status`` ; accepter aussi ``status`` + # pour les formulaires d'édition et conserver une transition réellement modifiable. + new_status = request.form.get('to_status') or request.form.get('status') comment = request.form.get('comment', '') allowed = INTERVENTION_TRANSITIONS.get(old_status, set()) diff --git a/app_new/interventions/templates/detail.html b/app_new/interventions/templates/detail.html index bc2f2b5..52ecb45 100644 --- a/app_new/interventions/templates/detail.html +++ b/app_new/interventions/templates/detail.html @@ -51,6 +51,15 @@