Module: ProjectorPWS
- Defined in:
- lib/projector_pws.rb,
lib/projector_pws/legacy.rb,
lib/projector_pws/version.rb
Overview
ProjectorPWS Module
Defined Under Namespace
Modules: Legacy
Constant Summary collapse
- WSDL =
Service Definition
'https://secure.projectorpsa.com/OpsProjectorWcfSvc/PwsProjectorServices.svc?wsdl'- BASE_URL =
Base URL
'https://secure.projectorpsa.com'- URL_PATH =
URL Path
'OpsProjectorWcfSvc/PwsProjectorServices.svc'- NAMESPACE =
Namespaces
'http://projectorpsa.com/PwsProjectorServices/'- EXTRA_NAMESPACES =
{ 'xmlns:req' => 'http://projectorpsa.com/DataContracts/Requests/', 'xmlns:tim' => 'http://projectorpsa.com/DataContracts/Shared/TimeAndCost/', 'xmlns:rep' => 'http://projectorpsa.com/DataContracts/Shared/Report/', 'xmlns:com' => 'http://projectorpsa.com/DataContracts/Shared/Common/', 'xmlns:sch' => 'http://projectorpsa.com/DataContracts/Shared/Scheduling/' }
- WEEK_START =
Work Week
:monday- WEEK_END =
:friday- WEEKEND_START_TIME =
Weekend Start Time
16- DAYS_PER_WEEK =
Days Per Week
5- HOURS_PER_DAY =
Hours Per Day
8- HOURS_PER_DAY_REAL =
Real Hours Per Day
24- MINUTES_PER_HOUR =
Minutes Per Hour
60- MINUTES_PER_DAY =
Minutes Per Day
HOURS_PER_DAY * MINUTES_PER_HOUR
- MINUTES_PER_WEEK =
Minutes Per Week
MINUTES_PER_DAY * DAYS_PER_WEEK
- VERSION =
Version
'0.2.1'
Class Method Summary collapse
-
.authenticate(username, password, account_code = nil) ⇒ Object
Authenticate.
-
.compute_resource_active_hours(wsched) ⇒ Object
Compute Resource Active Hours.
-
.compute_resource_free_hours(scheduled_hours, wsched) ⇒ Object
Compute Resource Free Hours.
-
.current_week_end ⇒ Object
Current Week End.
-
.current_week_start ⇒ Object
Current Week Start.
- .get_client(c, ticket, client_number) ⇒ Object
-
.get_cost_centers(c, ticket) ⇒ Object
Get Cost Centers.
- .get_engagement(c, ticket, engagement_uid) ⇒ Object
- .get_engagements(c, ticket, include_closed = false, max_rows = nil) ⇒ Object
-
.get_expense_document(c, ticket, doc_number, include_cost_cards = true, include_receipts = false) ⇒ Object
Get Expense Document.
-
.get_expense_documents(c, ticket, reps = nil) ⇒ Object
Get Expense Documents.
-
.get_free_resources(c, ticket, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Free Resources (non-busy) with associated minutes.
-
.get_project(c, ticket, project_uid) ⇒ Object
Get Project Details.
-
.get_project_time_baseline(c, ticket, time_baseline_uid) ⇒ Object
Get Project Time Baseline.
-
.get_project_time_baselines(c, ticket, time_baseline_uids) ⇒ Object
Get Project Time Baselines.
-
.get_projects(c, ticket, engagement_code = nil) ⇒ Object
Get Project List.
-
.get_report(c, ticket, report_uid, format = nil) ⇒ Object
Get Report Output.
-
.get_resource_active_hours(c, ticket, resource, start_date = current_week_start, end_date = current_week_end, wsched = nil) ⇒ Object
Get Resource Active Hours.
-
.get_resource_available_timeoff(c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Available Timeoff.
-
.get_resource_cost_cards(c, ticket, resource_uid = nil, exclude_before = nil, flags = { approved: true }) ⇒ Object
Get Resource Cost Cards.
-
.get_resource_free_hours(c, ticket, resource, start_date = current_week_start, end_date = current_week_end, scheduled_hours = nil, wsched = nil, logger) ⇒ Object
Get Resource Free Hours.
-
.get_resource_schedule(c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Schedule.
-
.get_resource_scheduled_hours(c, ticket, resource, start_date = current_week_start, end_date = current_week_end, sched = nil) ⇒ Object
Get Resource Scheduled Hours.
-
.get_resource_working_schedule(c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Working Schedule.
-
.get_resources(c, ticket, include_inactive = false) ⇒ Object
Get Resources.
-
.get_time_cards(c, ticket, resource_uid, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Time Cards.
-
.get_time_entry_time_off(c, ticket, resource_uid, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Time Entry Time Off.
-
.get_user(c, ticket, user_uid) ⇒ Object
Get Single Resource.
-
.is_weekend? ⇒ Boolean
Is Weekend.
-
.open(url = BASE_URL) ⇒ Object
Open Client.
-
.service_url(base_url) ⇒ Object
Generate Service URL.
-
.set_cost_cards_payment_workflow_status(c, ticket, cost_card_uids, status, send_approval_email = false, send_approval_to_pay_email = false, send_paid_email = true) ⇒ Object
Update Cost Cards Payment Workflow Status.
-
.time_off_minutes(x) ⇒ Object
Time Off Minutes (adjust for full-day holidays).
-
.unauthenticate(c, ticket) ⇒ Object
Unauthenticate.
Class Method Details
.authenticate(username, password, account_code = nil) ⇒ Object
Authenticate
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/projector_pws.rb', line 68 def self.authenticate username, password, account_code = nil # Prepare URLs next_url = BASE_URL last_url = '' # Prepare Credentials creds = {} creds['req:AccountCode'] = account_code if account_code creds['req:Password'] = password creds['req:UserName'] = username # Loop to obtain Ticket c = nil ticket = nil until ticket # Authenticate begin c = open next_url r = c.call(:pws_authenticate, message: { 'pws:serviceRequest' => creds }).body[:pws_authenticate_response][:pws_authenticate_result] last_url = next_url next_url = r[:redirect_url] rescue Savon::SOAPFault => e raise "Authentication failed - #{e.to_hash[:fault][:detail][:pws_fault][:messages][:pws_message][:error_text]}" end raise 'API Error (redirect loop)' if next_url == last_url ticket = r[:session_ticket] end # Yield if block given if block_given? r = yield c, ticket unauthenticate c, ticket return r end [c, ticket] end |
.compute_resource_active_hours(wsched) ⇒ Object
Compute Resource Active Hours
378 379 380 381 382 383 384 385 |
# File 'lib/projector_pws.rb', line 378 def self.compute_resource_active_hours wsched # Extract Working Minutes work = wsched.inject(0) { |a, e| a + e[:working_minutes].to_i } # Determine Active Hours work.to_f / MINUTES_PER_HOUR.to_f end |
.compute_resource_free_hours(scheduled_hours, wsched) ⇒ Object
Compute Resource Free Hours
388 389 390 391 392 393 394 395 396 397 398 399 |
# File 'lib/projector_pws.rb', line 388 def self.compute_resource_free_hours scheduled_hours, wsched # Get active hours active_hours = compute_resource_active_hours wsched # Compute time off and holidays into active hours active_hours = active_hours - scheduled_hours[:toff] active_hours = active_hours - (scheduled_hours[:hday] || 0) # Compute free time (active unscheduled time) active_hours - scheduled_hours[:work] end |
.current_week_end ⇒ Object
Current Week End
487 488 489 |
# File 'lib/projector_pws.rb', line 487 def self.current_week_end current_week_start.wnext(WEEK_END) end |
.current_week_start ⇒ Object
Current Week Start
482 483 484 |
# File 'lib/projector_pws.rb', line 482 def self.current_week_start is_weekend? ? Date.today.wnext(WEEK_START) : (Date.today.monday? ? Date.today : Date.today.wlast(WEEK_START)) end |
.get_client(c, ticket, client_number) ⇒ Object
189 190 191 192 193 194 195 |
# File 'lib/projector_pws.rb', line 189 def self.get_client c, ticket, client_number raise "Client Uid missing" if !client_number params = {'req:SessionTicket' => ticket } params['req:ClientIdentities'] = { 'com:PwsClientRef' => { 'com:ClientNumber' => client_number }} # Fetch Client Details c.call(:pws_get_client, message: {'pws:serviceRequest' => params}).body[:pws_get_client_response][:pws_get_client_result][:clients] end |
.get_cost_centers(c, ticket) ⇒ Object
Get Cost Centers
303 304 305 306 307 308 309 310 311 312 313 |
# File 'lib/projector_pws.rb', line 303 def self.get_cost_centers c, ticket # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:IncludeEngagementCostCentersFlag'] = true params['tim:IncludeResourceCostCentersFlag'] = true params['tim:IncludeNonResourceNonEngagementCostCentersFlag'] = true # Fetch Resources c.call(:pws_get_cost_center_list, message: { 'pws:serviceRequest' => params }).body[:pws_get_cost_center_list_response][:pws_get_cost_center_list_result][:cost_centers] end |
.get_engagement(c, ticket, engagement_uid) ⇒ Object
171 172 173 174 175 176 177 178 |
# File 'lib/projector_pws.rb', line 171 def self.get_engagement c, ticket, engagement_uid raise "Engagement Code Needed" if !engagement_uid # prepare params params = {'req:SessionTicket' => ticket } params['sch:EngagementIdentities'] = {'com:PwsEngagementRef' => {'com:EngagementUid' => engagement_uid}} # Fetch Engagement Details c.call(:pws_get_engagement, message: {'pws:serviceRequest' => params}).body[:pws_get_engagement_response][:pws_get_engagement_result][:engagements][:pws_engagement_element] end |
.get_engagements(c, ticket, include_closed = false, max_rows = nil) ⇒ Object
180 181 182 183 184 185 186 187 |
# File 'lib/projector_pws.rb', line 180 def self.get_engagements c, ticket, include_closed = false, max_rows = nil # Prepare Params params = {'req:SessionTicket' => ticket } params['sch:IncludeClosedFlag'] = include_closed if include_closed && (include_closed.class == TrueClass || include_closed.class == FalseClass) params['sch:MaxRowsToReturn'] = max_rows if max_rows && max_rows.class == Integer # Fetch Engagement List 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] end |
.get_expense_document(c, ticket, doc_number, include_cost_cards = true, include_receipts = false) ⇒ Object
Get Expense Document
316 317 318 319 320 321 322 323 324 325 326 |
# File 'lib/projector_pws.rb', line 316 def self.get_expense_document c, ticket, doc_number, include_cost_cards = true, include_receipts = false # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:ExpenseDocumentIdentity'] = { 'com:DocumentNumber' => doc_number } params['tim:RetrieveCostCardsFlag'] = include_cost_cards params['tim:RetrieveReceiptsFlag'] = include_receipts # Fetch Expense Document c.call(:pws_get_expense_document, message: { 'pws:serviceRequest' => params }).body[:pws_get_expense_document_response][:pws_get_expense_document_result][:expense_document] end |
.get_expense_documents(c, ticket, reps = nil) ⇒ Object
Get Expense Documents
329 330 331 332 333 334 335 336 337 338 339 340 |
# File 'lib/projector_pws.rb', line 329 def self.get_expense_documents c, ticket, reps = nil # Prepare Params params = { 'req:SessionTicket' => ticket } if reps params['tim:ExpenseDocumentIdentity'] = [] reps.each { |r| params['tim:ExpenseDocumentIdentity'] << { 'com:DocumentNumber' => r } } end # Fetch Expense Documents c.call(:pws_get_expense_document, message: { 'pws:serviceRequest' => params }).body[:pws_get_expense_document_response][:pws_get_expense_document_result] end |
.get_free_resources(c, ticket, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Free Resources (non-busy) with associated minutes
365 366 367 368 369 370 371 372 373 374 375 |
# File 'lib/projector_pws.rb', line 365 def self.get_free_resources c, ticket, start_date = current_week_start, end_date = current_week_end # Get all resources res = ProjectorPWS.get_resources c, ticket # Collect free time res.collect { |r| { resource: r, free_hours: get_resource_free_hours(c, ticket, r, start_date, end_date).to_f } }.select { |x| x[:free_hours] > 0 } end |
.get_project(c, ticket, project_uid) ⇒ Object
Get Project Details
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/projector_pws.rb', line 138 def self.get_project c, ticket, project_uid # prepare params params = {'req:SessionTicket' => ticket } params['sch:Mode'] = "R" # Had to build the Hash this way to counter 'String not Matched Issue', ruby -v 2.5.1, rails -v 5.1.6 if project_uid params['sch:ProjectIdentities'] = {'com:PwsProjectRef' => { 'com:ProjectUid' => project_uid } } end # Fetch Project Details c.call(:pws_get_project, message: {'pws:serviceRequest' => params}).body[:pws_get_project_response][:pws_get_project_result][:projects][:pws_project_element] end |
.get_project_time_baseline(c, ticket, time_baseline_uid) ⇒ Object
Get Project Time Baseline
152 153 154 155 156 157 158 159 |
# File 'lib/projector_pws.rb', line 152 def self.get_project_time_baseline c, ticket, time_baseline_uid # prepare params params = {'req:SessionTicket' => ticket} raise "Time Baseline Uid Missing" if !time_baseline_uid params['sch:ProjectTimeBaselineIdentities'] = {'com:PwsProjectTimeBaselineRef' => {'com:ProjectTimeBaselineUid' => time_baseline_uid}} # Fetch Time Baseline Info 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] end |
.get_project_time_baselines(c, ticket, time_baseline_uids) ⇒ Object
Get Project Time Baselines
162 163 164 165 166 167 168 169 |
# File 'lib/projector_pws.rb', line 162 def self.get_project_time_baselines c, ticket, time_baseline_uids # prepare params params = {'req:SessionTicket' => ticket} raise "Time Baseline Uids Missing" unless time_baseline_uids.is_a?(Array) params['sch:ProjectTimeBaselineIdentities'] = time_baseline_uids.collect { |i| { 'com:PwsProjectTimeBaselineRef' => { 'com:ProjectTimeBaselineUid' => i } } } # Fetch Time Baseline Info 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] end |
.get_projects(c, ticket, engagement_code = nil) ⇒ Object
Get Project List
129 130 131 132 133 134 135 |
# File 'lib/projector_pws.rb', line 129 def self.get_projects c, ticket, engagement_code = nil # Prepare Params params = {'req:SessionTicket' => ticket } params['sch:QueryString'] = engagement_code.to_s if engagement_code # Fetch Projects 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] end |
.get_report(c, ticket, report_uid, format = nil) ⇒ Object
Get Report Output
117 118 119 120 121 122 123 124 125 126 |
# File 'lib/projector_pws.rb', line 117 def self.get_report c, ticket, report_uid, format = nil # Prepare Params params = { 'req:SessionTicket' => ticket } params['rep:ReportIdentity'] = { 'com:ReportUid' => report_uid } params['rep:Format'] = format if format # Fetch Report c.call(:pws_get_report_output, message: { 'pws:serviceRequest' => params }).body end |
.get_resource_active_hours(c, ticket, resource, start_date = current_week_start, end_date = current_week_end, wsched = nil) ⇒ Object
Get Resource Active Hours
412 413 414 415 416 417 418 419 |
# File 'lib/projector_pws.rb', line 412 def self.get_resource_active_hours c, ticket, resource, start_date = current_week_start, end_date = current_week_end, wsched = nil # Acquire working schedule for resource wsched ||= ProjectorPWS.get_resource_working_schedule(c, ticket, resource[:resource_uid], start_date, end_date)[:pws_working_schedule_day] rescue(return(0)) wsched = [wsched] unless wsched.is_a? Array wsched.compact! compute_resource_active_hours wsched end |
.get_resource_available_timeoff(c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Available Timeoff
264 265 266 267 268 269 270 271 272 273 274 |
# File 'lib/projector_pws.rb', line 264 def self.get_resource_available_timeoff c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:EndDate'] = end_date.strftime '%Y-%m-%dz' params['tim:ResourceIdentity'] = { 'com:ResourceUid' => resource_uid } if resource_uid params['tim:StartDate'] = start_date.strftime '%Y-%m-%dz' # Fetch Resource Available Timeoff c.call(:pws_get_resource_available_time_off, message: { 'pws:serviceRequest' => params }).body[:pws_get_resource_available_time_off_response][:pws_get_resource_available_time_off_result][:resource_available_time_off_schedule] end |
.get_resource_cost_cards(c, ticket, resource_uid = nil, exclude_before = nil, flags = { approved: true }) ⇒ Object
Get Resource Cost Cards
290 291 292 293 294 295 296 297 298 299 300 |
# File 'lib/projector_pws.rb', line 290 def self.get_resource_cost_cards c, ticket, resource_uid = nil, exclude_before = nil, flags = { approved: true } # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:ExcludeApprovedCardsBefore'] = exclude_before.strftime '%Y-%m-%dz' if exclude_before %w(approved approved_to_pay draft paid received rejected submitted transmitted).each { |f| params["tim:Include#{f.camelcase}Flag"] = flags[f.to_sym] if flags.include? f.to_sym } params['tim:ResourceIdentity'] = { 'com:ResourceUid' => resource_uid } if resource_uid # Fetch Resource Cost Cards c.call(:pws_get_resource_cost_cards, message: { 'pws:serviceRequest' => params }).body[:pws_get_resource_cost_cards_response][:pws_get_resource_cost_cards_result][:cost_cards] end |
.get_resource_free_hours(c, ticket, resource, start_date = current_week_start, end_date = current_week_end, scheduled_hours = nil, wsched = nil, logger) ⇒ Object
Get Resource Free Hours
402 403 404 405 406 407 408 409 |
# File 'lib/projector_pws.rb', line 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 # Get scheduled hours scheduled_hours ||= get_resource_scheduled_hours c, ticket, resource, start_date, end_date free_hours = compute_resource_free_hours scheduled_hours, wsched logger.info "#FREE HOURS: #{free_hours}" free_hours end |
.get_resource_schedule(c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Schedule
249 250 251 252 253 254 255 256 257 258 259 260 261 |
# File 'lib/projector_pws.rb', line 249 def self.get_resource_schedule c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:EndDate'] = end_date.strftime '%Y-%m-%dz' params['tim:IncludeScheduledTimeFlag'] = :true params['tim:IncludeTimeOffFlag'] = :true params['tim:ResourceIdentity'] = { 'com:ResourceUid' => resource_uid } if resource_uid params['tim:StartDate'] = start_date.strftime '%Y-%m-%dz' # Fetch Resource Schedule c.call(:pws_get_resource_schedule, message: { 'pws:serviceRequest' => params }).body[:pws_get_resource_schedule_response][:pws_get_resource_schedule_result][:resource_schedule] end |
.get_resource_scheduled_hours(c, ticket, resource, start_date = current_week_start, end_date = current_week_end, sched = nil) ⇒ Object
Get Resource Scheduled Hours
422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 |
# File 'lib/projector_pws.rb', line 422 def self.get_resource_scheduled_hours c, ticket, resource, start_date = current_week_start, end_date = current_week_end, sched = nil # Get schedule sched ||= get_resource_schedule(c, ticket, resource[:resource_uid], start_date, end_date) rescue(return({ work: 0, toff: 0, hday: 0 })) # Extract scheduled work sched_work = sched[:roles][:pws_schedule_role] rescue [] sched_work = [sched_work] unless sched_work.is_a? Array sched_work.compact! # Extract scheduled time off time_off = sched[:time_off][:pws_schedule_time_off] rescue [] time_off = [time_off] unless time_off.is_a? Array time_off.compact! # Extract Holidays holidays = sched[:holidays][:pws_schedule_holiday] rescue [] holidays = [holidays] unless holidays.is_a? Array holidays.compact! # Run through time off { collect total minutes } time_off_minutes = time_off.inject(0) do |a, e| # Extract Dates dates = e[:time_off_dates][:pws_schedule_time_off_date] rescue [] dates = [dates] unless dates.is_a? Array dates.compact! # Collect time off dates a + dates.inject(0) { |da, de| da + time_off_minutes(de[:time_off_minutes].to_i) } end # Run through Holidays { collect total minutes } holiday_minutes = holidays.reject { |e| e[:date] < start_date || e[:date] > end_date || e[:date].saturday? || e[:date].sunday? }.inject(0) { |a, e| a + time_off_minutes(e[:time_off_minutes].to_i) } # Run through schedule { collect total minutes } scheduled_minutes = sched_work.inject(0) do |a, e| # Extract bookings bookings = e[:bookings][:pws_schedule_booking] rescue [] bookings = [bookings] unless bookings.is_a? Array bookings.compact! # Collect bookings a + (bookings.inject(0) { |ba, be| ba + be[:scheduled_minutes].to_i }) end { work: scheduled_minutes.to_f / MINUTES_PER_HOUR.to_f, toff: time_off_minutes.to_f / MINUTES_PER_HOUR.to_f, hday: holiday_minutes.to_f / MINUTES_PER_HOUR.to_f } end |
.get_resource_working_schedule(c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Working Schedule
277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/projector_pws.rb', line 277 def self.get_resource_working_schedule c, ticket, resource_uid = nil, start_date = current_week_start, end_date = current_week_end # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:EndDate'] = end_date.strftime '%Y-%m-%dz' params['tim:ResourceIdentity'] = { 'com:ResourceUid' => resource_uid } if resource_uid params['tim:StartDate'] = start_date.strftime '%Y-%m-%dz' # Fetch Resource Working Schedule c.call(:pws_get_resource_working_schedule, message: { 'pws:serviceRequest' => params }).body[:pws_get_resource_working_schedule_response][:pws_get_resource_working_schedule_result][:working_schedule] end |
.get_resources(c, ticket, include_inactive = false) ⇒ Object
Get Resources
198 199 200 201 202 203 204 205 |
# File 'lib/projector_pws.rb', line 198 def self.get_resources c, ticket, include_inactive = false # Prepare Params params = { 'req:SessionTicket' => ticket } params['req:IncludeInactiveFlag'] = include_inactive # Fetch Resources 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] end |
.get_time_cards(c, ticket, resource_uid, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Time Cards
230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'lib/projector_pws.rb', line 230 def self.get_time_cards c, ticket, resource_uid, start_date = current_week_start, end_date = current_week_end # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:EndDate'] = end_date.strftime '%Y-%m-%dz' params['tim:IncludeApprovedFlag'] = :true params['tim:IncludeDraftFlag'] = :true params['tim:IncludeRejectedFlag'] = :true params['tim:IncludeSubmittedFlag'] = :true params['tim:IncludeTimeCardsFlag'] = :true params['tim:IncludeTimeOffCardsFlag'] = :false params['tim:ResourceIdentity'] = { 'com:ResourceUid' => resource_uid } if resource_uid params['tim:StartDate'] = start_date.strftime '%Y-%m-%dz' # Fetch Time Entry Time Off c.call(:pws_get_time_cards, message: { 'pws:serviceRequest' => params }).body[:pws_get_time_cards_response][:pws_get_time_cards_result].try(:[], :time_entry_projects) end |
.get_time_entry_time_off(c, ticket, resource_uid, start_date = current_week_start, end_date = current_week_end) ⇒ Object
Get Resource Time Entry Time Off
218 219 220 221 222 223 224 225 226 227 |
# File 'lib/projector_pws.rb', line 218 def self.get_time_entry_time_off c, ticket, resource_uid, start_date = current_week_start, end_date = current_week_end # Prepare Params params = {'req:SessionTicket' => ticket } params['tim:EndDate'] = end_date.strftime '%Y-%m-%dz' params['tim:ResourceIdentity'] = { 'com:ResourceUid' => resource_uid } if resource_uid params['tim:StartDate'] = start_date.strftime '%Y-%m-%dz' # Fetch Time Entry Time Off 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) end |
.get_user(c, ticket, user_uid) ⇒ Object
Get Single Resource
208 209 210 211 212 213 214 |
# File 'lib/projector_pws.rb', line 208 def self.get_user c, ticket, user_uid params = { 'req:SessionTicket' => ticket } # Prepare Params params['req:UserIdentities'] = { 'com:PwsUserRef' => { 'com:UserUid' => user_uid }} # Fetch Resource Details c.call(:pws_get_user, message: {'pws:serviceRequest' => params}) end |
.is_weekend? ⇒ Boolean
Is Weekend
492 493 494 |
# File 'lib/projector_pws.rb', line 492 def self.is_weekend? (Date.today.thursday? && (DateTime.now >= DateTime.now.change(hour: WEEKEND_START_TIME))) || Date.today.friday? || Date.today.saturday? || Date.today.sunday? end |
.open(url = BASE_URL) ⇒ Object
Open Client
61 62 63 64 65 |
# File 'lib/projector_pws.rb', line 61 def self.open url = BASE_URL c = Savon.client wsdl: WSDL, endpoint: service_url(url), namespace: NAMESPACE, env_namespace: :soapenv, namespace_identifier: :pws, namespaces: EXTRA_NAMESPACES return yield c if block_given? c end |
.service_url(base_url) ⇒ Object
Generate Service URL
477 478 479 |
# File 'lib/projector_pws.rb', line 477 def self.service_url base_url "#{base_url}/#{URL_PATH}" end |
.set_cost_cards_payment_workflow_status(c, ticket, cost_card_uids, status, send_approval_email = false, send_approval_to_pay_email = false, send_paid_email = true) ⇒ Object
Update Cost Cards Payment Workflow Status
343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'lib/projector_pws.rb', line 343 def self.set_cost_cards_payment_workflow_status c, ticket, cost_card_uids, status, send_approval_email = false, send_approval_to_pay_email = false, send_paid_email = true # Prepare Params params = { 'req:SessionTicket' => ticket } params['tim:PaymentWorkflowStatus'] = status params['tim:SendApprovalEmailFlag'] = send_approval_email params['tim:SendApprovalToPayEmailFlag'] = send_approval_to_pay_email params['tim:SendPaidEmailFlag'] = send_paid_email params['tim:StatusOrders'] = { 'tim:PwsCostPwsChangeOrder' => { 'tim:ApproveToPayFlag' => true, 'tim:CostCardIdentities' => { 'tim:PwsVersionedCostCardRef' => cost_card_uids.collect { |cc| { 'com:CostCardUid' => cc } } } } } # Set Cost Card Payment Workflow Status c.call(:pws_set_cost_card_payment_workflow_status, message: { 'pws:serviceRequest' => params }).body[:pws_set_cost_card_payment_workflow_status_response][:pws_set_cost_card_payment_workflow_status_result] end |
.time_off_minutes(x) ⇒ Object
Time Off Minutes (adjust for full-day holidays)
497 498 499 |
# File 'lib/projector_pws.rb', line 497 def self.time_off_minutes x (x == HOURS_PER_DAY_REAL * MINUTES_PER_HOUR) ? (HOURS_PER_DAY * MINUTES_PER_HOUR) : x end |
.unauthenticate(c, ticket) ⇒ Object
Unauthenticate
110 111 112 113 114 |
# File 'lib/projector_pws.rb', line 110 def self.unauthenticate c, ticket # Unauthenticate c.call(:pws_unauthenticate, message: { 'pws:serviceRequest' => { 'req:SessionTicket' => ticket } }).body end |