real_page 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +7 -0
  2. data/.ci +139 -0
  3. data/.gitignore +3 -0
  4. data/.rakeTasks +7 -0
  5. data/.rspec +3 -0
  6. data/CHANGELOG.txt +12 -0
  7. data/CODEOWNERS +1 -0
  8. data/CODE_OF_CONDUCT.md +13 -0
  9. data/Gemfile +6 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +588 -0
  12. data/Rakefile +7 -0
  13. data/bin/console +15 -0
  14. data/bin/setup +7 -0
  15. data/config/multi_xml.rb +4 -0
  16. data/lib/real_page.rb +54 -0
  17. data/lib/real_page/attribute_parser.rb +48 -0
  18. data/lib/real_page/attribute_parser/base.rb +21 -0
  19. data/lib/real_page/attribute_parser/boolean.rb +25 -0
  20. data/lib/real_page/attribute_parser/date.rb +28 -0
  21. data/lib/real_page/attribute_parser/date_time.rb +23 -0
  22. data/lib/real_page/attribute_parser/decimal.rb +15 -0
  23. data/lib/real_page/attribute_parser/integer.rb +15 -0
  24. data/lib/real_page/attribute_parser/object.rb +13 -0
  25. data/lib/real_page/attribute_parser/string.rb +13 -0
  26. data/lib/real_page/document_parser.rb +6 -0
  27. data/lib/real_page/document_parser/base.rb +51 -0
  28. data/lib/real_page/document_parser/floor_plan_object.rb +30 -0
  29. data/lib/real_page/document_parser/guest_cards.rb +102 -0
  30. data/lib/real_page/document_parser/guest_cards/amenities.rb +34 -0
  31. data/lib/real_page/document_parser/guest_cards/prospects.rb +45 -0
  32. data/lib/real_page/document_parser/leases.rb +37 -0
  33. data/lib/real_page/document_parser/picklist.rb +38 -0
  34. data/lib/real_page/document_parser/rent_matrices.rb +39 -0
  35. data/lib/real_page/document_parser/rent_matrices/options.rb +31 -0
  36. data/lib/real_page/document_parser/rent_matrices/rows.rb +30 -0
  37. data/lib/real_page/document_parser/unit_object.rb +30 -0
  38. data/lib/real_page/error/bad_request.rb +18 -0
  39. data/lib/real_page/error/base.rb +9 -0
  40. data/lib/real_page/error/invalid_configuration.rb +9 -0
  41. data/lib/real_page/error/invalid_response.rb +9 -0
  42. data/lib/real_page/error/request_fault.rb +19 -0
  43. data/lib/real_page/error/request_fault/details.rb +17 -0
  44. data/lib/real_page/model/activity.rb +39 -0
  45. data/lib/real_page/model/address.rb +17 -0
  46. data/lib/real_page/model/amenity.rb +14 -0
  47. data/lib/real_page/model/appointment.rb +23 -0
  48. data/lib/real_page/model/base.rb +63 -0
  49. data/lib/real_page/model/base/attribute.rb +56 -0
  50. data/lib/real_page/model/base/attribute_store.rb +37 -0
  51. data/lib/real_page/model/floor_plan.rb +33 -0
  52. data/lib/real_page/model/follow_up.rb +34 -0
  53. data/lib/real_page/model/guest_card.rb +49 -0
  54. data/lib/real_page/model/lease.rb +36 -0
  55. data/lib/real_page/model/lease_action.rb +32 -0
  56. data/lib/real_page/model/phone_number.rb +13 -0
  57. data/lib/real_page/model/picklist_item.rb +10 -0
  58. data/lib/real_page/model/preferences.rb +25 -0
  59. data/lib/real_page/model/prospect.rb +35 -0
  60. data/lib/real_page/model/quote.rb +56 -0
  61. data/lib/real_page/model/rent_matrix.rb +16 -0
  62. data/lib/real_page/model/rent_matrix/concessions.rb +15 -0
  63. data/lib/real_page/model/rent_matrix/option.rb +19 -0
  64. data/lib/real_page/model/rent_matrix/row.rb +18 -0
  65. data/lib/real_page/model/screening.rb +22 -0
  66. data/lib/real_page/model/unit.rb +61 -0
  67. data/lib/real_page/model/unit_shown.rb +48 -0
  68. data/lib/real_page/parameter/list_criterion.rb +14 -0
  69. data/lib/real_page/request/base.rb +89 -0
  70. data/lib/real_page/request/get_floor_plan_list.rb +45 -0
  71. data/lib/real_page/request/get_leases_by_traffic_source.rb +59 -0
  72. data/lib/real_page/request/get_marketing_sources_by_property.rb +23 -0
  73. data/lib/real_page/request/get_rent_matrix.rb +57 -0
  74. data/lib/real_page/request/get_units_by_property.rb +39 -0
  75. data/lib/real_page/request/prospect_search.rb +50 -0
  76. data/lib/real_page/request_section.rb +6 -0
  77. data/lib/real_page/request_section/auth.rb +31 -0
  78. data/lib/real_page/request_section/get_rent_matrix.rb +32 -0
  79. data/lib/real_page/request_section/list_criteria.rb +29 -0
  80. data/lib/real_page/request_section/parameter.rb +31 -0
  81. data/lib/real_page/request_section/prospect_search_criterion.rb +24 -0
  82. data/lib/real_page/utils.rb +6 -0
  83. data/lib/real_page/utils/array_fetcher.rb +35 -0
  84. data/lib/real_page/utils/configuration_validator.rb +20 -0
  85. data/lib/real_page/utils/request_fetcher.rb +30 -0
  86. data/lib/real_page/utils/request_generator.rb +52 -0
  87. data/lib/real_page/utils/snowflake_event_tracker.rb +107 -0
  88. data/lib/real_page/validator.rb +6 -0
  89. data/lib/real_page/validator/move_in_report.rb +65 -0
  90. data/lib/real_page/validator/prospects_data.rb +93 -0
  91. data/lib/real_page/validator/request_errors.rb +97 -0
  92. data/lib/real_page/validator/request_fault.rb +97 -0
  93. data/lib/real_page/version.rb +3 -0
  94. data/real_page.gemspec +32 -0
  95. metadata +291 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 99e5bb281ef2e8fe4277c5371035755bd0a1bbd5c78c13baf7acdce43552508d
