feat: v1.1.0

parent ed6526e0
......@@ -36,6 +36,10 @@ module.exports = {
logo: '/logo/dokos_logo_rect.svg',
repo: 'https://gitlab.com/dokos/documentation',
editLinks: true,
algolia: {
apiKey: 'ae1fcf2104324e91009179abc4b96849',
indexName: 'dokos'
},
locales: {
'/': {
label: 'English',
......
......@@ -15,7 +15,22 @@ module.exports = function getSidebar (lang) {
collapsable: false,
children: [
'configuration/configuration-email',
'configuration/formats-impression'
'configuration/formats-impression',
'configuration/modele-adresses'
]
},
{
title: 'Personnaliser dokos',
collapsable: false,
children: [
'personnalisation/scripts-python'
]
},
{
title: 'Intégrations',
collapsable: false,
children: [
'integrations/zapier'
]
}
]
......@@ -35,7 +50,22 @@ module.exports = function getSidebar (lang) {
collapsable: false,
children: [
'configuration/email-setup',
'configuration/print-formats'
'configuration/print-formats',
'configuration/address-templates'
]
},
{
title: 'Customize dokos',
collapsable: false,
children: [
'customization/server-scripts'
]
},
{
title: 'Integrations',
collapsable: false,
children: [
'integrations/zapier'
]
}
]
......
......@@ -6,7 +6,8 @@ module.exports = function getSidebar (name, lang) {
collapsable: false,
children: [
'',
'v1_0_0'
'v1_0_0',
'v1_1_0'
]
}
]
......@@ -18,7 +19,8 @@ module.exports = function getSidebar (name, lang) {
collapsable: false,
children: [
'',
'v1_0_0'
'v1_0_0',
'v1_1_0'
]
}
]
......
......@@ -6,4 +6,19 @@
.theme-container .sidebar {
background-color: #f8faff;
}
/* ALGOLIA */
.algolia-autocomplete .algolia-docsearch-suggestion--category-header {
background-color: #f8faff !important;
color: black !important;
}
.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column {
background-color: white !important;
color: gray !important;
}
.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column {
color: gray !important;
}
\ No newline at end of file
$nprogressColor = blue
\ No newline at end of file
$nprogressColor = blue
$accentColor = #6195ff
$textColor = #2c3e50
$borderColor = #eaecef
$codeBgColor = #282c34
$badgeTipColor = #42b983
$badgeWarningColor = darken(#ffe564, 35%)
$badgeErrorColor = #DA5961
\ No newline at end of file
# Address templates
An address template is a display format of the different elements composing an address.
## 1. Why address templates
The display of addresses beeing different country-wise, it is important to be able to display an address differently if we send an invoice in France, Germany or China.
For this reason, dokos allows the configuration of an address template per country and to define one of these templates as a default one if a template doesn't exist for a given country.
## 2. Create a template
To create a new template, go to `Settings > Address template` and click on new.
1. Select the country for which this template is applicable.
1. Check the box `Is default` if you want to use this template as the default one for your system.
1. Format your template with the [Jinja](http://jinja.pocoo.org/docs/templates/) language or leave it empty if you want the system to add a standard template when you save.
## 3. Edit a template
Here is the standard template:
```
{{ address_line1 }}<br>{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}{{ city }}<br>
{% if state %}{{ state }}<br>{% endif -%}
{% if pincode %}{{ pincode }}<br>{% endif -%}
{{ country }}<br>
{% if phone %}Phone: {{ phone }}<br>{% endif -%}
{% if fax %}Fax: {{ fax }}<br>{% endif -%}
{% if email_id %}Email: {{ email_id }}<br>{% endif -%}
```
Our address doesn't have any `address_line_2` or `fax` values, therefore the display will be:
```
2045 Royal Road
St Paul
06570
Phone: 07911 123456
Email: hello@example.com
```
We would like to display the zip code on the left of the city name and remove the `state` field that is never used in the UK.
Therefore, we need to edit our template the following way:
```
{{ address_line1 }}<br>{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}
{% if pincode %}{{ pincode }} {% endif -%}
{{ city }}<br>
{{ country }}<br>
{% if phone %}Phone: {{ phone }}<br>{% endif -%}
{% if fax %}Fax: {{ fax }}<br>{% endif -%}
{% if email_id %}Email: {{ email_id }}<br>{% endif -%}
```
The result will be:
```
2045 Royal Road
06570 St Paul
Phone: 07911 123456
Email: hello@example.com
```
All fields within the `Address` doctype are accessible in an address template. Even custom fields.
\ No newline at end of file
# Server Scripts
**A Server Script lets you dynamically define a Python Script that is executed on the server and triggered by a document event or an API**
## 1. How to create a Server Script
To create a server script
1. You must set `server_script_enabled` as true in site_config.json of your site.
1. To add / edit Server Script, ensure your role is **Script Manager**
1. Create a new server script via "New Server Script" in the toolbar
1. Set the type of server script (Document Event / API)
1. Set the document type and event name, or method name, script and save.
## 2. Features
### 2.1 Enabling Server Script
Server script must be enabled via site_config.json
```
bench --site {your_site} set-config server_script_enabled true
```
### 2.2 Document Events
For scripts that are to be called via document events, you must set the Reference Document Type and Event Name to define the trigger
- Before Insert
- Before Save
- After Save
- Before Submit
- After Submit
- Before Cancel
- After Cancel
- Before Delete
- After Delete
### 2.3 API Scripts
You can create a new API that can be accessed via `api/method/[methodname]` by the script type "API"
If you want the guest user to access the API, you must check on "Allow Guest"
The response can be set via a `frappe.response["message"]` object
### 2.3 Security
dokos uses the RestrictedPython library to restrict access to methods available for server scripts. Only the safe methods, listed below are available in server scripts
```py
json # json module
dict # internal dict
frappe._ # translator method
frappe._dict # frappe._dict internal method
frappe.flags # global flags
# FORMATTING
frappe.format # frappe.format_value(value, dict(fieldtype='Currency'))
frappe.format_value # frappe.format_value(value, dict(fieldtype='Currency'))
frappe.date_format # default date format
frappe.format_date # returns date as "1st September 2019"
# SESSION
frappe.form_dict # form / request parameters
frappe.request # request object
frappe.response # response object
frappe.session.user # current user
frappe.session.csrf_token # CSRF token of the current session
frappe.user # current user
frappe.get_fullname # fullname of the current user
frappe.get_gravatar # frappe.utils.get_gravatar_url
frappe.full_name = # fullname of the current user
# ORM
frappe.get_meta # get metadata object
frappe.get_doc
frappe.get_cached_doc
frappe.get_list
frappe.get_all
frappe.get_system_settings
# DB
frappe.db.get_list
frappe.db.get_all
frappe.db.get_value
frappe.db.get_single_value
frappe.db.get_default
frappe.db.escape
# UTILITIES
frappe.msgprint # msgprint
frappe.get_hooks # app hooks
frappe.utils # methods in frappe.utils
frappe.render_template # frappe.render_template,
frappe.get_url # frappe.utils.get_url
socketio_port # port for socketio
style.border_color # '#d1d8dd'
guess_mimetype = mimetypes.guess_type,
html2text = html2text,
dev_server # True if in developer mode
```
## 3. Examples
### 3.1 Change the value of a property before save
Script Type: **Before Save**
```py
if "test" in doc.description:
doc.status = 'Closed'
```
### 3.2 Custom validation
Script Type: **Before Save**
```py
if "validate" in doc.description:
raise frappe.ValidationError
```
### 3.3. Auto Create To Do
Script Type: **After Save**
```py
if doc.allocted_to:
frappe.get_doc(dict(
doctype = 'ToDo'
owner = doc.allocated_to,
description = doc.subject
)).insert()
```
### 3.4 API
- Script Type: **API**
- Method Name: `test_method`
```py
frappe.response['message'] = "hello"
```
Request: `/api/method/test_method`
\ No newline at end of file
# Zapier application
Zapier is an online platform helping non technical users connecting multiple applications together.
## 1. Install the Zapier application
### 1.1. Fetch the redirection URI
> Go to zapier.com and login or create a new account
1. In the `My Apps` section, click in `Connect a new account` and search for `dokos`
![New connection](/images/setup/zapier_integration/zapier_new_connection.png)
1. In the popup, copy the redirection address (Redirect URI) displayed above the Client ID and Client Secret fields.
It is the same address, so you can copy it only once.
![New authentication](/images/setup/zapier_integration/zapier_auth.png)
1. Keep the popup open to finish the connexion after step 1.2.
### 1.2. Register a new connexion on dokos
> Open dokos and go o module `Integrations`
1. Create a new `OAuth Client` document, give a name to the client application (E.g. Zapier) and paste the redirection URI copied earlier in fields `Redirection URIs` and `Default redirection URI`.
![New Oauth Client](/images/setup/zapier_integration/dokos_oauth.png)
1. Save and dokos will automatically generate the two missing informations to finish your connection to Zapier: The Client ID and Client Secret.
Copy these two keys.
![New client keys](/images/setup/zapier_integration/dokos_client_keys.png)
### 1.3. Setup social login keys
> To allow OAuth2 integrations types, at least one Frappe social login key is required.
1. Go to `Integrations > Social Login Key`
1. Create a new social login key
1. In the field **Social Login Provider**, select `Frappe`
1. In the field **Base URL** register the base URL of your site without any subdomain.
E.g. If your URL is `https://demo.dokos.io`, register `https://dokos.io`
![New social login key](/images/setup/zapier_integration/frappe_social_login.png)
1. Save
### 1.4. Finish Zapier authentication
> Go back to Zapier and open the window from section 1.1. again.
- **Base URL**: Register the Base URL of your dokos site. E.g. `https://demo.dokos.io`
- **Client ID**: Paste the corresponding key generated at step 1.2.
- **Client Secret**: Paste the corresponding key generated at step 1.2.
1. Click on `Yes, Continue`
1. You will be redirected to your dokos site to validate the authentication. Click on `Allow`
:tada: Your Zapier application is now connected to your dokos site.
You can create your first Zap.
### 2. Create a Zap
The **dokos** Zapier application allows the creation of two types of interactions:
- Triggering a Zap based on an event affecting a document
- Searching or creating an document
### 2.1. Generating a Zap
To generate a new Zap, select the **dokos** application in the Zap editor.
1. In the **Choose Trigger Event** field, select **Document events**.
1. Select an account to use. It will probably be the account created at step 1.
1. In the **Customize Document** section, select:
- The **DocType** (document type) used to trigger a Zap
- The event (**Trigger Event**) triggering this Zap.
This event can be one of the following:
- **After insert**: After the creation of a document
- **On change**: After the modification of a document (can be triggered simultaneously with `On update` or `On submit`)
- **On update**: After saving the document
- **On submit**: After the submission of the document
- **On update after submit**: After saving an already submitted document. Possible only if some fields are allowed to be edited after submission.
- **On cancel**: After cancellation of the document
- **On trash**: After deletion of the document
- The fields to send to Zapier (**Webhook Data**)
Click on the + button to add an additional field
:::tip Good to know
The Zapier integration creates new Webhooks in dokos.
You can find them in `Integrations > Webhooks`.
:::
You can then save and create you action with another Zapier application or with the dokos application.
### 2.2. Triggering an action on dokos
There are two types of actions available on dokos: **Create Document** or **Find Document**
#### 2.2.1. Create a document
Once you have selected the type of document to create, choose some values for the mandatory fields and test you Zap.
A new document should be created on your dokos site.
#### 2.2.2. Find a document
If you want to find a document, you can define 3 parameters:
1. The maximum number of documents to fetch
2. The name of the fields to fetch
3. A filter to find your documents
If you want to find a specific document, think about filtering per ID (Name in dokos).
By checking `Create dokos Document if it doesn't exist yet?` you autorize Zapier to create a new document if it doesn't find the document matching your filters.
Once your document found or created, you can go to the next step and reuse it in another Zap.
### 3. Data format
#### 3.1. Dates
When you send a field of type **Date** or **Datetime**, you need to use the following formats:
- **Date**: `YYYY-MM-DD`
E.g. 2019-11-30
- **Datetime**: `YYYY-MM-DD HH:mm:ss`
E.g. 2019-11-30 08:30:00
You can use the [Zapier Formatter](https://zapier.com/help/create/format/modify-date-formats-in-zaps) tool if needed.
For the **Datetime** format, you can select the option "Use a Custom Value":
![Format Zapier](/images/setup/zapier_integration/zapier_datetime.png)
#### 3.2. Arrays
The application doesn't yet autorize sending arrays in document objects.
Please send us an email at [help@dokos.io](mailto=help@dokos.io) if this limitation causes you integration issues.
......@@ -3,21 +3,32 @@
**Item booking is a flexible document for registering timeslots booking for an Item.**
### Usage
### 1. Usage
You can use the Item Booking document type in two ways:
1. You can make a new booking manually through the desk.
2. You can configure the Item Booking document to allow your website users to book a slot themselves.
### Prerequisites
### 2. Prerequisites
#### Stock settings
#### 2.1. Stock settings
##### Minute UOM
If you want to allow guests to select an available slot on your website, you need to configure a unit of measure corresponding to one minute in the "Item Booking" section of the stock settings:
All slots being multiples of 1 minute, it is necessary to define it for dokos.
#### Unit of measure
##### Enable simultaneous booking
Option to autorize simultaneous item bookings (several bookings of the same item during the same timeslot).
It activates the possibility to set a number of allowed simultaneous bookings for each item in the item master data.
##### Clear drafts after x minutes
Setup to define the time interval between the last modification of an item booking draft and its automatic deletion by the software. Set 0 to deactivate this functionality.
#### 2.2. Unit of measure
In order for the system to be able to convert the sales unit of measure into minutes to calculate the slots available, you need to configure one or several unit of measure conversion factors.
......@@ -41,7 +52,7 @@ You can, of course, adjust this value according to your business needs.
:::
#### Item Booking Calendar
#### 2.3. Item Booking Calendar
You can configure as many calendars as necessary per items and units of measure.
The calendar selection rule for an item booking is as follow:
......@@ -53,7 +64,7 @@ The calendar selection rule for an item booking is as follow:
It is therefore useful to configure at least one calendar, not linked to any item nor unit of measure, that will be considered the default calendar.
#### Item
#### 2.4. Item
In order to allow the booking of timeslots on your website, you need to first show this item on your website: in the __Website__ section, select __Show in Website__.
Enabling this option will allow you to also __Enable Item Booking__.
......@@ -63,10 +74,12 @@ Once enabled, your website users will be given a choice between buying units or
You can uncheck the field __Disabled unit purchasing__ to allow only the booking of timeslots.
__Simultaneous bookings allowed__: Set the number of allowed simultaneous bookings (After activation in the stock settings)
If you want to autorize bookings with different unit of measure (day, hour,...), add them in the unit of measure table.
Please note that the conversion for bookings will be done against conversion factors for one minute, as setup above.
### Slot booking
### 3. Slot booking
Your website users will be presented with a popup listing all available slots.
They can click on an available slot to add it to their shopping cart.
......@@ -75,4 +88,12 @@ They can click on an available slot to add it to their shopping cart.
![Booking dialog](/images/stocks/item_booking/item_booking_dialog.png)
Draft bookings are automatically deleted every 15 minutes in case user abandon their shopping cart.
\ No newline at end of file
Draft bookings are automatically deleted every x minutes (defined in stock settings) in case user abandon their shopping cart.
#### 4. Portal
You can activate the portal "Bookings" to give an access to your clients to the list of timeslots they have booked.
The different bookings will appear with the following statuses: "Confirmed", "Cancelled", "Past".
If you give your clients the permission to cancel an item booking, they will also see a button `Cancel` allowing them to cancel their bookings.
This permission can be given by checking the `Cancel` permission for the `Customer` role (default role) in the the Roles and Permissions Manager.
\ No newline at end of file
# Release notes
- [v1.0.0](/dokos/versions/v1_0_0.md)
\ No newline at end of file
- [v1.0.0](/dokos/versions/v1_0_0.md)
- [v1.1.0](/dokos/versions/v1_1_0.md)
\ No newline at end of file
# V1.1.0
## dokos
#### Features
- Possibility make half day leave applications
- New settings for DATEV export
- Possibility to allow simultenous item bookings
- Item booking draft clearing period is now configurable
- Item booking list per user is now available on the portal
- Specific address template for France (For new installations only. Existing installation please check the documentation)
- Possibility to add dynamic values (in Jinja) in contract templates
#### Bug corrections
- Permissions issues for subscriptions generated from webhooks
- Issue while fetching lead data in opportunities and quotations
- Shopify connector corrections
- Shopping cart addresses issues
#### Breaking change
- Payment gateway account message has been replaced with an email template at Payment Gateways Template level for payment requests.
## dodock [Framework]
#### Features
- [Server scripts](/dokos/setting-up/customization/server-scripts)
- Centralized notification center
- Configurable list view
- Unhandled emails older than 30 days are now deleted every night
- Possibility to make section breaks in print formats
#### Bug corrections
- Activity heatmap correction
- User creation from contact emails were sent twice
- Desk performance issue due to disabled caching
- Issues with currency formatting
- Auto removal of special characters for website links creation
- Possibility to set column width in % in print formats
#### Breaking change
- Removal of `jenv` hook
## Integrations
:tada: New [Zapier](https://zapier.com) integration available in beta version.
Drop us an email at [hello@dokos.io](mailto:hello@dokos.io) to be invited.
\ No newline at end of file
# Modèles d'adresses
Un modèle d'adresse est un format d'affichage des différents éléments composants une adresse.
## 1. Pourquoi des modèles d'adresses
L'affichage des adresses étant différent en fonction des pays, il faut pouvoir afficher une adresse différemment si l'on envoie une facture en France, en Allemagne ou en Chine.
Pour cette raison, dokos permet de configurer un modèle d'adresse par pays et de définir un de ces modèles comme étant le modèle à utiliser par défaut (s'il n'existe pas de modèle pour un pays donnée).
## 2. Créer un modèle
Pour créer un nouveau modèle allez dans `Paramètres > Modèle d'adresse` et cliquez sur nouveau.
1. Choisissez le pays pour lequel appliquer ce modèle.
1. Cochez la case `Modèle par défaut` si vous souhaitez que ce modèle soit utilisé par défaut sur votre système.
1. Ajoutez un modèle au format [Jinja](http://jinja.pocoo.org/docs/templates/) ou laissez vide pour que le système ajoute un modèle standard lors de l'enregistrement.
## 3. Modifier un modèle
Voici le modèle standard:
```
{{ address_line1 }}<br>{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}{{ city }}<br>
{% if state %}{{ state }}<br>{% endif -%}
{% if pincode %}{{ pincode }}<br>{% endif -%}
{{ country }}<br>
{% if phone %}Téléphone: {{ phone }}<br>{% endif -%}
{% if fax %}Fax: {{ fax }}<br>{% endif -%}
{% if email_id %}Email: {{ email_id }}<br>{% endif -%}
```
Notre addresse fictive ne comportant ni champ `address_line_2` ni champ `fax`, cela donne:
```
35 rue de la Paix
Paris
75001
Téléphone: 06.12.34.56.78
Email: hello@exemple.com
```
Par contre nous souhaitons faire apparaître le code postal à gauche du nom de la ville et supprimer le champ `state` qui n'existe pas en France.
Il faut donc modifier votre modèle de la façon suivante:
```
{{ address_line1 }}<br>{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}
{% if pincode %}{{ pincode }} {% endif -%}
{{ city }}<br>
{{ country }}<br>
{% if phone %}Téléphone: {{ phone }}<br>{% endif -%}
{% if fax %}Fax: {{ fax }}<br>{% endif -%}
{% if email_id %}Email: {{ email_id }}<br>{% endif -%}
```
Le résultat sera:
```
35 rue de la Paix
75001 Paris
Téléphone: 06.12.34.56.78
Email: hello@exemple.com
```
Tous les champs du type de document `Adresse` sont accessibles dans un modèle d'addresse. Même les champs personnalisés.
\ No newline at end of file
# Application Zapier
Zapier est une plateforme permettant à des personnes sans connaissances techniques de connecter différentes applications entre elles.
:::warning Version beta
Cette application est en version beta sur invitation en cliquant sur ce [lien](https://zapier.com/developer/public-invite/33806/ce6c67ecce01c7125330cee32bd60910/).
Pour les utilisateurs d'ERPNext, cette application est également compatible avec la version 12.x.x.
:::
## 1. Installer l'application Zapier
### 1.1. Récupérer l'URI de redirection
> Allez sur zapier.com et connectez-vous ou créez-vous un compte
1. Dans la section `My Apps` cliquez dans `Connect a new account` et cherchez `dokos`
![Nouvelle connexion](/images/setup/zapier_integration/zapier_new_connection.png)
1. Dans la fenêtre qui s'ouvre, copiez l'adresse de redirection (Redirect URI) affichée au dessus des champs Client ID et Client Secret.
Il s'agit de la même adresse, donc vous pouvez n'en copier qu'une seule.
![Nouvelle authentification](/images/setup/zapier_integration/zapier_auth.png)
1. Gardez cette fenête ouverte pour terminer la connexion après l'étape 1.2.
### 1.2. Enregistrer une nouvelle connection sur dokos
> Ouvrez dokos et allez dans le module `Intégrations`
1. Créez un nouveau document `Client OAuth`, donnez un nom à l'application cliente (Ex. Zapier) et collez l'URI de redirection copiée plus haut dans les champs `URIs de redirection` et `URI de redirection par défaut`.
![Nouveau client Oauth](/images/setup/zapier_integration/dokos_oauth.png)
1. Enregistrez et dokos va générer automtiquement les deux informations manquantes pour terminer notre connexion à Zapier: L'ID client et le secret client.
Copiez ces deux clés.
![Nouvelles clés clientes](/images/setup/zapier_integration/dokos_client_keys.png)
### 1.3. Configurer les connexions sociales
> Pour permettre les intégrations de type OAuth2, il faut avoir au moins une clé de connexion sociale Frappe.
1. Allez dans `Intégrations > Clé de connexion sociale`
1. Créez une nouvelle clé de connexion de sociale
1. Dans le champ **Fournisseur de connexion sociale** sélectionnez `Frappe`
1. Dans le champ **URL de base** entrez l'URL de base de votre site sans les éventuels sous-domaines.
Ex: Si votre URL est `https://demo.dokos.io`, entrez `https://dokos.io`
![Nouvelles connexion sociale](/images/setup/zapier_integration/frappe_social_login.png)
1. Enregistrez
### 1.4. Terminer l'authentification de Zapier
> Retournez sur Zapier et ouvrez à nouveau la fenêtre de la section 1.1.
- **Base URL**: Entrez l'URL de base de votre site dokos. Ex. `https://demo.dokos.io`
- **Client ID**: Collez la clé générée à l'étape 1.2. correspondante
- **Client Secret**: Collez la clé générée à l'étape 1.2. correspondante
1. Cliquez sur `Yes, Continue`
1. Vous allez être redirigé sur votre site dokos pour valider l'authentification. Cliquez sur `Autoriser`
:tada: Votre application Zapier est désormais connectée à votre site dokos.
Vous pouvez créer votre premier Zap.
### 2. Créer un Zap
L'application Zapier **dokos** permet de créer deux types d'interactions:
- La génération d'un Zap en fonction d'un événement affectant un document
- La recherche ou la création d'un document
### 2.1. Génération d'un Zap
Pour générer un nouveau Zap, séléctionnez l'application **dokos** dans l'éditeur de Zap.
1. Dans le champ **Choose Trigger Event** sélectionnez **Document events**.
1. Sélectionnez le compte à utiliser. Il s'agit probablement du compte créé à l'étape 1.
1. Dans la section **Customize Document**, sélectionnez:
- Le **DocType** (Type de document) utilisé pour déclencher un Zap
- L'événement (**Trigger Event**) qui déclenchera ce Zap.
Cet évément peut être l'un des suivants:
- **After insert**: Après la création d'un document
- **On change**: Après la modification du document (peut être déclenché en même temps que `On update` ou `On submit`)
- **On update**: Après l'enregistrement du document
- **On submit**: Après la validation du document
- **On update after submit**: Après enregistrement d'un document déjà soumis. Possible seulement si certains champs sont éditables après validation.
- **On cancel**: Après l'annulation du document
- **On trash**: Après suppression du document
- Les champs à envoyer à Zapier (**Webhook Data**)
Cliquez sur le bouton + pour ajouter un champ supplémentaire
:::tip A savoir
L'intégration avec Zapier crée des nouveaux Webhooks dans dokos.
Vous pouvez les retrouver en allant dans `Intégrations > Webhooks`.
:::
Vous pouvez ensuite enregistrer et créer votre action avec une autre application Zapier ou avec l'application dokos si vous le souhaitez.
### 2.2. Déclenchement d'une action sur dokos
Il existe deux types d'actions disponibles sur dokos: **Créer un document** (Create Document) ou **Rechercher un document** (Find Document)
#### 2.2.1. Création de document
Un fois que vous avez sélectionné le type de document à créer, choisissez des valeurs pour les champs obligatoires et testez votre Zap.
Un nouveau document devrait être créé sur votre site dokos.
#### 2.2.2. Recherche de document
Si vous sélectionnez la recherche de documents, vous pouvez définir 3 paramètres:
1. Le nombre de document maximum à récupérer
2. Le nom des champs à récupérer
3. Un filtre pour trouver votre/vos documents
Si vous cherchez un document en particulier, pensez à filtrer par identifiant (Nom dans dokos).
En cochant la case `Create dokos Document if it doesn't exist yet?` vous autorisez Zapier à créer un nouveau document s'il ne trouve pas de document correspondant à vos filtres.
Une fois votre document trouvé ou créé, vous pouvez passer à l'étape suivante et le réutiliser dans un autre Zap.
### 3. Formats des données
#### 3.1. Dates
Lorsque vous envoyez un champ de type **Date** ou **Date/Heure**(Datetime), vous devez utiliser les formats suivants:
- **Date**: `YYYY-MM-DD`
Ex: 2019-11-30
- **Date/Heure**: `YYYY-MM-DD HH:mm:ss`
Ex: 2019-11-30 08:30:00
Vous pouvez utiliser les outils [Zapier Formatter](https://zapier.com/help/create/format/modify-date-formats-in-zaps) pour cela si besoin.
Pour le format **Date/Heure**, vous pouvez sélectionner l'option "Use a Custom Value":
![Format Zapier](/images/setup/zapier_integration/zapier_datetime.png)
#### 3.2. Listes
L'application n'autorise pas encore l'envoi de listes dans les objects composant les documents.
Veuillez envoyer un mail à [help@dokos.io](mailto=help@dokos.io) si cette limitation vous pose des problèmes d'intégrations.
# Scripts python
**Un script python vous permet d'écrire un script exécuté sur le server et généré via un événement de document ou via l'API**
## 1. Comment créer un script python
Pour créer un script python
1. Vous devez ajouter la clé `server_script_enabled` et la définir comme étant vrai (ou 1) dans le fichier site_config.json de votre site.
1. Pour ajouter / modifier un script python, assurez-vous d'avoir le rôle **Gestionnaire de script**
1. Créez un nouveau script python vis "Nouveau script python" dans la barre d'outils
1. Choisissez le type de script python (Evénement de document / API)
1. Choisissez le type de document de référence et le nom de l'événement, ou le nom de la méthode, ajoutez votre script et enregistrez.
## 2. Fonctionnalités
### 2.1 Autoriser les scripts python
Les scripts python doivent être activés via le fichier site_config.json
```
bench --site {votre_site} set-config server_script_enabled true
```
### 2.2 Evénements de document
Pour les scripts qui sont lancés via des événements de documents, vous devez définir le type de document de référence et nom de l'événement générateur
- Avant l'insertion
- Avant l'enregistrement
- Après l'enregistrement
- Avant la validation
- Après la validation
- Avant l'annulation
- Après l'annulation
- Avant la suppression
- Après la suppression
### 2.3 Scripts API
Vous pouvez créer une nouvelle API qui sera accessible via `api/method/[methodname]` en sélectionnant le type de script "API"
Si vous voulez qu'un utilisateur invité (non connecté) accède à l'API, cochez la case "Autoriser les invités".
La réponse sera envoyés dans un objet de type `frappe.response["message"]`
### 2.3 Securité
dokos utilise la librairie RestrictedPython pour restreindre l'accès aux méthodes disponibles pour les scripts python. Seules les méthodes sûres, listées ci-dessous sont disponibles dans les scripts serveur.
```py
json # module json
dict # dict interne
frappe._ # méthod de traduction
frappe._dict # méthode interne frappe._dict
frappe.flags # flags globaux
# FORMATTING
frappe.format # frappe.format_value(value, dict(fieldtype='Currency'))
frappe.format_value # frappe.format_value(value, dict(fieldtype='Currency'))
frappe.date_format # format de date par défaut
frappe.format_date # retourne une date sous la forme "1er septembre 2019"
# SESSION
frappe.form_dict # paramètres de requêtes / formulaires
frappe.request # objet de requête
frappe.response # objet de réponse
frappe.session.user # utilisateur actuel
frappe.session.csrf_token # jeton CSRF de la session en cours
frappe.user # utilisateur actuel
frappe.get_fullname # nom complet de l'utilisateur actuel
frappe.get_gravatar # frappe.utils.get_gravatar_url
frappe.full_name = # nom complet de l'utilisateur actuel
# ORM
frappe.get_meta # obtenir l'objet de métadonnées
frappe.get_doc
frappe.get_cached_doc
frappe.get_list
frappe.get_all
frappe.get_system_settings
# DB
frappe.db.get_list
frappe.db.get_all
frappe.db.get_value
frappe.db.get_single_value
frappe.db.get_default
frappe.db.escape
# UTILITIES
frappe.msgprint # msgprint
frappe.get_hooks # hooks de l'application
frappe.utils # méthodes de frappe.utils
frappe.render_template # frappe.render_template,
frappe.get_url # frappe.utils.get_url
socketio_port # port for socketio
style.border_color # '#d1d8dd'
guess_mimetype = mimetypes.guess_type,
html2text = html2text,
dev_server # Vrai si en mode développeur
```
## 3. Exemples
### 3.1 Changer la valeur d'une propriété avant enregistrement
Type de script: **Avant l'enregistrement**
```py
if "test" in doc.description:
doc.status = 'Closed'
```
### 3.2 Validation personnalisée
Type de script:: **Avant l'enregistrement**
```py
if "validate" in doc.description:
raise frappe.ValidationError
```
### 3.3. Auto création d'une ToDo
Type de script:: **Après l'enregistrement**
```py
if doc.allocted_to:
frappe.get_doc(dict(
doctype = 'ToDo'
owner = doc.allocated_to,
description = doc.subject
)).insert()
```
### 3.4 API
- Type de script:: **API**
- Nom de la méthode: `test_method`
```py
frappe.response['message'] = "hello"
```
Requête: `/api/method/test_method`
\ No newline at end of file
......@@ -2,21 +2,32 @@
**La réservation d'articles est un document flexible permettant d'enregistrer des réservation de créneaux horaires pour un article.**
### Usage
### 1. Usage
Vous pouvez utiliser le document de réservation d'articles de deux façons:
1. Vous pouvez faire une nouvelle réservation manuellement depuis le bureau.
2. Vous pouvez configurer le document de réservation d'articles pour autoriser vos utilisateurs de site web à réserver un créneau eux-mêmes.
### Pré-requis
### 2. Pré-requis
#### Paramètres des stocks
#### 2.1. Paramètres des stocks
##### Unité de mesure pour 1 minute
Si vous voulez autoriser des invités à sélectionner un créneau disponible sur votre site web, vous devez configurer l'unité de mesure correspondant à une minute dans la section "Réservation d'articles" des paramètres de stock.
Tous les créneaux étant des multiples d'une minutes, il faut indiquer cette unité de mesure à dokos.
#### Unité de mesure
##### Autoriser les réservations simultanées
Option permettant d'autoriser les réservations simultanées d'articles (plusieurs réservation d'un même article pendant le même créneau).
Cela active la possibilité d'indiquer un nombre de réservations simultanées autorisées pour chaque article dans les fiche d'articles.
##### Supprimer les brouillons après x minutes
Paramétrage permettant de définir l'intervale de temps entre la dernière modification d'un brouillon de réservation d'articles et sa suppression automatique par le logiciel. Mettez 0 pour désactiver cette fonctionnalité.
#### 2.2. Unité de mesure
Afin que le système soit capable de convertir les unités de mesure de vente en minutes pour calculer les créneaux disponibles, vous devez configurer un ou plusieurs facteurs de conversion d'unité de mesure.
......@@ -40,7 +51,7 @@ Veuillez noter qu'ici, 1 jour correspond à 480 minutes, car nous considérons q
Vous pouvez, bien sûr, ajuster cette valeur en fonction de vos besoins métiers.
:::
#### Calendrier de réservation d'articles
#### 2.3. Calendrier de réservation d'articles
Vous pouvez configurer autant de calendrier de réservation que vous le souhaitez par articles et unités de mesures.
La règle de sélection du calendrier correspondant à une réservation d'article est la suivante:
......@@ -53,7 +64,7 @@ La règle de sélection du calendrier correspondant à une réservation d'articl
Il est donc utile de configurer au moins un calendrier qui ne soit lié ni à un article ni à une unité de mesure, pour qu'il puisse servir de calendrier par défaut.
#### Article
#### 2.4. Article
Pour pouvoir autoriser la réservation de créneaux horaires sur votre site web, vous devez d'abord afficher l'article sur votre site web: dans la section __Site web__, sélectionnez __Afficher sur le site web__.
Activer cette option vous permettra aussi d'__Autoriser la réservation d'articles__.
......@@ -63,10 +74,12 @@ Une fois activée, vos utilisateurs de site web auront le choix entre acheter de
Vous pouvez cocher la case __Désactiver l'achat d'unités__ pour ne permettre que la réservation de créneaux.
__Réservations simultanées autorisées__: Définissez le nombre de réservations simultanées autorisées (Après activation dans les paramètres des stocks)
Si vous souhaitez autoriser la réservation avec différentes unités de mesure (jour, heure,...) ajoutez les dans le tableau des unités de mesure.
Notez que la conversion pour les réservations se fera selon les facteurs de conversions pour une minute définis ci-dessus.
### Réservation d'article
### 3. Réservation d'article
Vos utilisateurs de site web ont accès à un popup listant tous les créneaux disponibles.
Ils peuvent cliquer sur un créneau disponible et l'ajouter dans leur panier.
......@@ -75,4 +88,13 @@ Ils peuvent cliquer sur un créneau disponible et l'ajouter dans leur panier.
![Popup de réservation](/images/stocks/item_booking/item_booking_dialog.png)
Les réservations en brouillon (non validées) sont automatiquement supprimées toutes les 15 minutes pour les cas d'abandon de panier.
\ No newline at end of file
Les réservations en brouillon (non validées) sont automatiquement supprimées toutes les x minutes (définies dans les paramètres des stock) pour les cas d'abandon de panier.
#### 4. Portail
Vous pouvez activer le portail "Bookings" pour donner un accès à vos clients à la liste des créneaux qu'ils ont réservés.
Les différentes réservations apparaîtront avec les statuts "Confirmé", "Annulé" ou "Passé".
Si vous donnez l'autorisation d'annuler une réservation d'articles à vos clients, ceux-ci pourront également voir un bouton `Annuler` leur permettant d'annuler leur réservation.
Cette autorisation peut être donnée en cochant la case `Annuler` pour le rôle `Client` (par défaut) dans les gestionnaire des rôles et autorisation.
\ No newline at end of file
# Notes de version
- [v1.0.0](/fr/dokos/versions/v1_0_0.md)
\ No newline at end of file
- [v1.0.0](/fr/dokos/versions/v1_0_0.md)
- [v1.1.0](/fr/dokos/versions/v1_1_0.md)
\ No newline at end of file
# V1.1.0
## dokos
#### Fonctionnalités
- Possibilité de poser des demi-journées de congés
- Nouveaux paramètres pour les exports DATEV
- Possibilité de permettre des réservations d'articles simultanées
- La période avant suppression des réservations d'articles en brouillon est désormais configurable
- La liste des réservations d'articles par utilisateur est désormais disponible sur le portail
- Modèle d'adresse spécifique pour la France (Nouvelles installations seulement. Pour les installations existantes, voir la documentation)
- Possibilité de mettre des valeurs dynamiques (en Jinja) dans les modèles de contrats
#### Corrections de bug
- Problèmes d'autorisations pour les abonnements générés depuis les webhooks
- Bug lors de la récupération des informations des prospects dans les opportunités et devis
- Corrections pour le connecteur Shopify
- Problèmes avec les adresses dans le panier
#### Modifications
- Le message par défaut pour les demandes de paiement situé dans les comptes de passerelle de paiement a été remplacé par un modèle d'email dans les modèles de passerelles de paiement.
## dodock [Modèle d'application]
#### Fonctionnalités
- [Scripts en python](/fr/dokos/installation/personnalisation/scripts-python)
- Centre de notification centralisé
- Vue en liste configurable
- Les emails non gérés de plus de 30 jours sont désormais supprimés toutes les nuits
- Possibilité d'ajouter des sauts de page dans les formats d'impression
#### Corrections de bug
- Correction du diagramme d'activité
- L'email de création d'un utilisateur depuis un contact était envoyé en double
- Problèmes de performance du bureau à cause d'une désactivation de cache
- Problèmes de formatage des devises
- Suppression automatique des caractères spéciaux lors de la création des liens de site web
- Possibilité de définir la largeur des colonnes en % dans les formats d'impression
#### Modifications
- Suppression du hook `jenv`
## Intégrations
:tada: Nouvelle application [Zapier](https://zapier.com) disponible en version beta.
Envoyez-nous un email à [hello@dokos.io](mailto:hello@dokos.io) pour être invité.
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment