Files
raven-client/ayanova/devdocs/todo.txt
2021-08-27 19:16:12 +00:00

851 lines
52 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 6 - "REALITY" All in on porting over all the real objects from v7
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
“Accept the things to which fate binds you, and love the people with whom fate brings you together,but do so with all your heart.”
― Marcus Aurelius, Meditations
"Make it happen"
- Jim July 28th 2021
## ROUGH SCHEDULE
Aug
Update all dependencies here
.....................................
go .net 6.0? Timeline??
Misc "blizzard"
Customer UI
CSR techs ui accept to wo etc
Schedule form
Installer
....
Review all v8 cases top to bottom and triage / implement
V8Migrate completion
All stock reports (and schedule ones)
Seeder / evaluation system worked out fully and implemented
Manual pages docs
Fill out everything as quickly as possible, take text from v7 docs where necessary to speed up process
Better to get a v1 manual out and fix it up later than to leave big empty sections even during beta testing
Extensions to replace current add-on's
QBOI
QBI
(if pt, well after release if ever)
Load testing
Beta testing
Rockfish / Back end infrastructure (round robin license fetching / mirror license domains / machines)
Biz decisions about pricing, licensing, hosting etc
Sept 1st
Release!
## MISC ITEMS THAT CAME UP
Coded by importance
1 means definitely right away
2 means definitely later after 1'sales
3 means nice to have but not sure or not urgent may even remove
## E2E TESTING
todo:2 cypress testing for load testing etc
has to be done manually, there is a good idea in the comment here:
https://stackoverflow.com/a/51197403/8939
basically, init a new vue ui project, commit it, then add e2e plugin then recommit to see what all changed so can then manually remove that from main project
Look at moving to a standalone Cypress setup, why bother with the one built into vue ui, it doesn't seem to offer any benefits to doing it alone
this way can be fully up to date etc
https://www.cypress.io/
Remove from vue ui project but make copy of tests first
then make new project folder for this and put the tests there
install standalone cypress and go it without vue stuff
TODO: Need stress test for client that can generate workorders in parallel for load testing
## V8MIGRATE
migrate woitem loan not tagging loan units??
migrate users not tagged with vendorid if subcontractor or ho/custid if customer type user?
migrate region and global wiki specifically:
### Global Wiki
v8 does not have a Global Wiki page (the Wiki page formerly accessible from the opening screen in AyaNova 7), the export will move the Wiki and any embedded files to a User account created just to contain it's Wiki and attached files named "V7_EXPORT_GLOBAL_REPOSITORY".
### Region Wiki
v8 does not have Regions, all functionality previously in Regions will be split out into several new and changed objects.
The Region Wiki if found will be exported to a User account created just to hold the Wiki and files named ""V7_REGION_WIKI_REPOSITORY_region name"
Global object fully
logos, signature text etc
## CLIENT MISC ITEMS
- 0 ** BIG ISSUE ** Form menu (i.e. workorder form) doesn't allow scroll down so if the screen is small and the items are off page on a laptop (v7 dev) you can't get to the bottom items at all without changing
the zoom on the browser to zoom down.
Maybe needs an overflow scroll thing set or something
- 1 Help docs workorder help page shows issue on v7 laptop with some blocks showing with horizontal scroll bars on them (bulleted lists for some reason)
this sucks, need to avoid that
-1 1. Open a client. Click on ... and select Quotes. Instead of opening the Quotes datalist filtered to show all quotes for this client, shows orange message briefly customer edit context click [Quotelist]
2. Open a client. Click on ... and select Preventive Maintainence. Instead of opening the PM datalist filtered to show all pms for this client, shows orange message briefly customer edit context click [PMlist]
3. Works correctly to bring up workorders for this client
xo
- 1 extensions dialog is dismissed if click outside even when it's not completed the job
make it undismissable by clicking outside, cancel button sb only way to stop it
- 1 Distance field missing from workorder travel section, is defined at server, just not put on to forms
- 1 workorderitemexpense list has column named "summary" twice but one is notes column, something fishy there
- 2 tag cloud?? wasn't this suppo;sed to be exposed as a feature??
-3 case 3864 Joyce misc item - Layout improvement:
Summary (workorder overall) - looks like now can enter unlimited amount of text..... BUT if only using for four or five words, its still showing ALL this blank space across the entire screen
Tags - takes up entire row even though none or only one tag.
**Would like to discuss/recommend a way to have Summary field and Tags field reduced in size perhaps depending on amount of data
I.e. adjust size depending on what has been entered as in:
Tags - would rather see selection box width of single column (i.e. set it to show same as would show on a phone which is one column wide) without the screenwide lines and extra height showing now.
Summary - would rather show width of single column, only if multiple lines and/or # of characters exceeds xx then show extra height and width.
Custom fields - when set to Text takes up extra height. I understand that this is because of the "potential" text, i.e. that could have multiple rows etc. Is there ANY way to minimize these so only shows additional space IF actually used?
[#will look into it, not sure what can be done, the layout is pretty rigidly fixed within the UI framework to be able to work properly without conflict with the layout, but maybe there's something#]
- Default global setting tax codes, default minutes etc?
doesn't seem to be implimented, maybe it shoudl not be there??
-2 hyperlinks in memos sb clickable to open in new tab or window or whatever
this supports help links in migrate and also user links like "take a look at workorder 55" with a link to it in the UI
recognize urls and make them actionable somehow
-2 case 3864 Joyce misc item - part unit of measure auto suggest
You changed this which is great! -> Unit Charge (for labor and travel Rates) - now offers auto-suggest from prior entries to save typing.
************************************************************* OUTSTANDING ISSUE ****************************************************************
COULD YOU ALSO do similar for a Part's Unit of Measure field? in addition to saves typing PLUS allows user to select existing unit of measure so don'thave 10 different ways entered of "each", "ea", EAC", "per" etc
******************************************************************************************************************
-2 case 3864 Joyce misc item
TO BE ABLE TO PROVIDE TECHNICIAL SUPPORT: please document the following so when providing support AND for those that do review docs:
When NEW+ Po Item, when select a Part, the PO Cost and Vendor Number is NOT filled in UNTIL select Save for that PO Item.
WITH NOTE: Vendor Number can ONLY fill in automatically IF selected vendor for the PO is either the part's selected Wholesaler OR Alternative Wholesaler.
POTENTIAL ISSUES?: On "first" save, Vendor Number overwrites ANYTHING manually entered into the PO Cost field AND that has been manually entered into the Vendor Number field, overwriting with the actual part cost existing, and with the actual vendor number that is existing for the selected part. Once have saved at least once, THEN can edit.
-2 case 3864 Joyce misc item - help docs for report designer missing some info:
Help docs does not have anything about the "PDF Options" section of a report template. Info to include:
- Header template / Footer template:
-- leaving this link in here
https://pptr.dev/#?product=Puppeteer&version=v5.3.0&show=api-pagepdfoptions to refer to
-- Be aware what is in CSS section of report template is NOT capable of being applied here. Technical term is "CSS must be inlined" - i.e. specify font attributes as per example below.
-- Example of showing todays date in the header, and Page x of XX - note also total pages refers to TOTAL pages, NOT pages per object (i.e. if printing from a list of workorders, the total pages will be ALL workorders pages, not pages per workorder.
<span style="font-size:6pt;width: 94%; text-align:left; ">&nbsp;&nbsp;&nbsp;&nbsp;Todays date:&nbsp;<span class="date"></span></span>
<span style="font-size:6pt;width: 94%; text-align: right; ">Page&nbsp;<span class="pageNumber"></span>&nbsp;of&nbsp;<span class="totalPages"></span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
-- identify all class=xx that CAN be used here in PDF Options: are there ANY other's other than class="date" to display todays' date, class="pageNumber" for page number, class="totalPages" for total pages of entire report (note that class="totalPages" identifies ALL pages of the report, NOT just per object)
- Paper Format: north american standard is Letter and Legal, select other sizes (i.e. A1) based on the paper you actually use - i.e. your country.
- Print Background MUST be checkmarked for CSS attributes such as alternating table rows to work
Help Docs about the Prepare section of the report template:
Make sure that information listed here about the minimum IS what is referred to elsewhere AS WELL as IS the actual minimum entered in ANY sample report templates included when a database is generated.
i.e. presently states:
async function ayPrepareData(ayAllData) {
return ayAllData;
}
I bring this up, because in sample report templates instead of ayAllData, reportData is used. IF doesn't EVERY make a difference what is called, please say so. If DOES make a difference if uses the name ayReportData or any other existing object, please say so.
todo:2 notifications screen add delete all menu item that will just remove all the notifications present
Maybe a checkbox and delete selected and select all?? That way can also be a dual useful feature
also should delete *from* the client so that it deletes only what it has in view so user doesn't accidentally delete unseen yet to be delivered ones?
todo:3 notification new bell alert count add to title so shows in task bar when not in view?
like messenger "(1)" "(23)" etc
todo:2 browser back to new record page
when make new record then go back goes to new record again, should it go to record before *new* record page instead??
todo:3 link back to list from single edit form
it would be very handy to have a simple link back to the list or back a level
on each edit form. If new record then it skips that and goes to list
so maybe a specific link to list, not just a back link
ideally accessible from the form, not two click by having to open menu, but
not sure about that, maybe in wide mode it could surface that from menu but in
narrow mode no shortcut because they could use the nav menu anyway and because fuck em, that's why :)
todo:3 Seeding UI keep track of timing and later down the road when firmed up, provide estimate (average server will take):
2021-05-31 10:26:45.4801|INFO|Seeder|Small level sample data seeded in 27 seconds
2021-05-31 10:47:07.3417|INFO|Seeder|MEDIUM level sample data seeded in 2 minutes and 13 seconds
2021-05-31 10:56:04.9450|INFO|Seeder|LARGE level sample data seeded in 4 minutes and 17 seconds
2021-05-31 12:06:34.2680|INFO|Seeder|HUGE level sample data seeded in 24 minutes and 54 seconds
todo:2 need to track fetched keys vs used keys so can tell if fetched a key that I don't need or stopped using due to code change
todo:2 need to track fetched keys that don't exists, should bomb immediately so I can remove them, they will eat up traffic for no useful purpose!!
todo:2 PO (workorder already done) strip all *viz fields from object before sending over the wire from client to server
Setting their value to undefined stops them being sent so do that, but remember they then need to be updated on the return record
PO I'm thinking is the main one??
todo:2 grid position not preserved when open a record then track back
i.e. go to last record in a multipage list, open something, go back and will see it's back to the start of the list losing the user's scroll position
this is very important that it work correctly
todo:1 custom required rules only apply to new records!!
todo:2 inventory and other lists shows LT: because namefetcher postgres function returns it when it's not a named item
expects UI to translate it but UI doesn't so need a way to deal with that
to see what calls it just search for "AYGETNAME" in server project, also anything that calls bizobject name fetcher direct
it would be a better procedure if it was passed in a translation ID and would automatically get the key at db level of course
todo:2 notification subscription tags UI
Must make it clear that *ALL* tags in the subscription must exist in the object to match
if not documented also document this
todo:2 Contract override by TAGS
Translation / docs Must make it clear that *ALL* tags in that particular contract price override must exist in the object to match
User is expected to make multiple records if they want multiple different matching tags
reason for this is that they can do a more fine grained selection of multiple tags like "onsite" + "merville"
whereas if it was an any match then there would be no finer level of control, only one term to choose for each.
todo:3 form field customization add a "reset" feature to reset to default for when people fuck it up
basically just show all fields and remove the required from fields
todo:2 Not in love with the "Error api2200" as the only error text in the box
sometimes it has things you can't see in the form
ideally I'd like to see it have a string of text as a duplicate showing the errors translated in a list
in addition to each form field being set. This would cover our ass in case we missed a "general" or renamed a field or a wierd error
that we didn't anticipate, also more useful for the user to see at a glance what's what
If do this maybe consider adding a fixed height and scroll bar setting to the error box as it could get long but don't want it to fill up the screen
(maybe a "MORE INFO" button instead that warps the display in errorbox to the long form??)
At the very least make sure every raw error returned goes into the client log so can help with tech support when people need it without resorting to
making them open developer console to see the actual raw error. (if do this maybe extend the length of the error log as it's possibly too short to capture enough stuff this way??)
todo:2 Translation: "Physical" address seems wierd, rename to Street address or Delivery address or Service Address or whatever
todo:3 broken rules can't save should color save button red in addition to disabled some forms can't see what's what
todo:3 Any "Priority" type value in UI that has colors should use ayaFireAlt icon instead of round circle which is for minor status only
Flag is for major status like all of workorder
todo:3 double check main page boilerplate stuff is up to date 2021
https://www.matuzo.at/blog/html-boilerplate/
todo:2 when there is an errorbox error it's possible to miss it as it's at the top scrolled off screen and you can save as the appbar doesn't scroll
need more feedback, perhaps appbar turns red, or save button turns red or whole page has a color to it..??
Or maybe just as simple as an toast alert popup whatever it's called that temporarily shows the same error as is in the box at top
todo:2 reporting custom fields
Joyce ran into an issue with a custom field defined as currency adn wanted to use it in a calculation on a report but it presents as a string
Look into either a helper to ease that or more ideally it presents as the type that it's supposed to be pre-modified? (not sure of the implications)
Do I have a custom fields helper already? What does it do?
Maybe translated custom fields alongside the string version??
Users see it as currency would be just as confused as Joyce was expecting it to be a number
todo:3 cleanup unnecessary use of a ayatype access inside the Methods of objects as it's now available in vue via main object,
e.g. where you see this: ayaTypes().XXXX you can replace it directly with this: $ay.ayt().XXXX and then REMOVE completely the ayaTypes() method in the vm of that object
todo:2 use const, not let unless need to reassign the variable
Going to need a case by case through all uses but it's a very important precaution so code it that way now for all new code
todo:3 make sure other datatable besides wo use form() rowError classes for consistency rather than self set in forms
see woitem / schedusers etc for example
todo:3 why the need for setErrorBoxErrors when setting the formstate errors already allows all the fields to pickup the errors for them
shouldn't the errorbox itself pickup it's own errors and elminate the need for this??
currently is: <gz-error :error-box-message="formState.errorBoxMessage"></gz-error>
maybe could be this?: <gz-error :error-box-message="form().serverErrors(this, 'generalerror')"></gz-error>
might even be a drop in replacement, should test, would reduce fuckery
todo:3 gzdecimal triggering dirty just by clicking into and out of a field witha value in it.
also, it sometimes shows without the decimal then with the decimal for editing then without, it's crazy
the decimal thing is probbly what's triggering the dirty change.
saw this when developing the wo form and testing scheduled users estimated qty field
todo:3 apierror showing in errorbox on validation error
this is too technical looking, needs to be cleaner for end users
maybe even a summary of errors for big forms showing property names and errors?
or at least say something like fields have errors or somesuch to guide them down into the form
small forms it's obvious but wo it's a bit ...actually still obvious, maybe just a cleaner line of text without the code looking stuff like "apiError" or whatever it shows
todo:3 generateMenu called on forms redundantly?
called for getdata, but also called in created in wrong place i.e. always rather than just when it's not a getdata situation due to already existing
todo:2 ability to turn off attachments for every form it's on via customize ui
def can see admin wanting areas off limits for attachments and it would clean up the UI if not used
todo:2 ability to turn off the wiki for every form via customize ui
TODO:3 if keep seeing slowdown typing in large text fields maybe check if it's running rules endlessly and slowing things down that way
profile?
a timer that delays processing until typing stops??
...................................................................................................................................................................
todo:3 reportClientMetaData in gzapi has DefaultLocale property in it which is just part of the language, can it be removed?
it might be buggy if there is no dash in the language? Is that a thing?
check at server how it's used
todo:2 confirm erase database should reset all id values if they aren't reset already so that future data doesn't result in a new PO starting at 29000 due to huge db trial seed prior
todo:2 use trans key "AlertNotes" in place of any popup notes variation
todo:2 poitem edit form currency fields when updated by server on save lose currency format and show as raw decimal number
maybe currency control does not respond to underlying data changes it didn't initiate?
seems maybe it's ok in main form but that's maybe just because it doesn't change values automatically
todo:3 datatable single select mode, is this even a thing?
if not then I should remove that code, it's just taking up space and complicating shit for no reason
todo:3 Whats new in this release popup or link tied into the update process of the client??
how about a link in the About page to the change long on our web server instead?
todo:2 it's a bit hard to click on a single digit or character link in a data table
e.g. serial number 1 of a po
can the region be expanded with invisible text or something?
todo:2 remove widget now? Back and front (comment out obvs not remove entirely)
## SERVER MISC ITEMS
todo: calculations at server are off from v7 to v8
for example sample data workorder 40 has labor totalling 145.36 for herb arlens in v7 and 145.35 in v8 for same line due to 3 digits used in calculation causing a round down
(the tax internal value is 8.925 in v8 and 8.93 in v7 due to bankers rounding)
so the likely solution is to apply bankers rounding to the calcs, however there maybe implications when it comes to things like crypto values etc
so need to determine carefully
todo: clean up / simplify bizroles.cs at server for large objects like work order with same for all children (see quote for how it's done)
todo: add translation column as an option to user data table(s)
So manager can see at a glance who has what translation
todo: this: 2021-07-23 07:04:06.0270|INFO|CoreJobLicense|TEMP TEST LOG: CoreJobLicense - result is: notfound
even with properly generated license?
need to look at rockfish for this one
todo: add BaseLanguage field to translations so that when people make a copy we know which it came from so in future updates will know which language to insert keys for that translation
so the BaseLanguage must be the "EN" or "DE" etc, not the actual source translation id because it could be a copy of a copy of a copy which would render it useless
stock ones will be their own base language so german will be "DE" etc
todo:1 start testing with real licensing scheme ("notfound")
make sure automatic license updates work properly
todo:1 seeder customer and head office accounts now login show "No features have been enabled for your account"
todo:1 notify on server boot?? (general notify to admin user or whatever?)
or on shutdown?
todo:3 notify on user login?
todo:1 report template NAME uniqueness validation rule: can this be unique by ayatype only?
seems weird that no two reports of any kind can have same name
also the default comes up as "report" sb blank with pre-broken rule saying name is required or at least uniquify it with a timestamp or something
todo:1 tag based notifications need to be rechecked if tags change, not just the field(s) in question for that notification
for example, user makes a workorder with closeby date and tags but tags don't match when saves
user realizes missed a critical tag, adds it and saves; notification should then check again if can apply whatever it was
Use SameTags = NotifyEventHelper.TwoObjectsHaveSameTags(proposedObj.Tags, currentObj.Tags); to make it easy (workorder complete by)
todo:1 //TODO: Iterate all notification tagged items, use the one with the MOST matching tags
see how contract labor done in workorder, idea is it iterate from the subscription with the most numerous amount of tags to least in order to ensure that the most specfic tag set is matched first
todo:1 Reports need to generate under a file name that is informative (this applies to every object)
This is because it will be a common case to need to email them to customers or other users or whatever and it is very helpful to know what it is by name alone.
i.e. a workorder should generate a report that can be saved as "Workorder_1" or whatever,
perhaps uses localized name of object but then processed to strip out spaces and case etc (file-name-ify it)
Also it will separately need a random part at the end to ensure it's not a dupe of an existing report also generated at the same time
Although, if you think of it, doing the same workorder again *should* just overwrite the existing one as it will be identical or at least more up to date so
perhaps no need for a nonce
todo:1 server log needs to indicate time zone it's logging in at boot so can understand the log entry times vs real world times
todo:1 update to latest postgres portable and document how to do it as well or a link to how to do it
todo:2 errors are inconsistent some use "error" some use "code" to mean the same thing
this is likely becuase "code" is used in the outer wrapper and "error" is used in the individual "details" validation errors
however it would be much cleaner if it was the same thing at all levels
Settle on "Code" only, change "error" to "code"
some things are producing {message:"blah",target:"blah",error:"blah"}
controller apierror
and validation errors are : {message:"blah", target:"blah", code:"blah"}
todo:1 server boot log should show exact .net framework version in use, currently shows nothing so if there is a bug fix release or something we'd not know for support
NOW
....
What up with this and can it be blocked from logging / something simpler logged instead?
Try to determine if it's time related, maybe during backup??
find a pattern
try logging success always to see how rare it is
I don't think it's happening at the linux server, it seems to be a comm issue from my ws??
no, it actually is.
bittorrent interferes with it like it does with my browsing, maybe not the cause though, just a data point
2021-03-17 05:19:27.0750|ERROR|JobsBiz|Server::ProcessJobsAsync unexpected error during processing=>System.Threading.Tasks.TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing.
---> System.TimeoutException: The operation was canceled.
---> System.OperationCanceledException: The operation was canceled.
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, CancellationToken cancellationToken)
at System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 token)
at System.Net.Security.SslStream.<FillHandshakeBufferAsync>g__InternalFillHandshakeBufferAsync|182_0[TIOAdapter](TIOAdapter adap, ValueTask`1 task, Int32 minSize)
at System.Net.Security.SslStream.ReceiveBlobAsync[TIOAdapter](TIOAdapter adapter)
at System.Net.Security.SslStream.ForceAuthenticationAsync[TIOAdapter](TIOAdapter adapter, Boolean receiveFirst, Byte[] reAuthenticationData, Boolean isApm)
at System.Net.Http.ConnectHelper.EstablishSslConnectionAsyncCore(Boolean async, Stream stream, SslClientAuthenticationOptions sslOptions, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.ConnectAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.CreateHttp11ConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.GetHttpConnectionAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean async, Boolean doRequestAuth, CancellationToken cancellationToken)
at System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage request, Boolean async, CancellationToken cancellationToken)
at Microsoft.Extensions.Http.Logging.LoggingHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage request, HttpCompletionOption completionOption, Boolean async, Boolean emitTelemetryStartStop, CancellationToken cancellationToken)
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
at System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage request, HttpCompletionOption completionOption, Boolean async, Boolean emitTelemetryStartStop, CancellationToken cancellationToken)
at AyaNova.Core.License.FetchKeyAsync(ApiServerState apiServerState, AyContext ct, ILogger log, Boolean calledFromInternalJob, Boolean devTestTrial) in C:\data\code\raven\server\AyaNova\util\License.cs:line 522
at AyaNova.Biz.CoreJobLicense.DoWorkAsync() in C:\data\code\raven\server\AyaNova\generator\CoreJobLicense.cs:line 72
at AyaNova.Biz.JobsBiz.ProcessJobsAsync() in C:\data\code\raven\server\AyaNova\biz\JobsBiz.cs:line 178
todo:3 is there a way to tell if other connections are being used to AyaNova db
like a utility or they are fucking around and it's affecting performance etc
Yes: The following query returns the active connections:https://www.postgresqltutorial.com/postgresql-copy-database/
SELECT pid, usename, client_addr
FROM pg_stat_activity
WHERE datname ='dvdrental';
Maybe this is a periodic housekeeping job??
LATER
......
todo:1 Changes to allow in place updates of server without erasing data:
(Note: this is a 1 due to probbaly needing some stuff in place (source language) *before* release or it will become a nightmare after release)
Needs to be supporting this early as possible so that upon release we can easily make changes without breaking existing setups or forcing complex actions
how to add locale keys in future after release without erasing all data?
Ideally I'd like to continue on to just edit the json translation files and the server looks for missing items and adds them automatically
so that it just works without having to erase the db
maybe a version on translations so it knows which one it's dealing with?
But then again, if it just checks them all it can fix anything missing automatically in case of fuckery and not assume they are ok
Stock locales can just be completely replaced at any time, custom ones need a fixup,
Custom locales should include where they came from (which language) so can more easily add new keys
Schema updates in place not require full delete
todo:1 figure out method to determine all translation keys actually used and remove unused ones entirely as they will show in the Translation ui and don't want to confuse people
Note: can do a search in Code editor at client for ay.t( and it will show all the translation keys fetched in code for the most part other than grid columns
can click in results and copy all to text which could then be processed to find all unique values??
Or, just exercise the whole app and all lists and then can pull from the local cache in the browser!!!
todo:3 NOTIFICATION after the fact (PROBABLY JUST DOCUMENT THIS IS HOW IT WORKS)
what happens when a user subscribes to a notification after an object was created
for example if a unit has a contract and they subscribe to contract expiring they won't get notified about units unless they are edited and saved
*after* the user subscribed
What did v7 do?
How to handle this??
Ideally it would work with existing objects and not require them all to be edited or is that an issue, can it be good enough that it works going forward?
Most subscriptions won't matter as they are direct immediate and one off but the timed and aged ones are definitely an issue.
It might have to run through those and subscribe in the user, maybe a static op on a *Biz object that you call and say "subscribe this user to all subs" and it iterates
the biz objects one by one and sets as appropriate??
todo:2 GetWorkorderSerial/name from leaf nodes
traverse up the tree and fetch the serial number
once coded fixup in purchaseorderbiz::getasync MIGRATE_OUTSTANDING bit
todo:1 tag search in picklist, does it support more than one tag? I forget
no, no it doesn't. Hmmm... fuck
maybe they can enter unlimited tags as long as they have a ..before each one?
Users may need to "triangulate" on to an item by multiple tags
todo:2 unit meter reading event?
TODO:2 //MIGRATE_OUTSTANDING comment tag
search for this comment tag as it will contain items that could not be done until other items were migrated first
The tag will contain the description for each
todo:2 many biz objects are not using new PUT methodology
Might be because new methodology assumes complete PUT object as a entire replacement not a partial update
some of these objects (User) do partial updates so....
might be that they don't need it but for consistency should check into it
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
CURRENTLY DOING: up top stuff above
EACH OBJECT DEV CYCLE:
FIRST
Check cases, make sure not changing the object fundamentally, many v7 objects are going to change for cases (particularly inventory related)
BACK
AyaType and associated code
BizRoles
Model and Database Schema and AyContext
DbUtil EraseAllData method
Update function PUBLIC.AYGETNAME in aySchema for new type
Biz object and all supported interfaces (searchable, exportable etc)
Reportable Viz fields if reportable
Biz Object SEARCH Index / getsearchresult code add unique text fields
Business rules port from v7 and new ones
ValidateCanDete MUST check if any foreign key constraints and return proper error rather than bombing on attempted delete
Do check constraint first then biz rule so can test down to db
ALL biz rules where possible must have mirror db constraint to avoid fuckery with direct modified data
Notification code if applicable
Controller routes and associated code
Translation keys
FormFieldReference for object if it posesses an customizable form
DataList if applicable (be minimal with the default fields)
Picklist
Seeder generate samples
If anything needs to be changed down the road then flag it in comment with //MIGRATE_OUTSTANDING
FRONT
AyaType / rights
front route
List form
Edit form (## TEST ALL INPUTS ON EDIT FORM, DON"T ASSSUME THEY WORK)
Add to smoke test !!! VERY IMPORTANT
DOCS (at back but with front links, maybe not fleshed out just placeholder ok for now)
REPORTING
Reportable & VIZ fields
DASHBOARD
Add widget if dashboardable https://docs.google.com/document/d/1cEesyryhM0zYkH0PEswiuOezUTA_Nv5Xn3jfBczdQmk/edit
IMPORT
imports and flows through to new front end viewable and searchable and printable etc
# V7 objects now TAGS, the following objects are imported as tags and suffixed with a period and then short versions of the object type in the tag name
- Region
- UnitModelCategory
- UnitServiceType
- WorkOrderItemType
- ClientGroup
- WorkorderCategory
- PartCategory
- DispatchZone
- ScheduleableUserGroup
- ClientNoteType
- VendorType ## LATE ADDITION
------------------------------------------------------------------------------------------
POST "REALITY" OR IN PARALLEL "REALITY" related items:
todo: CYPRESS TEST DATE / TIME / DATE_TIME controls switched back to vuetify ones
widget entry form test rewrite
https://github.com/cypress-io/cypress/issues/7404
https://github.com/vuetifyjs/vuetify/issues/10988#issuecomment-726089949
todo: Schedule form
- This one is big but requires the data to be there so as soon as implement enough things that are scheduleable then do this
- printing / reporting schedule? Do-able?
- https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/729
todo: can beta test at this point
See below, specific ideas about public beta test (User accounts not seperate installs maybe)
post installer, enlist trial users get feedback, don't get too down when they shit all over it as they will undoubtedly :)
remember, it's for the new customers primarily, new customers = new $$
todo: Document in user manual all form controls with instruction on how to use the various controls etc
- "Anatomy of a AyaNova Form"
todo: Documentation POST "REALITY"
will already have placeholders from above
Need to think this through carefully
Need to get the critical bits in for onboarding and importing so people can get going
Most important stuff is anything non-obvious
Seems pointless to have one doc per form that just says "The name field is the name and must be unique"
maybe have that kind of stuff in the form basics and then have a doc per OBJECT instead with anything unique or interesting about the object
(and each object form has a link to formbasics so can link to the object form from UI and they get both)
Parts of it can be done post-release for sure
todo: ONGOING search for memory leaks
The 7 times system seems to work the best
Excercise item a few times to settle it in memory, take heap snapshot, force gc, take total of 3 heap snapshots forcing gc each times
Excercise item 7 times exactly, take 3 more heap snapshots forcing gc before each one
Compare snapshot 6 to snapshot 3 look for Delta 7 times items to find leak
https://developers.google.com/web/tools/chrome-devtools/memory-problems
https://nolanlawson.com/2020/02/19/fixing-memory-leaks-in-web-applications/
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 7 - EXTENSIONS (was plugins)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Step 1: get the current active license count for all extensions so I know what i'm dealing with here
Step 2: which extensions in which order and some can be left off entirely?
Plan the order of criticality for extensions
ACCOUNTING is obviously the first and foremost one and MUST be there for a lot of people to take up
MUST be done in a way to support other alternative accounting apps that are coming around now like freshbooks or whatever it's called that Joyce is using now
probably going to need a "trick" of some kind to interface with desktop accounting
i.e. a local windows app that uses the api and just copy over the qbi code
or a local server that has it's own web interface
or regular raven UI but the accounting section interfaces with a local server for local desktop qbi stuff and
the raven server interfaces with QBOnline for the QBOI stuff
based on sales, how many subscribed now
which ones are porting and which are not
Implement in order or priority
Fuck peachtree?
probably not, need to check again our install count of extensions
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 8 - ONLINE EVALUATION ABILITY / INSTALLER, LICENSING, ROCKFISH SUPPORT FOR RAVEN
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
todo: setup for automated trial testing ability so can just link users
Maybe, rather than having seperate servers for testing, have it instead generate a User account on the fly for each user who wants to trial
Automatically re-create the data on a cycle of some kind
Needs warning message about being a shared instance of AyaNova so be careful what you type and also you may see things other people typed that I have no control over
todo: WINDOWS INSTALLER
Runner harness wrapper thing?
even if windows only
it could modify config since it's outside the server
check for Postgres server extant and if not automatically start the standalone postgres instance
manage postgres start and stop and configuration changes, sit in tray, run AyaNova server from there?
easy way to select command line params without resorting to editing text files for end user
initially it's an installation option, but then need to edit after the fact
Quick check of installers available still and is it still kosher to keep using INNO setup or is something better, more supported by windows etc?
Wix if want MSI (some say that's desireable)
INNO is still relevant
I don't need hardly any requirements that can't just be copy or unzip deployed so maybe don't even need an installer for now?
(zip distribution is going to be problematic with Windows file protection shit)
https://docs.microsoft.com/en-us/dotnet/core/deploying/
https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
Completely packaged and installable. REady for users to install as a test as I iterate stage 7 below
All the stuff needed for someone to run it as a test without the real objects yet.
Some kind of expiring license so they can't just keep using it as fucked as it may be some might do that
I want short targetted testing only, not someone downloading and trying it out a month later, that's useless for us
This needs to be focused on what I need to get from people about testing
todo: LINUX INSTALLER
Linux users don't mind doing the manual config thing as much, they're used to it and it could just be a shell file anyway
So mainly this would be a documentation steps to install type issue
todo: DOCUMENT DOCKER
Present dockerfile maybe for docker installation with FILES folder pre-ready to build / run
Whatever docker needs
Or maybe private registry with docker images on our servers somewhere
todo: rockfish, can't do purchase for raven or view it I think
Test a whole sales process from eval to purchase and make it work
todo: rockfish, upgrade to latest bootstrap, out of date Currently
todo: rockfish, trial license fetched On date not updating? (not showing in UI)
todo: Joyce rockfish notes:
Licensing:
noticed that the field "Fetched on" is NEVER updated.
is it much to be able to see the TIME as well as the DATE, when "Requested" and when "Processed"?
There are drop down selections NEW, APPROVED, REJECTED for the (already generated) listed keys. But can not actually save to a different Status. What is the purpose of the drop down options if can not select?
todo: Discourse bootstrapping install
look over, get ideas make case steal ideas profit FTW$
https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md
//here is their standalone config yml definition for DOCKER
https://github.com/discourse/discourse_docker/blob/master/samples/standalone.yml
todo: back and forward buttons when running without browser controls in application mode?
- wait and see on this one, as it will be likely outside of any particular form so not something to be baked in early necessarily
todo: GUIDED TOUR
- This is an important feature and at least get a basic one in there for starters and initial release
- This is a replacement for the tutorials and videos in v7 a
- Need to add that auto-pilot thingy that allows for guided tours in HTML apps
- Specifically it should at least have an ONBOARDING walk through of how to move around, enter data, get help etc. Not feature specific but usage specfic.
- Later I'll add feature specfic tutorials like how to make a workorder etc
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 9 - RELEASE
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
todo: ARCHIVE ALL DEPENDENCIES
Get all code for all 3rd party libs used for front and back of AyaNova 8
Need to store that in an archive somewhere just in case
Needs to be done with each release so can go back to that if necessary
Going to be big, maybe archived to all storage drives locally and burned to a dvd?
If check into the repo it will be an issue probably but you never know
TODO: CSP Policy that should be enabled at server?
I had to add per this: https://docs.telerik.com/kendo-ui/troubleshoot/content-security-policy#content-security-policy
to my csp because I kept getting errors in client end debug console mentioning csp issues
this seemed to come after I updated the client build process to do a legacy and modern build but I'm not 100% sure about that
TODO: Docker HUB
if we can put AyaNova on Docker hub then many hosting providers have 1 click methods to instantiate it so that's a viable easy onroad for potential customers
e.g. digital ocean "app platform" https://www.digitalocean.com/products/app-platform/
also here separately https://marketplace.digitalocean.com/
Assuming has passed all testing
Plan pricing and sales strategy
What to do with licenses for v7 people
Another payment processor?
support bitcoin if possible as well
DONATE
Send a tip / buy a coffee link to the graphic designer who made the rabbit logo
https://pixabay.com/vectors/bunny-rabbit-wrench-repairs-154508/
coffee button top right
if I use it in release I should at least send them the small amount they get tipped
Send a tip / donate to the favicon generator guy
https://realfavicongenerator.net/
I broke it at one point by bringing down the site while it was checking ... oops.
Used it several times and should donate
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 10 - ROCKFISH / HOSTING BACKEND SELF SERVER READINESS
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
DO server allocation, rockfish revamp to drive this part (or maybe it's an alternate app)
https://blog.digitalocean.com/its-all-about-the-bandwidth-why-many-network-intensive-services-select-digitalocean-as-their-cloud/?utm_medium=email&utm_source=do_newsletter&utm_campaign=04292020
https://www.youtube.com/watch?v=zZVoo5AbANI
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 11 - RELEASE SELF SERVE / HOSTING
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Fall of 2021 hopefully
links on website for sign up
marketing can begin in earnest
NOTE: HOSTING cases are all moved to priority 2 and most have "HOSTING" in the title tags
todo: Administration - Account
Down the road will need an Account page for seeing their account status in rental SAAS situation
Nothing to do here, it's an obvious one, just delete this later, it's to percolate in brain a bit
maybe under license
PLAIN TEXT EMAILS / ONBOARDING
https://blog.palabra.io/great-onboarding-plain-text
MARKETING
Analytics alternatives to Google:
https://news.ycombinator.com/item?id=24198329
Also very nice screen shot effect:
https://umami.is/
Created by:
dom96 2 hours ago []
Nice! Question for you, how did you make that nice 3D image on the front page with various screenshots overlaid over each other? :)
reply
mcao 2 hours ago []
It's all done in Photoshop. Just take screenshots, then transform, rotate, distort them to look flat. Then add some drop shadows for a 3d look.
reply
MUSIC TO ADD TO COLLECTION
BOC - cities on flame
MID CENTURY MODERN TUNES - https://www.allmusic.com/album/ultra-lounge-vol-14-bossa-novaville-mw0000024024
BUILD 127 CHANGES OF NOTE
- Added more code to avoid conflict during erasedatabase and pm generation job in action
- Server dependencies updated (last .net core 5.x update before jump to .net core 6.x which is close to release)
Export library for exporting to json/csv
Puppeteer for reporting (will be slow on first report load as it will download the latest chromium browser automatically)
MailKit for notification emails
JSON web token for authentication
AspNetCore - web server and services that run all of raven server
EntityFrameWorkCore - All database access from server
NLog - logging for server
NGPSQL - Postgres sql driver for EF Core
Swashbuckle - API docs generator for api explorer
- Client dependencies updated