2 Commits

11 changed files with 82 additions and 272 deletions

2
.gitignore vendored
View File

@ -10,4 +10,4 @@
# Aptatio/Platformio specifics
secrets.ini
.idea
.idea

View File

@ -0,0 +1,22 @@
version: "3"
services:
mariadb:
image: mariadb:latest
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: dolibarr
web:
image: tuxgasy/dolibarr
environment:
DOLI_DB_HOST: mariadb
DOLI_DB_USER: root
DOLI_DB_PASSWORD: root
DOLI_DB_NAME: dolibarr
DOLI_URL_ROOT: 'http://0.0.0.0'
PHP_INI_DATE_TIMEZONE: 'Europe/Paris'
ports:
- "80:80"
links:
- mariadb

58
docs/dolibarr/README.md Normal file
View File

@ -0,0 +1,58 @@
# Dolbarr documentation
### Créer une instance de dev
Pour créer une instance de développement, nous allons utiliser l'image docker de dolibarr:
https://hub.docker.com/r/tuxgasy/dolibarr/
pour simplifier l'installation, un docker-compose est disponible a la racine du projet `./docker-compose-dolibarr.yml`
pour lancer dolibarr:
```shell
$ docker compose -f docker-compose-dolibarr.yml up
```
ensuite il faut se rendre sur http://0.0.0.0/ puis se login avec les credentials par défault (admin, admin)
### Api flow
Base url: http://0.0.0.0/api/index.php/
Pour commencer, il faut récupérer l'api token d'un utilisateur pour pouvoir faire des requêtes api, assurer vous bien que l'utilisateurs a bien les permissions nécéssaires:
![Api token user](../resources/image.png)
ensuite vous pouvez utiliser ce token pour chaque route API en ajoutant dans les headers:
DOLAPIKEY = {{votre_ap_token}}
Récupérer le warehouse de base et vérifier son existance :
```
Method: GET
Url: warehouses/{id}
```
Récupérer les produits disponibles:
```
Method: GET
Url: products?sortfield=t.ref&sortorder=ASC&limit=10000
```
Pour créer un mouvement de stock:
```
Method: POST
Url: stockmovements?sortfield=t.rowid&sortorder=ASC&limit=100
Body (JSON):
{
"product_id": "1", //string, - id of the product to move
"warehouse_id": "1", //string - id of the warehourse
"qty": 60, //int - quantity to move (1 for positive or -1 to remove one item)
"movementcode": "S-1", //string - code of the mouvement
"movementlabel": "Abc" //string - label of the mouvement
}
```

BIN
docs/resources/image.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -1,56 +0,0 @@
#include <algorithm>
#include <iostream>
#include "GUIScreen.h"
// Abstract AGuiScreen definition
gui::AGUIScreen::AGUIScreen() {
std::cout << "Hello form AGUIScreen" << "\n";
this->widgets = std::vector<AGUIWidget*>();
}
int gui::AGUIScreen::update() {
std::sort(widgets.begin(), widgets.end(), [](AGUIWidget* aWidget, AGUIWidget* bWidget) {
return aWidget->getLayer() < bWidget->getLayer();
});
for (auto *widget: widgets) {
widget->update();
}
return (0);
}
int gui::AGUIScreen::addWidget(gui::AGUIWidget *widget) {
this->widgets.push_back(widget);
return 0;
}
int gui::AGUIScreen::removeWidget(gui::AGUIWidget *_widget) {
return 0;
}
int gui::AGUIScreen::removeWidget(int _index) {
return 0;
}
int gui::AGUIScreen::removeWidget(const char *_name) {
return 0;
}
std::vector<gui::AGUIWidget*> gui::AGUIScreen::getWidgets() const {
return this->widgets;
}
// DefaultGuiScreen definition
gui::DefaultGuiScreen::DefaultGuiScreen() {
std::cout << "Hello form DefaultGuiScreen" << "\n";
}
int gui::DefaultGuiScreen::setup() {
return 0;
}
const char *gui::DefaultGuiScreen::getName() const {
return "DefaultGuiScreen";
}

View File

@ -1,35 +0,0 @@
#ifndef T_IOT_901_CONVOYOR_GUICONTAINER_H
#define T_IOT_901_CONVOYOR_GUICONTAINER_H
#include <vector>
#include "GUIWidget.h"
namespace gui {
class AGUIScreen {
public:
AGUIScreen();
~AGUIScreen() = default;
virtual const char* getName() const = 0;
virtual int setup() = 0;
int update();
int addWidget(AGUIWidget* widget);
int removeWidget(AGUIWidget* widget);
int removeWidget(int index);
int removeWidget(const char* name);
std::vector<AGUIWidget*> getWidgets() const;
protected:
std::vector<AGUIWidget*> widgets;
};
class DefaultGuiScreen : public AGUIScreen {
public:
DefaultGuiScreen();
~DefaultGuiScreen() = default;
const char* getName() const override;
int setup() override;
};
}
#endif //T_IOT_901_CONVOYOR_GUICONTAINER_H

View File

