Clients Custom Fields¶
To setup a new custom field, we must set the CLIENT_CUSTOM_FIELDS variable in the
settings.py file.
Let’s start with an example:
EU_COUNTRIES = ['AL', 'AD', 'AT', 'BY'] # list with a few EU countries codes
CLIENT_CUSTOM_FIELDS = {'vat_id': {'label': 'VAT ID Field',
'required': {'country': {'in': EU_COUNTRIES}},
'type': 'text'}
}
vat_id.vat_id field has a few settings, let’s look at each of them and some additional settings:- name: A string without spaces with the same restrictions as python variables.
A field is ignored if its name is the same as an existing client attribute or is invalid.
label: A string used for display purposes.
- required: A boolean value, a rule or a callable.
- Defaults to
FalseIn our case, we require this field only if the client attributecountryis inEU_COUNTRIES
- optional: A boolean value, a rule or a callable
- Defaults to
FalseNote that if both required and optional are False, the field will be ignored.
- choices: Used for
selectfield types - A list of strings or tuples (ex: [(‘1’, ‘One’), (‘2’, ‘Two’)…])The first element in a tuple is the actual value and the second is the display name
- choices: Used for
- type: the type of this field, mainly for frontend display.
- Defaults to
textif not setSupported field types include: ‘text’, ‘select’, ‘check’
The required rule¶
'required': True # always required
'required': some_function() # returns a boolean or a rule value like below
'required': {'city': {'exists': True}} # required if client.city was set
'required': {'state': {'null': True}} # required if client.state is None/null
'required': {'country': {'nin': ['AB', 'CD']}} # required if client.country is not in the list
'required': {'<client_field>': {'<operator>': '<operand>'}} # generic definition of a full rule
The optional rule¶
The optional rule is the same as the required rule above.
Do note that not setting or setting both required and optional to False will set the field to be ignored.
Supported rule operations include: in, nin, eq, ne, exists, null
Custom fields will be used for Invoices, client messages templates and other client related tasks
With the 2019.09.0 release we have added a new option regarding the client creation process:
do not require state for some countries
In order to use this feature you will have to add a new dict in the fleio settings.py file:
STATE_REQUIRED_FOR_COUNTRY = {
'FR': False,
}
In the above case, the state will no longer be required for France.