# Delivery Address Model

## Request

When requesting the following, a DeliveryAddress instance is returned.

* `deliveryAddress.getDeliveryAddresses()`
* `deliveryAddress.getDeliveryAddressesById()`


```javascript
try {
	const deliveryAddress = await deliveryAddress.getDeliveryAddresses(subscriptionNumber);
} catch (error) {
	throw error;
}
```

### Required Parameters

| Parameters  | Required | Type   | Description           | Example |
| ----------  | -------- | -------| ----------------------| ------------- |
| subscriptionNumber | yes | String | A-XXXXXXXXXXX | User's subscription number. |

**Response**: Returns a [DeliveryAddress instance](../../src/models/delivery-address.ts).

## Table of Contents

* [Initiate Delivery Address Class](#initiate-delivery-address-class)
* [Properties of the delivery address response](#properties-of-the-delivery-address-response)
* [Prototypes](#prototypes)
* [Membership DeliveryAddress Response](#membership-delivery-address-response)

### Initiate DeliveryAddress Class

```javascript
 const deliveryAddressInstance = new DeliveryAddress(deliveryAddress, subscription);
```
| Parameters  | Required | Type   | Description                              | Example |
| ----------  | -------- | ------ | ---------------------------------------- | --------|
| deliveryAddress | Yes  | Object | Membership delivery address response | see [Membership DeliveryAddress Response](#Membership-DeliveryAddress-Response) |
| subscription | Yes  | Object | Membership subscription response |

### Properties of the DeliveryAddress Response

| Properties  | Type   | Description           | Example                                   |
| ----------  | ------ | --------------------- | ----------------------------------------- |
| userId         | String | User's ID   | xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxxx |
| id             | String | ID of the delivery Address | xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxxx |
| subscriptionNumber  | String | Number reference for user's subscription | A-XXXXXXXXXXX |
| line1       | String | 1st Line of address | 1 Friday Street |
| line2       | String | 2nd Line of address | Bracken House |
| line3       | String | 3rd Line of address | St Pauls |
| townCity | String  | User's town or city   | London |
| county | String  | User's county   | London |
| postcode | String  | User's postcode  | EC4M 9BT |
| country | String | GBR | Three letter ISO 3166-1 country code of the user |
| validDateFrom | String | 2017-08-30 | Start date to use Delivery Address  |
| validDateFromDateFormat | Date | 2017-08-30 | Start date to use Delivery Address in a date format  |
| validDateTo | String or null | 2017-09-30 | Last date to use Delivery Address |
| deliveryNotes | String | Leave at read door | Delivery details. Could be displayed on packaging |
| securityNotes | String | Access code 123 | Delivery details that are secure and will not be on the packaging |
| addressType | String | weekend | Delivery address type |
| subscriptionStartDate | String | 2017-08-01T00:00:00.000Z | The date the subscription starts |
| company | String or null | If this is null it can be inferred the address is personal  | A company name|
| poBox | Boolean | true if delivery is to a Po box address | Default to false

### Prototypes

* [isDefault](#isDefault)
* [isWeekend](#isWeekend)
* [isFutureAddress](#isFutureAddress)
* [isPastAddress](#isPastAddress)
* [isFutureDefaultAddress](#isFutureDefaultAddress)
* [isPastDefaultAddress](#isPastDefaultAddress)
* [isFutureWeekendAddress](#isFutureWeekendAddress)
* [isPastWeekendAddress](#isPastWeekendAddress)
* [setCurrentAddress](#setCurrentAddress)


#### isDefault

```javascript
const isDeliveryAddressValid = deliveryAddressInstance.isDefault();
```

- Returns true if delivery address is the default address.
```
	Parameters: none
	Response: boolean
```

#### isWeekend

```javascript
const isWeekend = deliveryAddressInstance.isWeekend();
```

- Returns true if delivery address is the weekend address.
```
	Parameters: none
	Response: boolean
```

#### isFutureAddress

```javascript
const isFutureAddress = deliveryAddressInstance.isFutureAddress();
```

- Returns true if the valid start date for this delivery address is in the future.
```
	Parameters: none
	Response: boolean
```

#### isPastAddress

```javascript
const isPastAddress = deliveryAddressInstance.isPastAddress();
```

- Returns true if the valid start date for this delivery address is in the past.
```
	Parameters: none
	Response: boolean
```

#### isFutureDefaultAddress

```javascript
const isFutureDefaultAddress = deliveryAddressInstance.isFutureDefaultAddress();
```

- Returns true if the valid start date for this delivery address is in the future and it is a default address.
```
	Parameters: none
	Response: boolean
```

#### isPastDefaultAddress

```javascript
const isPastDefaultAddress = deliveryAddressInstance.isPastDefaultAddress();
```

- Returns true if the valid start date for this delivery address is in the past and it is a default address.
```
	Parameters: none
	Response: boolean
```

#### isFutureWeekendAddress

```javascript
const isFutureWeekendAddress = deliveryAddressInstance.isFutureWeekendAddress();
```

- Returns true if the valid start date for this delivery address is in the future and it is a weekend address.
```
	Parameters: none
	Response: boolean
```

#### isPastWeekendAddress

```javascript
const isPastWeekendAddress = deliveryAddressInstance.isPastWeekendAddress();
```

- Returns true if the valid start date for this delivery address is in the past and the it is a weekend address.
```
	Parameters: none
	Response: boolean
```

#### setCurrentAddress

```javascript
deliveryAddressInstance.setCurrentAddress(deliveryAddress);
```

- Sets isCurrentDefaultAddress and isCurrentWeekendAddress to true for the past validDateFrom that is closest to todays date.

| Parameters      | Required | Type   | Description |
| --------------  | -------- | -------| ------------|
| deliveryAddress | Yes  | [DeliveryAddress](../../src/models/delivery-address.ts) | This address is in the past and has the closest validDateFrom to today's date |

```
	Response: none
```
No response required.

### Membership DeliveryAddress Response

- Single delivery address from membership that is used to initialise this class

```json
{
	"id": "Xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxxx",
	"userId": "Xxxxxxxxx-xxxxx-xxxx-xxxxx-xxxxxxxxxxxox",
	"subscriptionNumber": "Xxxxxxxxxxxx",
	"line1": "1 Friday Street",
	"line2": "Bracken House",
	"line3": "",
	"townCity": "London",
	"county": "GBR",
	"postcode": "EC4M 9BT",
	"country": "GBR",
	"validDateFrom": "2019-09-20",
	"validDateTo": null,
	"createdDate": "2019-09-16T15:25:37",
	"updatedDate": "2019-09-17T06:00:38",
	"deliveryNotes": "",
	"securityNotes": "",
	"addressType": "default",
	"distributor": "EDG",
	"department": null,
	"primaryRange": null,
	"secondaryRange": null,
	"primaryName": null,
	"preDir": null,
	"suffix": null,
	"postDir": null,
	"company": null,
	"poBox": false,
}
```
