From 59e63cee2fe5b339dfd25b419ad86b42b57da364 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20Tollk=C3=BChn?= Date: Wed, 10 Sep 2025 13:45:29 +0200 Subject: [PATCH] bug fixing using cursor --- app/controllers/clients_controller.rb | 9 ++++++++- app/helpers/subprojects_helper.rb | 4 ++-- app/models/client.rb | 4 ++++ app/models/project.rb | 2 +- app/views/projects/_form.html.erb | 2 -- ...bproject_address.erb => _subproject_address.html.erb} | 0 6 files changed, 15 insertions(+), 6 deletions(-) rename app/views/subproject_addresses/{_subproject_address.erb => _subproject_address.html.erb} (100%) diff --git a/app/controllers/clients_controller.rb b/app/controllers/clients_controller.rb index 3c1514d..c03cfee 100644 --- a/app/controllers/clients_controller.rb +++ b/app/controllers/clients_controller.rb @@ -49,8 +49,15 @@ class ClientsController < ApplicationController # DELETE /clients/1 or /clients/1.json def destroy - @client.destroy! + if @client.referenced_count > 0 + respond_to do |format| + format.html { redirect_to clients_path, alert: "Client is referenced by subprojects and cannot be deleted." } + format.json { render json: { error: "Client has references" }, status: :unprocessable_entity } + end + return + end + @client.destroy! respond_to do |format| format.html { redirect_to clients_path, status: :see_other, notice: "Client was successfully destroyed." } format.json { head :no_content } diff --git a/app/helpers/subprojects_helper.rb b/app/helpers/subprojects_helper.rb index 8285462..4b8c314 100644 --- a/app/helpers/subprojects_helper.rb +++ b/app/helpers/subprojects_helper.rb @@ -10,9 +10,9 @@ module SubprojectsHelper def subproject_form_input(form, attrib, subproject) case attrib when :project - form.collection_select :project_id, Project.all, :id, ->(project) { project.name }, prompt: "Select Project" + form.collection_select :project_id, Project.all, :id, :name, prompt: "Select Project" when :client, :owner, :builder - form.collection_select "#{attrib}_id", Client.all, :id, ->(client) { "#{client.company_name} (#{client.lastname}, #{client.firstname})" }, prompt: "Select #{attrib.to_s.capitalize}" + form.collection_select "#{attrib}_id", Client.all, :id, :display_name, prompt: "Select #{attrib.to_s.capitalize}" else form.text_field attrib, value: subproject.send(attrib) end diff --git a/app/models/client.rb b/app/models/client.rb index 9a04d51..24fca03 100644 --- a/app/models/client.rb +++ b/app/models/client.rb @@ -13,4 +13,8 @@ class Client < ApplicationRecord def editable? referenced_count <= 1 end + + def display_name + "#{company_name} (#{lastname}, #{firstname})" + end end \ No newline at end of file diff --git a/app/models/project.rb b/app/models/project.rb index f896a8a..f113733 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -1,5 +1,5 @@ class Project < ApplicationRecord - has_many :subprojects, inverse_of: :project + has_many :subprojects, inverse_of: :project, dependent: :destroy accepts_nested_attributes_for :subprojects, allow_destroy: true, reject_if: :all_blank validates :name, presence: true diff --git a/app/views/projects/_form.html.erb b/app/views/projects/_form.html.erb index 6f2ca85..5b4b43d 100644 --- a/app/views/projects/_form.html.erb +++ b/app/views/projects/_form.html.erb @@ -56,8 +56,6 @@ <% end %> - -
<%= form.submit %>
diff --git a/app/views/subproject_addresses/_subproject_address.erb b/app/views/subproject_addresses/_subproject_address.html.erb similarity index 100% rename from app/views/subproject_addresses/_subproject_address.erb rename to app/views/subproject_addresses/_subproject_address.html.erb