153 lines
5.4 KiB
Markdown
153 lines
5.4 KiB
Markdown
# DiDi ERP/CRM
|
|
|
|
Componenta ERP si CRM a platformei DiDi, construita pe ERPNext v15 (Frappe Framework). Gestioneaza facturarea, contabilitatea, clientii, lead-urile si continutul CMS al website-ului public.
|
|
|
|
## Cuprins
|
|
|
|
- [Arhitectura](#arhitectura)
|
|
- [Stack tehnic](#stack-tehnic)
|
|
- [Structura folder](#structura-folder)
|
|
- [Quickstart](#quickstart)
|
|
- [Configurare](#configurare)
|
|
- [Documentatie detaliata](#documentatie-detaliata)
|
|
|
|
---
|
|
|
|
## Arhitectura
|
|
|
|
```
|
|
+--------------------+ +-----------+ +----------+
|
|
| Website Next.js | <--> | ERPNext | ---> | MariaDB |
|
|
| (clienti, plati) | API | (gunicorn)| | (date) |
|
|
+--------------------+ +-----+-----+ +----------+
|
|
|
|
|
+-------+--------+
|
|
| Redis cache |
|
|
| Redis queue |
|
|
+----------------+
|
|
|
|
|
+-------+--------+
|
|
| 3 workeri |
|
|
| (short/long/ |
|
|
| default) |
|
|
| + scheduler |
|
|
+----------------+
|
|
```
|
|
|
|
7 containere:
|
|
- `didi-erpnext` (web API + nginx)
|
|
- `didi-mariadb` (baza de date)
|
|
- `didi-redis-cache`, `didi-redis-queue`
|
|
- `didi-queue-short`, `didi-queue-long`, `didi-queue-default` (background jobs)
|
|
- `didi-scheduler` (cron jobs)
|
|
|
|
## Stack tehnic
|
|
|
|
| Componenta | Versiune |
|
|
|------------|----------|
|
|
| ERPNext | v15 |
|
|
| Frappe Framework | v15 |
|
|
| MariaDB | 10.11 |
|
|
| Redis | 7-alpine |
|
|
| Python | 3.11 (in container) |
|
|
| Domeniu | Services |
|
|
| Limba | Romana |
|
|
| Plan conturi | Romania - Chart of Accounts (OMFP 1802/2014) |
|
|
| TVA | 21% (cota standard RO de la 01.08.2025) |
|
|
| Moneda | RON |
|
|
|
|
## Structura folder
|
|
|
|
```
|
|
erp_crm/
|
|
├── README.md # Acest fisier
|
|
├── INSTALL.md # Ghid de instalare de la 0
|
|
├── OPERATIONS.md # Ghid operare (backup, restart, troubleshooting)
|
|
├── CONFIGURATION.md # Variabile mediu, credentiale, integrari
|
|
├── docker-compose.yml # Stack Docker complet
|
|
├── .env # Configurare credentiale (NU se commiteaza)
|
|
├── nginx.conf # Reverse proxy intern container
|
|
├── bin/
|
|
│ ├── entrypoint.sh # ERPNext startup
|
|
│ ├── start-bench-service.sh # Worker startup
|
|
│ └── setup-site.sh # Initial site setup (one-time)
|
|
├── didi_custom/ # App custom DiDi (Frappe)
|
|
│ ├── didi_custom/
|
|
│ │ ├── hooks.py # Frappe hooks
|
|
│ │ ├── doctype/ # 4 DocType-uri custom:
|
|
│ │ │ ├── analysis_report/ # - rezultate analize cu PDF
|
|
│ │ │ ├── payment_log/ # - log evenimente Stripe
|
|
│ │ │ ├── service_agreement/# - acorduri servicii
|
|
│ │ │ └── website_content/ # - CMS pagini website
|
|
│ │ └── ...
|
|
│ └── pyproject.toml
|
|
├── mariadb-init/ # Init scripts MariaDB
|
|
│ └── init.sql
|
|
├── scripts/
|
|
│ ├── setup/ # Scripturi setup (numerotate, idempotente)
|
|
│ │ ├── 01-config.py # Company, taxe, naming series
|
|
│ │ ├── 02-doctypes.py # Custom fields pe Customer/Lead/Sales Invoice
|
|
│ │ ├── 03-cleanup.py # Ascunde module standard ERPNext
|
|
│ │ ├── 04-populate-content.py# Continut CMS implicit (RO + EN)
|
|
│ │ ├── 05-translations.py # Traduceri suplimentare
|
|
│ │ ├── 06-sidebar.py # Workspaces custom (Facturi, Clienti, etc.)
|
|
│ │ ├── 07-reports.py # Rapoarte DiDi (Dashboard Financiar, CRM)
|
|
│ │ ├── 08-email.py # Email Account SendGrid + notificari
|
|
│ │ └── 09-phase2-final.py # Finalizari (suppliers, hidden fields)
|
|
│ └── archive/ # Scripturi vechi/one-off (referinta)
|
|
└── docs/
|
|
└── oferta/ # Caietul de sarcini + propunerea tehnica
|
|
```
|
|
|
|
## Quickstart
|
|
|
|
Cere docker si docker compose v2 instalate. Si o retea Docker numita `didi-network`:
|
|
|
|
```bash
|
|
docker network create didi-network 2>/dev/null || true
|
|
```
|
|
|
|
Build complet de la 0 (~5 minute):
|
|
|
|
```bash
|
|
cd ~/erp_crm
|
|
bash build-from-zero.sh
|
|
```
|
|
|
|
Dupa ce termina, deschide http://localhost:8080 si te loghezi cu `Administrator` / `admin`.
|
|
|
|
Pentru detalii, vezi [INSTALL.md](./INSTALL.md).
|
|
|
|
## Configurare
|
|
|
|
Editezi `.env` pentru a schimba credentiale, parole, porturi:
|
|
|
|
```env
|
|
MYSQL_ROOT_PASSWORD=<parola-root-db>
|
|
ADMIN_PASSWORD=admin
|
|
ERPNEXT_PORT=8080
|
|
SITE_NAME=didi-erp
|
|
```
|
|
|
|
Detalii complete in [CONFIGURATION.md](./CONFIGURATION.md).
|
|
|
|
## Documentatie detaliata
|
|
|
|
| Document | Scop |
|
|
|----------|------|
|
|
| [INSTALL.md](./INSTALL.md) | Build de la 0, dependinte, prima rulare |
|
|
| [OPERATIONS.md](./OPERATIONS.md) | Backup, restart, log-uri, troubleshooting |
|
|
| [CONFIGURATION.md](./CONFIGURATION.md) | Env vars, credentiale, integrari externe |
|
|
| [docs/oferta/](./docs/oferta/) | Caietul de sarcini si propunerea tehnica |
|
|
|
|
## Credentiale implicite (DE SCHIMBAT la productie)
|
|
|
|
| Cui | Valoare |
|
|
|-----|---------|
|
|
| ERPNext Administrator | `Administrator` / `admin` |
|
|
| MariaDB root | `<parola-root-db>` |
|
|
| Site name (intern) | `didi-erp` |
|
|
|
|
## Suport
|
|
|
|
Pentru intrebari tehnice: office@clossers.com
|