From 8ea0bc559b82910a648a1cb05db59ea203c80be0 Mon Sep 17 00:00:00 2001 From: Karel Picman Date: Fri, 23 Mar 2018 09:32:09 +0100 Subject: [PATCH] Assign workflows by files copying --- app/models/dmsf_file.rb | 19 ++++++- .../patches/easy_crm_case_patch.rb | 5 +- test/fixtures/dmsf_file_revisions.yml | 8 +-- test/unit/dmsf_file_test.rb | 54 +++++++++++++++++-- 4 files changed, 75 insertions(+), 11 deletions(-) diff --git a/app/models/dmsf_file.rb b/app/models/dmsf_file.rb index 59588fd7..4c686473 100644 --- a/app/models/dmsf_file.rb +++ b/app/models/dmsf_file.rb @@ -268,13 +268,30 @@ class DmsfFile < ActiveRecord::Base new_revision = self.last_revision.clone new_revision.dmsf_file = file 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 FileUtils.cp self.last_revision.disk_file, new_revision.disk_file(false) end new_revision.comment = l(:comment_copied_from, :source => source) new_revision.custom_values = [] 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 file.delete(true) unless new_revision.save end diff --git a/lib/redmine_dmsf/patches/easy_crm_case_patch.rb b/lib/redmine_dmsf/patches/easy_crm_case_patch.rb index 5f6af81c..c20a1d25 100644 --- a/lib/redmine_dmsf/patches/easy_crm_case_patch.rb +++ b/lib/redmine_dmsf/patches/easy_crm_case_patch.rb @@ -175,6 +175,5 @@ module RedmineDmsf end end -RedmineExtensions::PatchManager.register_model_patch 'EasyCrmCasePatch', - 'RedmineDmsf::Patches::RedmineDmsf::Patches::EasyCrmCasePatch', - if: proc { Redmine::Plugin.installed?(:easy_crm) } \ No newline at end of file +RedmineExtensions::PatchManager.register_model_patch 'EasyCrmCase', + 'RedmineDmsf::Patches::EasyCrmCasePatch', if: proc { Redmine::Plugin.installed?(:easy_crm) } \ No newline at end of file diff --git a/test/fixtures/dmsf_file_revisions.yml b/test/fixtures/dmsf_file_revisions.yml index ba9fe73d..62eb569c 100644 --- a/test/fixtures/dmsf_file_revisions.yml +++ b/test/fixtures/dmsf_file_revisions.yml @@ -39,8 +39,8 @@ dmsf_file_revisions_002: deleted: 0 deleted_by_user_id: NULL user_id: 1 - dmsf_workflow_assigned_by: 1 - dmsf_workflow_started_by: 1 + dmsf_workflow_assigned_by: NULL + dmsf_workflow_started_by: NULL created_at: 2017-04-18 14:52:27 +02:00 #revision for deleted file on dmsf-enabled project @@ -61,8 +61,8 @@ dmsf_file_revisions_003: deleted: 1 deleted_by_user_id: 1 user_id: 1 - dmsf_workflow_assigned_by: 1 - dmsf_workflow_started_by: 1 + dmsf_workflow_assigned_by: NULL + dmsf_workflow_started_by: NULL created_at: 2017-04-18 14:52:27 +02:00 dmsf_file_revisions_004: diff --git a/test/unit/dmsf_file_test.rb b/test/unit/dmsf_file_test.rb index c42e791a..31fea8c6 100644 --- a/test/unit/dmsf_file_test.rb +++ b/test/unit/dmsf_file_test.rb @@ -22,13 +22,14 @@ require File.expand_path('../../test_helper', __FILE__) class DmsfFileTest < RedmineDmsf::Test::UnitTest - fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, :members, - :member_roles, :dmsf_locks, :issues, :dmsf_links + fixtures :projects, :users, :email_addresses, :dmsf_folders, :dmsf_files, :dmsf_file_revisions, :roles, + :members, :member_roles, :dmsf_locks, :issues, :dmsf_links, :dmsf_workflows, :dmsf_workflow_steps def setup @admin = User.find_by_id 1 @jsmith = User.find_by_id 2 @project1 = Project.find_by_id 1 + @project2 = Project.find_by_id 2 @file1 = DmsfFile.find_by_id 1 @file2 = DmsfFile.find_by_id 2 @file3 = DmsfFile.find_by_id 3 @@ -39,6 +40,8 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest @file8 = DmsfFile.find_by_id 8 @folder1 = DmsfFolder.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 end @@ -46,6 +49,7 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest assert_kind_of User, @admin assert_kind_of User, @jsmith assert_kind_of Project, @project1 + assert_kind_of Project, @project2 assert_kind_of DmsfFile, @file1 assert_kind_of DmsfFile, @file2 assert_kind_of DmsfFile, @file3 @@ -56,6 +60,8 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest assert_kind_of DmsfFile, @file8 assert_kind_of DmsfFolder, @folder1 assert_kind_of Issue, @issue1 + assert_kind_of DmsfWorkflow, @wf1 + assert_kind_of DmsfWorkflow, @wf2 end def test_project_file_count_differs_from_project_visibility_count @@ -146,14 +152,56 @@ class DmsfFileTest < RedmineDmsf::Test::UnitTest def test_copy_to_filename 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_nil new_file.dmsf_folder_id assert_nil @file1.dmsf_folder_id assert_not_equal new_file.name, @file1.name 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 + + 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 assert_no_difference '@file1.dmsf_file_revisions.count' do