This commit is contained in:
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@@ -53,7 +53,7 @@
|
|||||||
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
|
||||||
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
|
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
|
||||||
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles",
|
"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_SEEDLEVEL": "small",
|
||||||
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
|
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
|
||||||
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"
|
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using AyaNova.Models;
|
|||||||
using AyaNova.Api.ControllerHelpers;
|
using AyaNova.Api.ControllerHelpers;
|
||||||
using AyaNova.Biz;
|
using AyaNova.Biz;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
namespace AyaNova.Api.Controllers
|
namespace AyaNova.Api.Controllers
|
||||||
{
|
{
|
||||||
@@ -182,7 +183,7 @@ namespace AyaNova.Api.Controllers
|
|||||||
/// <param name="searchParam"></param>
|
/// <param name="searchParam"></param>
|
||||||
/// <returns>List of units</returns>
|
/// <returns>List of units</returns>
|
||||||
[HttpPost("bulk-add-selection-list")]
|
[HttpPost("bulk-add-selection-list")]
|
||||||
public async Task<IActionResult> GetPartSerials([FromBody] UnitListByTagParams searchParam)
|
public async Task<IActionResult> GetBulkAddList([FromBody] UnitListByTagParams searchParam)
|
||||||
{
|
{
|
||||||
if (!serverState.IsOpen)
|
if (!serverState.IsOpen)
|
||||||
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
|
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
|
||||||
@@ -192,34 +193,65 @@ namespace AyaNova.Api.Controllers
|
|||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
return BadRequest(new ApiErrorResponse(ModelState));
|
return BadRequest(new ApiErrorResponse(ModelState));
|
||||||
|
|
||||||
if (searchParam.restrictToCustomerId == null || searchParam.restrictToCustomerId == 0)
|
List<NameIdItem> ret = new List<NameIdItem>();
|
||||||
{
|
|
||||||
//any customer
|
|
||||||
//https://www.npgsql.org/efcore/mapping/array.html#operation-translation
|
|
||||||
//array1.All(i => array2.Contains(i))
|
|
||||||
|
|
||||||
// var right = contextMock.Where(x => (new List<string> { "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();
|
if (searchParam.restrictToCustomerId != null && searchParam.restrictToCustomerId != 0)
|
||||||
return Ok(ApiOkResponse.Response(ret));
|
sbQuery.Append($" and customerid={searchParam.restrictToCustomerId}");
|
||||||
}
|
|
||||||
else
|
|
||||||
|
|
||||||
|
// 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<InternalUnitListForSorting> slist = new List<InternalUnitListForSorting>();
|
||||||
|
using (var cmd = ct.Database.GetDbConnection().CreateCommand())
|
||||||
{
|
{
|
||||||
//include customer
|
await ct.Database.OpenConnectionAsync();
|
||||||
List<NameIdItem> retList = new List<NameIdItem>();
|
cmd.CommandText = sbQuery.ToString();
|
||||||
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();
|
using (var dr = await cmd.ExecuteReaderAsync())
|
||||||
foreach (var u in unitz)
|
|
||||||
{
|
{
|
||||||
var cviz = await ct.Customer.AsNoTracking().Where(z => z.Id == u.CustomerId).Select(z => z.Name).FirstOrDefaultAsync();
|
while (dr.Read())
|
||||||
retList.Add(new NameIdItem { Name = $"{cviz} - {u.Serial}")
|
{
|
||||||
|
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<string> tags, long? restrictToCustomerId);
|
public record UnitListByTagParams(List<string> tags, long? restrictToCustomerId);
|
||||||
|
private record InternalUnitListForSorting(string customername, string serial, long unitid);
|
||||||
|
// public record UnitListByTagParams(char[,] tags, long? restrictToCustomerId);
|
||||||
//------------
|
//------------
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user