Assign workflows by files copying

This commit is contained in:
Karel Picman 2018-03-23 09:32:09 +01:00
parent 7b9475cf50
commit 8ea0bc559b
4 changed files with 75 additions and 11 deletions

View File

@ -268,13 +268,30 @@ class DmsfFile < ActiveRecord::Base
new_revision = self.last_revision.clone new_revision = self.last_revision.clone
new_revision.dmsf_file = file new_revision.dmsf_file = file
new_revision.disk_filename = new_revision.new_storage_filename new_revision.disk_filename = new_revision.new_storage_filename
# Assign the same workflow if it's a global one or we are in the same project
new_revision.workflow = nil
new_revision.dmsf_workflow_id = nil
new_revision.dmsf_workflow_assigned_by = nil
new_revision.dmsf_workflow_assigned_at = nil
new_revision.dmsf_workflow_started_by = nil
new_revision.dmsf_workflow_started_at = nil
if self.last_revision.dmsf_workflow_id
wf = DmsfWorkflow.where(:id => self.last_revision.dmsf_workflow_id).first
if wf && (wf.project.nil? || (wf.project.id == project.id))
new_revision.set_workflow(wf.id, nil)
new_revision.assign_workflow(wf.id)
end
end
if File.exist? self.last_revision.disk_file if File.exist? self.last_revision.disk_file
FileUtils.cp self.last_revision.disk_file, new_revision.disk_file(false) FileUtils.cp self.last_revision.disk_file, new_revision.disk_file(false)
end end
new_revision.comment = l(:comment_copied_from, :source => source) new_revision.comment = l(:comment_copied_from, :source => source)
new_revision.custom_values = [] new_revision.custom_values = []
self.last_revision.custom_values.each do |cv| self.last_revision.custom_values.each do |cv|
new_revision.custom_values << CustomValue.new({:custom_field => cv.custom_field, :value => cv.value}) v = CustomValue.new
v.custom_field = cv.custom_field
v.value = cv.value
new_revision.custom_values << v
end end
file.delete(true) unless new_revision.save file.delete(true) unless new_revision.save
end end

View File

@ -175,6 +175,5 @@ module RedmineDmsf
end end
end end
RedmineExtensions::PatchManager.register_model_patch 'EasyCrmCasePatch', RedmineExtensions::PatchManager.register_model_patch 'EasyCrmCase',
'RedmineDmsf::Patches::RedmineDmsf::Patches::EasyCrmCasePatch', 'RedmineDmsf::Patches::EasyCrmCasePatch', if: proc { Redmine::Plugin.installed?(:easy_crm) }
if: proc { Redmine::Plugin.installed?(:easy_crm) }

View File

@ -39,8 +39,8 @@ dmsf_file_revisions_002:
deleted: 0 deleted: 0
deleted_by_user_id: NULL deleted_by_user_id: NULL
user_id: 1 user_id: 1
dmsf_workflow_assigned_by: 1 dmsf_workflow_assigned_by: NULL
dmsf_workflow_started_by: 1 dmsf_workflow_started_by: NULL
created_at: 2017-04-18 14:52:27 +02:00 created_at: 2017-04-18 14:52:27 +02:00
#revision for deleted file on dmsf-enabled project #revision for deleted file on dmsf-enabled project
@ -61,8 +61,8 @@ dmsf_file_revisions_003:
deleted: 1 deleted: 1
deleted_by_user_id: 1 deleted_by_user_id: 1
user_id: 1 user_id: 1
dmsf_workflow_assigned_by: 1 dmsf_workflow_assigned_by: NULL
dmsf_workflow_started_by: 1 dmsf_workflow_started_by: NULL
created_at: 2017-04-18 14:52:27 +02:00 created_at: 2017-04-18 14:52:27 +02:00
dmsf_file_revisions_004: dmsf_file_revisions_004:

View File

