From 323260526884cdb52910fe208b1b4c7e90f46d5b Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 18 Oct 2021 17:41:05 +0000 Subject: [PATCH] --- ayanova/devdocs/todo.txt | 194 ++++++++++++++++++++------------------- 1 file changed, 101 insertions(+), 93 deletions(-) diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index ab755b34..703d8a61 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -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