[](https://badge.fury.io/py/easys-ordermanager)
[](https://pypi.org/project/easys-ordermanager/)
# EasyS order manager API
## Compatibility matrix
Python 3.8, 3.9 and 3.10
### Django 3.2
DRF 3.11 or newer
### Django 4.0
DRF 3.13 or newer
### Django 4.1
DRF 3.14 or newer
# Changelog
## 2.1.3 (2023-05-03)
* Updates to Serializer v2 & v3, see serializer changelog
## 2.1.2 (2023-04-12)
* Updates to Serializer v3, see serializer changelog
* Fixed missing development dependency
## 2.1.1 (2023-03-21)
* Updates to Serializer v3, see serializer changelog
* New test to validate payloads including EXISTING_STROER_LANDINGPAGE, and only a SEO product orderline.
## 2.1.0 (2023-03-16)
* Introduction of serializer v3, see serializer changelog
* `easys-ordermanager/easys_ordermanager/v3/serializer.Serializer` is considered WIP until integration in EasyS starts
## 2.0.12 (2023-03-02)
* Updates to Serializer v2, see serializer changelog
## 2.0.11 (2023-02-17)
* Updates to Serializer v1 & v2, see serializer changelog
## 2.0.10 (2023-01-09)
* Updates to Serializer v1 & v2, see serializer changelog
## 2.0.9 (2023-01-03)
* Updates to Serializer v2, see serializer changelog
## 2.0.8 (2023-01-02)
* Updates to Serializer v2, see serializer changelog
## 2.0.7 (2022-12-01)
* Updates to Serializer v2, see serializer changelog
## 2.0.6 (2022-11-29)
* Updates to Serializer v1 & v2, see serializer changelog
## 2.0.5 (2022-11-22)
* Add serializer changelog to manifest and include it in the released package
## 2.0.4 (2022-11-22)
* Add serializer changelog to PyPI readme
## 2.0.3 (2022-11-21)
Updates to Serializer v1 & v2, see serializer changelog
## 2.0.2 (2022-11-15)
* Add support for phonenumbers 8.13.x',
## 2.0.1 (2022-09-27)
* Add support for DRF 3.14
* Add more test combinations
* Remove references to GitHub as the code mirror will be removed
## 2.0.0 (2022-09-16)
* Remove support for Python 3.7 and below
* Remove support for Django 2.x and below
* Drop support for DRF 3.10 and below
* Add support for Python 3.10
* Add support for Django 4.0 and 4.1
* Add tests for DRF 3.11, 3.12 and 3.13
* Change CI build to parallel matrix
* Get rid of tox for CI
* Run the publish stage only for tags on the main branch
## 1.4.53 (2022-07-13)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.52 (2022-07-08)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.51 (2022-06-14)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.50 (2022-06-14)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.49 (2022-04-29)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.48 (2022-03-30)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.47 (2022-03-24)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.46 (2022-01-25)
* Add support for [djangorestframework 3.13 release series](https://www.django-rest-framework.org/community/release-notes/#313x-series)
## 1.4.45 (2022-01-14)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.44 (2022-01-03)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.43 (2021-11-29)
Updates to Serializer v2, see serializer changelog
## 1.4.42 (2021-11-26)
Updates to Serializer v1, see serializer changelog
## 1.4.41 (2021-11-12)
* Add support for [django-phonenumber-field release series 6](https://github.com/stefanfoulis/django-phonenumber-field/blob/main/CHANGELOG.rst#600-2021-10-20)
## 1.4.40 (2021-10-08)
Fixes flake8 errors.
## 1.4.39 (2021-10-08)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.38 (2021-08-11)
* Fix example for email Orderline.
## 1.4.37 (2021-08-11)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.36 (2021-06-25)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.35 (2021-06-01)
* Update maximum supported version of django-phonenumber-field>=3.0.1,<6.0
## 1.4.34 (2021-05-28)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.33 (2021-05-25)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.32 (2021-05-07)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.31 (2021-04-15)
* Update maximum supported version of django-phonenumber-field>=3.0.1,<5.2
* Update test matrix, add Django 3.2
## 1.4.30 (2021-03-18)
Replace ugettext* usages with gettext* usages as Python 3 is unicode compatible anyway
## 1.4.29 (2021-02-19)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.28 (2021-02-01)
* Remove dependency to django-iban and use validation from internationalflavor
* Allow django-countries release series 7.x
* Update dev requirements
## 1.4.27 (2021-1-27)
Updated translations of PRODUCT_PAYMENT_CYCLE_CHOICES
## 1.4.26 (2021-1-27)
updates changelog
## 1.4.25 (2021-1-27)
Adds product payment cycle support to Serializer v1 & v2, see serializer changelog
## 1.4.24 (2020-11-25)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.23 (2020-11-19)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.22 (2020-11-16)
* Modernize Docker env, Update max supported versions and min requirements of some packages
* Split package and test dependencies
* Move package dependencies to setup.py
* Restructure travis env
## 1.4.21 (2020-11-13)
Update maximum supported version of django-phonenumber-field>=3.0.1,<5.1
## 1.4.20 (2020-11-06)
Update maximum supported version of phonenumbers>=7.0.6,<8.13
## 1.4.19 (2020-10-23)
Update maximum supported version of djangorestframework>=3.7.7,<3.13
## 1.4.18 (2020-10-16)
Update maximum required version of django-countries>=4.4,<6.1.4 and django-internationalflavor>=0.3.1,<0.5
## 1.4.17 (2020-10-16)
Update package to version phonenumbers>=7.0.6,<8.12.12
## 1.4.15 (2020-10-16)
Update package to version django-model-utils>=3.1.2,<5.0 - for backwards compatibility
## 1.4.14 (2020-10-16)
Update package to version django-model-utils>=4.0.0,<5.0
## 1.4.13 (2020-10-06)
Fix serializer v2 choice fields
## 1.4.12 (2020-10-05)
Updates to Serializer v2, see serializer changelog
## 1.4.11 (2020-09-23)
Update german translations
## 1.4.10 (2020-09-23)
Updates to Serializer v1 & v2, see serializer changelog
## 1.4.9 (2020-09-01)
Updates to Serializer v2, see serializer changelog
## 1.4.8 (2020-08-06)
Changed a translation
## 1.4.7 (2020-06-30)
Fix test cases
## 1.4.6 (2020-06-30)
Updates to Serializer v1/v2, see serializer changelog
## 1.4.5 (2020-06-23)
Updates to Serializer v1/v2, see serializer changelog
## 1.4.4 (2020-06-04)
Fixed code style to pass checks
## 1.4.3 (2020-06-03)
Updates to Serializer v2, see serializer changelog
## 1.4.2 (2020-05-07)
Updates to Serializer v2, see serializer changelog
## 1.4.1 (2020-04-15)
Introduction of serializer v2
* `easys-ordermanager/easys_ordermanager/v1/serializer.Serializer` is now frozen on the state of release 1.2.3
* `easys-ordermanager/easys_ordermanager/v2/serializer.Serializer` is considered WIP until integration in EasyS starts and new changes will go into v3, see serializer changelog for changes between v1 and v2
## 1.3.2 (2020-04-02)
Reverted
## 1.2.3 (2020-03-03)
Make sure Django 3 is not installed until further support
## 1.2.2 (2020-03-03)
Add proper dependencies to avoid unwanted failure with possible upgrades when installed freshly.
See setup.py for dependencies
## 1.2.1 (2020-02-27)
Add unique validation on `opening_hours` list of values of `OrderLineListingSerializer`.
The opening hours lis should be unique for every `day_of_week` (see `OrderLineListingOpeningHoursSerializer`)
## 1.2.0 (2019-09-17)
This release contains backwards incompatible changes.
Changes on `OrderLineDisplayBasicSerializer`
* Removed: `geo_targeting` field.
* New: `geo_targeting_zip` field which accepts one string zip code. Not mandatory
* New: `geo_targeting_radius` field accepting integer values between 1-80 (km). Mandatory only if `geo_targeting_zip` is given.
* Removed: `stock_images_allowed` field:
* New: `banner_image_selection` choice field accepting following values:
* 0 for 'From website' / 'Von der Webseite' option
* 1 for 'From customer' / 'Vom kunden' option
* 2 for 'Customer photos' / 'Regiohelden Bilder' option
* Change: `target_page_type` existing field which is not required anymore.
Changes on `OrderLineGoogleAdsPremiumSerializer`:
* New: `call_tracking` boolean required field.
## 1.1.3 (2019-09-11)
Clean README file.
## 1.1.2 (2019-09-11)
Fix expected_impression_share field of OrderLineGoogleAdsBasicSerializer to accept 5 digits in order to validate value 100.00
## 1.1.1 (2019-09-06)
Small fix on pep8 error
## 1.1.0 (2019-09-04)
This release contains backwards incompatible changes
* Split Display detail OrderLineDisplaySerializer in two different serializers and fields for basic and premium product levels:
* remove `detail_display` field from `OrderLine`
* add `detail_display_basic` field (`OrderLineDisplayBasicSerializer`) on `OrderLine`
The serializer contains following fields:
New fields:
* `banner_color_selection`
choice field with values: 1 for _Color from Logo/Website_ and 2 for _Set color_ . To be used in combination with fields `color_code_x`
Fields with changed definition
* `impressions_per_month`
choice field with accepted values: 20.000 , 40.000 and 80.000
* `creative_options`
choice field contains only values: 1 for _Customer provided_ and 3 for _Create animated_
Fields with the same definition as in the previous OrderLineDisplaySerializer
* `geo_targeting`
* `geo_targeting`
* `campaign_goal`
* `headline`
* `sub_headline`
* `bullet_points`
* `call_to_action`
* `color_code_1`
* `color_code_2`
* `color_code_3`
* `stock_images_allowed`
* `target_page_type`
* `target_url`
* `package_template`
* `location_frame_text`
* `creative_options`
* add `detail_display_premium` field (`OrderLineDisplayPremiumSerializer`) on `OrderLine`
Serializer contains following fields with the same definition as in the previous OrderLineDisplaySerializer
* `booking_type`
* `target_devices`
* `creatives_format`
* `impressions_per_day`
* `impressions_per_month`
* `age_targeting`
* `gender_targeting`
* `geo_targeting`
* `channel_targeting`
* `interest_targeting`
* `campaign_goal`
* `target_page_type`
* `target_url`
* `creative_options`
* Split Google Ads detail OrderLineGoogleAdsSerializer in two different serializers for basic and premium product levels:
* remove `detail_google_ads` field from `OrderLine`
* add `detail_google_ads_basic` field (`OrderLineGoogleAdsBasicSerializer`) on `OrderLine`
Serializer contains following fields with the same definition as in the previous OrderLineGoogleAdsSerializer
* `campaign_goal`
* `regions`
* `expected_impression_share`
* `keywords`
* `keywords_with_zero_search_volume`
* `target_audience`
* add `detail_google_ads_premium` field (`OrderLineGoogleAdsPremiumSerializer`) on `OrderLine`
Serializer contains following fields with the same definition as in the previous OrderLineGoogleAdsSerializer
* `call_to_action`
* `campaign_goal`
* `regions`
* `expected_clicks`
* `expected_conversions`
* `existing_account_id`
* `include_remarketing`
* `keywords`
* `keywords_with_zero_search_volume`
* `target_audience`
* `usp`
* All product fee fields on `OrderLineSerializer` became optional:
* `setup_fee`
* `start_fee`
* `budget`
* `fee`
* `one_time_budget`
* `commission`
* `deferred_payment_sum`
* Add validation for commission provided for product type Google Ads level Basic: fixed value of 40
* Add validation for combination of product type and level: check if a matching HC products subtype exists
* Add validation for the payment fees provided: check if a matching HC payment type exists.
## 1.0.4 (2019-08-21)
* Add new fee type postponed_setup_fee
* Add reference customer boolean to Location serializer
## 1.0.3 (2019-07-03)
* Don't use allow_null with BooleanField (`djangorestframework<3.9` doesn't support it)
## 1.0.2 (2019-07-01)
* Allow to use empty/null values for non-required fields
## 1.0.1 (2019-06-27)
* Add missing files to the package
## 1.0.0 (2019-06-24)
* Initial release
# Serializer changes
## 2.1.3
### v2/v3
#### `OrderLineInAppSerializer`
* Added `INAPP_AUDIENCE_EMPTY` to `target_audiences` choices.
## 2.1.2
#### `OrderLineGoogleAdsPremiumSerializer`
* Made `target_page_type` required.
* Removed fields:
- `expected_clicks`
- `expected_conversions`
- `expected_impression_share`
- `expected_impressions`
- `keywords_with_zero_search_volume`
- `branch_codes`
- `call_to_action`
- `is_generic_campaign`
- `generic_topics`
- `remarketing_setup_fee`
- `remarketing_budget`
#### `OrderLineLandingpageSerializer`
* Added field `easys_related_orderline_id`, referencing the easys ID of a product in the same payload, required.
## 2.1.1
### v2/v3
#### `EXISTING_STROER_LANDINGPAGE`
* Change constant value from 3 to 4, to prevent clashes with `NEW_LANDINGPAGE` constant.
#### `validate_website_and_landingpage_exists()`
* `needs_website` is `True` **only** when `target_page_type` property corresponds to a new website. This was the behavior before the version `2.0.10` of the serializer.
## 2.1.0
### v3
#### `PRODUCT_TYPE_CHOICES`
* Added choice `PRODUCT_TYPE_DOMAIN`
#### `OrderLineDomainSerializer`
* Added serializer, the domain fields of `OrderLineWebsiteSerializer`and `OrderLineEmailSerializer` have been migrated to
this serializer. Contains the following fields:
* `desired_domain`: character field of maximum length 100, required
* `domain_type`: choice of `DOMAIN_TYPE_CHOICES`, required
* `domain_info`: character field of maximum length 100, optional
#### `OrderLineWebsiteSerializer`
* Removed domain fields (`desired_domain`, `domain_type`, `domain_info`)
* Added field `easys_orderline_domain_id`, referencing the easys ID of a domain product in the same payload
#### `OrderLineEmailSerializer`
* Removed domain fields (`desired_domain`, `domain_type`, `domain_info`)
* Added field `easys_orderline_domain_id`, referencing the easys ID of a domain product in the same payload.
* Changed field `included_accounts` to accept a non-empty list of emails, required
* Changed field `additional_accounts` to accept a possibly empty list of additional emails, required
* Removed field `addresses`
#### `OrderLineSerializer`
* Added new field `down_payment`, optional
* Added new field `detail_domain` accepting `OrderLineDomainSerializer` data, optional
#### `Serializer`
* Added validation: if any OrderLine detail contains `easys_orderline_domain_id` it must reference a domain
product provided in the same payload
## 2.0.12
### v2
#### `OrderLineGoogleAdsPremiumSerializer`
* Remove fields `remarketing_setup_fee` and `remarketing_budget`, since they are no longer used.
## 2.0.11
### v1/v2
#### `OrderLineSeoSerializer`
* Add translation for `EXISTING_STROER_LANDINGPAGE`
## 2.0.10
### v1/v2
#### `OrderLineSeoSerializer`
* Add `campaign_goal` field, not required.
* Support new value (`3`) for `target_page_type` field. It corresponds to `EXISTING_STROER_LANDINGPAGE`.
## 2.0.9
### v2
#### `OrderSerializer`
* Add `salesforce_opportunity_id` field, required.
## 2.0.8
### v1/v2
#### `OrderLineDisplayNativeSerializer`
* Remove required `target_url`.
## 2.0.7
### v2
#### `OrderLineSerializer`
* Add `salesforce_opportunity_line_item_id` field, not required.
## 2.0.6
### v1/v2
#### `OrderLineDisplayNativeSerializer`
* Fix validation when `age_group_from` and `age_group_from` are `null`.
## 2.0.3
### v1/v2
#### `DisplayNativeCreativeSerializer`
* Changed `teaser` and `advertorial` to accept null instead of blank, and removed `allow_blank` from `ad_type`.
## 1.4.53
### v1/v2
#### `OrderLineGoogleAdsPremiumSerializer`
* Add `ticket_id` field, not required.
## 1.4.52
### v1/v2
#### `OrderLineDisplayNativeSerializer`
* Introduced new serializer - `OrderLineDisplayNativeSerializer`
## 1.4.51
### v1/v2
#### `OrderLineInAppSerializer`
* Set `poi_targeting_file` as not required.
## 1.4.50
### v1/v2
#### `OrderLineInAppSerializer`
* Add `poi_targeting_file` field.
## 1.4.49
### v1/v2
#### `OrderLineSerializer`
* Add `is_pre_briefing_necessary` field, default value is False.
## 1.4.48
### v1/v2
#### `OrderLineDisplayPremiumSerializer`
* Add validation for `impressions_per_month` and `impressions_one_time`, depending on `booking_type` (continuous or fixed).
## 1.4.47
### v1/v2
#### `OrderLineDisplayPremiumSerializer`
* Changed field `impressions_per_day` to `impressions_one_time`.
## 1.4.45
### v1/v2
#### `OrderLineDisplayPremiumSerializer`
* Changed field `age_targeting` choices: `DISPLAY_AGE_CHOICES`, removed legacy `[DISPLAY_AGE_14_19, DISPLAY_AGE_20_29]` and added `DISPLAY_AGE_14_29`
## 1.4.44
### v1/v2
* removed `detail_google_ads_basic` from `OrderLineSerializer`
* removed `OrderLineGoogleAdsBasicSerializer`
## 1.4.43
### v2
* removed `detail_display_basic` from `OrderLineSerializer`
* removed `OrderLineDisplayBasicSerializer`
## 1.4.42
### v1
#### `OrderLineGoogleAdsPremiumSerializer`
* Add field `branch_codes`, optional.
## 1.4.39
### v1/v2
#### `OrderLineDisplayPremiumSerializer`
* Add new field `short_name`, optional.
## 1.4.37
### v1/v2
#### `OrderLineEmailSerializer`
* Add necessary and additional fields for domain creation on email orderline: `desired_domain`, `domain_type` and `domain_info`.
## 1.4.36
### v1/v2
#### `OrderLineGoogleAdsPremiumSerializer`
* Add new fields for generic campaign information: `is_generic_campaign` and `generic_topics`, optionals.
## 1.4.34
### v1/v2
#### `OrderLineSeoSerializer`
* Make `ticket_id` optional.
## 1.4.33
### v1/v2
#### `ContactSerializer`
* Add new field `opt_in_marketing`, optional.
## 1.4.32
### v1/v2
#### `OrderLineSeoSerializer`
* Make `regions` optional.
## 1.4.29
### v1/v2
#### `OrderLineInAppSerializer`
* Remove INAPP_AUDIENCE_OTHER choice
* Make `target_audiences` optional. One of the `target_audiences` and `other_target_audiences` is required
## 1.4.25
### v1/v2
#### `OrderLineSerializer`
* Add new field: `payment_cycle`: choice of `PRODUCT_PAYMENT_CYCLE_CHOICES`, optional
## 1.4.24
### v1/v2
#### `OrderLineListingSerializer`
* Add two new fields: `tonline_costs` and `tonline_city`
### `PRODUCT_TYPE_CHOICES`
* Add choice `PRODUCT_TYPE_TONLINE`
## 1.4.23
### v1/v2
#### `AccountLocationSerializer`
* Add validation: required `payment_debit_account_iban` in case of `payment_type` Charge
## 1.4.12
### v2
#### `OrderLineWebsiteSerializer`
* Added proper choices for
* `design_preference_minimalistic_embellished`
* `design_preference_modern_classic`
* `design_preference_simple_striking`
* `design_preference_text_picture`
## 1.4.10
### v1/v2
#### `OrderLineFacebookSerializer`
* `ages` choices adjustment: `14_18` is now `13_17` and `19_24` is `18_24`
## 1.4.9
### v2
#### `OrderLineWebsiteSerializer`
* Restrict validator for field `desired_domain` to accept only domain names without http protocol and no IP addresses
## 1.4.6
### v1 / v2
#### `OrderLineGoogleAdsPremiumSerializer`
* Add optional `expected_impressions` and `expected_impression_share`
### v1
* Add optional `target_page_type`
## 1.4.5
### v1 / v2
#### `AccountLocationSerializer`
* Allow `google_places_id` to be 1000 characters max (was 30 before)
## 1.4.3
### v2
#### `OrderLineWebsiteSerializer`
* `additional_subpages` must be >= 0 and <= 60 now
#### `OrderLineGoogleAdsBasicSerializer`
* added optional `target_url`
#### `OrderLineGoogleAdsPremiumSerializer`
* added optional `target_url`
## 1.4.2
### v2
#### `AccountSerializer`
* `branch_codes` cannot be empty any more
#### `OrderLineSeoSerializer`
* `topics` cannot be empty any more
* `regions` cannot be empty any more
#### `OrderLineGoogleAdsBasicSerializer`
* `regions` cannot be empty any more
## 1.4.1
### v2
#### `OrderLineLandingpageSerializer`
added, similar to `OrderLineWebsiteSerializer` except for
* `additional_subpages`: positive integer, required
* `logo_creation`: choice of `LOGO_CREATION_CHOICES`, required
#### `OrderLineSerializer`
* added `detail_landingpage`: type `OrderLineLandingpageSerializer`, only required when OrderLine represents a landingpage product
#### `OrderLineGoogleAdsBasicSerializer`
* added `target_page_type`: choice of `GOOGLE_ADS_LANDING_PAGE_CHOICES`, optional
* see `Serializer` changes for validation
#### `OrderLineGoogleAdsPremiumSerializer`
* added `branch_codes`: list of HeroCentral provided industry topic codes, optional
* HeroCentral will validate the codes against the industry tree
* added `target_page_type`: choice of `GOOGLE_ADS_LANDING_PAGE_CHOICES`, optional
* see `Serializer` changes for validation
* added `remarketing_setup_fee`: decimal, must be >=0 if `include_remarketing=true`
* added `remarketing_budget`: decimal, must be >=0 if `include_remarketing=true`
#### Validations
* added validation: if any OrderLine detail contains `target_page_type`
* if set to `NEW_WEBSITE`, the serializer will require an OrderLine of type `PRODUCT_TYPE_WEBSITE` to exist
* if set to `NEW_LANDINGPAGE`, the serializer will require an OrderLine of type `PRODUCT_TYPE_LANDINGPAGE` to exist
* OrderLine details which can provide values for `target_page_type` are:
* OrderLineDisplayBasicSerializer
* OrderLineDisplayPremiumSerializer
* OrderLineSeoSerializer
* OrderLineInAppSerializer
* OrderLineFacebookSerializer