Entities and Workflow for Common Store 4 Processes
Entities
The following is a flow chart of the main entities involved in moving a tenant in SWS.
So an account can have multiple contacts and multiple rentals. A rental must have a primary contact (Contact Type = Account Manager) and can have additional secondary contacts. Site rules may require at least one secondary contact as well. A contact that is primary on one rental may be primary, secondary or not related at all to another rental on the account. The account name for personal accounts is the last name, first name of the first contact added to the account. For business accounts an account name should be specified. Each rental will be associated with the unit being rented. The unit has a number assigned by the organization and a primary key known as the Unit ID. The two are often confused. If you are displaying information to a tenant you will generally want to use the Unit Number. If you are renting or adjusting a unit in code the unit ID, as the item’s primary key is generally required.
Workflows:
Workflow Chart
Code Sample
All methods will require the following:
'--Create Main SOA object
Dim objSOA As New StoreWebServices.WSSoapClient("WSSoap")
'--Create and set authentication credentials
Dim objLogin As New StoreWebServices.LookupUser_Request
With objLogin
.Username = [UserName]
.Password = [Password]
.Channel = [Channel]
End With
1. GetSiteUnitData – If you pass in the Site_id and select a PromoDataType, you will get results
very similar to those found on the first screen of the Price Self Storage site. The collection of
PCD's returned can be picked over and you can choose to display some or all. The option for the
PromoDataType field are:
None
All
HighestPriorityPromotion
AllPromotions
HighestPriorityDiscount
AllDiscounts
HighestPriorityRateMod
AllRateMods
HighestPriorityDiscountAndPromo
HighestPriorityPCDAndRateMod
'--Create the request object
Dim objReq As New StoreWebServices.GetSiteUnitData_Request
'--Set required parameters
With objReq
.SiteID = [site_id]
'-- Deprecated: Now leave this blank or set it to false .GetPromoData = False
.PromoDataType = WSPCDTypeOptions.All
End With
'--Create a response object
Dim objRes As New StoreWebServices.GetSiteUnitData_Response
' Call the method that will load the response object
objRes = objSOA.GetSiteUnitData(objLogin, objReq)
2. GetQuoteData – Passing in org_id, site_id, unit_id, rent_rate(you were correct, this is required) and
optionally a promo code will return a total that will be due for this unit on move in with a breakdown of
what money is coming from where.
'--Create the request object
Dim objReq As New StoreWebServices.GetQuoteData_Request
'--Set required parameters
With objReq
.OrgID = [org_id]
.SiteID = [site_id]
.UnitID = [unit_id] (obtained from GetSiteUnitData response)
.RentRate = [rent_rate] (obtained from GetSiteUnitData response)
.PromoID = [promo_id] (obtained from GetSiteUnitData response)
End With
'--Create a response object
Dim objRes As New StoreWebServices.GetQuoteData_Response
' Call the method that will load the response object
objRes = objSOA.GetQuoteData(objLogin, objReq)
3. UpdateUnitStatus – If the user has selected a specific unit and you would like to hold it until he
completes the process, pass in the site_id, unit_id, the version (from GetSiteUnitData), and
PutOnHold to true.
'--Create the request object
Dim objReq As New StoreWebServices.UpdateUnitStatus_Request
'--Set required parameters
With objReq
.OrgID = [org_id]
.SiteID = [site_id]
.UnitID = [unit_id] (obtained from GetSiteUnitData response)
.Version = [version] (obtained from GetSiteUnitData response)
.PutOnHold = True
End With
'--Create a response object
Dim objRes As New StoreWebServices.UpdateUnitStatus_Response
' Call the method that will load the response object
objRes = objSOA.UpdateUnitStatus(objLogin, objReq)
4. CreateNewAccount – This will gather the user information to create the account on which to add the
rental to.
Dim objAddress As New StoreWebServices.ContactAddress
With objAddress
.AddrType = StoreWebServices.AddressType.HOME
.Addr1 = [address line 1] (addr2 and 3 available for longer addresses)
.City = [city]
.State = [state]
.PostalCode = [zip]
.Active = True
End With
Dim addresses() As StoreWebServices.ContactAddress = {objAddress} (you can add as many address
objects as you need)
Dim objPhone As New StoreWebServices.ACCT_CONTACT_PHONES
With objPhone
.PHONE_TYPE = StoreWebServices.PhoneType.HOME
.Phone = [phone]
.Active = True
End With
Dim phones() As StoreWebServices.ACCT_CONTACT_PHONES = {objPhone} (you can add as many
phone objects as you need)
'--Create the request object
Dim objReq As New StoreWebServices.CreateNewAccount_Request
'--Set required parameters
With objReq
.OrgID = [org_id]
.SiteID = [site_id]
.FirstName = [first name] (use account name if this is a business account)
.LastName = [last name] (use account name if this is a business account)
.AccountClass = StoreWebServices.AccountClass.PERSONAL
.ContactType = StoreWebServices.ContactType.ACCOUNT_MANAGER
.Email = [email]
.ContactAddress = addresses
.ContactPhone = phones
.EcommCode = [password]
End With
'--Create a response object
Dim objRes As New StoreWebServices.structCreateAccount
' Call the method that will load the response object
objRes = objSOA.CreateNewAccount(objLogin, objReq)
***If you want to offer retail at the time of rental insert the below process here
5. MakeResevation – This will initiate the move in process. However, it is not complete until payment
is made.
Dim promo As New StoreWebServices.TRAN_QUOTE_PCD_DETAIL
With promo
.PCD_ID = [pcd_id] (obtained from GetSiteUnitData promo response)
.ACTIVE = True
.AMT_TYPE = [amt_type] (obtained from GetSiteUnitData promo response)
.DISC_AMT = [disc_amt] (obtained from GetSiteUnitData promo response)
End With
Dim promos() As StoreWebServices.TRAN_QUOTE_PCD_DETAIL = {promo} (obtained from
GetSiteUnitData promo response)
Dim contact As New StoreWebServices.RentalContact
With contact
.ContactId = [contact_id] (obtained from CreateNewAccount response)
.AddressId = [address_id] (obtained from CreateNewAccount response)
.PhoneId = [phone_id] (obtained from CreateNewAccount response)
End With
Dim contacts() As StoreWebServices.RentalContact = {contact}
'--Create the request object
Dim objReq As New StoreWebServices.MakeReservation_Request
'--Set required parameters
With objReq
.SiteID = [site_id]
.AcctID = [account_id] (obtained from CreateNewAccount response)
.UnitID = [unit_id] (obtained from GetSiteUnitData response)
.Version = [new_version] (obtained from UpdateUnitStatus response)
.QuoteType = StoreWebServices.Quote_Types.QuoteOnly
.RentNow = True
.Contacts = contacts
End With
'--Create a response object
Dim objRes As New StoreWebServices.MakeReservation_Response
' Call the method that will load the response object
objRes = objSOA.MakeReservation(objLogin, objReq)
6. GetTotalDue – Will retrieve the total due now.
Dim cycles() As Integer = {1}
Dim rentalIDs() As Long = {[rental_id]} (obtained from MakeReservation response)
'--Create the request object
Dim objReq As New StoreWebServices.GetTotalDue_Request
'--Set required parameters
With objReq
.SiteID = [site_id]
.AcctID = [acct_id] (obtained from MakeReservation response)
.RentalID = rentalIDs
.Cycles = cycles
End With
'--Create a response object
Dim objRes As New StoreWebServices.GetTotalDue_Response
' Call the method that will load the response object
objRes = objSOA.GetTotalDue(objLogin, objReq)
7. MakePayment – This will complete the move in process
Dim cycles() As Integer = {1}
Dim rentalIDs() As Long = {[rental_id]} (obtained from MakeReservation response)
Dim ccInfo As New StoreWebServices.CreditCardData
With ccInfo
.CardNumber = [card number]
.CardHolderName = [card holder first/last name>]
.ExpireMonth = "01" (expire month of card must be entered with 2 digits)
.ExpireYear = "2000" (expire year of card must be entered with 4 digits)
.Amount = [amount to charge to the card]
End With
Dim cards() As StoreWebServices.CreditCardData = {ccInfo}
'--Create the request object
Dim objReq As New StoreWebServices.MakePayment_Request
'--Set required parameters
With objReq
.SiteID = [site_id]
.AcctID = [acct_id] (obtained from MakeReservation response)
.RentalIDs = rentalIDs
.Cycles = cycles
.TotalAmtDue = [total due] (obtained from GetTotalDue response)
.TotalAmtPaid = [total amount paying including all cards cash checks etc.]
.CreditCardInfo = cards
End With
'--Create a response object
Dim objRes As New StoreWebServices.MakePayment_Response
' Call the method that will load the response object
objRes = objSOA.MakePayment(objLogin, objReq)
User is now moved in.
For the retail process you have two options. The first one is for users who have an account.
1. GetAvailableRetailItems – This will return a list of ALL active retail items for the requested site
even if inventory is out of stock. You will want to check the QTY field if you want to prevent
selling out of stock items. Nothing in the rules or check will prevent you from doing so.
'--Create the request object
Dim objReq As New StoreWebServices.GetAvailableRetailItems_Request
'--Set required parameters
With objReq
.SiteID = 1
End With
'--Create a response object
Dim objRes As New StoreWebServices.GetAvailableRetailItems_Response
' Call the method that will load the response object
objRes = objSOA.GetAvailableRetailItems(objLogin, objReq)
2. SellRetailWithAccountMulitple – This method requires an account and will accept multiple retail items
for purchase. This method adds the assessments to the account. Payment is still required to complete
the transaction.
Dim item As New StoreWebServices.SellRetailWithAccount_Request
With item
.AccountID = [acct_id]
.Quantity = [number of this item purchasing]
.Item = [item obj] (from GetAvailableRetailItems)
End With
Dim items() As StoreWebServices.SellRetailWithAccount_Request = {item}
'--Create the request object
Dim objReq As New StoreWebServices.SellRetailWithAccountMultiple_Request
'--Set required parameters
With objReq
.RetailItems = items
End With
'--Create a response object
Dim objRes As New StoreWebServices.SellRetailMultiple_Response
' Call the method that will load the response object
objRes = objSOA.SellRetailWithAccountMultiple(objLogin, objReq)
3. GetTotalDue – Grabs the total due for retail items only based on the below settings. Can change the
IsRetailAndRental flag to true to get total that includes rental due.
'--Create the request object
Dim objReq As New StoreWebServices.GetTotalDue_Request
'--Set required parameters
With objReq
.SiteID = [site_id]
.AcctID = [acct_id] (obtained from MakeReservation response)
.IsRetail = True
End With
'--Create a response object
Dim objRes As New StoreWebServices.GetTotalDue_Response
' Call the method that will load the response object
objRes = objSOA.GetTotalDue(objLogin, objReq)
4. MakePayment – This will complete the retail transaction.
Dim ccInfo As New StoreWebServices.CreditCardData
With ccInfo
.CardNumber = [card number]
.CardHolderName = [card holder first/last name]
.ExpireMonth = "01" (expire month of card must be entered with 2 digits)
.ExpireYear = "2000" (expire year of card must be entered with 4 digits)
.Amount = [amount to charge to the card]
End With
Dim cards() As StoreWebServices.CreditCardData = {ccInfo}
'--Create the request object
Dim objReq As New StoreWebServices.MakePayment_Request
'--Set required parameters
With objReq
.SiteID = [site_id]
.AcctID = [acct_id] (obtained from MakeReservation response)
.TotalAmtDue = [total due] (obtained from GetTotalDue response)
.TotalAmtPaid = [total amount paying including all cards cash checks etc.]
.CreditCardInfo = cards
.IsRetail = True
End With
'--Create a response object
Dim objRes As New StoreWebServices.MakePayment_Response
' Call the method that will load the response object
objRes = objSOA.MakePayment(objLogin, objReq)
The second is a retail transaction without an account
1. GetAvailableRetailItems – This will return a list of ALL active retail items for the requested site
even if inventory is out of stock. You will want to check the QTY field if you want to prevent
selling out of stock items. Nothing in the rules or check will prevent you from doing so.
'--Create the request object
Dim objReq As New StoreWebServices.GetAvailableRetailItems_Request
'--Set required parameters
With objReq
.SiteID = 1
End With
'--Create a response object
Dim objRes As New StoreWebServices.GetAvailableRetailItems_Response
' Call the method that will load the response object
objRes = objSOA.GetAvailableRetailItems(objLogin, objReq)
2. SellRetailWithAccountMulitple – This method requires an account and will accept multiple retail items
for purchase. This method adds the assessments to the account. Payment is still required to complete
the transaction.
Dim item As New StoreWebServices.SellRetailNoAccount_Request
With item
.OrgID = [org_id]
.Quantity = [number of this item purchasing]
.Item = [item obj] (from GetAvailableRetailItems)
End With
Dim items() As StoreWebServices.SellRetailNoAccount_Request = {item}
'--Create the request object
Dim objReq As New StoreWebServices.SellRetailNoAccountMultiple_Request
'--Set required parameters
With objReq
.RetailItems = items
End With
'--Create a response object
Dim objRes As New StoreWebServices.SellRetailMultiple_Response
' Call the method that will load the response object
objRes = objSOA.SellRetailNoAccountMultiple(objLogin, objReq)
3. MakePaymentByAssessment – You need to use this method as there could be multiple assessments
available at the org level. This method allows to filter only those that are part of this
transaction.
Dim ccInfo As New StoreWebServices.CreditCardData
With ccInfo
.CardNumber = [card number]
.CardHolderName = [card holder first/last name]
.ExpireMonth = "01" (expire month of card must be entered with 2 digits)
.ExpireYear = "2000" (expire year of card must be entered with 4 digits)
.Amount = [amount to charge to the card]
End With
Dim cards() As StoreWebServices.CreditCardData = {ccInfo}
'--Create the request object
Dim objReq As New StoreWebServices.MakePaymentByAssessment_Request
'--Set required parameters
With objReq
.SiteID = [site_id]
.AcctID = [acct_id] (obtained from SellRetailWithAccountMultiple response)
.AssessmentIDs = [assessment ID array] (obtained from SellRetailWithAccountMultiple response)
.TotalAmtDue = [total due] (SellRetailWithAccountMultiple response)
.TotalAmtPaid = [total amount paying including all cards cash checks etc.]
.CreditCardInfo = cards
.IsRetail = True
End With
'--Create a response object
Dim objRes As New StoreWebServices.MakePayment_Response
' Call the method that will load the response object
objRes = objSOA.MakePaymentByAssessment(objLogin, objReq)
Finally to the send email:
1. SendEmailWithPassword – Use this after an account is created to send an email verifying it was
created and the user/password applied.
'--Create the request object
Dim objReq As New StoreWebServices.SendEmailWithPassword_Request
'--Set required parameters
With objReq
.OrgID = [org_id]
.SiteID = [site_id]
.AccountID = [account_id]
.EmailType = StoreWebServices.emailMsgTemplateIds.SWS_CREATE_ACCOUNT
.Password = [password] (obtained from user input on CreateNewAccount)
End With
'--Create a response object
Dim objRes As New StoreWebServices.SendEmail_Response
' Call the method that will load the response object
objRes = objSOA.SendEmailWithPassword(objLogin, objReq)
For a list of available unit types use GetSiteUnitData.
This method will return a list of units of each available type in a site (a single unit representing all 10x10 climate controled, single unit representing all 5x5 exterior access, etc.) and optionally their associated available Promos/Discount/Rate Modifications. These pricing options must be set up in the PCD admin section of the UI to be available. The values required are list below:
Unit Information:
- SiteID – The ID of the Site retrieving units for. This field is required.
- Width – This allows you to filter by units of a given width. This field is optional.
- Depth – This allows you to filter by units of a given depth. This field is optional.
- MinAvailable – This allows you to filter by units that have a certain number of that type available. For instance if you only have one unit left of 10x10 size, you may wish to prevent it from being available from a web site. This field is optional.
- MinRentRate – This allows you to filter by units of a given price showing units that are of a minimum price. This field is optional.
- MaxRentRate – This allows you to filter by units of a given price showing units that are of a maximum price. This field is optional.
- SoftReservable – This allows you to filter by units that are Soft Reservable (no unit is actually held in a soft reservation). This field is optional.
- HardReservable – This allows you to filter by units that are Hard Reservable (the unit is put on hold in a hard reservation). This field is optional.
- PromoDataType – This field replaces the old "GetPromoData" which should be left blank or set to false to avoid interference. This field will add available Promos, Discounts, and/or Rate Modifications as a collection to the returned unit which will allow to set up a display for dynamic pricing. The available options are as follows:
- None – This will prevent any rate adjustments from being returned.
- All – This will return all promotions, discounts, and rate modifications available for that unit.
- HighestPriorityPromotion – This will bring back a single promotion with the highest priority available for that unit.
- AllPromotions – This will bring back all available promotions for the unit.
- HighestPriorityDiscount – This will bring back a single discount with the highest priority available for that unit.
- AllDiscounts – This will bring back all available discounts for the unit.
- HighestPriorityRateMod – This will bring back a single rate modification with the highest priority available for that unit.
- AllRateMods – This will bring back all available rate modifications for the unit.
- HighestPriorityDiscountAndPromo – This will bring back two items, the highest priority available discount and the highest available promotion for that unit.
- HighestPriorityPCDAndRateMod - This will bring back two items, the highest priority available rate modification and the highest available promotion for that unit.
For a brand new tenant call CreateNewAccount. This method will create the Account and at least one new contact, one new address and one new phone which will then be available to accept rentals. The values required are list below:
Account Information:
- OrgID – The ID of the organization, this is required.
- SiteID – The ID of the Site this account will belong to. Accounts are site specific. This field is required.
- FirstName – This is going to be the account’s primary contact and is required for a Personal account. If this is a business account this information can be skipped.
- LastName – As with the first name, this is going to be the account’s primary contact and is required for a Personal account. If this is a business account this information can be skipped.
- AccountName – If this is a business account this is required and should be the name of the business. If this is a personal account, this field can be skipped because the account name will automatically be created as “LastName, FirstName”.
- AccountClass – Indicates if this is Business or Personal.
- ContactType – This should almost always be Account Manager indicating a primary contact on the expected reservation/rental.
- Email – This field is optional, however if this is a web application the validation methods use this and the EcommCode (password) for login verification so it is recommended to get this information now.
- EcommCode – This is the password the tenant would use for logging into a website for account maintenance.
- ContactAddress – This is a collection of addresses. The first item in the collection will be the account address as well as the primary address for the contact. As many addresses as wanted can be included. The parameters are as follows:
- AddrId and ContactId – Should be left blank. This is the same object that is returned both here and other methods and these fields will be populated then.
- AddrType – This is required and indicates the type of address being added (i.e., Home, Work, etc.)
- Addr1, Addr2 and Addr3 – These fields allow for 3 lines of street address data. When displaying the information on an envelope lines one and two appear on the first line and line three appears below. Only line one is required.
- City, State, PostalCode and Country – As named and all but country is required.
- Active – Should always be set to true and indicates this address is active. This can be set to false when updating addresses but cannot during this initial process.
- ContactPhone – This is a collection of phone numbers. The first item in the collection will be the account phone number as well as the primary phone number for the contact. As many phone numbers as wanted can be included. The parameters are as follows:
- ACCT_ID, CONTACT_ID, PHONE_ID, PHONE_TYPE_VAL, CREATED_BY AND UPDATED_BY - – Should be left blank. This is the same object that is returned both here and other methods and these fields will be populated then.
- PHONE_TYPE – Indicates the type of phone being added (i.e., Home, Work, Mobile, etc.) and is required.
- PHONE – Is the phone number and is required. It doesn’t need but will accept punctuation such as dashes or parens.
- ACTIVE - Should always be set to true and indicates this number is active. This can be set to false when updating numbers but cannot during this initial process.
Once you have either created a new account (see above) or located an existing account (SearchBy method) you can create a reservation/rental. First some terminology regarding reservations and rentals:
- Quote Only – This is created when a person has indicated interest in renting a unit but does not wish to commit to renting. An account is still required. This allows for obtaining all the contact information. A unit is still required so anyone following up on the potential sale is aware of what the customer is looking for. The unit is NOT put on hold and can be rented at anytime by anyone else.
- Soft Reservation – Basically the same as a Quote but indicating a more serious interest from the client. Again no unit is held although it is required for the process.
- Hard Reservation – This method holds a unit for a site specified length of time. Generally this is also a reservation deposit amount paid although it is not required. If there is a deposit required the payment process described below MUST be completed before the reservation process is considered complete.
- Rent Now - To heck with reservations, the customer has a moving van parked out front. The move in is NOT complete however until the payment process below has been completed.
MakeReservation does all of the above including upgrading from one status to another.
The first step is displaying the available units. There are two options for this GetUnitData and GetSiteUnitData. GetUnitData returns ALL units in a site along with their pertinent information including ID’s and its version number which will be important when reserving the unit. This method allows a site to customize grouping, pricing and promos to their specifications. It means a little more work but things will come out exactly how the organization prefers. The only required parameter is the SiteID, the rest of the parameters allows for filtering the results and are all optional. GetSiteUnitData returns a single unit based on a pre-setup grouping. This grouping takes Width, Depth, Door, Climate, Access Type and Features values into account. For example if you have ten 5X5 units half that are climate controlled and half not. You will receive back, IF available, two units, one with climate control one without. You also have the option to include the best available promotion for each item selected. Again SiteID is the only required field. There are fewer filter options on this as the items have already been winnowed down. Also failing to indicate a desire for promos will default to false for performance purposes. Both methods return the information necessary to complete a reservation/create a new rental using the MakeReservation method.
MakeReservation requires the following:
- SiteID – The ID of the site that contains the account and the unit.
- AcctID – The account ID returned when CreateNewAccount/SearchBy was called.
- UnitID – The ID (not the unit number) of the selected unit returned in GetUnitData/GetSiteUnitData.
- Version – The version of the unit returned in GetUnitData/GetSiteUnitData. This is what prevents a unit from being reserved by to different account at the same time.
- QuoteID – If this method was originally called to create a Quote and is now being called to update that quote to a reservation or rental this is required. Otherwise it can be left blank.
- QuoteType – This is required and can be QuoteOnly, SoftReservation, or HardReservation. If wanting to RentNow this field must be set to QuoteOnly.
- RentNow – Set to true if renting now, otherwise set to false. This is required.
- Price – This is required for all settings so that the price quoted/rented is known.
- QuoteStartDate – This is optional and will generally be today.
- InquirySource – This is required for some sites based on site rules. This is an indicator of where the tenant is coming in from (i.e., Walk-In, website, phonebook). The list is customizable so to see the available options call eInquirySource.
- OverrideReservationAmount – The user calling the method must have permissions granted to allow them access to this option. When calling this method using the HardReservation setting the reservation amount can be adjusted up or down from here.
- Contacts – This is a collection of contacts to apply to the rental. At least one contact is required and the contact must be a part of the account ID included above. The RentalContact object contains the following:
- ContactID – This is returned in the CreateNewAccount and SearchBy methods. This value is required.
- AddressID – This is returned in the CreateNewAccount method. If using the SearchBy method call GetContactAddresses with the ContactID to obtain this value. This value is required.
- PhoneID - This is returned in the CreateNewAccount method. If using the SearchBy method call GetContactPhoneNumbers with the ContactID to obtain this value. This value is required.
- GateCode – This field is optional and is a PIN code for gate access.
- PrimaryFlag – One of the Contacts must be set to true. The rest of the contacts should be set to false.
- Pcds – This is a collection of Promo Credit Discount objects to apply to the new Hard Reservation or Rent Now. The data for this can be found in GetSiteUnitData if the GetPromoData field was set to true or can be obtained through a call to GetAvailableDiscounts when passing in the UnitID.
MakeReservation will always return a QuoteID. If RentNow was selected there will also be a RentalID returned.
We’ve created the account and we’ve made our unit selection now we have to pay for the thing. Making a payment is a Three Step process.
Step One – GetAssessments - This method retrieves a list of line items to be paid. Regardless if this is a new or existing rental and whether or not you already know the total due this method MUST be called. Assessments may or may not be in existence for the rental. Failing to call this process means you may not be paying for anything which will result in payment errors. The following are required:
- SiteID – The ID of the site payment is being made to. This is required.
- AcctID – The ID of the account payment is being made on. This information is obtained from CreateNewAccount or SearchBy. This is required.
- RentalIDs – This field is optional. If left blank it is assumed that all assessments for ALL rentals on the account are required. Otherwise it is an array of rental ID(s) to pay on for the account specified.
- Cycles – This field is optional. This is the number of cycles (months) the customer wishes to pay. This is an array that coincides with the rental array. If a single item is sent then it is assumed the number of cycles applies to all the rentals. If nothing is passed in the number of cycles is assumed to be one. Otherwise there must be the same number of items in this array as in the RentalIDs array.
- IsRetail – If the tenant is paying strictly for retail then set this to true. If this item is not passed in it is assumed to be false.
- MoveOutDate – This field has been deprecated and should be ignored.
- IsRetailAndRental – If the tenant is paying for Retail and Rent or other fees then this must be set to true. If this item is not passed in it is assumed to be false.
The method will return a list of line items that are due for the requested timeframe. If the tenant has any CashCredits (escrow) that can be used for payment, they will also be listed here. Note: CashCredits are not automatically deducted from the total due.
Step Two – GetTotalDue – This step can be skipped if the items in GetAssessments are looped through and totaled. There are some rules to keep in mind for this option. Extended is the total due not including taxes for the assessment, a fulfilled amount indicates some payment has been made on the assessment and that will not be deducted from extended, finally any tax amount must be added in. If a cash credit is present the extended amount indicates the available balance that can be used toward payment. The following are required if the call is made (Note: These are the same fields as in GetAssessments and most will also repeat in MakePayment):
- SiteID – The ID of the site payment is being made to. This is required.
- AcctID – The ID of the account payment is being made on. This information is obtained from CreateNewAccount or SearchBy. This is required.
- RentalIDs – This field is optional. If left blank it is assumed that all assessments for ALL rentals on the account are required. Otherwise it is an array of rental ID(s) to pay on for the account specified.
- Cycles – This field is optional. This is the number of cycles (months) the customer wishes to pay. This is an array that coincides with the rental array. If a single item is sent then it is assumed the number of cycles applies to all the rentals. If nothing is passed in the number of cycles is assumed to be one. Otherwise there must be the same number of items in this array as in the RentalIDs array.
- IsRetail – If the tenant is paying strictly for retail then set this to true. If this item is not passed in it is assumed to be false.
- MoveOutDate – This field has been deprecated and should be ignored.
- IsRetailAndRental – If the tenant is paying for Retail and Rent or other fees then this must be set to true. If this item is not passed in it is assumed to be false.
Step Three – MakePayment – And you thought we’d never get here. MakePayment accepts the above data, some total data and three payment types. One or any combination of payment types is allowed (i.e., customer wishes to pay half cash, half on a card, or possibly split the payment between two cards, etc.).
- TotalAmtDue – This is required and is the amount obtained from GetTotalDue (see above).
- TotalAmtPaid – This is required and should total the amount passed in the payment types. This should always match the total due. Failure to do so will result in escrow being applied instead of payment toward rentals/retail. This will cause the customer to become past due.
- CreditCardInfo – This is a collection of credit card items. The following are required:
- Amount – The amount to charge to this card. This is required.
- CardNumber – The number on the front of the card. This is required.
- CardHolderName – The name on the front of the card. This is required.
- ExpireMonth – This is a two digit string indicating the month the card expires. This is required.
- ExpireYear – This is a four digit string indicating the year the card expires. This is required.
- CVV2 – This is optional and is the code on the back of the card. Failing to provide this can impact the amount a site is charged for the transaction.
- Address – This is optional and is the cardholders address.
- PostalCode – This is optional and is the cardholders zip. Failing to provide this can impact the amount a site is charged for the transaction.
- TrackData – If the transaction is being done where the card can be swiped, this is the swipe data. Failing to provide this can impact the amount a site is charged for the transaction.
- CheckInfo – This is a collection of check data. Check types include checks, travelers checks and money orders.
- Amount – This is required and is the amount the check was written for.
- CheckNumber – The number on the check.
- CheckType – Indicates if this is a check, travelers, or money order.
- CashInfo – The amount of cash provided. Keep in mind this should not exceed the total due. Change should be determined separately if it is owed. The entire amount entered into this field will be applied to the account.
- CashCreditAmount – If using some/all of the cash credits available on the account then enter the amount here. This amount coimbined with the other payment amounts cannot exceed the total due. An error will be returned if it does.
- TaxExemptNumber – If this transaction is to be tax exempt send the ID thru here. This will apply to all items included in the assessments list.
The method will return a transaction ID if successful. The CashCreditApplied field has been deprecated.