Initial Enova365 sync service
This commit is contained in:
68
README.md
Normal file
68
README.md
Normal file
@@ -0,0 +1,68 @@
|
||||
# SmartB2B SYNC dla enova365
|
||||
|
||||
Dedykowana usługa Windows zastępująca proces Node na stanowiskach z enova365. Utrzymuje połączenie WAMP, dodaje zamówienia przez oficjalne API Enovy i wykonuje `eu.smartb2b.sql_raw` na osobnym połączeniu SQL.
|
||||
|
||||
## Najważniejsze właściwości
|
||||
|
||||
- Host nie zawiera bibliotek `Soneta.*`. Adapter ładuje je z katalogu `enova.installationPath` przy każdym starcie procesu.
|
||||
- Zmiana wersji lub katalogu Enovy wymaga restartu usługi. Start kończy się błędem, jeżeli nowy zestaw DLL nie jest zgodny z adapterem.
|
||||
- Operacje Enovy są wykonywane pojedynczo i w osobnych sesjach. Zapytania SQL korzystają z puli połączeń i mogą działać równolegle.
|
||||
- ZO jest zapisywane transakcyjnie, domyślnie do bufora. Powtarzający się numer obcy nie jest blokowany.
|
||||
- Pierwsza wersja obsługuje PLN, `price_netto` i rabat procentowy `0-100`.
|
||||
|
||||
## Konfiguracja
|
||||
|
||||
Plik `config/enova.json` zawiera portal WAMP, ścieżkę instalacji, alias bazy, operatora, definicję dokumentu, magazyn domyślny i tryb zapisu.
|
||||
|
||||
Sekrety nie są przechowywane w JSON-ie. Konto usługi musi widzieć dwie zmienne środowiskowe maszyny:
|
||||
|
||||
```powershell
|
||||
[Environment]::SetEnvironmentVariable('SMARTB2B_ENOVA_PASSWORD', '<hasło operatora>', 'Machine')
|
||||
[Environment]::SetEnvironmentVariable('SMARTB2B_SQL_CONNECTION_STRING', 'Server=...;Database=...;User ID=...;Password=...;TrustServerCertificate=True', 'Machine')
|
||||
```
|
||||
|
||||
Po zmianie zmiennych trzeba zrestartować usługę. Connection string powinien używać konta SQL o możliwie najmniejszych uprawnieniach; `sql_raw` celowo dopuszcza również polecenia modyfikujące dane dla zgodności z obecną usługą.
|
||||
|
||||
## Budowanie i testy
|
||||
|
||||
Z katalogu głównego repozytorium, przy zainstalowanym SDK .NET 8:
|
||||
|
||||
```powershell
|
||||
dotnet restore .\SmartB2B.EnovaSync.sln --configfile .\NuGet.Config
|
||||
dotnet build .\SmartB2B.EnovaSync.sln --no-restore
|
||||
dotnet run --project .\tests\SmartB2B.Enova.Tests --no-build --no-restore
|
||||
```
|
||||
|
||||
Ostrzeżenie `NU1603` dotyczące `Soneta.Generator` jest takie samo jak w działającym prototypie `test1` i nie blokuje kompilacji.
|
||||
|
||||
Kontrola konfiguracji i dynamicznego ładowania, bez zapisu do bazy:
|
||||
|
||||
```powershell
|
||||
.\src\SmartB2B.Enova.Service\bin\Debug\net8.0\SmartB2B.Enova.Service.exe --check-config
|
||||
```
|
||||
|
||||
## Publikacja i instalacja
|
||||
|
||||
```powershell
|
||||
.\publish.ps1
|
||||
```
|
||||
|
||||
Skrypt odtwarza katalog `release` z hostem, adapterem, konfiguracją i WinSW. Istniejąca konfiguracja `release/config/enova.json` jest zachowywana. Repozytorium zawiera również gotowy, skompilowany katalog `release`, więc na komputerze produkcyjnym nie trzeba instalować SDK. Przed instalacją:
|
||||
|
||||
1. Skopiuj katalog `release` na komputer produkcyjny i uzupełnij `release/config/enova.json`.
|
||||
2. Ustaw sekrety maszyny.
|
||||
3. Zatrzymaj starą usługę Node dla tego samego portalu WAMP.
|
||||
4. Skonfiguruj usługę do pracy pod dedykowanym kontem Windows, które potrafi uruchomić Enovę, widzi jej bazę i licencję.
|
||||
5. Jako administrator uruchom `release/daemon/install.cmd`.
|
||||
|
||||
Jeżeli usługa ma działać pod innym kontem niż `LocalSystem`, po instalacji ustaw je w `services.msc` albo poleceniem administracyjnym `sc.exe config smartb2bsync-enova obj= "DOMENA\\Użytkownik" password= "..."`, a następnie uruchom usługę ponownie.
|
||||
|
||||
Wycofanie polega na uruchomieniu `daemon/uninstall.cmd` i ponownym uruchomieniu dotychczasowej usługi Node. Nie ma migracji schematu bazy.
|
||||
|
||||
## Procedury WAMP
|
||||
|
||||
- `eu.smartb2b.place_order` przyjmuje `currency_iso`, `companyErpId`, `warehouseErpId`, `purchase_order_number`, `notes` i `lines[]` z polami `symbol`, `quantity`, `price_netto`, `discount`. Wynik jest zwracany jako kwargs: `order_erp_id`, `order_erp_symbol`, `value_netto`, `value_brutto`, `stocks`.
|
||||
- `eu.smartb2b.sql_raw` przyjmuje `query` i opcjonalne `params`; parametry odpowiadają kolejno `@1`, `@2`, itd. Wynik ma pola `recordsets`, `recordset`, `output`, `rowsAffected`.
|
||||
- Diagnostyka: `eu.smartb2b.sync.get_version`, `get_info`, `get_log`, `get_error_log`.
|
||||
|
||||
Kod produkcyjny, testy oraz gotowa wersja instalacyjna znajdują się w tym repozytorium.
|
||||
Reference in New Issue
Block a user