implement duplication

This commit is contained in:
Bilal
2020-07-13 21:45:00 +02:00
parent 0741f8a230
commit e41d7603d0
7 changed files with 55 additions and 8 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -19,9 +19,12 @@
<div class="btn-group">
<%= button_tag t(".actions.manage"), class: "btn btn-light btn-sm dropdown-toggle border", data: { toggle: "dropdown", boundary: "window" }, aria: { haspopup: true, expanded: false } %>
<div class="dropdown-menu dropdown-menu-right">
<% if policy(ContractTemplate).edit? && contract_template.editable? %>
<% if policy(contract_template).edit? %>
<%= link_to fa_icon("pencil fw", text: t(".actions.edit")), [:edit, contract_template], class: "dropdown-item" %>
<% end %>
<% if policy(ContractTemplate).duplicate? %>
<%= link_to fa_icon("clone fw", text: t(".actions.duplicate")), contract_template_duplicates_path(contract_template), method: :post, class: "dropdown-item" %>
<% end %>
<% if policy(QrCode).show? %>
<%= link_to fa_icon("qrcode", text: t(".actions.qr_code")), [contract_template, :qr_codes], class: "dropdown-item", target: :_blank %>
<% end %>

View File

@@ -254,6 +254,7 @@ en:
manage: Manage
qr_code: QR Code
sign: Sign
duplicate: Duplicate
no_fee: No Fee
create:
notice: The release template has been created
@@ -302,7 +303,11 @@ en:
releases_automatically_organized: Releases are automatically organized as theyre submitted
update:
notice: The release template has been updated
error: The release template cannot be updated
duplicate:
name_prefix: Copy of %{template_name}
duplicates:
create:
error: Failed to duplicate release template
contracts:
for_office_use_only:
description_labels:

View File

@@ -106,6 +106,7 @@ es:
contract_template:
actions:
edit: Edit (ES)
duplicate: Duplicate (ES)
edit:
heading: Edit Contract Template (ES)
form:
@@ -136,7 +137,11 @@ es:
releases_automatically_organized: Releases are automatically organized as theyre submitted (ES)
update:
notice: The release template has been updated (ES)
error: The release template cannot be updated (ES)
duplicate:
name_prefix: Copy of %{template_name} (ES)
duplicates:
create:
error: Failed to duplicate release template (ES)
contracts:
for_office_use_only:
description_labels:

View File

@@ -59,6 +59,7 @@ Rails.application.routes.draw do
resources :contract_templates, only: [:index, :new, :create, :edit, :update, :destroy] do
resource :qr_codes, only: [:show], controller: "contract_templates/qr_codes"
resource :blank_contracts, only: [:show, :new, :create], controller: "contract_templates/blank_contracts"
resource :duplicates, only: [:create], controller: "contract_templates/duplicates"
end
resource :release_template_imports, only: [:new, :create]
resources :project_memberships, only: [:index, :create, :destroy]