projector_pws 0.2.0 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 990a9ee49609321c37939821791cfb62d1031b81
4
- data.tar.gz: c3bd8686324ad5f19f1884618f498a0cb4b429c3
2
+ SHA256:
3
+ metadata.gz: 591ece8434a945f7640e14645d5fc9ef689b3af96b6af51b6fc4bccdfba9f405
4
+ data.tar.gz: 35184f77ecd41e887ddff969081aab638147b62495c8c6d1cda3654f64e462bc
5
5
  SHA512:
6
- metadata.gz: '09ca24ca54ce35093b5bab0f35c69a503a8c1b1f14a93d1f34feaa085a212efdb33f2af700d1b1c92288fb38de72f7bc25eaf8138ed5033fc57bf1eee5c8a331'
7
- data.tar.gz: 3b23e62cb818efef563ce4cb06ef1eddb55c8e372920e6f6f638e4cd9c536c797435fe7a76fa1839147270c60d3383b45cf62721eb058aee3b8338498bb9f1f5
6
+ metadata.gz: 9b773aaeb3803e00721051d0c155fac9435077a3f64dce085f361f9c7ec03d1f628c46624ebf896358f8c2af170487a2659cce930a109ffc233f223882dd36e2
7
+ data.tar.gz: 92c6dd4fd7b93ff038b417ff6401262964d6f60b61531aa78e5e98b0f2341f50dada9472d085484f8617a26ddbce20da82b4f18f3de87447e2a1be5ac8833bb4
@@ -5,5 +5,5 @@
5
5
  module ProjectorPWS
6
6
 
7
7
  # Version
8
- VERSION = '0.2.0'
8
+ VERSION = '0.2.1'
9
9
  end
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
- '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/'
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 = { 'req:SessionTicket' => ticket }
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
- 'tim:PwsCostPwsChangeOrder' => {
275
- 'tim:ApproveToPayFlag' => true,
276
- 'tim:CostCardIdentities' => {
277
- 'tim:PwsVersionedCostCardRef' => cost_card_uids.collect { |cc| { 'com:CostCardUid' => cc } }
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
- resource: r,
295
- free_hours: get_resource_free_hours(c, ticket, r, start_date, end_date).to_f
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
- work: scheduled_minutes.to_f / MINUTES_PER_HOUR.to_f,
391
- toff: time_off_minutes.to_f / MINUTES_PER_HOUR.to_f,
392
- hday: holiday_minutes.to_f / MINUTES_PER_HOUR.to_f
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.0
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: 2018-09-18 00:00:00.000000000 Z
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.6.13
119
+ rubygems_version: 2.7.8
120
120
  signing_key:
121
121
  specification_version: 4
122
122
  summary: Projector PWS Client Library