Assign workflows by files copying
This commit is contained in:
parent
7b9475cf50
commit
8ea0bc559b
@ -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
|
||||||
|
|||||||
@ -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) }
|
|
||||||
8
test/fixtures/dmsf_file_revisions.yml
vendored
8
test/fixtures/dmsf_file_revisions.yml
vendored
@ -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:
|
||||||
|
|||||||
@ -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,15 +152,57 @@ 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
|
||||||
new_file = @file1.copy_to(@file1.project, @folder1)
|
new_file = @file1.copy_to(@file1.project, @folder1)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user