This commit is contained in:
2021-01-19 21:47:30 +00:00
parent f78ed5e590
commit 8a52b60f2a
7 changed files with 68 additions and 12 deletions

2
.vscode/launch.json vendored
View File

@@ -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": "false", "AYANOVA_SERVER_TEST_MODE": "true",
"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\\"

View File

@@ -190,17 +190,18 @@ namespace AyaNova.Api.Controllers
PartBiz biz = PartBiz.GetBiz(ct, HttpContext); PartBiz biz = PartBiz.GetBiz(ct, HttpContext);
if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType))
return StatusCode(403, new ApiNotAuthorizedResponse()); return StatusCode(403, new ApiNotAuthorizedResponse());
var v = await ct.SaveChangesAsync();
return Accepted();
// var o = await biz.PutAsync(updatedObject);//In future may need to return entire object, for now just concurrency token var o = await biz.PutSerialsAsync(id, serials);
// if (o == null) if (o == null)
// { {
// if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT))
// return StatusCode(409, new ApiErrorResponse(biz.Errors)); return StatusCode(409, new ApiErrorResponse(biz.Errors));
// else else
// return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
// } }
// return Ok(ApiOkResponse.Response(new { Concurrency = o.Concurrency })); ;
return Ok(ApiOkResponse.Response(o));
} }
//------------ //------------

View File

@@ -181,6 +181,57 @@ namespace AyaNova.Biz
} }
////////////////////////////////////////////////////////////////////////////////////////////////
//UPDATESERIALS
//
internal async Task<List<String>> PutSerialsAsync(long id, List<string> serials)
{
//Fixup serials
int nAdded = 0;
int nRemoved = 0;
var ExistingSerials = await ct.PartSerial.Where(z => z.PartId == id).OrderBy(z => z.Serial).ToListAsync();
//Remove any that should not be there anymore
foreach (PartSerial ps in ExistingSerials)
{
if (!serials.Contains(ps.Serial))
{
ct.PartSerial.Remove(ps);
nRemoved++;
}
}
//Add any new ones
foreach (string s in serials)
{
if (!ExistingSerials.Any(z => z.Serial == s))
{
ct.PartSerial.Add(new PartSerial() { Serial = s, PartId = id });
nAdded++;
}
}
try
{
await ct.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!await ExistsAsync(id))
AddError(ApiErrorCode.NOT_FOUND);
else
AddError(ApiErrorCode.CONCURRENCY_CONFLICT);
return null;
}
await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, BizType, AyaEvent.Modified, $"LT:PartSerialNumbersAvailable change (+{nAdded}, -{nRemoved})"), ct);
return await ct.PartSerial.Where(z => z.PartId == id).OrderBy(z => z.Serial).Select(z => z.Serial).ToListAsync();
}
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//SEARCH //SEARCH
// //

View File

@@ -651,6 +651,7 @@
"PartSerialDateReceived": "Empfangen", "PartSerialDateReceived": "Empfangen",
"PartSerialSerialNumberNotUnique": "Für dieses Teil wurde bereits eine Seriennummer eingegeben", "PartSerialSerialNumberNotUnique": "Für dieses Teil wurde bereits eine Seriennummer eingegeben",
"PartSerialWarehouseID": "Teilelager", "PartSerialWarehouseID": "Teilelager",
"PartSerialNumbersAvailable": "Verfügbare Seriennummern",
"PartWarehouseDescription": "Beschreibung", "PartWarehouseDescription": "Beschreibung",
"PartWarehouseList": "Teilelager", "PartWarehouseList": "Teilelager",
"PartWarehouseName": "Teilelager - Name", "PartWarehouseName": "Teilelager - Name",

View File

@@ -651,6 +651,7 @@
"PartSerialDateReceived": "Received", "PartSerialDateReceived": "Received",
"PartSerialSerialNumberNotUnique": "Serial number already entered for this part", "PartSerialSerialNumberNotUnique": "Serial number already entered for this part",
"PartSerialWarehouseID": "Part Warehouse", "PartSerialWarehouseID": "Part Warehouse",
"PartSerialNumbersAvailable": "Available serial numbers",
"PartWarehouseDescription": "Description", "PartWarehouseDescription": "Description",
"PartWarehouseList": "Parts Warehouses", "PartWarehouseList": "Parts Warehouses",
"PartWarehouseName": "Part Warehouse Name", "PartWarehouseName": "Part Warehouse Name",

View File

@@ -650,6 +650,7 @@
"PartSerialDateReceived": "Recibido", "PartSerialDateReceived": "Recibido",
"PartSerialSerialNumberNotUnique": "Número de serie ya introducido para esta pieza", "PartSerialSerialNumberNotUnique": "Número de serie ya introducido para esta pieza",
"PartSerialWarehouseID": "Almacén de la pieza", "PartSerialWarehouseID": "Almacén de la pieza",
"PartSerialNumbersAvailable": "Números de serie disponibles",
"PartWarehouseDescription": "Descripción", "PartWarehouseDescription": "Descripción",
"PartWarehouseList": "Almacenes de piezas", "PartWarehouseList": "Almacenes de piezas",
"PartWarehouseName": "Nombre de almacén de la pieza", "PartWarehouseName": "Nombre de almacén de la pieza",

View File

@@ -651,6 +651,7 @@
"PartSerialDateReceived": "Réceptionné", "PartSerialDateReceived": "Réceptionné",
"PartSerialSerialNumberNotUnique": "Numéro de série déjà saisi pour cette pièce", "PartSerialSerialNumberNotUnique": "Numéro de série déjà saisi pour cette pièce",
"PartSerialWarehouseID": "Magasin de pièces", "PartSerialWarehouseID": "Magasin de pièces",
"PartSerialNumbersAvailable": "Numéros de série disponibles",
"PartWarehouseDescription": "Description", "PartWarehouseDescription": "Description",
"PartWarehouseList": "Magasins de pièces", "PartWarehouseList": "Magasins de pièces",
"PartWarehouseName": "Nom de magasin de pièces", "PartWarehouseName": "Nom de magasin de pièces",