[FEAT] Fase 2 backend: campagne questionario (questionnaire_campaigns) + scadenze/ricorrenze
- createCampaign(supplierId): invia un template a un fornitore via questionnaire_campaigns
(token sq_ retrocompat, scadenza/ricorrenza/reminder_offsets configurabili, crea
supplier_user per accesso OTP, email invito col link al portale). Migrazioni 034+035
applicate su host.
- campaigns(): cruscotto con semaforo scadenze (success/warning<=7gg/danger scaduto)
+ answers_count per campagna.
- computeNextReminder(): helper per il prossimo reminder dagli offset.
- Route: GET:campaigns, POST:{id}/campaigns. api.js: getQuestionnaireCampaigns,
createQuestionnaireCampaign.
Smoke: rotte 401 (router+auth ok). php -l + node --check OK. USR2 applicato.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
306960cbf0
commit
7baa596b37
@@ -286,6 +286,12 @@ class NIS2API {
|
||||
updateTemplateQuestion(id, data) { return this.put(`/supply-chain/questions/${id}`, data); }
|
||||
deleteTemplateQuestion(id) { return this.del(`/supply-chain/questions/${id}`); }
|
||||
importSuppliers(suppliers) { return this.post('/supply-chain/import', { suppliers }); }
|
||||
// Campagne questionario (Fase 2)
|
||||
getQuestionnaireCampaigns() { return this.get('/supply-chain/campaigns'); }
|
||||
createQuestionnaireCampaign(supplierId, data) { return this.post(`/supply-chain/${supplierId}/campaigns`, data); }
|
||||
// Campagne questionario (Fase 2)
|
||||
getQuestionnaireCampaigns() { return this.get('/supply-chain/campaigns'); }
|
||||
createQuestionnaireCampaign(supplierId, data) { return this.post(`/supply-chain/${supplierId}/campaigns`, data); }
|
||||
|
||||
// ═══════════════════════════════════════════════════════════════════
|
||||
// Audit
|
||||
|
||||
Reference in New Issue
Block a user