Compare commits

..

20 Commits

Author SHA1 Message Date
louispaulb
f6576e38af feat: champ Dispatch Job.legacy_detail (description ticket legacy, pont)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 11:50:23 -04:00
louispaulb
afbc43cc07 feat: champ Dispatch Job.legacy_activation_url (lien activation STB Ministra, pont Phase 1)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 11:20:11 -04:00
louispaulb
0f1f21a966 feat: champ Dispatch Job.legacy_dept (coloriage cartes par type, pont legacy→dispatch)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 10:05:46 -04:00
louispaulb
05dfe5aa17 feat: champ Dispatch Job.legacy_ticket_id (idempotence du pont legacy→dispatch)
Renseigné par services/targo-hub/lib/legacy-dispatch-sync.js (repo gigafibre-fsm) :
1 ticket osTicket legacy = 1 Dispatch Job. read_only + search_index.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-06 09:34:18 -04:00
louispaulb
c6e2856a8b Tech Availability: champ long_term (absence longue durée = à remplacer)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 20:31:36 -04:00
louispaulb
a4f82359c7 Shift Template: champ on_call (quart de garde, non offert au booking)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 15:38:04 -04:00
louispaulb
fa1172a495 Dispatch Job booking_status: ajout option 'À reporter' (file reschedule)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 13:28:47 -04:00
louispaulb
49721eae8e Item: bouton raccourci '💲 Prix de vente' (Client Script) → ouvre/crée l'Item Price Standard Selling en 1 clic
Contourne l'UX peu intuitive d'ERPNext (prix dans doctype séparé). Variantes → bouton 'Variantes & prix'. Stocké en base (survit aux recreate).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 07:07:50 -04:00
louispaulb
aad579d8bb PG patches: ajout #4 repost_item_valuation + #5 general_ledger validate_against_pcv (Period Closing GROUP BY)
5 patchs MySQLisme désormais cuits dans l'image erpnext-custom via Dockerfile (COPY+RUN apply_pg_patches.py).
Débloque submit stock/compta sur PostgreSQL (vérifié: Stock Reconciliation submit OK sur conteneur frais).
frappe_pg aussi proprement bake + ajouté à apps.txt (shim chargé eager pour toutes requêtes, token inclus).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:47:33 -04:00
louispaulb
536bd2dfa8 PG patches reproductibles (idempotent): ORDER BY NULL (product.py) + CurDate (item.py heatmap) + CURRENT_DATE() filet (frappe_pg)
Volatils dans le conteneur → à ré-appliquer après rebuild. Period Closing Voucher GROUP BY = TODO (#53).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-04 06:16:09 -04:00
louispaulb
4760ae5e73 Store setup: champ store_regular_price (prix barré boutique, inline-editable)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 21:55:59 -04:00
louispaulb
e47ecd26ac Store ERPNext setup (idempotent): champ show_in_store (curation Webstore) + list_view/standard_filter + rapport 'Produits Boutique'
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 21:30:07 -04:00
louispaulb
f61f99df18 Custom Field monthly_regular (Service Contract): prix forfait original barré
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 18:31:58 -04:00
louispaulb
7b9f9c935d Custom Field install_regular (Service Contract): prix install barré marketing
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 18:22:23 -04:00
louispaulb
c397c457a5 setup: champ install_fee sur Service Contract (financement install CRTC 2026-43)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 18:05:59 -04:00
louispaulb
7ea546bbbd Roster/booking: doctypes + custom fields ERPNext (idempotent)
- create_roster_doctypes.py : Shift Template/Requirement/Assignment, Tech Availability
- setup_dispatch_custom_fields.py : efficiency, skills, coût chargé (Dispatch Technician)
  + booking_prefs/status/token (Dispatch Job)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 16:43:36 -04:00
louispaulb
6fc8a2d37f refactor: externalize ERP service token via VITE_ERP_TOKEN env var
Token is no longer hardcoded in source — injected at build time.
Build with: VITE_ERP_TOKEN="key:secret" npx quasar build
Prevents accidental token invalidation and keeps secrets out of git.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:39:41 -04:00
louispaulb
1263786b90 fix: update service token + fix API proxy routing
- Regenerated Admin API token (old one was invalidated by generate_keys)
- Traefik: separate routers for app (with Authentik) and /api/ (no auth)
- Nginx proxy: use container IP (cross-compose DNS doesn't resolve names)
- /outpost.goauthentik.io/ route for Authentik callbacks

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:39:11 -04:00
louispaulb
7ef22873f0 fix: handle Authentik session expiry in SPA
- authFetch uses redirect:'manual' to detect 302 from Authentik
- If session expired (302/401/opaqueredirect), reload page to trigger
  Traefik forwardAuth → Authentik re-login flow
- Logout redirects to Authentik invalidation flow
- App.vue calls checkSession on mount to populate user identity

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:34:39 -04:00
louispaulb
f1faffeab9 feat: switch Dispatch auth to Authentik forwardAuth
- Remove login form from App.vue (Authentik handles auth at Traefik level)
- Simplify auth store: no more checkSession/generate_keys complexity
- All ERPNext API calls use a service token (reliable, no CORS issues)
- User identity provided by Authentik X-authentik-email header
- Logout redirects to Authentik end-session URL
- Removed: login(), generate_keys, cookie fallback, token localStorage

Infrastructure:
- Created Authentik Proxy Provider for dispatch.gigafibre.ca
- Added to embedded outpost
- Applied authentik@file middleware to dispatch Traefik router
- Also removed unused Gitea (git.gigafibre.ca) containers + volumes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 13:33:09 -04:00

Diff Content Not Available