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 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