diff --git a/.vscode/launch.json b/.vscode/launch.json
index fcc80a75..b77f3b95 100644
--- a/.vscode/launch.json
+++ b/.vscode/launch.json
@@ -53,7 +53,7 @@
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles",
- "AYANOVA_SERVER_TEST_MODE": "true",
+ "AYANOVA_SERVER_TEST_MODE": "false",
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small",
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"
diff --git a/server/AyaNova/Controllers/UnitController.cs b/server/AyaNova/Controllers/UnitController.cs
index af585ea6..de0abb71 100644
--- a/server/AyaNova/Controllers/UnitController.cs
+++ b/server/AyaNova/Controllers/UnitController.cs
@@ -10,6 +10,7 @@ using AyaNova.Models;
using AyaNova.Api.ControllerHelpers;
using AyaNova.Biz;
using System.Collections.Generic;
+using System.Text;
namespace AyaNova.Api.Controllers
{
@@ -182,7 +183,7 @@ namespace AyaNova.Api.Controllers
///
/// List of units
[HttpPost("bulk-add-selection-list")]
- public async Task GetPartSerials([FromBody] UnitListByTagParams searchParam)
+ public async Task GetBulkAddList([FromBody] UnitListByTagParams searchParam)
{
if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
@@ -192,34 +193,65 @@ namespace AyaNova.Api.Controllers
if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState));
- if (searchParam.restrictToCustomerId == null || searchParam.restrictToCustomerId == 0)
- {
- //any customer
- //https://www.npgsql.org/efcore/mapping/array.html#operation-translation
- //array1.All(i => array2.Contains(i))
+ List ret = new List();
- // var right = contextMock.Where(x => (new List { "harry potter", "the lord of the rings" }).Any(y => x.Title.ToLower().Contains(y.ToLower()))).ToList();
+ //build query
+ //select id,serial,customerid from aunit where aunit.tags @> array['red','blue'::varchar(255)] AND customerid=19
+ /*
+ select aunit.id,aunit.serial, acustomer.name from aunit
+ left join acustomer on aunit.customerid=acustomer.id
+ where aunit.tags @> array['red','blue'::varchar(255)] AND customerid=19
+ */
+ StringBuilder sbQuery = new StringBuilder();
+ sbQuery.Append("select aunit.id,aunit.serial, acustomer.name from aunit left join acustomer on aunit.customerid=acustomer.id where aunit.tags ");
+ StringBuilder sb = new StringBuilder();
+ sb.Append("@> array[");
+ foreach (string s in searchParam.tags)
+ sb.Append($"'{s}',");
+ sbQuery.Append(sb.ToString().TrimEnd(','));
+ sbQuery.Append("::varchar(255)]");
- var ret = await ct.Unit.AsNoTracking().Where(z => searchParam.tags.All(y => (z.Tags.Contains(y)))).Select(z => new { z.Id, z.Serial }).ToListAsync();
- return Ok(ApiOkResponse.Response(ret));
- }
- else
+ if (searchParam.restrictToCustomerId != null && searchParam.restrictToCustomerId != 0)
+ sbQuery.Append($" and customerid={searchParam.restrictToCustomerId}");
+
+
+
+ // else
+ // {
+ // //include customer
+ // //select id,serial,customerid from aunit where aunit.tags @> array['red','blue'::varchar(255)] AND customerid=19
+ // var unitz = await ct.Unit.AsNoTracking().Where(z => z.Active == true).Where(z => searchParam.tags.All(y => (z.Tags.Contains(y)))).Select(z => new { z.CustomerId, z.Serial }).ToListAsync();
+ // foreach (var u in unitz)
+ // {
+ // var cviz = await ct.Customer.AsNoTracking().Where(z => z.Id == u.CustomerId).Select(z => z.Name).FirstOrDefaultAsync();
+ // ret.Add(new NameIdItem { Name = $"{cviz} - {u.Serial}" });
+
+ // }
+ // return Ok(ApiOkResponse.Response(ret.OrderBy(z => z.Name)));
+ // }
+
+ List slist = new List();
+ using (var cmd = ct.Database.GetDbConnection().CreateCommand())
{
- //include customer
- List retList = new List();
- var unitz = await ct.Unit.AsNoTracking().Where(z => z.Active == true).Where(z => searchParam.tags.All(y => (z.Tags.Contains(y)))).Select(z => new { z.CustomerId, z.Serial }).ToListAsync();
- foreach (var u in unitz)
+ await ct.Database.OpenConnectionAsync();
+ cmd.CommandText = sbQuery.ToString();
+ using (var dr = await cmd.ExecuteReaderAsync())
{
- var cviz = await ct.Customer.AsNoTracking().Where(z => z.Id == u.CustomerId).Select(z => z.Name).FirstOrDefaultAsync();
- retList.Add(new NameIdItem { Name = $"{cviz} - {u.Serial}")
-
+ while (dr.Read())
+ {
+ slist.Add(new InternalUnitListForSorting( dr.GetString(2), dr.GetString(1) , dr.GetInt64(0)));
+ }
}
- return Ok(ApiOkResponse.Response(o));
}
+ var sorted=slist.OrderBy(z=>z.customername).ThenBy(z=>z.serial);
+ret.AddRange(sorted.Select(z=>new NameIdItem{Id=z.unitid, Name=$"{z.serial} - {z.customername}"}).ToList());
+ return Ok(ApiOkResponse.Response(ret.OrderBy(z => z.Name)));
}
public record UnitListByTagParams(List tags, long? restrictToCustomerId);
+ private record InternalUnitListForSorting(string customername, string serial, long unitid);
+ // public record UnitListByTagParams(char[,] tags, long? restrictToCustomerId);
//------------