real_page 2.3.0
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 +7 -0
- data/.ci +139 -0
- data/.gitignore +3 -0
- data/.rakeTasks +7 -0
- data/.rspec +3 -0
- data/CHANGELOG.txt +12 -0
- data/CODEOWNERS +1 -0
- data/CODE_OF_CONDUCT.md +13 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +588 -0
- data/Rakefile +7 -0
- data/bin/console +15 -0
- data/bin/setup +7 -0
- data/config/multi_xml.rb +4 -0
- data/lib/real_page.rb +54 -0
- data/lib/real_page/attribute_parser.rb +48 -0
- data/lib/real_page/attribute_parser/base.rb +21 -0
- data/lib/real_page/attribute_parser/boolean.rb +25 -0
- data/lib/real_page/attribute_parser/date.rb +28 -0
- data/lib/real_page/attribute_parser/date_time.rb +23 -0
- data/lib/real_page/attribute_parser/decimal.rb +15 -0
- data/lib/real_page/attribute_parser/integer.rb +15 -0
- data/lib/real_page/attribute_parser/object.rb +13 -0
- data/lib/real_page/attribute_parser/string.rb +13 -0
- data/lib/real_page/document_parser.rb +6 -0
- data/lib/real_page/document_parser/base.rb +51 -0
- data/lib/real_page/document_parser/floor_plan_object.rb +30 -0
- data/lib/real_page/document_parser/guest_cards.rb +102 -0
- data/lib/real_page/document_parser/guest_cards/amenities.rb +34 -0
- data/lib/real_page/document_parser/guest_cards/prospects.rb +45 -0
- data/lib/real_page/document_parser/leases.rb +37 -0
- data/lib/real_page/document_parser/picklist.rb +38 -0
- data/lib/real_page/document_parser/rent_matrices.rb +39 -0
- data/lib/real_page/document_parser/rent_matrices/options.rb +31 -0
- data/lib/real_page/document_parser/rent_matrices/rows.rb +30 -0
- data/lib/real_page/document_parser/unit_object.rb +30 -0
- data/lib/real_page/error/bad_request.rb +18 -0
- data/lib/real_page/error/base.rb +9 -0
- data/lib/real_page/error/invalid_configuration.rb +9 -0
- data/lib/real_page/error/invalid_response.rb +9 -0
- data/lib/real_page/error/request_fault.rb +19 -0
- data/lib/real_page/error/request_fault/details.rb +17 -0
- data/lib/real_page/model/activity.rb +39 -0
- data/lib/real_page/model/address.rb +17 -0
- data/lib/real_page/model/amenity.rb +14 -0
- data/lib/real_page/model/appointment.rb +23 -0
- data/lib/real_page/model/base.rb +63 -0
- data/lib/real_page/model/base/attribute.rb +56 -0
- data/lib/real_page/model/base/attribute_store.rb +37 -0
- data/lib/real_page/model/floor_plan.rb +33 -0
- data/lib/real_page/model/follow_up.rb +34 -0
- data/lib/real_page/model/guest_card.rb +49 -0
- data/lib/real_page/model/lease.rb +36 -0
- data/lib/real_page/model/lease_action.rb +32 -0
- data/lib/real_page/model/phone_number.rb +13 -0
- data/lib/real_page/model/picklist_item.rb +10 -0
- data/lib/real_page/model/preferences.rb +25 -0
- data/lib/real_page/model/prospect.rb +35 -0
- data/lib/real_page/model/quote.rb +56 -0
- data/lib/real_page/model/rent_matrix.rb +16 -0
- data/lib/real_page/model/rent_matrix/concessions.rb +15 -0
- data/lib/real_page/model/rent_matrix/option.rb +19 -0
- data/lib/real_page/model/rent_matrix/row.rb +18 -0
- data/lib/real_page/model/screening.rb +22 -0
- data/lib/real_page/model/unit.rb +61 -0
- data/lib/real_page/model/unit_shown.rb +48 -0
- data/lib/real_page/parameter/list_criterion.rb +14 -0
- data/lib/real_page/request/base.rb +89 -0
- data/lib/real_page/request/get_floor_plan_list.rb +45 -0
- data/lib/real_page/request/get_leases_by_traffic_source.rb +59 -0
- data/lib/real_page/request/get_marketing_sources_by_property.rb +23 -0
- data/lib/real_page/request/get_rent_matrix.rb +57 -0
- data/lib/real_page/request/get_units_by_property.rb +39 -0
- data/lib/real_page/request/prospect_search.rb +50 -0
- data/lib/real_page/request_section.rb +6 -0
- data/lib/real_page/request_section/auth.rb +31 -0
- data/lib/real_page/request_section/get_rent_matrix.rb +32 -0
- data/lib/real_page/request_section/list_criteria.rb +29 -0
- data/lib/real_page/request_section/parameter.rb +31 -0
- data/lib/real_page/request_section/prospect_search_criterion.rb +24 -0
- data/lib/real_page/utils.rb +6 -0
- data/lib/real_page/utils/array_fetcher.rb +35 -0
- data/lib/real_page/utils/configuration_validator.rb +20 -0
- data/lib/real_page/utils/request_fetcher.rb +30 -0
- data/lib/real_page/utils/request_generator.rb +52 -0
- data/lib/real_page/utils/snowflake_event_tracker.rb +107 -0
- data/lib/real_page/validator.rb +6 -0
- data/lib/real_page/validator/move_in_report.rb +65 -0
- data/lib/real_page/validator/prospects_data.rb +93 -0
- data/lib/real_page/validator/request_errors.rb +97 -0
- data/lib/real_page/validator/request_fault.rb +97 -0
- data/lib/real_page/version.rb +3 -0
- data/real_page.gemspec +32 -0
- metadata +291 -0
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
# A container for a Prospect as represented by RealPage.
|
6
|
+
class Prospect < Base
|
7
|
+
object_attrs *%i[
|
8
|
+
address
|
9
|
+
phone_numbers
|
10
|
+
]
|
11
|
+
|
12
|
+
integer_attrs *%i[
|
13
|
+
customer_id
|
14
|
+
pmc_id
|
15
|
+
site_id
|
16
|
+
]
|
17
|
+
|
18
|
+
string_attrs *%i[
|
19
|
+
email
|
20
|
+
first_name
|
21
|
+
gender
|
22
|
+
id_issuer
|
23
|
+
id_number
|
24
|
+
id_numberencrypted
|
25
|
+
id_type
|
26
|
+
last_name
|
27
|
+
middle_name
|
28
|
+
pref_communication_type
|
29
|
+
relationship_id
|
30
|
+
ssn
|
31
|
+
ssn_encrypted
|
32
|
+
]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
# Object to encapsulate a Quote from a RealPage response.
|
6
|
+
class Quote < Base
|
7
|
+
boolean_attrs *%i[
|
8
|
+
available
|
9
|
+
enable_payment_plan
|
10
|
+
unit_applied
|
11
|
+
]
|
12
|
+
|
13
|
+
date_attrs *%i[
|
14
|
+
reservation_expire_date
|
15
|
+
]
|
16
|
+
|
17
|
+
decimal_attrs *%i[
|
18
|
+
deposit
|
19
|
+
market_rent
|
20
|
+
rent
|
21
|
+
]
|
22
|
+
|
23
|
+
integer_attrs *%i[
|
24
|
+
floor_plan_id
|
25
|
+
id
|
26
|
+
lease_term_id
|
27
|
+
]
|
28
|
+
|
29
|
+
string_attrs *%i[
|
30
|
+
agent_name
|
31
|
+
bldg_unit
|
32
|
+
building
|
33
|
+
context_name
|
34
|
+
date_created
|
35
|
+
date_lease_begin
|
36
|
+
date_lease_end
|
37
|
+
date_move_in
|
38
|
+
date_quote_expires
|
39
|
+
date_range_lease
|
40
|
+
floor_plan_id
|
41
|
+
floor_plan_name
|
42
|
+
id
|
43
|
+
lease_term_id
|
44
|
+
site
|
45
|
+
site_id
|
46
|
+
time_created
|
47
|
+
type
|
48
|
+
type_code
|
49
|
+
unit
|
50
|
+
unit_id
|
51
|
+
unit_reserved
|
52
|
+
unit_status
|
53
|
+
]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
# Object to encapsulate a rent matrix from a RealPage response.
|
6
|
+
class RentMatrix < Base
|
7
|
+
date_attrs *%i[needed_by_date]
|
8
|
+
|
9
|
+
integer_attrs *%i[lease_term lease_term_max lease_term_min]
|
10
|
+
|
11
|
+
object_attrs *%i[rows]
|
12
|
+
|
13
|
+
string_attrs *%i[property_id]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require_relative '../base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
class RentMatrix
|
6
|
+
# Object to encapsulate a rent matrix concessions node from a RealPage
|
7
|
+
# response.
|
8
|
+
class Concessions < Base
|
9
|
+
decimal_attrs *%i[monthly_fixed monthly_percent months]
|
10
|
+
|
11
|
+
integer_attrs *%i[one_time_fixed total]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative '../base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
class RentMatrix
|
6
|
+
# Object to encapsulate a rent matrix option node from a RealPage
|
7
|
+
# response.
|
8
|
+
class Option < Base
|
9
|
+
boolean_attrs *%i[best]
|
10
|
+
|
11
|
+
date_attrs *%i[lease_end_date lease_start_date]
|
12
|
+
|
13
|
+
integer_attrs *%i[lease_term rent]
|
14
|
+
|
15
|
+
object_attrs *%i[concessions]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
class RentMatrix
|
6
|
+
# Object to encapsulate a rent matrix row node from a RealPage response.
|
7
|
+
class Row < Base
|
8
|
+
date_attrs *%i[lease_end_date lease_start_date make_ready_date]
|
9
|
+
|
10
|
+
integer_attrs *%i[max_rent min_rent rent]
|
11
|
+
|
12
|
+
object_attrs *%i[options]
|
13
|
+
|
14
|
+
string_attrs *%i[building unit ys_quote_id]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
# Object to encapsulate a Screening from a RealPage response.
|
6
|
+
class Screening < Base
|
7
|
+
integer_attrs *%i[
|
8
|
+
customer_id
|
9
|
+
]
|
10
|
+
|
11
|
+
string_attrs *%i[
|
12
|
+
apg_id
|
13
|
+
app_id
|
14
|
+
customer_name
|
15
|
+
external_screening_service
|
16
|
+
result
|
17
|
+
result_code
|
18
|
+
result_date
|
19
|
+
]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
# A container for a unit as represented by RealPage.
|
6
|
+
class Unit < Base
|
7
|
+
boolean_attrs *%i[
|
8
|
+
available
|
9
|
+
fp_report_unit_occupancy
|
10
|
+
hearing
|
11
|
+
lock
|
12
|
+
made_ready
|
13
|
+
mobility
|
14
|
+
nonrevenue
|
15
|
+
reserve
|
16
|
+
vacant
|
17
|
+
vision
|
18
|
+
]
|
19
|
+
|
20
|
+
date_attrs *%i[available_date made_ready_date reserved_until vacant_date]
|
21
|
+
|
22
|
+
decimal_attrs *%i[
|
23
|
+
base_rent_amount
|
24
|
+
deposit_amount
|
25
|
+
floor_plan_market_rent
|
26
|
+
market_rent
|
27
|
+
nonrefund_fee
|
28
|
+
]
|
29
|
+
|
30
|
+
integer_attrs *%i[
|
31
|
+
building_id
|
32
|
+
floor_plan_id
|
33
|
+
gross_sqft_count
|
34
|
+
id
|
35
|
+
rent_sqft_count
|
36
|
+
property_number_id
|
37
|
+
]
|
38
|
+
|
39
|
+
string_attrs *%i[
|
40
|
+
address_1
|
41
|
+
address_2
|
42
|
+
city_name
|
43
|
+
county_name
|
44
|
+
country_name
|
45
|
+
description
|
46
|
+
floor_number
|
47
|
+
last_action_code
|
48
|
+
last_action_desc
|
49
|
+
lock_owner
|
50
|
+
non_revenue_description
|
51
|
+
note_description
|
52
|
+
number
|
53
|
+
pmc_id
|
54
|
+
site_id
|
55
|
+
state
|
56
|
+
unavailable_code
|
57
|
+
zip
|
58
|
+
]
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module RealPage
|
4
|
+
module Model
|
5
|
+
# Object to encapsulate a UnitShown from a RealPage response.
|
6
|
+
class UnitShown < Base
|
7
|
+
boolean_attrs *%i[
|
8
|
+
unit_applied
|
9
|
+
]
|
10
|
+
|
11
|
+
date_attrs *%i[
|
12
|
+
activity_date
|
13
|
+
create_date
|
14
|
+
unit_reserved
|
15
|
+
]
|
16
|
+
|
17
|
+
decimal_attrs *%i[
|
18
|
+
market_rent
|
19
|
+
]
|
20
|
+
|
21
|
+
integer_attrs *%i[
|
22
|
+
agent_id
|
23
|
+
max_create_date_time
|
24
|
+
unit_id
|
25
|
+
unit_status
|
26
|
+
]
|
27
|
+
|
28
|
+
string_attrs *%i[
|
29
|
+
activity_id
|
30
|
+
activity_name
|
31
|
+
activity_time
|
32
|
+
agent_name
|
33
|
+
building
|
34
|
+
building_unit
|
35
|
+
edit_type_name
|
36
|
+
guest_card_journal_type_edit_id
|
37
|
+
guest_card_journal_type_id
|
38
|
+
logged_by_name
|
39
|
+
notes
|
40
|
+
result
|
41
|
+
site
|
42
|
+
site_id
|
43
|
+
status
|
44
|
+
unit_number
|
45
|
+
]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module RealPage
|
2
|
+
module Parameter
|
3
|
+
class ListCriterion
|
4
|
+
attr_reader :name, :single_value, :min_value, :max_value
|
5
|
+
|
6
|
+
def initialize(name:, single_value:, min_value: nil, max_value: nil)
|
7
|
+
@name = name
|
8
|
+
@single_value = single_value
|
9
|
+
@min_value = min_value
|
10
|
+
@max_value = max_value
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'real_page/request_section/auth'
|
2
|
+
require 'real_page/utils/request_fetcher'
|
3
|
+
require 'real_page/utils/request_generator'
|
4
|
+
|
5
|
+
module RealPage
|
6
|
+
module Request
|
7
|
+
# Base class for actions that fetch and parse specific RealPage SOAP
|
8
|
+
# actions.
|
9
|
+
#
|
10
|
+
# When subclassing this base class, you may override the following methods
|
11
|
+
# to extend functionality:
|
12
|
+
#
|
13
|
+
# * after_initialize(params) - a hook into the initializer to give
|
14
|
+
# subclasses access to the parameters passed in. If the subclass uses
|
15
|
+
# any parameters that the base class is agnostic to, this is the place
|
16
|
+
# the set these values to instance variables
|
17
|
+
# * sections (returns Array<RequestSection>) - add additional request
|
18
|
+
# sections to the request XML document. The 'auth' section will always
|
19
|
+
# be inserted into the XML document by this class, so there is no need
|
20
|
+
# to add it to the response of this method.
|
21
|
+
#
|
22
|
+
# Additionally, this base class provides the #soap_action method, which
|
23
|
+
# returns the CamelCased name of the SOAP action being requested. This
|
24
|
+
# method assumes that the subclass will be named the same as the action.
|
25
|
+
class Base
|
26
|
+
# @param params [Hash<Symbol, Object>] the parameters needed to build the
|
27
|
+
# XML request.
|
28
|
+
# @option params pmc_id [String] the unique identifier for the property
|
29
|
+
# management company in RealPage (required)
|
30
|
+
# @option params site_id [String] the unique identifier for the property
|
31
|
+
# in RealPage (required)
|
32
|
+
def initialize(params)
|
33
|
+
%i[pmc_id site_id].each do |required_param|
|
34
|
+
unless params[required_param]
|
35
|
+
raise ArgumentError, "Params must include :#{required_param}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
@pmc_id = params[:pmc_id]
|
39
|
+
@site_id = params[:site_id]
|
40
|
+
after_initialize(params)
|
41
|
+
end
|
42
|
+
|
43
|
+
# @return [RealPage::Model|Array<RealPage::Model>] the parsed response
|
44
|
+
# from RealPage
|
45
|
+
# @raise [RealPage::Error] an error when validating the response
|
46
|
+
def perform
|
47
|
+
parser.parse(xml)
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [String] the XMl response from RealPage
|
51
|
+
def xml
|
52
|
+
generator =
|
53
|
+
Utils::RequestGenerator.new(soap_action, [auth_section, *sections])
|
54
|
+
Utils::RequestFetcher.new(generator: generator).fetch
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
attr_reader :pmc_id, :site_id
|
61
|
+
|
62
|
+
# A hook into the initializer to give subclasses access to the parameters
|
63
|
+
# passed in. If the subclass uses any parameters that the base class is
|
64
|
+
# agnostic to, this is the place the set these values to instance
|
65
|
+
# variables
|
66
|
+
def after_initialize(params)
|
67
|
+
# No-op, this method is a call back for subclasses
|
68
|
+
end
|
69
|
+
|
70
|
+
# A hook to add additional request sections to the request XML document.
|
71
|
+
# The 'auth' section will always be inserted into the XML document by this
|
72
|
+
# class, so there is no need to add it to the response of this method.
|
73
|
+
def sections
|
74
|
+
[]
|
75
|
+
end
|
76
|
+
|
77
|
+
# The CamelCased name of the SOAP action
|
78
|
+
def soap_action
|
79
|
+
self.class.name.split('::').last
|
80
|
+
end
|
81
|
+
|
82
|
+
def auth_section
|
83
|
+
RequestSection::Auth.new(pmc_id: pmc_id, site_id: site_id)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
private_constant :Base
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'real_page/document_parser/floor_plan_object'
|
2
|
+
require 'real_page/request_section/list_criteria'
|
3
|
+
|
4
|
+
require_relative 'base'
|
5
|
+
|
6
|
+
module RealPage
|
7
|
+
module Request
|
8
|
+
# Retrieve floor plan information for a specific property.
|
9
|
+
#
|
10
|
+
# Required intializer parameters:
|
11
|
+
#
|
12
|
+
# @param pmc_id [String] the unique identifier for the property management
|
13
|
+
# company in RealPage
|
14
|
+
# @param site_id [String] the unique identifier for the property in RealPage
|
15
|
+
#
|
16
|
+
# Optional initializer parameters:
|
17
|
+
#
|
18
|
+
# @param list_criteria [Array<RealPage::Parameter::ListCriterion>] the query
|
19
|
+
# criteria, see GetFloorPlanList::Name for the allowed values for
|
20
|
+
# ListCriterion#name
|
21
|
+
class GetFloorPlanList < Base
|
22
|
+
module Name
|
23
|
+
FLOOR_PLAN_CODE = 'FloorPlanCode'.freeze
|
24
|
+
FLOOR_PLAN_ID = 'FloorPlanID'.freeze
|
25
|
+
FLOOR_PLAN_NAME = 'FloorPlanName'.freeze
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :list_criteria
|
31
|
+
|
32
|
+
def after_initialize(params)
|
33
|
+
@list_criteria = params[:list_criteria] || []
|
34
|
+
end
|
35
|
+
|
36
|
+
def sections
|
37
|
+
[RequestSection::ListCriteria.new(list_criteria: list_criteria)]
|
38
|
+
end
|
39
|
+
|
40
|
+
def parser
|
41
|
+
DocumentParser::FloorPlanObject.new
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|