@ -1,33 +0,0 @@
#include "GUIWidget.h"
gui::AGUIWidget::AGUIWidget(int x, int y, int width, int height, int layer) : layer(layer) {
this->position.x = x;
this->position.y = y;
this->size.width = width;
this->size.height = height;
}
int gui::AGUIWidget::getLayer() const {
return this->layer;
}
void gui::AGUIWidget::setLayer(int newLayer) {
this->layer = newLayer;
}
GuiWidgetPosition gui::AGUIWidget::getPosition() const {
return this->position;
}
void gui::AGUIWidget::setPosition(GuiWidgetPosition pos) {
this->position = pos;
}
GuiWidgetSize gui::AGUIWidget::getSize() const {
return this->size;
}
void gui::AGUIWidget::setSize(GuiWidgetSize newSize) {
this->size = newSize;
}

View File

@ -1,35 +0,0 @@
#ifndef T_IOT_901_CONVOYOR_GUIWIDGET_H
#define T_IOT_901_CONVOYOR_GUIWIDGET_H
struct GuiWidgetPosition {
int x;
int y;
};
struct GuiWidgetSize {
int width;
int height;
};
namespace gui {
class AGUIWidget {
public:
AGUIWidget(int x, int y, int width, int height, int layer = 0);
~AGUIWidget() = default;
virtual const char* getName() const = 0;
virtual void setup() = 0;
virtual void update() = 0;
int getLayer() const;
void setLayer(int layer);
GuiWidgetPosition getPosition() const;
void setPosition(GuiWidgetPosition position);
GuiWidgetSize getSize() const;
void setSize(GuiWidgetSize size);
private:
GuiWidgetPosition position{};
GuiWidgetSize size{};
int layer;
};
}
#endif //T_IOT_901_CONVOYOR_GUIWIDGET_H

View File

@ -1,82 +0,0 @@
#include "WarehouseGUI.h"
#include "M5Stack.h"
using namespace gui;
WarehouseGUI::WarehouseGUI() {
this->screens = std::vector<AGUIScreen*>();
}
WarehouseGUI::~WarehouseGUI() = default;
int WarehouseGUI::addScreens(gui::AGUIScreen *screen) {
this->screens.push_back(screen);
return 0;
}
int WarehouseGUI::removeScreens(gui::AGUIScreen *screen) {
for (int i = 0; i < this->screens.size(); ++i) {
if (this->screens[i] == screen) {
this->screens.erase(this->screens.begin() + i);
return 0;
}
}
return -1;
}
int WarehouseGUI::removeScreens(int index) {
if (index < 0 || index >= this->screens.size()) {
return -1;
}
this->screens.erase(this->screens.begin() + index);
return 0;
}
int WarehouseGUI::removeScreens(const char *name) {
for (int i = 0; i < this->screens.size(); ++i) {
if (this->screens[i]->getName() == name) {
this->screens.erase(this->screens.begin() + i);
return 0;
}
}
return -1;
}
int WarehouseGUI::update() {
return this->current_screen->update();
}
int WarehouseGUI::setup() {
if (this->current_screen == nullptr) {
return -1;
}
return this->current_screen->setup();
}
int WarehouseGUI::changeCurrentScreen(const char *name) {
for (auto *screen : this->screens) {
if (screen->getName() == name) {
this->current_screen = screen;
this->current_screen->setup();
return 0;
}
}
return -1;
}
int WarehouseGUI::changeCurrentScreen(int index) {
if (index < 0 || index >= this->screens.size()) {
return -1;
}
this->current_screen = this->screens[index];
this->current_screen->setup();
return 0;
}
std::vector<AGUIScreen *> gui::WarehouseGUI::getAllScreens() {
return this->screens;
}
AGUIScreen *gui::WarehouseGUI::getCurrentScreen() {
return this->current_screen;
}

View File

@ -1,29 +0,0 @@
#ifndef T_IOT_901_CONVOYOR_WAREHOUSEGUI_H
#define T_IOT_901_CONVOYOR_WAREHOUSEGUI_H
#include <vector>
#include "GUIScreen.h"
namespace gui {
class WarehouseGUI {
public:
WarehouseGUI();
~WarehouseGUI();
int addScreens(AGUIScreen* screen);
int removeScreens(AGUIScreen* screen);
int removeScreens(int index);
int removeScreens(const char *name);
int changeCurrentScreen(const char* name);
int changeCurrentScreen(int index);
std::vector<AGUIScreen*> getAllScreens();
AGUIScreen* getCurrentScreen();
int setup();
int update();
private:
std::vector<AGUIScreen*> screens;
AGUIScreen *current_screen{nullptr};
};
} // namespace gui
#endif //T_IOT_901_CONVOYOR_WAREHOUSEGUI_H

View File

@ -31,7 +31,7 @@ extra_scripts = pre:scripts/get_additionnal_envs.py
; Device Settings (make sure to fix versions where possible!)
platform = espressif32@4.2.0
board = m5stack-core-esp32
board = esp32dev
framework = arduino
; Monitoring settings