dcidev_approval 0.0.9 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/dcidev_approval.rb +66 -66
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 047563f0a296d733db4828b485a0446cd2757bb3f915809808555d44719a5e44
|
4
|
+
data.tar.gz: 2a3fb2c40952698d8ea669a33f67bb503e5a0dfb44d6c900caef2d4ef27e1231
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b9ef11b07ae7f35c5c21c1a1c93da4565077570d5b277786a87b913d690b9b4885703cbed14337e8ecc9c16c5c0e3f822fd6359776cac2db608069dff51619d2
|
7
|
+
data.tar.gz: '099759cd2d503012da3ac66a22a28fee1b67b2d07e67f0c421ae348477fd7db1898a8fed75087d2365f9dff61cc3c189219fc9184105a0fb8e11990d55684856'
|
data/lib/dcidev_approval.rb
CHANGED
@@ -1,147 +1,146 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module DcidevApproval
|
2
|
-
def self.included
|
4
|
+
def self.included(base)
|
3
5
|
base.send :include, InstanceMethods
|
4
6
|
base.extend ClassMethods
|
5
7
|
end
|
6
8
|
|
7
9
|
module InstanceMethods
|
8
|
-
|
9
10
|
def changes_present?(changes)
|
10
11
|
present = false
|
11
12
|
changes.each do |k, v|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
break
|
16
|
-
end
|
17
|
-
rescue => _
|
13
|
+
if eval("self.#{k}") != v
|
14
|
+
present = true
|
15
|
+
break
|
18
16
|
end
|
17
|
+
rescue StandardError => _e
|
19
18
|
end
|
20
|
-
|
19
|
+
present
|
21
20
|
end
|
22
21
|
|
23
22
|
def waiting_approval?
|
24
|
-
%w[pending_update pending_delete].include?(
|
23
|
+
%w[pending_update pending_delete].include?(change_status) || status == 'waiting'
|
25
24
|
end
|
26
25
|
|
27
26
|
def pending_insert?
|
28
|
-
|
27
|
+
change_status.nil? && %w[waiting rejected].include?(status)
|
29
28
|
end
|
30
29
|
|
31
30
|
def pending_update?
|
32
|
-
|
31
|
+
change_status == 'pending_update'
|
33
32
|
end
|
34
33
|
|
35
34
|
def pending_delete?
|
36
|
-
|
35
|
+
change_status == 'pending_delete'
|
37
36
|
end
|
38
37
|
|
39
38
|
def approved?
|
40
|
-
|
39
|
+
status == 'approved' || change_status.nil?
|
41
40
|
end
|
42
41
|
|
43
42
|
def rejected?
|
44
|
-
|
43
|
+
status == 'rejected'
|
45
44
|
end
|
46
45
|
|
47
46
|
def waiting?
|
48
|
-
|
47
|
+
status == 'waiting'
|
49
48
|
end
|
50
49
|
|
51
50
|
def last_modified_by
|
52
51
|
# p self.audit_trail
|
53
|
-
|
54
|
-
log = self.activity_logs.where("activity LIKE '%delete%'").limit(1).order(created_at: :desc).try(:first)
|
55
|
-
else
|
56
|
-
log = self.activity_logs.where("activity LIKE '%edit%'").limit(1).order(created_at: :desc).try(:first)
|
57
|
-
end
|
52
|
+
log = activity_logs.where(activity_type: %w[update delete]).limit(1).order(created_at: :desc).try(:first)
|
58
53
|
{
|
59
|
-
modified_by: log.present? ? log.try(:agent).try(:name).to_s + " (#{log.try(:agent).try(:username)
|
60
|
-
modified_at: log.present? ? log.try(:created_at) ||
|
54
|
+
modified_by: log.present? ? log.try(:agent).try(:name).to_s + " (#{log.try(:agent).try(:username)} | #{log.try(:agent).try(:roles).try(:first).try(:name)})" : nil,
|
55
|
+
modified_at: log.present? ? log.try(:created_at) || try(:updated_at) || try(:created_at) : nil
|
61
56
|
}
|
62
57
|
end
|
63
58
|
|
64
59
|
def created_by
|
65
|
-
log =
|
60
|
+
log = activity_logs.order(created_at: :desc).limit(1).try(:first)
|
66
61
|
{
|
67
|
-
created_by: log.present? && log.try(:agent).try(:name).present? ? log.try(:agent).try(:name).to_s + " (#{log.try(:
|
68
|
-
created_at:
|
62
|
+
created_by: log.present? && log.try(:agent).try(:name).present? ? log.try(:agent).try(:name).to_s + " (#{log.try(:agent_role).try(:name)})" : 'System',
|
63
|
+
created_at: try(:created_at) || log.try(:created_at)
|
69
64
|
}
|
70
65
|
end
|
71
66
|
|
72
67
|
def last_approved_by
|
73
|
-
last_approve =
|
74
|
-
last_entry =
|
68
|
+
last_approve = activity_logs.where(activity_type: 'approve').limit(1).order(created_at: :desc).try(:first)
|
69
|
+
last_entry = activity_logs.limit(1).order(created_at: :desc).try(:first)
|
75
70
|
{
|
76
|
-
approved_by: last_approve.try(:id) == last_entry.try(:id) ? last_approve.try(:agent).try(:name).to_s + " (#{last_approve.try(:
|
71
|
+
approved_by: last_approve.try(:id) == last_entry.try(:id) ? last_approve.try(:agent).try(:name).to_s + " (#{last_approve.try(:agent_role).try(:name)})" : nil,
|
77
72
|
approved_at: last_approve.try(:id) == last_entry.try(:id) ? last_approve.try(:created_at) : nil
|
78
73
|
}
|
79
74
|
end
|
80
75
|
|
81
76
|
def approve_changes
|
82
|
-
|
83
|
-
|
84
|
-
raise self.errors.full_messages.join(", ") unless self.update(status: :approved, data_changes: nil, change_status: nil)
|
77
|
+
if change_status.nil? && %w[waiting rejected].include?(status) && !update(status: :approved, data_changes: nil, change_status: nil)
|
78
|
+
raise errors.full_messages.join(', ')
|
85
79
|
# ActivityLog.write("Approve insert to #{self.class.to_s}", request, agent, menu, self) if params.log
|
86
80
|
# self.delay(queue: "reorder_#{self.id}", priority: 0).reorder if self.class.column_names.include?("view_order")
|
87
81
|
|
88
82
|
end
|
89
|
-
if self.change_status == "pending_update"
|
90
|
-
raise self.errors.full_messages.join(", ") unless self.update_by_params(self.data_changes, false)
|
91
|
-
raise self.errors.full_messages.join(", ") unless self.update(status: :approved, data_changes: nil, change_status: nil)
|
92
|
-
# ActivityLog.write("Approve update to #{self.class.to_s}", request, agent, menu, self) if params.log
|
93
|
-
# self.delay(queue: "reorder_#{self.id}", priority: 0).reorder if self.class.column_names.include?("view_order")
|
94
83
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
84
|
+
case change_status
|
85
|
+
when 'pending_update'
|
86
|
+
raise errors.full_messages.join(', ') unless update_by_params(data_changes, false)
|
87
|
+
raise errors.full_messages.join(', ') unless update(status: :approved, data_changes: nil, change_status: nil)
|
88
|
+
# ActivityLog.write("Approve update to #{self.class.to_s}", request, agent, menu, self) if params.log
|
89
|
+
# self.delay(queue: "reorder_#{self.id}", priority: 0).reorder if self.class.column_names.include?("view_order")
|
90
|
+
|
91
|
+
when 'pending_delete'
|
92
|
+
destroy
|
101
93
|
end
|
102
94
|
end
|
103
95
|
|
104
96
|
def delete_changes
|
105
97
|
# return unless %w[pending_update pending_delete].include? self.change_status
|
106
|
-
raise
|
98
|
+
raise errors.full_messages.join(', ') unless update(data_changes: nil, change_status: nil, status: status == 'waiting' ? :rejected : :approved)
|
107
99
|
# ActivityLog.write("Reject changes to #{self.class.to_s}", request, agent, menu, self) if params.log
|
108
100
|
end
|
109
101
|
|
110
102
|
def edit_data(params, agent, bypass = true)
|
111
|
-
raise
|
103
|
+
raise 'data still waiting for approval' if waiting_approval?
|
104
|
+
|
112
105
|
if bypass
|
113
|
-
raise
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
106
|
+
raise errors.full_messages.join(', ') unless update_by_params(params, false)
|
107
|
+
# ActivityLog.write("Edit #{self.class.to_s}", request, agent, menu, self) if params.log
|
108
|
+
elsif changes_present?(params)
|
109
|
+
ActiveRecord::Base.transaction do
|
110
|
+
data = if agent.is_admin? || status == 'waiting'
|
111
|
+
params
|
112
|
+
else
|
113
|
+
{
|
114
|
+
change_status: :pending_update, data_changes: agent.is_admin? ? nil : params
|
115
|
+
}
|
116
|
+
end
|
117
|
+
raise errors.full_messages.join(', ') unless update_by_params(data, false)
|
122
118
|
end
|
119
|
+
# ActivityLog.write("#{agent.is_admin? ? nil : "Request "}Edit #{self.class.to_s}", request, agent, menu, self) if params.log
|
123
120
|
end
|
124
121
|
yield self
|
125
122
|
end
|
126
123
|
|
127
124
|
def approval(params)
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
125
|
+
case params.status
|
126
|
+
when 'approved'
|
127
|
+
approve_changes
|
128
|
+
when 'rejected'
|
129
|
+
delete_changes
|
132
130
|
end
|
133
131
|
yield self
|
134
132
|
end
|
135
133
|
|
136
134
|
def delete_data(agent, bypass = true)
|
137
|
-
raise
|
135
|
+
raise 'data still waiting for approval' if waiting_approval?
|
136
|
+
|
138
137
|
if bypass || agent.is_admin?
|
139
138
|
ActiveRecord::Base.transaction do
|
140
139
|
# ActivityLog.write("Delete #{self.class.to_s}", request, agent, menu, self) if params.log
|
141
|
-
raise
|
140
|
+
raise errors.full_messages.join(', ') unless destroy
|
142
141
|
end
|
143
142
|
else
|
144
|
-
raise
|
143
|
+
raise errors.full_messages.join(', ') unless update(change_status: :pending_delete)
|
145
144
|
# ActivityLog.write("Request Delete #{self.class.to_s}", request, agent, menu, self) if params.log
|
146
145
|
end
|
147
146
|
yield true
|
@@ -153,18 +152,19 @@ module DcidevApproval
|
|
153
152
|
if bypass
|
154
153
|
ActiveRecord::Base.transaction do
|
155
154
|
data = params.merge!({ status: :approved })
|
156
|
-
d =
|
157
|
-
raise d.errors.full_messages.join(
|
155
|
+
d = new_from_params(data)
|
156
|
+
raise d.errors.full_messages.join(', ') unless d.save
|
157
|
+
|
158
158
|
yield d
|
159
159
|
# ActivityLog.write("#{agent.is_admin? ? nil : "Request "} Add #{self.to_s}", request, agent, menu, d) if params.log
|
160
160
|
end
|
161
161
|
else
|
162
|
-
d =
|
162
|
+
d = new_from_params(params)
|
163
163
|
d.status = agent.is_admin? ? :approved : :waiting
|
164
|
-
raise d.errors.full_messages.join(
|
164
|
+
raise d.errors.full_messages.join(', ') unless d.save
|
165
|
+
|
165
166
|
yield d
|
166
167
|
end
|
167
168
|
end
|
168
169
|
end
|
169
170
|
end
|
170
|
-
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dcidev_approval
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Punto Damar P
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dcidev_active_record
|