This commit is contained in:
2021-10-18 17:41:05 +00:00
parent 0534e83926
commit 3232605268

View File

@@ -10,100 +10,20 @@
## TODO TO BETA
seed huge data at devops:
2021-10-15 16:59:19.1307|INFO|AyaNova.Api.Controllers.AuthController|User "AyaNova SuperUser" logged in from "::ffff:172.18.0.1" ok
2021-10-15 17:01:18.6454|INFO|Seeder|Seeding data, level Huge, time zone offset -7
2021-10-15 17:01:18.6505|INFO|Seeder|Erasing Database "AyaNova"
2021-10-15 17:01:19.4972|INFO|Seeder|Database erase completed
2021-10-15 17:01:24.0784|INFO|Seeder|Seeding HUGE sample data....
2021-10-15 19:03:53.8347|INFO|AyaNova.Api.Controllers.AuthController|User "AyaNova SuperUser" logged in from "::ffff:172.18.0.1" ok
2021-10-15 23:27:30.9550|INFO|AyaNova.Api.Controllers.AuthController|User "AyaNova SuperUser" logged in from "::ffff:172.18.0.1" ok
2021-10-16 00:43:50.0429|INFO|AyaNova.Api.Controllers.AuthController|User "AyaNova SuperUser" logged in from "::ffff:172.18.0.1" ok
2021-10-16 04:32:03.0088|WARN|Microsoft.AspNetCore.Server.Kestrel|As of "10/16/2021 04:31:58 +00:00", the heartbeat has been running for "00:00:04.0389139" which is longer than "00:00:01". This could be caused by thread pool starvation.
2021-10-16 08:19:49.1998|INFO|Seeder|HUGE level sample data seeded in 15 hours, 18 minutes and 25 seconds
2021-10-16 08:19:49.2382|INFO|Seeder|Seeding completed successfully
2021-10-16 08:19:49.2387|INFO|Seeder|Seeder: setting server state back to Open
2021-10-16 13:20:49.9804|INFO|AyaNova.Api.Controllers.AuthController|User "AyaNova SuperUser" logged in from "::ffff:172.18.0.1" ok
todo: auth when server locked, who can login when?
Super user can *always* login??
TODO: SEEDER
- generate LESS PM's, a finite amount, otherwise there are so many the server is constantly generating after seeding
- bugbug, can't login as superuser when activeuser count is exceeded
also, seeder allowed exceeding active user count
up the trial user count
allow login of superuser only when active count exceeded as the error message suggests should work
figure out a way to group by tags and also filter to only include tags that contain a string of text
i.e. either run a report that groups by each tag found in *every* record
or, optionally, include a parameter which is a string of text to look for in the tag array and only include in a group if it's got that text somewhere in the tag
async function ayPrepareData(ayData) {
//Group by all tags no filter
ayData.ayReportData = ayGroupByTag(ayData.ayReportData);
//Group by filtered tags that contain 'zone'
//ayData.ayReportData = ayGroupByTag(ayData.ayReportData, 'zone');
return ayData;
}
function ayGroupByTag(reportDataArray, tagContains) {
//array to hold grouped data
const ret = [];
const containsQuery = tagContains != null && tagContains != '';
//iterate through the raw reprot data
for (let i = 0; i < reportDataArray.length; i++) {
//get a reference to each object to save typing
let o = reportDataArray[i];
//don't bother with any that don't have tags at all
if (o.Tags && o.Tags.length) {
//loop through all tags for this record
o.Tags.forEach(t => {//t=each tag
//if not a contains query just process it, if it is a contains query then only process if tag contains tagContains
if (!containsQuery || t.includes(tagContains)) {
let groupObject = ret.find(z => z.group == t);
if (groupObject != undefined) {
//there is already a matching group in the return array so just push this raw report data record into it
groupObject.items.push(o);
//update the count for this group's items
groupObject.count++;
} else {
//No group yet, so start a new one in the ret array and push this raw report data record
ret.push({ group: t, items: [o], count: 1 });
}
}
})
}
}
//Sort based on the group name in a locale aware manner
ret.sort(function (a, b) {
return a.group.localeCompare(b.group);
});
return ret;
}
todo: tax code too large a value just server error, no message
numeric field overflow
sb either handle larger values or screen them and truncate or just return validation error
what is a sane maximum value??
Update front / back / dotnet 6 is out
https://dotnet.microsoft.com/download/dotnet/6.0
https://docs.microsoft.com/en-us/dotnet/core/compatibility/6.0
https://docs.microsoft.com/en-us/aspnet/core/migration/50-to-60?view=aspnetcore-5.0&tabs=visual-studio-code
https://gist.github.com/davidfowl/0e0372c3c1d895c3ce195ba983b1e03d
QRCoder may have issues but maybe I don't use those exact methods requiring it on linux (system.drawing.common)
https://github.com/codebude/QRCoder/issues/315
TODO: Need to test on our linux server again with v6
todo: inventory migration will it be out of balance due to open work orders? I.E. at the end v7 tries to fixup inventory to balance, however the open wo should have consumed
those quantities so that's not right. perhaps during inventory synch it needs to iterate all open wo where parts are not used in service in v7 and deduct those from the inventory total before the fixup?
Or maybe that's another step done with the v8 data by examining *it's* open wo and handling that way??
Maybe it exports only closed wo in one stage, then syncs inventory, then exports open wo?
what if people never closed their wo or used in service??
//performance
@@ -133,11 +53,11 @@ todo: firefox schedule fix:
TODO: 2021-10-15 15:03:10.9008|ERROR|AyaNova.Biz.TranslationBiz|********* GetSubsetAsync problem: Duplicate keys: UnitModelName
todo: bugbug, can't login as superuser when activeuser count is exceeded
also, seeder allowed exceeding active user count
up the trial user count
allow login of superuser only when active count exceeded as the error message suggests should work
TRACK:
Customer work order form / view / open???
Customer CSR form has a bunch of todo in the template, WTF?
Dashboard / widgets
@@ -199,6 +119,93 @@ Coded by importance
## MIGRATION ITEMS
███ ███ ██ ██████ ██████ █████ ████████ ███████
████ ████ ██ ██ ██ ██ ██ ██ ██ ██
██ ████ ██ ██ ██ ███ ██████ ███████ ██ █████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ██ ██████ ██ ██ ██ ██ ██ ███████
todo: inventory migration will it be out of balance due to open work orders? I.E. at the end v7 tries to fixup inventory to balance, however the open wo should have consumed
those quantities so that's not right. perhaps during inventory synch it needs to iterate all open wo where parts are not used in service in v7 and deduct those from the inventory total before the fixup?
Or maybe that's another step done with the v8 data by examining *it's* open wo and handling that way??
Maybe it exports only closed wo in one stage, then syncs inventory, then exports open wo?
what if people never closed their wo or used in service??
## REPORTING ITEMS
██████ ███████ ██████ ██████ ██████ ████████ ██ ███ ██ ██████
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██
██████ █████ ██████ ██ ██ ██████ ██ ██ ██ ██ ██ ██ ███
██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██
██ ██ ███████ ██ ██████ ██ ██ ██ ██ ██ ████ ██████
figure out a way to group by tags and also filter to only include tags that contain a string of text
i.e. either run a report that groups by each tag found in *every* record
or, optionally, include a parameter which is a string of text to look for in the tag array and only include in a group if it's got that text somewhere in the tag
async function ayPrepareData(ayData) {
//Group by all tags no filter
ayData.ayReportData = ayGroupByTag(ayData.ayReportData);
//Group by filtered tags that contain 'zone'
//ayData.ayReportData = ayGroupByTag(ayData.ayReportData, 'zone');
return ayData;
}
function ayGroupByTag(reportDataArray, tagContains) {
//array to hold grouped data
const ret = [];
const containsQuery = tagContains != null && tagContains != '';
//iterate through the raw reprot data
for (let i = 0; i < reportDataArray.length; i++) {
//get a reference to each object to save typing
let o = reportDataArray[i];
//don't bother with any that don't have tags at all
if (o.Tags && o.Tags.length) {
//loop through all tags for this record
o.Tags.forEach(t => {//t=each tag
//if not a contains query just process it, if it is a contains query then only process if tag contains tagContains
if (!containsQuery || t.includes(tagContains)) {
let groupObject = ret.find(z => z.group == t);
if (groupObject != undefined) {
//there is already a matching group in the return array so just push this raw report data record into it
groupObject.items.push(o);
//update the count for this group's items
groupObject.count++;
} else {
//No group yet, so start a new one in the ret array and push this raw report data record
ret.push({ group: t, items: [o], count: 1 });
}
}
})
}
}
//Sort based on the group name in a locale aware manner
ret.sort(function (a, b) {
return a.group.localeCompare(b.group);
});
return ret;
}
## CLIENT MISC ITEMS
@@ -380,6 +387,7 @@ todo: 3 Schedule form reporting?
todo: 1 Test with expired key, can superuser login and no one else?? **CRITICAL**
todo:1.5 Joyce case 3931 test restore of 4alarm data