projector_pws 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/projector_pws/version.rb +1 -1
- data/lib/projector_pws.rb +99 -19
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 591ece8434a945f7640e14645d5fc9ef689b3af96b6af51b6fc4bccdfba9f405
|
4
|
+
data.tar.gz: 35184f77ecd41e887ddff969081aab638147b62495c8c6d1cda3654f64e462bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9b773aaeb3803e00721051d0c155fac9435077a3f64dce085f361f9c7ec03d1f628c46624ebf896358f8c2af170487a2659cce930a109ffc233f223882dd36e2
|
7
|
+
data.tar.gz: 92c6dd4fd7b93ff038b417ff6401262964d6f60b61531aa78e5e98b0f2341f50dada9472d085484f8617a26ddbce20da82b4f18f3de87447e2a1be5ac8833bb4
|
data/lib/projector_pws.rb
CHANGED
@@ -25,10 +25,11 @@ module ProjectorPWS
|
|
25
25
|
# Namespaces
|
26
26
|
NAMESPACE = 'http://projectorpsa.com/PwsProjectorServices/'
|
27
27
|
EXTRA_NAMESPACES = {
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
'xmlns:req' => 'http://projectorpsa.com/DataContracts/Requests/',
|
29
|
+
'xmlns:tim' => 'http://projectorpsa.com/DataContracts/Shared/TimeAndCost/',
|
30
|
+
'xmlns:rep' => 'http://projectorpsa.com/DataContracts/Shared/Report/',
|
31
|
+
'xmlns:com' => 'http://projectorpsa.com/DataContracts/Shared/Common/',
|
32
|
+
'xmlns:sch' => 'http://projectorpsa.com/DataContracts/Shared/Scheduling/'
|
32
33
|
}
|
33
34
|
|
34
35
|
# Work Week
|
@@ -124,9 +125,77 @@ module ProjectorPWS
|
|
124
125
|
c.call(:pws_get_report_output, message: { 'pws:serviceRequest' => params }).body
|
125
126
|
end
|
126
127
|
|
128
|
+
# Get Project List
|
129
|
+
def self.get_projects c, ticket, engagement_code = nil
|
130
|
+
# Prepare Params
|
131
|
+
params = {'req:SessionTicket' => ticket }
|
132
|
+
params['sch:QueryString'] = engagement_code.to_s if engagement_code
|
133
|
+
# Fetch Projects
|
134
|
+
c.call(:pws_get_project_list, message: {'pws:serviceRequest' => params }).body[:pws_get_project_list_response][:pws_get_project_list_result][:projects][:pws_project_summary]
|
135
|
+
end
|
136
|
+
|
137
|
+
# Get Project Details
|
138
|
+
def self.get_project c, ticket, project_uid
|
139
|
+
# prepare params
|
140
|
+
params = {'req:SessionTicket' => ticket }
|
141
|
+
params['sch:Mode'] = "R"
|
142
|
+
# Had to build the Hash this way to counter 'String not Matched Issue', ruby -v 2.5.1, rails -v 5.1.6
|
143
|
+
if project_uid
|
144
|
+
params['sch:ProjectIdentities'] = {'com:PwsProjectRef' => { 'com:ProjectUid' => project_uid } }
|
145
|
+
end
|
146
|
+
|
147
|
+
# Fetch Project Details
|
148
|
+
c.call(:pws_get_project, message: {'pws:serviceRequest' => params}).body[:pws_get_project_response][:pws_get_project_result][:projects][:pws_project_element]
|
149
|
+
end
|
150
|
+
|
151
|
+
# Get Project Time Baseline
|
152
|
+
def self.get_project_time_baseline c, ticket, time_baseline_uid
|
153
|
+
# prepare params
|
154
|
+
params = {'req:SessionTicket' => ticket}
|
155
|
+
raise "Time Baseline Uid Missing" if !time_baseline_uid
|
156
|
+
params['sch:ProjectTimeBaselineIdentities'] = {'com:PwsProjectTimeBaselineRef' => {'com:ProjectTimeBaselineUid' => time_baseline_uid}}
|
157
|
+
# Fetch Time Baseline Info
|
158
|
+
c.call(:pws_get_project_time_baseline, message: { 'pws:serviceRequest' => params}).body[:pws_get_project_time_baseline_response][:pws_get_project_time_baseline_result][:project_time_baselines][:pws_project_time_baseline_element]
|
159
|
+
end
|
160
|
+
|
161
|
+
# Get Project Time Baselines
|
162
|
+
def self.get_project_time_baselines c, ticket, time_baseline_uids
|
163
|
+
# prepare params
|
164
|
+
params = {'req:SessionTicket' => ticket}
|
165
|
+
raise "Time Baseline Uids Missing" unless time_baseline_uids.is_a?(Array)
|
166
|
+
params['sch:ProjectTimeBaselineIdentities'] = time_baseline_uids.collect { |i| { 'com:PwsProjectTimeBaselineRef' => { 'com:ProjectTimeBaselineUid' => i } } }
|
167
|
+
# Fetch Time Baseline Info
|
168
|
+
c.call(:pws_get_project_time_baseline, message: { 'pws:serviceRequest' => params}).body[:pws_get_project_time_baseline_response][:pws_get_project_time_baseline_result][:project_time_baselines][:pws_project_time_baseline_element]
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.get_engagement c, ticket, engagement_uid
|
172
|
+
raise "Engagement Code Needed" if !engagement_uid
|
173
|
+
# prepare params
|
174
|
+
params = {'req:SessionTicket' => ticket }
|
175
|
+
params['sch:EngagementIdentities'] = {'com:PwsEngagementRef' => {'com:EngagementUid' => engagement_uid}}
|
176
|
+
# Fetch Engagement Details
|
177
|
+
c.call(:pws_get_engagement, message: {'pws:serviceRequest' => params}).body[:pws_get_engagement_response][:pws_get_engagement_result][:engagements][:pws_engagement_element]
|
178
|
+
end
|
179
|
+
|
180
|
+
def self.get_engagements c, ticket, include_closed = false, max_rows = nil
|
181
|
+
# Prepare Params
|
182
|
+
params = {'req:SessionTicket' => ticket }
|
183
|
+
params['sch:IncludeClosedFlag'] = include_closed if include_closed && (include_closed.class == TrueClass || include_closed.class == FalseClass)
|
184
|
+
params['sch:MaxRowsToReturn'] = max_rows if max_rows && max_rows.class == Integer
|
185
|
+
# Fetch Engagement List
|
186
|
+
c.call(:pws_get_engagement_list, message: {'pws:serviceRequest' => params}).body[:pws_get_engagement_list_response][:pws_get_engagement_list_result][:engagements][:pws_engagement_summary]
|
187
|
+
end
|
188
|
+
|
189
|
+
def self.get_client c, ticket, client_number
|
190
|
+
raise "Client Uid missing" if !client_number
|
191
|
+
params = {'req:SessionTicket' => ticket }
|
192
|
+
params['req:ClientIdentities'] = { 'com:PwsClientRef' => { 'com:ClientNumber' => client_number }}
|
193
|
+
# Fetch Client Details
|
194
|
+
c.call(:pws_get_client, message: {'pws:serviceRequest' => params}).body[:pws_get_client_response][:pws_get_client_result][:clients]
|
195
|
+
end
|
196
|
+
|
127
197
|
# Get Resources
|
128
198
|
def self.get_resources c, ticket, include_inactive = false
|
129
|
-
|
130
199
|
# Prepare Params
|
131
200
|
params = { 'req:SessionTicket' => ticket }
|
132
201
|
params['req:IncludeInactiveFlag'] = include_inactive
|
@@ -135,15 +204,24 @@ module ProjectorPWS
|
|
135
204
|
c.call(:pws_get_resource_list, message: { 'pws:serviceRequest' => params }).body[:pws_get_resource_list_response][:pws_get_resource_list_result][:resources][:pws_resource_summary]
|
136
205
|
end
|
137
206
|
|
207
|
+
# Get Single Resource
|
208
|
+
def self.get_user c, ticket, user_uid
|
209
|
+
params = { 'req:SessionTicket' => ticket }
|
210
|
+
# Prepare Params
|
211
|
+
params['req:UserIdentities'] = { 'com:PwsUserRef' => { 'com:UserUid' => user_uid }}
|
212
|
+
# Fetch Resource Details
|
213
|
+
c.call(:pws_get_user, message: {'pws:serviceRequest' => params})
|
214
|
+
end
|
215
|
+
|
216
|
+
|
138
217
|
# Get Resource Time Entry Time Off
|
139
218
|
def self.get_time_entry_time_off c, ticket, resource_uid, start_date = current_week_start, end_date = current_week_end
|
140
219
|
|
141
220
|
# Prepare Params
|
142
|
-
params = {
|
221
|
+
params = {'req:SessionTicket' => ticket }
|
143
222
|
params['tim:EndDate'] = end_date.strftime '%Y-%m-%dz'
|
144
223
|
params['tim:ResourceIdentity'] = { 'com:ResourceUid' => resource_uid } if resource_uid
|
145
224
|
params['tim:StartDate'] = start_date.strftime '%Y-%m-%dz'
|
146
|
-
|
147
225
|
# Fetch Time Entry Time Off
|
148
226
|
c.call(:pws_get_time_entry_time_off, message: { 'pws:serviceRequest' => params }).body[:pws_get_time_entry_time_off_response][:pws_get_time_entry_time_off_result].try(:[], :time_entry_time_off).try(:[], :pws_time_entry_time_off)
|
149
227
|
end
|
@@ -271,12 +349,12 @@ module ProjectorPWS
|
|
271
349
|
params['tim:SendApprovalToPayEmailFlag'] = send_approval_to_pay_email
|
272
350
|
params['tim:SendPaidEmailFlag'] = send_paid_email
|
273
351
|
params['tim:StatusOrders'] = {
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
352
|
+
'tim:PwsCostPwsChangeOrder' => {
|
353
|
+
'tim:ApproveToPayFlag' => true,
|
354
|
+
'tim:CostCardIdentities' => {
|
355
|
+
'tim:PwsVersionedCostCardRef' => cost_card_uids.collect { |cc| { 'com:CostCardUid' => cc } }
|
356
|
+
}
|
278
357
|
}
|
279
|
-
}
|
280
358
|
}
|
281
359
|
|
282
360
|
# Set Cost Card Payment Workflow Status
|
@@ -291,8 +369,8 @@ module ProjectorPWS
|
|
291
369
|
|
292
370
|
# Collect free time
|
293
371
|
res.collect { |r| {
|
294
|
-
|
295
|
-
|
372
|
+
resource: r,
|
373
|
+
free_hours: get_resource_free_hours(c, ticket, r, start_date, end_date).to_f
|
296
374
|
} }.select { |x| x[:free_hours] > 0 }
|
297
375
|
end
|
298
376
|
|
@@ -321,11 +399,13 @@ module ProjectorPWS
|
|
321
399
|
end
|
322
400
|
|
323
401
|
# Get Resource Free Hours
|
324
|
-
def self.get_resource_free_hours c, ticket, resource, start_date = current_week_start, end_date = current_week_end, scheduled_hours = nil, wsched = nil
|
402
|
+
def self.get_resource_free_hours c, ticket, resource, start_date = current_week_start, end_date = current_week_end, scheduled_hours = nil, wsched = nil, logger
|
325
403
|
|
326
404
|
# Get scheduled hours
|
327
405
|
scheduled_hours ||= get_resource_scheduled_hours c, ticket, resource, start_date, end_date
|
328
|
-
compute_resource_free_hours scheduled_hours, wsched
|
406
|
+
free_hours = compute_resource_free_hours scheduled_hours, wsched
|
407
|
+
logger.info "#FREE HOURS: #{free_hours}"
|
408
|
+
free_hours
|
329
409
|
end
|
330
410
|
|
331
411
|
# Get Resource Active Hours
|
@@ -387,9 +467,9 @@ module ProjectorPWS
|
|
387
467
|
end
|
388
468
|
|
389
469
|
{
|
390
|
-
|
391
|
-
|
392
|
-
|
470
|
+
work: scheduled_minutes.to_f / MINUTES_PER_HOUR.to_f,
|
471
|
+
toff: time_off_minutes.to_f / MINUTES_PER_HOUR.to_f,
|
472
|
+
hday: holiday_minutes.to_f / MINUTES_PER_HOUR.to_f
|
393
473
|
}
|
394
474
|
end
|
395
475
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: projector_pws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paul DUNCAN
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
118
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.
|
119
|
+
rubygems_version: 2.7.8
|
120
120
|
signing_key:
|
121
121
|
specification_version: 4
|
122
122
|
summary: Projector PWS Client Library
|