amsi 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.ci +125 -0
- data/.gitignore +2 -0
- data/.rspec +3 -0
- data/CHANGELOG.txt +20 -0
- data/CODEOWNERS +1 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +319 -0
- data/Rakefile +6 -0
- data/amsi.gemspec +32 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/config/multi_xml.rb +4 -0
- data/lib/amsi/attribute_parser/base.rb +23 -0
- data/lib/amsi/attribute_parser/boolean.rb +25 -0
- data/lib/amsi/attribute_parser/date.rb +28 -0
- data/lib/amsi/attribute_parser/date_time.rb +24 -0
- data/lib/amsi/attribute_parser/decimal.rb +15 -0
- data/lib/amsi/attribute_parser/integer.rb +15 -0
- data/lib/amsi/attribute_parser/string.rb +13 -0
- data/lib/amsi/attribute_parser.rb +45 -0
- data/lib/amsi/document_parser/base.rb +52 -0
- data/lib/amsi/document_parser/get_moveins.rb +66 -0
- data/lib/amsi/document_parser/guest_card_result.rb +31 -0
- data/lib/amsi/document_parser/leases.rb +46 -0
- data/lib/amsi/document_parser/properties.rb +103 -0
- data/lib/amsi/error/bad_request.rb +18 -0
- data/lib/amsi/error/base.rb +9 -0
- data/lib/amsi/error/invalid_response.rb +9 -0
- data/lib/amsi/error/request_fault.rb +18 -0
- data/lib/amsi/error/request_timeout.rb +9 -0
- data/lib/amsi/error/unparsable_response.rb +11 -0
- data/lib/amsi/model/address.rb +18 -0
- data/lib/amsi/model/base/attribute.rb +63 -0
- data/lib/amsi/model/base/attribute_store.rb +37 -0
- data/lib/amsi/model/base.rb +64 -0
- data/lib/amsi/model/guest_card.rb +18 -0
- data/lib/amsi/model/guest_card_result.rb +26 -0
- data/lib/amsi/model/lease.rb +63 -0
- data/lib/amsi/model/leasing_agent.rb +21 -0
- data/lib/amsi/model/manager.rb +16 -0
- data/lib/amsi/model/marketing_source.rb +21 -0
- data/lib/amsi/model/occupant.rb +32 -0
- data/lib/amsi/model/property.rb +35 -0
- data/lib/amsi/model/unit_type.rb +38 -0
- data/lib/amsi/parameter/contact_type.rb +10 -0
- data/lib/amsi/parameter/prospect.rb +19 -0
- data/lib/amsi/request/add_guest_card.rb +93 -0
- data/lib/amsi/request/base.rb +106 -0
- data/lib/amsi/request/get_moveins_by_first_marketing_source.rb +57 -0
- data/lib/amsi/request/get_property_list.rb +49 -0
- data/lib/amsi/request/get_property_residents.rb +45 -0
- data/lib/amsi/request_section/add_guest_card.rb +105 -0
- data/lib/amsi/request_section/auth.rb +22 -0
- data/lib/amsi/request_section/moveins_filter.rb +42 -0
- data/lib/amsi/request_section/property_list_filter.rb +45 -0
- data/lib/amsi/request_section/property_resident_filter.rb +32 -0
- data/lib/amsi/utils/request_fetcher.rb +37 -0
- data/lib/amsi/utils/request_generator.rb +54 -0
- data/lib/amsi/utils/snowflake_event_tracker.rb +113 -0
- data/lib/amsi/validator/base.rb +95 -0
- data/lib/amsi/validator/prospect_event_validator.rb +20 -0
- data/lib/amsi/validator/request_errors.rb +61 -0
- data/lib/amsi/validator/request_fault.rb +57 -0
- data/lib/amsi/validator/resident_event_validator.rb +20 -0
- data/lib/amsi/validator.rb +7 -0
- data/lib/amsi/version.rb +3 -0
- data/lib/amsi.rb +31 -0
- metadata +265 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class GuestCard < Base
|
6
|
+
string_attrs :email,
|
7
|
+
:first_name,
|
8
|
+
:guest_card_id,
|
9
|
+
:initial_source_id,
|
10
|
+
:last_name,
|
11
|
+
:property_id
|
12
|
+
|
13
|
+
date_time_attrs :create_date
|
14
|
+
|
15
|
+
alias :id :guest_card_id
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class GuestCardResult < Base
|
6
|
+
module Status
|
7
|
+
FAILURE = 'FAILURE'.freeze
|
8
|
+
SUCCESS = 'SUCCESS'.freeze
|
9
|
+
end
|
10
|
+
|
11
|
+
string_attrs *%i[
|
12
|
+
guest_card_id
|
13
|
+
property_id
|
14
|
+
status
|
15
|
+
]
|
16
|
+
|
17
|
+
integer_attrs :contact_seq_no
|
18
|
+
|
19
|
+
alias_method :contact_sequence_number, :contact_seq_no
|
20
|
+
|
21
|
+
def success?
|
22
|
+
status == Status::SUCCESS
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class Lease < Base
|
6
|
+
module Status
|
7
|
+
CURRENT = 'C'.freeze
|
8
|
+
APPLICANT = 'A'.freeze
|
9
|
+
INTENT_TO_TRANSFER = 'I'.freeze
|
10
|
+
LEASED = 'L'.freeze
|
11
|
+
NOTICE = 'N'.freeze
|
12
|
+
PREVIOUS = 'P'.freeze
|
13
|
+
TRANSFER = 'T'.freeze
|
14
|
+
APPROVED = 'V'.freeze
|
15
|
+
CANCELLED = 'X'.freeze
|
16
|
+
end
|
17
|
+
|
18
|
+
date_attrs *%i[
|
19
|
+
application_date
|
20
|
+
lease_begin_date
|
21
|
+
lease_end_date
|
22
|
+
lease_sign_date
|
23
|
+
move_in_date
|
24
|
+
]
|
25
|
+
|
26
|
+
string_attrs *%i[
|
27
|
+
bldg_id
|
28
|
+
external_reference_id
|
29
|
+
occu_status_code
|
30
|
+
occu_status_code_description
|
31
|
+
property_id
|
32
|
+
resi_id
|
33
|
+
unit_id
|
34
|
+
lease_marketing_source
|
35
|
+
guest_card_no
|
36
|
+
]
|
37
|
+
|
38
|
+
decimal_attrs :rent_amount
|
39
|
+
|
40
|
+
date_time_attrs :guest_first_contact_date
|
41
|
+
|
42
|
+
alias_method :begin_date, :lease_begin_date
|
43
|
+
alias_method :end_date, :lease_end_date
|
44
|
+
alias_method :sign_date, :lease_sign_date
|
45
|
+
alias_method :lead_id, :guest_card_no
|
46
|
+
alias_method :lead_date, :guest_first_contact_date
|
47
|
+
alias_method :lead_source_code, :lease_marketing_source
|
48
|
+
alias_method :building_id, :bldg_id
|
49
|
+
alias_method :resident_id, :resi_id
|
50
|
+
alias_method :occupant_status_code, :occu_status_code
|
51
|
+
alias_method :occupant_status_code_description,
|
52
|
+
:occu_status_code_description
|
53
|
+
|
54
|
+
attr_accessor :occupants
|
55
|
+
attr_accessor :guest_card
|
56
|
+
attr_writer :matched_guest_cards
|
57
|
+
|
58
|
+
def matched_guest_cards
|
59
|
+
@matched_guest_cards ||= []
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class LeasingAgent < Base
|
6
|
+
string_attrs *%i[
|
7
|
+
agent_active_flag
|
8
|
+
agent_code
|
9
|
+
agent_name
|
10
|
+
property_id
|
11
|
+
]
|
12
|
+
|
13
|
+
alias_method :code, :agent_code
|
14
|
+
alias_method :name, :agent_name
|
15
|
+
|
16
|
+
def active?
|
17
|
+
agent_active_flag == 'Y'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class MarketingSource < Base
|
6
|
+
string_attrs *%i[
|
7
|
+
property_id
|
8
|
+
source_code
|
9
|
+
source_desc
|
10
|
+
source_active_flag
|
11
|
+
]
|
12
|
+
|
13
|
+
alias_method :code, :source_code
|
14
|
+
alias_method :description, :source_desc
|
15
|
+
|
16
|
+
def active?
|
17
|
+
source_active_flag == 'Y'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class Occupant < Base
|
6
|
+
string_attrs *%i[
|
7
|
+
bldg_id
|
8
|
+
email
|
9
|
+
external_reference_id
|
10
|
+
occu_first_name
|
11
|
+
occu_last_name
|
12
|
+
occu_seq_no
|
13
|
+
phone_1_no
|
14
|
+
phone_2_no
|
15
|
+
property_id
|
16
|
+
resi_id
|
17
|
+
responsible_flag
|
18
|
+
unit_id
|
19
|
+
]
|
20
|
+
|
21
|
+
decimal_attrs :rent_amount
|
22
|
+
|
23
|
+
alias_method :building_id, :bldg_id
|
24
|
+
alias_method :resident_id, :resi_id
|
25
|
+
alias_method :sequence_number, :occu_seq_no
|
26
|
+
alias_method :first_name, :occu_first_name
|
27
|
+
alias_method :last_name, :occu_last_name
|
28
|
+
alias_method :phone_1, :phone_1_no
|
29
|
+
alias_method :phone_2, :phone_2_no
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class Property < Base
|
6
|
+
date_attrs :live_date
|
7
|
+
|
8
|
+
string_attrs *%i[
|
9
|
+
property_id
|
10
|
+
property_name_1
|
11
|
+
property_name_2
|
12
|
+
property_addr_email
|
13
|
+
live_flag
|
14
|
+
]
|
15
|
+
|
16
|
+
attr_accessor *%i[
|
17
|
+
address
|
18
|
+
leasing_agents
|
19
|
+
manager
|
20
|
+
marketing_sources
|
21
|
+
remit_to_address
|
22
|
+
unit_types
|
23
|
+
]
|
24
|
+
|
25
|
+
alias_method :email, :property_addr_email
|
26
|
+
alias_method :id, :property_id
|
27
|
+
alias_method :name, :property_name_1
|
28
|
+
alias_method :name_2, :property_name_2
|
29
|
+
|
30
|
+
def live?
|
31
|
+
live_flag == 'Y'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module Amsi
|
4
|
+
module Model
|
5
|
+
class UnitType < Base
|
6
|
+
decimal_attrs *%i[
|
7
|
+
baths
|
8
|
+
market_rent
|
9
|
+
sec_min
|
10
|
+
standard_renew
|
11
|
+
mtm_renew
|
12
|
+
other_renew
|
13
|
+
]
|
14
|
+
|
15
|
+
integer_attrs *%i[
|
16
|
+
bedrooms
|
17
|
+
rooms
|
18
|
+
sqftg
|
19
|
+
unit_type_count
|
20
|
+
]
|
21
|
+
|
22
|
+
string_attrs *%i[
|
23
|
+
property_id
|
24
|
+
unit_subtype
|
25
|
+
unit_type
|
26
|
+
unit_type_desc
|
27
|
+
]
|
28
|
+
|
29
|
+
alias_method :count, :unit_type_count
|
30
|
+
alias_method :description, :unit_type_desc
|
31
|
+
alias_method :minimum_security_deposit, :sec_min
|
32
|
+
alias_method :month_to_month_renew, :mtm_renew
|
33
|
+
alias_method :sqft, :sqftg
|
34
|
+
alias_method :subtype, :unit_subtype
|
35
|
+
alias_method :type, :unit_type
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Amsi
|
2
|
+
module Parameter
|
3
|
+
class Prospect
|
4
|
+
attr_reader :daytime_phone, :email, :first_name, :last_name
|
5
|
+
|
6
|
+
def initialize(
|
7
|
+
daytime_phone: nil,
|
8
|
+
email: nil,
|
9
|
+
first_name: nil,
|
10
|
+
last_name:
|
11
|
+
)
|
12
|
+
@daytime_phone = daytime_phone
|
13
|
+
@email = email
|
14
|
+
@first_name = first_name
|
15
|
+
@last_name = last_name
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
require 'amsi/document_parser/guest_card_result'
|
4
|
+
require 'amsi/request_section/add_guest_card'
|
5
|
+
|
6
|
+
module Amsi
|
7
|
+
module Request
|
8
|
+
# Retrieve resident leases for a given property. Returns current leases only
|
9
|
+
# by default.
|
10
|
+
#
|
11
|
+
# Required initialization parameters:
|
12
|
+
# @property_id [String] AMSI property id
|
13
|
+
# @contact_type [String] values in Amsi::Paramter::ContactType
|
14
|
+
# @prospect [Amsi::Parameter::Prospect] the prospect to create the guest
|
15
|
+
# card for
|
16
|
+
# @see request/base.rb for additional params required by every request.
|
17
|
+
class AddGuestCard < Base
|
18
|
+
def after_initialize(
|
19
|
+
appointment_date: nil,
|
20
|
+
comments: nil,
|
21
|
+
contact_datetime: nil,
|
22
|
+
contact_type:,
|
23
|
+
date_needed: nil,
|
24
|
+
initial_source_id: nil,
|
25
|
+
lease_term_desired: nil,
|
26
|
+
leasing_agent_id: nil,
|
27
|
+
property_id:,
|
28
|
+
prospect:,
|
29
|
+
qualified: nil,
|
30
|
+
requirements: nil,
|
31
|
+
unit_subtype: nil,
|
32
|
+
unit_type: nil
|
33
|
+
)
|
34
|
+
@appointment_date = appointment_date
|
35
|
+
@comments = comments
|
36
|
+
@contact_datetime = contact_datetime
|
37
|
+
@contact_type = contact_type
|
38
|
+
@date_needed = date_needed
|
39
|
+
@initial_source_id = initial_source_id
|
40
|
+
@lease_term_desired = lease_term_desired
|
41
|
+
@leasing_agent_id = leasing_agent_id
|
42
|
+
@property_id = property_id
|
43
|
+
@prospect = prospect
|
44
|
+
@qualified = qualified
|
45
|
+
@requirements = requirements
|
46
|
+
@unit_subtype = unit_subtype
|
47
|
+
@unit_type = unit_type
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def sections
|
53
|
+
[
|
54
|
+
RequestSection::AddGuestCard.new(
|
55
|
+
appointment_date: appointment_date,
|
56
|
+
comments: comments,
|
57
|
+
contact_type: contact_type,
|
58
|
+
contact_datetime: contact_datetime,
|
59
|
+
date_needed: date_needed,
|
60
|
+
initial_source_id: initial_source_id,
|
61
|
+
lease_term_desired: lease_term_desired,
|
62
|
+
leasing_agent_id: leasing_agent_id,
|
63
|
+
property_id: property_id,
|
64
|
+
prospect: prospect,
|
65
|
+
qualified: qualified,
|
66
|
+
requirements: requirements,
|
67
|
+
unit_subtype: unit_subtype,
|
68
|
+
unit_type: unit_type
|
69
|
+
)
|
70
|
+
]
|
71
|
+
end
|
72
|
+
|
73
|
+
def parser
|
74
|
+
DocumentParser::GuestCardResult.new
|
75
|
+
end
|
76
|
+
|
77
|
+
attr_reader :appointment_date,
|
78
|
+
:comments,
|
79
|
+
:contact_datetime,
|
80
|
+
:contact_type,
|
81
|
+
:date_needed,
|
82
|
+
:initial_source_id,
|
83
|
+
:lease_term_desired,
|
84
|
+
:leasing_agent_id,
|
85
|
+
:property_id,
|
86
|
+
:prospect,
|
87
|
+
:qualified,
|
88
|
+
:requirements,
|
89
|
+
:unit_subtype,
|
90
|
+
:unit_type
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
require 'amsi/request_section/auth'
|
2
|
+
require 'amsi/utils/request_fetcher'
|
3
|
+
require 'amsi/utils/request_generator'
|
4
|
+
|
5
|
+
module Amsi
|
6
|
+
module Request
|
7
|
+
# Base class for actions that fetch and parse specific AMSI 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
|
+
# Required initialization parameters:
|
27
|
+
# @param user_id [String] AMSI account username
|
28
|
+
# @param password [String] AMSI account password
|
29
|
+
# @param portfolio_name [String] unique identifier for property in AMSI
|
30
|
+
# @param web_service_url [String] AMSI Url to the leasing.asmx resource
|
31
|
+
def initialize(
|
32
|
+
user_id:,
|
33
|
+
password:,
|
34
|
+
portfolio_name:,
|
35
|
+
web_service_url:,
|
36
|
+
conn: Faraday.new,
|
37
|
+
**other_args
|
38
|
+
)
|
39
|
+
|
40
|
+
@user_id = user_id
|
41
|
+
@password = password
|
42
|
+
@portfolio_name = portfolio_name
|
43
|
+
@web_service_url = web_service_url
|
44
|
+
@conn = conn
|
45
|
+
|
46
|
+
after_initialize(other_args)
|
47
|
+
end
|
48
|
+
|
49
|
+
# @return [Amsi::Model|Array<Amsi::Model>] the parsed response
|
50
|
+
# from AMSI
|
51
|
+
# @raise [Amsi::Error] an error when validating the response
|
52
|
+
def perform
|
53
|
+
parser.parse(xml)
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
attr_reader :user_id, :password, :portfolio_name, :web_service_url, :conn
|
59
|
+
|
60
|
+
# @return [String] the XMl response from Amsi
|
61
|
+
def xml
|
62
|
+
generator =
|
63
|
+
Utils::RequestGenerator.new(
|
64
|
+
sections: [auth_section, *sections],
|
65
|
+
soap_action: soap_action,
|
66
|
+
url: web_service_url
|
67
|
+
)
|
68
|
+
|
69
|
+
Utils::RequestFetcher.new(generator: generator, conn: conn).fetch
|
70
|
+
end
|
71
|
+
|
72
|
+
# A hook into the initializer to give subclasses access to the parameters
|
73
|
+
# passed in. If the subclass uses any parameters that the base class is
|
74
|
+
# agnostic to, this is the place the set these values to instance
|
75
|
+
# variables
|
76
|
+
def after_initialize(params)
|
77
|
+
# No-op, this method is a call back for subclasses
|
78
|
+
end
|
79
|
+
|
80
|
+
def parser
|
81
|
+
# No-op, this method is a call back for subclasses
|
82
|
+
end
|
83
|
+
|
84
|
+
# A hook to add additonal request sections to the request XML document.
|
85
|
+
# The 'auth' section will always be inserted into the XML document by this
|
86
|
+
# class, so there is no need to add it to the response of this method.
|
87
|
+
def sections
|
88
|
+
[]
|
89
|
+
end
|
90
|
+
|
91
|
+
# The CamelCased name of the SOAP action
|
92
|
+
def soap_action
|
93
|
+
self.class.name.split('::').last
|
94
|
+
end
|
95
|
+
|
96
|
+
def auth_section
|
97
|
+
RequestSection::Auth.new(
|
98
|
+
user_id: user_id, password: password,
|
99
|
+
portfolio_name: portfolio_name
|
100
|
+
)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
private_constant :Base
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
require 'amsi/request_section/moveins_filter'
|
4
|
+
require 'amsi/document_parser/get_moveins'
|
5
|
+
|
6
|
+
module Amsi
|
7
|
+
module Request
|
8
|
+
# Retrieve move ins for a property between a specified data range
|
9
|
+
# and for a specified marketing source code.
|
10
|
+
#
|
11
|
+
# Required initializer parameters:
|
12
|
+
# @param property_id [String] Max of 50 characters according to their
|
13
|
+
# docs, this is AMSI's ID of the property we want to fetch move ins for.
|
14
|
+
# @param marketing_source_code [String] Max of 3 characters according to
|
15
|
+
# their docs, this is the code that corresponds to the marketing source
|
16
|
+
# for which we want to fetch move ins. The list of marketing sources
|
17
|
+
# that a given property supports can be found with a GetPropertyList
|
18
|
+
# request.
|
19
|
+
# @param from_date, through_date [Date] Together, these two params define
|
20
|
+
# the interval from which to fetch move ins.
|
21
|
+
class GetMoveinsByFirstMarketingSource < Base
|
22
|
+
def after_initialize(
|
23
|
+
from_date:,
|
24
|
+
marketing_source_code:,
|
25
|
+
property_id:,
|
26
|
+
through_date:
|
27
|
+
)
|
28
|
+
@from_date = from_date
|
29
|
+
@marketing_source_code = marketing_source_code
|
30
|
+
@property_id = property_id
|
31
|
+
@through_date = through_date
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def parser
|
37
|
+
DocumentParser::GetMoveins.new
|
38
|
+
end
|
39
|
+
|
40
|
+
def sections
|
41
|
+
[
|
42
|
+
RequestSection::MoveinsFilter.new(
|
43
|
+
property_id: property_id,
|
44
|
+
marketing_source_code: marketing_source_code,
|
45
|
+
from_date: from_date,
|
46
|
+
through_date: through_date
|
47
|
+
)
|
48
|
+
]
|
49
|
+
end
|
50
|
+
|
51
|
+
attr_reader :from_date,
|
52
|
+
:marketing_source_code,
|
53
|
+
:property_id,
|
54
|
+
:through_date
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
require 'amsi/request_section/property_list_filter'
|
4
|
+
require 'amsi/document_parser/properties'
|
5
|
+
|
6
|
+
module Amsi
|
7
|
+
module Request
|
8
|
+
# Retrieve resident leases for a given property. Returns current leases only
|
9
|
+
# by default.
|
10
|
+
#
|
11
|
+
# No custom required initialization parameters; @see request/base.rb for
|
12
|
+
# params required by every request.
|
13
|
+
class GetPropertyList < Base
|
14
|
+
def after_initialize(
|
15
|
+
include_leasing_agents: false,
|
16
|
+
include_marketing_sources: false,
|
17
|
+
include_unit_types: false,
|
18
|
+
property_id: nil
|
19
|
+
)
|
20
|
+
@include_leasing_agents = include_leasing_agents
|
21
|
+
@include_marketing_sources = include_marketing_sources
|
22
|
+
@include_unit_types = include_unit_types
|
23
|
+
@property_id = property_id
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def parser
|
29
|
+
DocumentParser::Properties.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def sections
|
33
|
+
[
|
34
|
+
RequestSection::PropertyListFilter.new(
|
35
|
+
include_leasing_agents: include_leasing_agents,
|
36
|
+
include_marketing_sources: include_marketing_sources,
|
37
|
+
include_unit_types: include_unit_types,
|
38
|
+
property_id: property_id
|
39
|
+
)
|
40
|
+
]
|
41
|
+
end
|
42
|
+
|
43
|
+
attr_reader :include_leasing_agents,
|
44
|
+
:include_marketing_sources,
|
45
|
+
:include_unit_types,
|
46
|
+
:property_id
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
require 'amsi/request_section/property_resident_filter'
|
4
|
+
require 'amsi/document_parser/leases'
|
5
|
+
|
6
|
+
module Amsi
|
7
|
+
module Request
|
8
|
+
# Retrieve resident leases for a given property. Returns current leases only
|
9
|
+
# by default.
|
10
|
+
#
|
11
|
+
# Custom required initialization parameters:
|
12
|
+
# @property_id [String] AMSI property id
|
13
|
+
# @lease_status [String] Lease status filter.
|
14
|
+
# @include_marketing_source [Boolean] flag to include marketing sources
|
15
|
+
# @params [Hash] extra configuration fields
|
16
|
+
# Valid values in: Amsi::Model::Lease::Status
|
17
|
+
# @see request/base.rb for additional params required by every request.
|
18
|
+
class GetPropertyResidents < Base
|
19
|
+
def after_initialize(property_id:, lease_status:, include_marketing_source: false, params:)
|
20
|
+
@property_id = property_id
|
21
|
+
@lease_status = lease_status
|
22
|
+
@include_marketing_source = include_marketing_source
|
23
|
+
@params = params
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def parser
|
29
|
+
DocumentParser::Leases.new(@params)
|
30
|
+
end
|
31
|
+
|
32
|
+
def sections
|
33
|
+
[
|
34
|
+
RequestSection::PropertyResidentFilter.new(
|
35
|
+
property_id: property_id,
|
36
|
+
lease_status: lease_status,
|
37
|
+
include_marketing_source: include_marketing_source
|
38
|
+
)
|
39
|
+
]
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :property_id, :lease_status, :include_marketing_source, :params
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|