diff --git a/app/controllers/contract_templates/duplicates_controller.rb b/app/controllers/contract_templates/duplicates_controller.rb new file mode 100644 index 0000000..495bfdf --- /dev/null +++ b/app/controllers/contract_templates/duplicates_controller.rb @@ -0,0 +1,33 @@ +# frozen_string_literal: true + +class ContractTemplates::DuplicatesController < ApplicationController + before_action :set_contract_template + + def create + authorize(ContractTemplate) + new_contract_template = @contract_template.dup + new_contract_template.name = I18n.t('contract_templates.duplicate.name_prefix', template_name: @contract_template.name) + + # Duplicate rich text fields + + new_contract_template.body = @contract_template.body + new_contract_template.guardian_clause = @contract_template.guardian_clause + new_contract_template.signature_legal_text = @contract_template.signature_legal_text + + if new_contract_template.save + redirect_to [:edit, new_contract_template] + else + redirect_to [@contract_template.project, :contract_templates], alert: t('.error') + end + end + + private + + def contract_templates + policy_scope(ContractTemplate) + end + + def set_contract_template + @contract_template = contract_templates.find(params[:contract_template_id]) + end +end diff --git a/app/controllers/contract_templates_controller.rb b/app/controllers/contract_templates_controller.rb index 404ea31..10ed045 100644 --- a/app/controllers/contract_templates_controller.rb +++ b/app/controllers/contract_templates_controller.rb @@ -38,10 +38,6 @@ class ContractTemplatesController < ApplicationController end def update - unless @contract_template.editable? - redirect_to([@project, :contract_templates], alert: t('.error')) and return - end - @contract_template.attributes = contract_template_params if @contract_template.save diff --git a/app/policies/contract_template_policy.rb b/app/policies/contract_template_policy.rb index 3c20bfe..626cf51 100644 --- a/app/policies/contract_template_policy.rb +++ b/app/policies/contract_template_policy.rb @@ -24,13 +24,17 @@ class ContractTemplatePolicy < ApplicationPolicy end def edit? - create? + record.editable? && create? end def update? edit? end + def duplicate? + create? + end + def import? if user.account_manager? record.project.account = user.account diff --git a/app/views/contract_templates/_contract_template.html.erb b/app/views/contract_templates/_contract_template.html.erb index 203d8cc..464c17d 100644 --- a/app/views/contract_templates/_contract_template.html.erb +++ b/app/views/contract_templates/_contract_template.html.erb @@ -19,9 +19,12 @@