Création du module DolibarrClient avec ses différentes routes & création du module WarehouseGUI pour le LCD M5Stack #7
64
docs/Doc_Dolibarr.md
Normal file
64
docs/Doc_Dolibarr.md
Normal file
@ -0,0 +1,64 @@
|
||||
# CRM Dolibarr
|
||||
|
||||
## Docker Image tuxgasy/dolibarr
|
||||
|
||||
### Description du composant
|
||||
|
||||
Dolibarr est le CRM utilisé pour gérer les stocks, les transactions et l'inventaire présents dans les entrepôts. Il est le pilier central du projet et nous servira d'interface pour gérer les transactions.
|
||||
|
||||
### Spécifications techniques
|
||||
|
||||
- **Image Docker**: [tuxgasy/dolibarr](https://hub.docker.com/r/tuxgasy/dolibarr/)
|
||||
- **Plugins utilisés**: Stock, API REST
|
||||
- **Utilisateur technique créé**: Technical User IoT
|
||||
|
||||
### Fonctionnalités principales
|
||||
|
||||
- Créer / Lister les différents entrepôts
|
||||
- Créer / Lister les produits disponibles dans un entrepôt
|
||||
- Créer un mouvement dans les stocks des produits disponibles dans chaque entrepôt
|
||||
- Exposer différents webservices pour automatiser certaines tâches
|
||||
|
||||
### Guide d'utilisation
|
||||
|
||||
#### Créer une instance de développement
|
||||
|
||||
Pour créer une instance de développement, nous allons utiliser l'image Docker de Dolibarr: [tuxgasy/dolibarr](https://hub.docker.com/r/tuxgasy/dolibarr/)
|
||||
|
||||
Pour simplifier l'installation, un fichier docker-compose est disponible à la racine du projet: `./docker-compose-dolibarr.yml`
|
||||
|
||||
Pour lancer Dolibarr, exécutez la commande suivante :
|
||||
```bash
|
||||
$ docker compose -f docker-compose-dolibarr.yml up
|
||||
```
|
||||
|
||||
#### Ensuite, il faut se rendre sur [http://0.0.0.0/](http://0.0.0.0/) puis se connecter avec les identifiants par défaut (admin, admin).
|
||||
|
||||
### Appel des différents webservices de Dolibarr
|
||||
|
||||
L'URL de base pour toutes nos requêtes HTTP (avec l'image Docker) est : `http://0.0.0.0/api/index.php`
|
||||
|
||||
Pour commencer, récupérez l'API token d'un utilisateur pour pouvoir effectuer des requêtes API. Assurez-vous que l'utilisateur dispose des autorisations nécessaires.
|
||||
|
||||
Ensuite, utilisez ce token pour chaque route API en l'ajoutant dans les en-têtes : `DOLAPIKEY = {{votre_api_token}}` de votre prochaine requête.
|
||||
|
||||
Pour récupérer le warehouse de base et vérifier son existence :
|
||||
- **Méthode**: GET
|
||||
- **URL**: `warehouses/{id}`
|
||||
|
||||
Pour récupérer les produits disponibles :
|
||||
- **Méthode**: GET
|
||||
- **URL**: `products?sortfield=t.ref&sortorder=ASC&limit=10000`
|
||||
|
||||
Pour créer un mouvement de stock :
|
||||
- **Méthode**: POST
|
||||
- **URL**: `stockmovements?sortfield=t.rowid&sortorder=ASC&limit=100`
|
||||
- **Body (JSON)**:
|
||||
```json
|
||||
{
|
||||
"product_id": "1", // string, - ID du produit à déplacer
|
||||
"warehouse_id": "1", // string - ID de l'entrepôt
|
||||
"qty": 60, // int - quantité à déplacer (1 pour positif ou -1 pour enlever un article)
|
||||
"movementcode": "S-1", // string - code du mouvement
|
||||
"movementlabel": "Abc" // string - libellé du mouvement
|
||||
}
|
77
docs/Schématics/Class.puml
Normal file
77
docs/Schématics/Class.puml
Normal file
@ -0,0 +1,77 @@
|
||||
@startuml class
|
||||
|
||||
hide empty members
|
||||
|
||||
|
||||
class Dolibarr {
|
||||
+ String getDestination(String tagID)
|
||||
+ String createStockMovement(String tagID, String warehouseId)
|
||||
}
|
||||
|
||||
package "Managers" {
|
||||
abstract AManager {
|
||||
# ILCDScreen lcd
|
||||
# IServoMotor servo
|
||||
# IGRBL grbl
|
||||
# INFCReader nfc
|
||||
}
|
||||
|
||||
class WarehouseManager
|
||||
|
||||
WarehouseManager .|> AManager
|
||||
}
|
||||
|
||||
package "Components" {
|
||||
package "NFCReader" {
|
||||
interface INFCReader {
|
||||
{abstract} char* read()
|
||||
{abstract} bool hasTag()
|
||||
}
|
||||
class RC522
|
||||
RC522 .|> INFCReader
|
||||
}
|
||||
|
||||
package "LCDScreen" {
|
||||
interface ILCDScreen {
|
||||
{abstract} void clearScreen()
|
||||
{abstract} void draw(int x, int y, int h, int w)
|
||||
{abstract} void drawRect(int x, int y, int h, int w)
|
||||
}
|
||||
class M5LCD
|
||||
M5LCD .|> ILCDScreen
|
||||
}
|
||||
|
||||
package "GRBL" {
|
||||
interface IGRBL {
|
||||
{abstract} drive(int x, int y, int z, int step)
|
||||
{abstract} step(int s)
|
||||
}
|
||||
class M5GRBL
|
||||
M5GRBL .|> IGRBL
|
||||
}
|
||||
|
||||
package "ServoMotor" {
|
||||
interface IServoMotor {
|
||||
{abstract} goLeft()
|
||||
{abstract} goRight()
|
||||
{abstract} goMiddle()
|
||||
}
|
||||
class ServoMotor
|
||||
ServoMotor .|> IServoMotor
|
||||
}
|
||||
}
|
||||
|
||||
class Program {
|
||||
+ Program()
|
||||
+ void loop
|
||||
}
|
||||
|
||||
AManager <-- IServoMotor
|
||||
AManager <-- IGRBL
|
||||
AManager <-- ILCDScreen
|
||||
AManager <-- INFCReader
|
||||
|
||||
Program <-- WarehouseManager
|
||||
Program <-- Dolibarr
|
||||
|
||||
@enduml
|
22
docs/Schématics/Hardware.puml
Normal file
22
docs/Schématics/Hardware.puml
Normal file
@ -0,0 +1,22 @@
|
||||
@startuml hard wiring
|
||||
|
||||
cloud {
|
||||
[Dolibarr]
|
||||
}
|
||||
|
||||
package "Convoyeur"{
|
||||
[M5 Core]
|
||||
[Lecteur NFC] as nfc
|
||||
[Servo Moteur] as servo
|
||||
[GRBL]
|
||||
[Stepper Moteur] as Stepper
|
||||
}
|
||||
|
||||
|
||||
[Dolibarr] <-- [M5 Core] : API
|
||||
[M5 Core] --> servo : IO
|
||||
[M5 Core] <-- nfc : IC2
|
||||
[M5 Core] --> [GRBL] : SPI
|
||||
[GRBL] --> Stepper
|
||||
|
||||
@enduml
|
Loading…
x
Reference in New Issue
Block a user