@ -22,13 +22,14 @@
require File.expand_path('../../test_helper', __FILE__) require File.expand_path('../../test_helper', __FILE__)
class DmsfFileTest < RedmineDmsf::Test::UnitTest class DmsfFileTest < RedmineDmsf::Test::UnitTest
fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, :members, fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles,
:member_roles, :dmsf_locks, :issues, :dmsf_links :members, :member_roles, :dmsf_locks, :issues, :dmsf_links, :dmsf_workflows, :dmsf_workflow_steps
def setup def setup
@admin = User.find_by_id 1 @admin = User.find_by_id 1
@jsmith = User.find_by_id 2 @jsmith = User.find_by_id 2
@project1 = Project.find_by_id 1 @project1 = Project.find_by_id 1
@project2 = Project.find_by_id 2
@file1 = DmsfFile.find_by_id 1 @file1 = DmsfFile.find_by_id 1
@file2 = DmsfFile.find_by_id 2 @file2 = DmsfFile.find_by_id 2
@file3 = DmsfFile.find_by_id 3 @file3 = DmsfFile.find_by_id 3
@ -39,6 +40,8 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
@file8 = DmsfFile.find_by_id 8 @file8 = DmsfFile.find_by_id 8
@folder1 = DmsfFolder.find_by_id 1 @folder1 = DmsfFolder.find_by_id 1
@issue1 = Issue.find_by_id 1 @issue1 = Issue.find_by_id 1
@wf1 = DmsfWorkflow.find_by_id 1
@wf2 = DmsfWorkflow.find_by_id 2
User.current = nil User.current = nil
end end
@ -46,6 +49,7 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
assert_kind_of User, @admin assert_kind_of User, @admin
assert_kind_of User, @jsmith assert_kind_of User, @jsmith
assert_kind_of Project, @project1 assert_kind_of Project, @project1
assert_kind_of Project, @project2
assert_kind_of DmsfFile, @file1 assert_kind_of DmsfFile, @file1
assert_kind_of DmsfFile, @file2 assert_kind_of DmsfFile, @file2
assert_kind_of DmsfFile, @file3 assert_kind_of DmsfFile, @file3
@ -56,6 +60,8 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
assert_kind_of DmsfFile, @file8 assert_kind_of DmsfFile, @file8
assert_kind_of DmsfFolder, @folder1 assert_kind_of DmsfFolder, @folder1
assert_kind_of Issue, @issue1 assert_kind_of Issue, @issue1
assert_kind_of DmsfWorkflow, @wf1
assert_kind_of DmsfWorkflow, @wf2
end end
def test_project_file_count_differs_from_project_visibility_count def test_project_file_count_differs_from_project_visibility_count
@ -146,14 +152,56 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest
def test_copy_to_filename def test_copy_to_filename
assert_no_difference '@file1.dmsf_file_revisions.count' do assert_no_difference '@file1.dmsf_file_revisions.count' do
new_file = @file1.copy_to_filename(@file1.project, nil, "new_file.txt") new_file = @file1.copy_to_filename(@file1.project, nil, 'new_file.txt')
assert_not_equal new_file.id, @file1.id assert_not_equal new_file.id, @file1.id
assert_nil new_file.dmsf_folder_id assert_nil new_file.dmsf_folder_id
assert_nil @file1.dmsf_folder_id assert_nil @file1.dmsf_folder_id
assert_not_equal new_file.name, @file1.name assert_not_equal new_file.name, @file1.name
assert_equal new_file.dmsf_file_revisions.count, 1 assert_equal new_file.dmsf_file_revisions.count, 1
assert_nil new_file.last_revision.workflow
assert_nil new_file.last_revision.dmsf_workflow_id
assert_nil new_file.last_revision.dmsf_workflow_assigned_by
assert_nil new_file.last_revision.dmsf_workflow_assigned_at
assert_nil new_file.last_revision.dmsf_workflow_started_by
assert_nil new_file.last_revision.dmsf_workflow_started_at
end end
end end
def test_copy_to_filename_with_global_workflow
@file1.last_revision.set_workflow(@wf2.id, nil)
@file1.last_revision.assign_workflow(@wf2.id)
new_file = @file1.copy_to_filename(@project2, nil, 'new_file.txt')
assert_equal DmsfWorkflow::STATE_ASSIGNED, new_file.last_revision.workflow
assert_equal @wf2.id, new_file.last_revision.dmsf_workflow_id
assert_equal User.current.id, new_file.last_revision.dmsf_workflow_assigned_by
assert new_file.last_revision.dmsf_workflow_assigned_at
assert_nil new_file.last_revision.dmsf_workflow_started_by
assert_nil new_file.last_revision.dmsf_workflow_started_at
end
def test_copy_to_filename_with_workflow_to_the_same_project
@file1.last_revision.set_workflow(@wf1.id, nil)
@file1.last_revision.assign_workflow(@wf1.id)
new_file = @file1.copy_to_filename(@project1, nil, 'new_file.txt')
assert_equal DmsfWorkflow::STATE_ASSIGNED, new_file.last_revision.workflow
assert_equal @wf1.id, new_file.last_revision.dmsf_workflow_id
assert_equal User.current.id, new_file.last_revision.dmsf_workflow_assigned_by
assert new_file.last_revision.dmsf_workflow_assigned_at
assert_nil new_file.last_revision.dmsf_workflow_started_by
assert_nil new_file.last_revision.dmsf_workflow_started_at
end
def test_copy_to_filename_with_workflow_to_other_project
@file1.last_revision.set_workflow(@wf1.id, nil)
@file1.last_revision.assign_workflow(@wf1.id)
new_file = @file1.copy_to_filename(@project2, nil, 'new_file.txt')
assert_nil new_file.last_revision.workflow
assert_nil new_file.last_revision.dmsf_workflow_id
assert_nil new_file.last_revision.dmsf_workflow_assigned_by
assert_nil new_file.last_revision.dmsf_workflow_assigned_at
assert_nil new_file.last_revision.dmsf_workflow_started_by
assert_nil new_file.last_revision.dmsf_workflow_started_at
end
def test_copy_to def test_copy_to
assert_no_difference '@file1.dmsf_file_revisions.count' do assert_no_difference '@file1.dmsf_file_revisions.count' do