4
+ data.tar.gz: 5dbe91f96ad6e93a865c2024689fd9b81199911bbfec401406b4c53158a27473
5
+ SHA512:
6
+ metadata.gz: 0214cedbcd52dce4e430971237f1aeab91cc90e92555d0359d43f09708dc6af56b277c91658d7c7b53975848f6d0933e5ab50a7d3b050e7a784f4929377f6c9e
7
+ data.tar.gz: 967363593b823f3eed3e86770fc01b5d2b91158b3c2a27e27e61560d28b0ce1d3986520be2b6b3d88b6be46a1fb94d92799a3d36c13d503e8b5404a791ce0846
data/.ci ADDED
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env groovy
2
+
3
+ // https://github.com/apartmentlist/ci-shared-library
4
+ @Library('ci-shared-library')_
5
+
6
+ // Log Rotation
7
+ properties([
8
+ buildDiscarder(
9
+ logRotator(
10
+ artifactDaysToKeepStr: '',
11
+ artifactNumToKeepStr: '',
12
+ daysToKeepStr: '30',
13
+ numToKeepStr: '100'
14
+ )
15
+ )
16
+ ]) //properties
17
+
18
+ // Generate unique slave labels
19
+ def k8s_label = "${UUID.randomUUID().toString()}"
20
+
21
+ pipeline {
22
+ environment {
23
+ APP_NAME = 'real_page'
24
+ APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE = 'true'
25
+ CI = 'true'
26
+ CLOUDSDK_CORE_DISABLE_PROMPTS = '1'
27
+ GIT_COMMIT_SHORT = sh(script: "git rev-parse --short ${GIT_COMMIT}", returnStdout: true).trim()
28
+ GIT_MESSAGE = sh(script: "git log --format=%B -n 1 ${GIT_COMMIT}", returnStdout: true).trim()
29
+ GIT_USER = sh(script: "git log -1 --pretty=format:'%ae'", returnStdout: true).trim()
30
+ GITHUB_URL = "https://github.com"
31
+ LANG = "en_US.UTF-8"
32
+ LANGUAGE = "en_US:en"
33
+ LC_ALL = "en_US.UTF-8"
34
+ PRODUCTION_DEPLOY="false"
35
+ SLACK_CHANNEL = "#staging-releases"
36
+ } // environment
37
+
38
+ agent {
39
+ kubernetes {
40
+ label k8s_label
41
+ defaultContainer 'jnlp'
42
+ yaml """
43
+ ---
44
+ apiVersion: v1
45
+ kind: Pod
46
+ metadata:
47
+ name: test
48
+ spec:
49
+ restartPolicy: Never
50
+ containers:
51
+ - name: ruby
52
+ image: ruby:2.6.7
53
+ imagePullPolicy: Always
54
+ resources:
55
+ requests:
56
+ memory: "2048Mi"
57
+ cpu: "2"
58
+ limits:
59
+ memory: "2048Mi"
60
+ cpu: "2"
61
+ command:
62
+ - "tail"
63
+ - "-f"
64
+ - "/dev/null"
65
+ """
66
+ } // kubernetes
67
+ } // agent
68
+
69
+ options {
70
+ timestamps()
71
+ timeout(time: 10, unit: 'MINUTES')
72
+ ansiColor('xterm')
73
+ } // options
74
+
75
+ stages {
76
+ stage('Preparation') {
77
+ parallel {
78
+ stage('Slack') {
79
+ steps {
80
+ slackPreparation()
81
+ } // steps
82
+ } // stage - Slack
83
+ stage('Build Description') {
84
+ steps {
85
+ buildDescription()
86
+ }
87
+ }
88
+ stage('Bundle') {
89
+ steps {
90
+ container('ruby') {
91
+ sh 'gem install bundler:2.2.6 --no-post-install-message --no-document'
92
+ sh 'apt-get update && apt-get install --yes --no-install-recommends git gcc make'
93
+ sh '''
94
+ bundle config mirror.https://rubygems.org http://web.gemstash:9292
95
+ bundle config mirror.https://rubygems.org.fallback_timeout 1
96
+ '''
97
+ sh 'bundle install -j 12'
98
+ } // container
99
+ } // steps
100
+ } // stage - Bundle
101
+ } //parallel
102
+ } //stage - Preparation
103
+
104
+ stage('Testing') {
105
+ when {
106
+ allOf {
107
+ changeRequest target: 'main'
108
+ }
109
+ }
110
+
111
+ parallel {
112
+ stage('Run RSpec') {
113
+ steps {
114
+ container('ruby') {
115
+ withEnv([
116
+ "BUNDLE_GITHUB__COM=${BUNDLE_GITHUB__COM}",
117
+ "BUNDLE_GITHUB__HTTPS=${BUNDLE_GITHUB__HTTPS}"
118
+ ]) {
119
+ sh label: 'RSpec', script: 'bundle exec rake'
120
+ } // withEnv
121
+ } // container
122
+ } // steps
123
+ } // stage
124
+ } //parallel
125
+ } //stage
126
+
127
+ } // stages
128
+
129
+ post {
130
+ success {
131
+ slackSuccess()
132
+ } // success
133
+ failure {
134
+ slackFailure()
135
+ } // failure
136
+
137
+ } // post
138
+
139
+ } // pipeline
data/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ /Gemfile.lock
2
+ real_page-*.gem
3
+ .DS_Store
data/.rakeTasks ADDED
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Settings><!--This file was automatically generated by Ruby plugin.
3
+ You are allowed to:
4
+ 1. Remove rake task
5
+ 2. Add existing rake tasks
6
+ To add existing rake tasks automatically delete this file and reload the project.
7
+ --><RakeGroup description="" fullCmd="" taksId="rake"><RakeTask description="Build real_page-2.2.6.gem into the pkg directory" fullCmd="build" taksId="build" /><RakeTask description="Remove any temporary products" fullCmd="clean" taksId="clean" /><RakeTask description="Remove any generated files" fullCmd="clobber" taksId="clobber" /><RakeTask description="Build and install real_page-2.2.6.gem into system gems" fullCmd="install" taksId="install" /><RakeGroup description="" fullCmd="" taksId="install"><RakeTask description="Build and install real_page-2.2.6.gem into system gems without network access" fullCmd="install:local" taksId="local" /></RakeGroup><RakeTask description="Create tag v2.2.6 and build and push real_page-2.2.6.gem to rubygems.org" fullCmd="release[remote]" taksId="release[remote]" /><RakeTask description="Run RSpec code examples" fullCmd="spec" taksId="spec" /><RakeTask description="" fullCmd="default" taksId="default" /><RakeTask description="" fullCmd="release" taksId="release" /><RakeGroup description="" fullCmd="" taksId="release"><RakeTask description="" fullCmd="release:guard_clean" taksId="guard_clean" /><RakeTask description="" fullCmd="release:rubygem_push" taksId="rubygem_push" /><RakeTask description="" fullCmd="release:source_control_push" taksId="source_control_push" /></RakeGroup></RakeGroup></Settings>
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require 'spec_helper'
data/CHANGELOG.txt ADDED
@@ -0,0 +1,12 @@
1
+ Version 2.3.0, 2021-04-12
2
+ -------------------------
3
+ Add event_tracker and report PMS metrics
4
+
5
+ Version 2.2.7, 2020-07-19
6
+ -------------------------
7
+ Bump version after branch renamed to main in github.
8
+
9
+
10
+ Version 2.2.6, 2018-01-31
11
+ -------------------------
12
+ 10380c2 Fix ambiguous time zone bug
data/CODEOWNERS ADDED
@@ -0,0 +1 @@
1
+ * @jeffnoehren @leqilong
@@ -0,0 +1,13 @@
1
+ # Contributor Code of Conduct
2
+
3
+ As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
4
+
5
+ We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, age, or religion.
6
+
7
+ Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct.
8
+
9
+ Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team.
10
+
11
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
12
+
13
+ This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/)
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in real_page.gemspec
4
+ gemspec
5
+
6
+ gem 'event_tracker', git: 'https://github.com/apartmentlist/eventing.git', glob: 'clients/ruby/event_tracker.gemspec', tag: 'rb1.21.0'
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 Apartment List, Inc
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,588 @@
1
+ [![Build Status](https://magnum.travis-ci.com/apartmentlist/real_page.svg?token=7UeXK6PaMuQ9eC79sCsV&branch=master)](https://magnum.travis-ci.com/apartmentlist/real_page)
2
+
3
+ # RealPage
4
+
5
+ Client for RealPage Exchange API.
6
+
7
+ ## Versions
8
+
9
+ See the [changelog](CHANGELOG.txt)
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ ```ruby
16
+ gem 'real_page'
17
+ ```
18
+
19
+ And then execute:
20
+
21
+ $ bundle
22
+
23
+ Or install it yourself as:
24
+
25
+ $ gem install real_page
26
+
27
+ ## Usage
28
+
29
+ ### Configuration
30
+ Configure the gem with your RealPage web service URL:
31
+
32
+ ```ruby
33
+ RealPage.configure do |config|
34
+ # Use your web service URL below
35
+ config.web_service_url = 'https://gateway.rpx.realpage.com/rpxgateway/partner/Client/Client.svc'
36
+ config.username = '<RealPage Exchange username>'
37
+ config.password = '<RealPage Exchange password>'
38
+ config.license_key = '<RealPage Exchange license key>'
39
+ config.app_name = '<Service that uses this gem>'
40
+ end
41
+ ```
42
+
43
+ ### Models
44
+ Responses from RealPage are parsed from XML into a ruby Model class
45
+
46
+ #### RealPage::Model::Activity
47
+
48
+ An activity represents an event that happens in relation to a [RealPage::Model::GuestCard](#realpagemodelguestcard).
49
+
50
+ * `agent_id` [Fixnum]
51
+ * `agent_name` [String]
52
+ * `create_date` [Date]
53
+ * `date` [String]
54
+ * `edit_type_name` [String]
55
+ * `guest_card_journal_edit_type_id` [String]
56
+ * `guest_card_journal_type_id` [String]
57
+ * `id` [String]
58
+ * `logged_by_name` [String]
59
+ * `loss_reason_cd` [String]
60
+ * `max_create_date_time` [Fixnum]
61
+ * `name` [String]
62
+ * `notes` [String]
63
+ * `result_cd` [String]
64
+ * `result` [String]
65
+ * `status_change_reason` [String]
66
+ * `status` [String]
67
+ * `system` [Boolean]
68
+ * `time` [String]
69
+
70
+ #### RealPage::Model::Address
71
+
72
+ The address of a [RealPage::Model::Prospect](#realpagemodelprospect)
73
+
74
+ * `city` [String]
75
+ * `country` [String]
76
+ * `line1` [String]
77
+ * `line2` [String]
78
+ * `state` [String]
79
+ * `zip` [String]
80
+
81
+ #### RealPage::Model::Amenity
82
+
83
+ An identifier for an Amenity at a particular property.
84
+
85
+ * `id` [String]
86
+ * `pmc_id` [String]
87
+ * `site_id` [String]
88
+
89
+ #### RealPage::Model::Appointment
90
+
91
+ An appointment to visit the property. May be attached to a [RealPage::Model::GuestCard](#realpagemodelguestcard)
92
+
93
+ * `day` [Integer]
94
+ * `hour` [Integer]
95
+ * `leasing_agent_id` [String]
96
+ * `minute` [Integer]
97
+ * `month` [Integer]
98
+ * `pmc_id` [String]
99
+ * `site_id` [String]
100
+ * `task_notes` [String]
101
+ * `year` [Integer]
102
+
103
+ #### RealPage::Model::FloorPlan
104
+
105
+ The response from [GetFloorPlanList](#realpagerequestgetfloorplanlist) is an array of `RealPage::Model::FloorPlan`
106
+ instances. Each instance will have the following attributes:
107
+
108
+ * `bathrooms` [Float]
109
+ * `bedrooms` [Integer]
110
+ * `code` [String]
111
+ * `description` [String]
112
+ * `excluded_from_occupancy` [Boolean]
113
+ * `gross_square_footage` [Integer]
114
+ * `group_id` [String]
115
+ * `group_name` [String]
116
+ * `id` [Integer]
117
+ * `maximum_occupants` [Integer]
118
+ * `name_marketing` [String]
119
+ * `name` [String]
120
+ * `rent_max` [Float]
121
+ * `rent_min` [Float]
122
+ * `rentable_square_footage` [Integer]
123
+
124
+ #### RealPage::Model::FollowUp
125
+
126
+ A task for a leasing agent, perhaps to get back in touch with a [RealPage::Model::Prospect](#realpagemodelprospect) about a [RealPage::Model::GuestCard](#realpagemodelguestcard).
127
+
128
+ * `agent_id` [Integer]
129
+ * `agent_name` [String]
130
+ * `notes` [String]
131
+ * `past_due_task` [Boolean]
132
+ * `priority_cd` [String]
133
+ * `task_appt_date_time` [String]
134
+ * `task_category_cd` [String]
135
+ * `task_confirmed` [String]
136
+ * `task_contact_date_time` [Date]
137
+ * `task_contact_type_cd` [String]
138
+ * `task_duration_end` [String]
139
+ * `task_duration_start` [String]
140
+ * `task_id` [Integer]
141
+ * `task` [String]
142
+
143
+ #### RealPage::Model::GuestCard
144
+
145
+ The main object in RealPage's system representing a potential renter. The
146
+ response from [ProspectSearch](#realpagerequestprospectsearch) is an array of
147
+ these.
148
+
149
+
150
+ * `activities` [Array<[RealPage::Model::Activity](#realpagemodelactivity)>]
151
+ * `amenities` [Array<[RealPage::Model::Amenity](#realpagemodelamenity)>]
152
+ * `appointment` [[RealPage::Model::Appointment](#realpagemodelappointment)]
153
+ * `contact_type` [String]
154
+ * `create_date` [String]
155
+ * `customer_id` [String]
156
+ * `date_contact` [String]
157
+ * `date_followup` [String]
158
+ * `follow_ups` [Array<[RealPage::Model::FollowUp](#realpagemodelfollowup)>]
159
+ * `id` [String]
160
+ * `lease_actions` [Array<[RealPage::Model::LeaseAction](#realpagemodelleaseaction)>]
161
+ * `leasing_agent_id` [String]
162
+ * `move_in_reason` [String]
163
+ * `pet_weight_range` [String]
164
+ * `pmc_id` [String]
165
+ * `preferences` [[RealPage::Model::Preferences](#realpagemodelpreferences)]
166
+ * `primary_lead_source` [String]
167
+ * `primary_traffic_source_minor` [String]
168
+ * `property_status` [String]
169
+ * `prospect_comment` [String]
170
+ * `prospects` [Array<[RealPage::Model::Prospect](#realpagemodelprospect)>]
171
+ * `quotes` [Array<[RealPage::Model::Quote](#realpagemodelquote)>]
172
+ * `screenings` [Array<[RealPage::Model::Screening](#realpagemodelscreening)>]
173
+ * `secondary_lead_source` [String]
174
+ * `site_id` [String]
175
+ * `status_is_active` [Boolean]
176
+ * `status_is_leased` [Boolean]
177
+ * `status_is_lost` [Boolean]
178
+ * `units_shown` [Array<[RealPage::Model::UnitShown](#realpagemodelunitshown)>]
179
+
180
+ #### RealPage::Model::Lease
181
+
182
+ The response from [GetLeasesByTrafficSource](#realpagerequestgetleasesbytrafficsource) is an array of
183
+ `RealPage::Model::Lease` instances. Each instance will have the following attributes:
184
+
185
+ * `begin_date` [Date]
186
+ * `email` [String]
187
+ * `end_date` [Date]
188
+ * `first_name` [String]
189
+ * `guest_card_id` [String]
190
+ * `id` [String]
191
+ * `last_name` [String]
192
+ * `middle_name` [String]
193
+ * `move_in_date` [Date]
194
+ * `phone_1` [String]
195
+ * `phone_2` [String]
196
+ * `phone_ext_1` [String]
197
+ * `phone_ext_2` [String]
198
+ * `resident_household_id` [String]
199
+ * `resident_member_id` [String]
200
+ * `term_id` [String]
201
+ * `type` [String]
202
+ * `unit_id` [String]
203
+ * `unit_number` [String]
204
+
205
+ The allowed values of `leasetype` are set as constants in the `RealPage::Model::Lease::Type` module:
206
+
207
+ * `RealPage::Model::Lease::Type::FIRST_LEASE`
208
+ * `RealPage::Model::Lease::Type::RENEWAL`
209
+ * `RealPage::Model::Lease::Type::TRANSFER`
210
+
211
+ #### RealPage::Model::LeaseAction
212
+
213
+ An action taken on the path towards signing a [RealPage::Model::Lease](#realpagemodellease)
214
+
215
+ * `editable` [Boolean]
216
+ * `for_correct_date_sort` [String]
217
+ * `lal_org_lea_id` [Integer]
218
+ * `note_comment_length` [Integer]
219
+ * `note_comment` [String]
220
+ * `note_date` [Date]
221
+ * `note_id` [Integer]
222
+ * `note_source` [String]
223
+ * `note_type` [String]
224
+ * `note_user` [String]
225
+ * `rentable_item_reserved` [Boolean]
226
+ * `sort_date` [Date]
227
+
228
+ #### RealPage::Model::PhoneNumber
229
+
230
+ A person's phone number.
231
+
232
+ * `number` [String]
233
+ * `type` [String]
234
+
235
+ #### RealPage::Model::PicklistItem
236
+
237
+ Several responses from RealPage include a Picklist. These requests (e.g.
238
+ [GetMarketingSourcesByProperty](#realpagerequestgetmarketingsourcesbyproperty)) return an array of
239
+ `RealPage::Model::PicklistItem`s, which have 2 string attributes: `value` and `text`.
240
+
241
+ #### RealPage::Model::Preferences
242
+
243
+ Details of what the [RealPage::Model::Prospect](#realpagemodelprospect) wants in
244
+ an apartment.
245
+
246
+ * `date_needed` [Date]
247
+ * `desired_rent` [Integer]
248
+ * `floorplan_group_id` [String]
249
+ * `floorplan_id` [Integer]
250
+ * `lease_term_months` [Integer]
251
+ * `occupants` [String]
252
+ * `price_range_id` [String]
253
+ * `site_id` [String]
254
+
255
+ #### RealPage::Model::Prospect
256
+
257
+ The main object representing a renter. It will be found on a
258
+ [RealPage::Model::GuestCard](#realpagemodelguestcard).
259
+
260
+ * `address` [[RealPage::Model::Address](#realpagemodeladdress)]
261
+ * `customer_id` [Integer]
262
+ * `email` [String]
263
+ * `first_name` [String]
264
+ * `gender` [String]
265
+ * `id_issuer` [String]
266
+ * `id_number` [String]
267
+ * `id_numberencrypted` [String]
268
+ * `id_type` [String]
269
+ * `last_name` [String]
270
+ * `middle_name` [String]
271
+ * `phone_numbers` [Array<[RealPage::Model::PhoneNumber](#realpagemodelphonenumber)]
272
+ * `pmc_id` [Integer]
273
+ * `pref_communication_type` [String]
274
+ * `relationship_id` [String]
275
+ * `site_id` [Integer]
276
+ * `ssn_encrypted` [String]
277
+ * `ssn` [String]
278
+
279
+ #### RealPage::Model::Quote
280
+
281
+ A rental price quoted before move-in.
282
+
283
+ * `agent_name` [String]
284
+ * `bldg_unit` [String]
285
+ * `building` [String]
286
+ * `context_name` [String]
287
+ * `date_created` [String]
288
+ * `date_lease_begin` [String]
289
+ * `date_lease_end` [String]
290
+ * `date_move_in` [String]
291
+ * `date_quote_expires` [String]
292
+ * `date_range_lease` [String]
293
+ * `deposit` [Float]
294
+ * `enable_payment_plan` [Boolean]
295
+ * `floor_plan_id` [Integer]
296
+ * `floor_plan_id` [String]
297
+ * `floor_plan_name` [String]
298
+ * `id` [Integer]
299
+ * `id` [String]
300
+ * `lease_term_id` [Integer]
301
+ * `lease_term_id` [String]
302
+ * `market_rent` [Float]
303
+ * `rent` [Float]
304
+ * `reservation_expire_date` [Date]
305
+ * `site_id` [String]
306
+ * `site` [String]
307
+ * `time_created` [String]
308
+ * `type_code` [String]
309
+ * `type` [String]
310
+ * `unit_applied` [Boolean]
311
+ * `unit_id` [String]
312
+ * `unit_reserved` [String]
313
+ * `unit_status` [String]
314
+ * `unit` [String]
315
+ * available [Boolean]
316
+
317
+ #### RealPage::Model::RentMatrix
318
+
319
+ The response from [GetRentMatrix](#realpagerequestgetrentmatrix) is an array of `RealPage::Model::RentMatrix`
320
+ instances. Each instance will have the following attributes:
321
+
322
+ * `lease_term` [Integer]
323
+ * `lease_term_max` [Integer]
324
+ * `lease_term_min` [Integer]
325
+ * `needed_by_date` [Date]
326
+ * `property_id` [String]
327
+ * `rows` [Array<[RealPage::Model::RentMatrix::Row](#realpagemodelrentmatrixrow)>]
328
+
329
+ ##### RealPage::Model::RentMatrix::Concessions
330
+
331
+ * `monthly_fixed` [Float]
332
+ * `monthly_percent` [Float]
333
+ * `months` [Float]
334
+ * `one_time_fixed` [Integer]
335
+ * `total` [Integer]
336
+
337
+ ##### RealPage::Model::RentMatrix::Option
338
+
339
+ * `best` [Boolean]
340
+ * `lease_end_date` [Date]
341
+ * `lease_start_date` [Date]
342
+ * `lease_term` [Integer]
343
+ * `concessions` [[RealPage::Model::RentMatrix::Concessions](#realpagemodelrentmatrixconcessions)]
344
+ * `rent` [Integer]
345
+
346
+ ##### RealPage::Model::RentMatrix::Row
347
+
348
+ * `building` [String]
349
+ * `lease_end_date` [Date]
350
+ * `lease_start_date` [Date]
351
+ * `make_ready_date` [Date]
352
+ * `max_rent` [Integer]
353
+ * `min_rent` [Integer]
354
+ * `options` [Array<[RealPage::Model::RentMatrix::Option](#realpagemodelrentmatrixoption)>]
355
+ * `rent` [Integer]
356
+ * `unit` [String]
357
+ * `ys_quote_id` [String]
358
+
359
+ #### RealPage::Model::Screening
360
+
361
+ Screening conducted on a [RealPage::Model::Prospect](#realpagemodelprospect)
362
+ before their application is accepted.
363
+
364
+ * `apg_id` [String]
365
+ * `app_id` [String]
366
+ * `customer_id` [Integer]
367
+ * `customer_name` [String]
368
+ * `external_screening_service` [String]
369
+ * `result_code` [String]
370
+ * `result_date` [String]
371
+ * `result` [String]
372
+
373
+ #### RealPage::Model::Unit
374
+
375
+ The response from [GetUnitsByProperty](#realpagerequestgetunitsbyproperty) is an array of `RealPage::Model::Unit`
376
+ instances. Each instance will have the following attributes:
377
+
378
+ * `address_1` [String]
379
+ * `address_2` [String]
380
+ * `available` [Boolean]
381
+ * `available_date` [Date]
382
+ * `base_rent_amount` [Float]
383
+ * `building_id` [Integer]
384
+ * `city_name` [String]
385
+ * `county_name` [String]
386
+ * `country_name` [String]
387
+ * `description` [String]
388
+ * `deposit_amount` [Float]
389
+ * `floor_number` [String]
390
+ * `floor_plan_id` [Integer]
391
+ * `floor_plan_market_rent` [Float]
392
+ * `fp_report_unit_occupancy` [Boolean]
393
+ * `gross_sqft_count` [String]
394
+ * `hearing` [Boolean]
395
+ * `id` [Integer]
396
+ * `last_action_code` [String]
397
+ * `last_action_desc` [String]
398
+ * `lock` [Boolean]
399
+ * `lock_owner` [String]
400
+ * `made_ready` [Boolean]
401
+ * `made_ready_date` [Date]
402
+ * `market_rent` [Float]
403
+ * `mobility` [Boolean]
404
+ * `nonrefund_fee` [Float]
405
+ * `nonrevenue_description` [String]
406
+ * `nonrevenue` [Boolean]
407
+ * `note_description` [String]
408
+ * `number` [String]
409
+ * `pmc_id` [String]
410
+ * `property_number_id` [Integer]
411
+ * `rent_sqft_count` [String]
412
+ * `reserve` [Boolean]
413
+ * `reserved_until` [Date]
414
+ * `site_id` [String]
415
+ * `state` [String]
416
+ * `unavailable_code` [String]
417
+ * `vacant` [Boolean]
418
+ * `vacant_date` [Date]
419
+ * `vision` [Boolean]
420
+ * `zip` [String]
421
+
422
+ #### RealPage::Model::UnitShown
423
+
424
+ A unit shown to a [RealPage::Model::Prospect](#realpagemodelprospect) during a
425
+ site visit.
426
+
427
+ * `activity_date` [Date]
428
+ * `activity_id` [String]
429
+ * `activity_name` [String]
430
+ * `activity_time` [String]
431
+ * `agent_id` [Integer]
432
+ * `agent_name` [String]
433
+ * `building` [String]
434
+ * `building_unit` [String]
435
+ * `create_date` [Date]
436
+ * `edit_type_name` [String]
437
+ * `guest_card_journal_type_edit_id` [String]
438
+ * `guest_card_journal_type_id` [String]
439
+ * `logged_by_name` [String]
440
+ * `market_rent` [Float]
441
+ * `max_create_date_time` [Integer]
442
+ * `notes` [String]
443
+ * `result` [String]
444
+ * `site` [String]
445
+ * `site_id` [String]
446
+ * `status` [String]
447
+ * `unit_applied` [Boolean]
448
+ * `unit_id` [Integer]
449
+ * `unit_number` [String]
450
+ * `unit_reserved` [Date]
451
+ * `unit_status` [Integer]
452
+
453
+ ### Request Parameter Objects
454
+
455
+ These objects are used as parameters to request objects
456
+
457
+ #### RealPage::Parameter::ListCriterion
458
+
459
+ A request parameter used to filter lists (e.g. [GetUnitsByProperty](#realpagerequestgetunitsbyproperty)).
460
+ A ListCriterion takes the following parameters
461
+
462
+ * `max_value` Maximum of List Criterion to be retrieved
463
+ * `min_value` Minimum value of List Criterion to be retrieved
464
+ * `name` Name of List Criterion to be retrieved
465
+ * `single_value` Value of List Criterion to be retrieved
466
+
467
+ ### SOAP Actions
468
+
469
+ To request an action, instantiate the appropriate class (see below) and invoke #perform
470
+ on it. The API response will be parsed and returned as a ruby object.
471
+
472
+ #### RealPage::Request::GetFloorPlanList
473
+
474
+ ##### Initialization parameters
475
+
476
+ * `list_criteria` [Array<[RealPage::Parameter::ListCriterion](#realpagelistcriterion)>] criteria used to filter the results
477
+ * `pmc_id` [String] the unique identifier for the property management company in RealPage
478
+ * `site_id` [String] the unique identifier for the property in RealPage
479
+
480
+ ##### Response
481
+
482
+ Array<[RealPage::Model::FloorPlan](#realpagemodelfloorplan)>
483
+
484
+ #### RealPage::Request::GetLeasesByTrafficSource
485
+
486
+ ##### Initialization parameters
487
+
488
+ * `end_date` [Date] the end of the date range for the query
489
+ * `pmc_id` [String] the unique identifier for the property management company in RealPage
490
+ * `site_id` [String] the unique identifier for the property in RealPage
491
+ * `start_date` [Date] the start of the date range for the query
492
+ * `traffic_source_id` [String] the identifier for the marketing/traffic source used to query leases
493
+
494
+ ##### Response
495
+
496
+ Array<[RealPage::Model::Lease](#realpagemodellease)>
497
+
498
+ #### RealPage::Request::GetMarketingSourcesByProperty
499
+
500
+ ##### Initialization parameters
501
+
502
+ * `pmc_id` [String] the unique identifier for the property management company in RealPage
503
+ * `site_id` [String] the unique identifier for the property in RealPage
504
+
505
+ ##### Response
506
+
507
+ Array<[RealPage::Model::PicklistItem](#realpagemodelpicklistitem)>
508
+
509
+ #### RealPage::Request::GetRentMatrix
510
+
511
+ ##### Initialization parameters
512
+
513
+ * `lease_term` [Integer] the term (in months) of the lease
514
+ * `need_by_date` [Date] the date the unit(s) is/are needed by
515
+ * `pmc_id` [String] the unique identifier for the property management company in RealPage
516
+ * `site_id` [String] the unique identifier for the property in RealPage
517
+ * `unit_ids` [Array<Integer>] the array of unit IDs to get pricing data for
518
+ * `viewing_quote_only` [Boolean] identifies whether the user is viewing or creating new quote
519
+
520
+ ##### Response
521
+
522
+ Array<[RealPage::Model::RentMatrix](#realpagemodelrentmatrix)>
523
+
524
+ #### RealPage::Request::GetUnitsByProperty
525
+
526
+ ##### Initialization parameters
527
+
528
+ * `list_criteria` [Array<[RealPage::Parameter::ListCriterion](#realpagelistcriterion)>] criteria used to filter the results
529
+ * `pmc_id` [String] the unique identifier for the property management company in RealPage
530
+ * `site_id` [String] the unique identifier for the property in RealPage
531
+
532
+ ##### Response
533
+
534
+ Array<[RealPage::Model::Unit](#realpagemodelunit)>
535
+
536
+ #### RealPage::Request::ProspectSearch
537
+
538
+ ##### Initialization parameters
539
+
540
+ * `guest_card_id` [String] the unique identifier for the guest card to fetch
541
+ * `pmc_id` [String] the unique identifier for the property management company in RealPage
542
+ * `site_id` [String] the unique identifier for the property in RealPage
543
+
544
+ ##### Response
545
+
546
+ Array<[RealPage::Model::GuestCard](#realpagemodelguestcard)>
547
+
548
+ ### Errors
549
+
550
+ #### RealPage::Error::Base
551
+
552
+ The base class for all RealPage errors
553
+
554
+ #### RealPage::Error::BadRequest
555
+
556
+ Raised when a RealPage request has an error node in the contents. This is generally
557
+ the case when one of the parameters in a section other than the auth section is invalid.
558
+
559
+ Includes an `#errors` array that includes all errors returned by the request. (The value
560
+ of `#message` will be the value of all <errormessage> elements concatenated together with a
561
+ semicolon delimiter.) Each item in the `#errors` array responds to
562
+
563
+ * `#message`
564
+ * `#internal_message`
565
+ * `#severity`
566
+
567
+ #### RealPage::Error::InvalidConfiguration
568
+
569
+ Raised when RealPage is not properly configured
570
+
571
+ #### RealPage::Error::RequestFault
572
+
573
+ Raised when a RealPage request has a fault node, which general appears when there is
574
+ an issue with the auth section in the request (e.g. invalid password)
575
+
576
+ Includes a `#fault_code` attribute based on the code returned in the response
577
+
578
+ ## Development
579
+
580
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
581
+
582
+ ## Contributing
583
+
584
+ 1. Fork it ( https://github.com/[my-github-username]/real_page/fork )
585
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
586
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
587
+ 4. Push to the branch (`git push origin my-new-feature`)
588
+ 5. Create a new Pull Request