diff --git a/server/AyaNova/Controllers/CustomerNotifySubscriptionController.cs b/server/AyaNova/Controllers/CustomerNotifySubscriptionController.cs index 98ae7ac6..7c89b897 100644 --- a/server/AyaNova/Controllers/CustomerNotifySubscriptionController.cs +++ b/server/AyaNova/Controllers/CustomerNotifySubscriptionController.cs @@ -127,17 +127,61 @@ namespace AyaNova.Api.Controllers return NoContent(); } + /// + /// get a list of which customers will potentially receive a notification based on tags + /// + /// + /// From route path + /// + [HttpPost("who")] + public async Task GetWho([FromBody] List customerTags, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.CustomerNotifySubscription)) + return StatusCode(403, new ApiNotAuthorizedResponse()); + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + + string custTagsWhere = DataList.DataListSqlFilterCriteriaBuilder.KPITagFilterToSqlCriteria("acustomer.tags", customerTags, false); + + + List ret = new List(); + using (var cmd = ct.Database.GetDbConnection().CreateCommand()) + { + await ct.Database.OpenConnectionAsync(); + cmd.CommandText = $"select id, name, emailaddress from acustomer where active=true {custTagsWhere} order by name"; + using (var dr = await cmd.ExecuteReaderAsync()) + { + while (dr.Read()) + { + ret.Add(new CustomerNotifySubscriptionWhoRecord(dr.GetInt64(0), dr.GetString(1), dr.GetString(2) )); + } + } + } + + // WHERE ARRAY['red','green'::varchar(255)] <@ tags + //array1.All(i => array2.Contains(i)) array1 <@ array2 + //https://www.npgsql.org/efcore/mapping/array.html + // var ret = await ct.Customer.Where(z => z.Active == true && (customerTags.All(i => z.Tags.Contains(i)))).Select(c => new CustomerNotifySubscriptionWhoRecord(c.Id, c.Name, c.EmailAddress)).ToListAsync(); + return Ok(ApiOkResponse.Response(ret)); + } + + private record CustomerNotifySubscriptionWhoRecord(long Id, string Name, string EmailAddress); + /// /// Get Subscription list /// /// User's notification subscription list [HttpGet("list")] - public async Task GetQueue() + public async Task GetList() { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + if (!Authorized.HasModifyRole(HttpContext.Items, AyaType.CustomerNotifySubscription)) + return StatusCode(403, new ApiNotAuthorizedResponse()); var subs = await ct.CustomerNotifySubscription.AsNoTracking().ToListAsync(); diff --git a/server/AyaNova/resource/de.json b/server/AyaNova/resource/de.json index ed1dd0f0..b9ed7db4 100644 --- a/server/AyaNova/resource/de.json +++ b/server/AyaNova/resource/de.json @@ -1303,6 +1303,7 @@ "WarrantyExpires": "Gültig bis", "WebAddress": "Webadresse", "Welcome": "Willkommen in AyaNova", + "WhoWillBeNotified":"Wer wird benachrichtigt?", "WorkOrder": "Arbeitsauftrag", "WorkOrderAge": "Age", "WorkOrderCloseByDate": "Fertigstellungsdatum", diff --git a/server/AyaNova/resource/en.json b/server/AyaNova/resource/en.json index 2fe9d9c8..c480d997 100644 --- a/server/AyaNova/resource/en.json +++ b/server/AyaNova/resource/en.json @@ -1303,6 +1303,7 @@ "WarrantyExpires": "Valid until", "WebAddress": "Web Address", "Welcome": "Welcome to AyaNova", + "WhoWillBeNotified":"Who will be notified?", "WorkOrder": "Work order", "WorkOrderAge": "Age", "WorkOrderCloseByDate": "Date to be completed", diff --git a/server/AyaNova/resource/es.json b/server/AyaNova/resource/es.json index 463b42ae..de6072f6 100644 --- a/server/AyaNova/resource/es.json +++ b/server/AyaNova/resource/es.json @@ -1303,6 +1303,7 @@ "WarrantyExpires": "Válido hasta", "WebAddress": "Dirección web", "Welcome": "Bienvenido a AyaNova", + "WhoWillBeNotified":"¿Quién será notificado?", "WorkOrder": "Orden de trabajo", "WorkOrderAge": "Age", "WorkOrderCloseByDate": "Fecha para completar", diff --git a/server/AyaNova/resource/fr.json b/server/AyaNova/resource/fr.json index 80f921ee..e867742e 100644 --- a/server/AyaNova/resource/fr.json +++ b/server/AyaNova/resource/fr.json @@ -1303,6 +1303,7 @@ "WarrantyExpires": "Valable jusque", "WebAddress": "Adresse Web", "Welcome": "Bienvenue chez AyaNova", + "WhoWillBeNotified":"Qui sera notifié ?", "WorkOrder": "Bon de travail", "WorkOrderAge": "Age", "WorkOrderCloseByDate": "Date à compléter",