@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ 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 ## BIG PICTURE TO RELEASE June Workorder*, quote*, pm* implementations July Schedule form Review all v8 cases top to bottom and triage / implement V8Migrate completion All stock reports (and schedule ones) Aug Manual pages Extensions to replace current add-on's (accounting etc) Load testing Beta testing Rockfish / Back end infrastructure Biz decisions about hosting etc Sept 1st Release! ## CURRENTLY WORKING ON: Workorder ## MISC ITEMS THAT CAME UP ## E2E TESTING ## V8MIGRATE todo: Need a way to diagnose fail to migrate for remote user's db, there will be a lot of initial issues importing for people until we hit all the edge cases so... any fail of migration of an item of any kind needs to log the full object being attempted to save we need enough info to figure out what went wrong without needing to see the entire db exception handler should log full object being sent over the wire on fail Also a separate plan is to have it log to v8 so we can then login to v8 remotely and see what the error was but that's a future possibility thing, probably not as important as just logging to the same error log todo: custom fields field names are not coming across, still show "Custom 1" when shoudl show whatever is set todo: assigned doc not found text has too many newlines in it, should just sit on one line in exported notes todo: dirty big test again with contracts etc todo: v8 migrate additions Erase DB warning must be very distinctive like bright yellow and red with crossbones etc Report sent *to* the new server upon completion (any state) via MEMO to superuser should send the entire contents of the output screen error or not as it will contain useful info like dupes not exported etc Duplicate id not exported found this in the wild with 4a database 4 workorders not exported due to this message doesn't clearly say that number was exported already is there a way to still export them? Is it possible to login during migrate to the v8 server? Need a running count per item, I have the total at the start so it should show what item it is currently processing of that count like 50/1000 or something todo: workorders - need to set billing and service address from customers on migrate ## CLIENT MISC ITEMS todo: 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: notification new bell alert count add to title so shows in task bar when not in view? like messenger "(1)" "(23)" etc todo: 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: notifications form if left sitting there should auto-refresh when it gets any new notifications? not 100% sure about this one, maybe it's a nice to have feature but a waste of time otherwise todo: notifications new count seems to be double getting on each iteration todo: 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: 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: 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: 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: 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: custom required rules only apply to new records!! todo: 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: 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: 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: 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: add NOW button to date picker just like time picker that does the same thing todo: 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: Translation: "Physical" address seems wierd, rename to Street address or Delivery address or Service Address or whatever todo: broken rules can't save should color save button red in addition to disabled some forms can't see what's what todo: 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: be sure to address items in case https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3864 before next update to server / windows build for Joyce todo: Re-test reporting on linux, just updated puppeteer sharp and it might be affected due to newer chromium todo: double check main page boilerplate stuff is up to date 2021 https://www.matuzo.at/blog/html-boilerplate/ todo: 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: REPORTING naming of things is confusing possibly prepare code should use same names as ayreportdata etc so users aren't confused also it should be named to indicate the server is modifying the data before it's sent to the template i.e. name everything so it's clear what is being done where todo: 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: 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: 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: 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: 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: maybe could be this?: might even be a drop in replacement, should test, would reduce fuckery todo: 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: 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: 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: select list templates under global is offering types that don't6 have select lists like memo etc todo: if all custom fields are turned off then should not show anything (I think that's already the case but confirm) todo: 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: ability to turn off the wiki for every form via customize ui todo: adm-translations, adm-report templates data tables are skewed to the left due to lack of selection box column making filter icon partially gone off page if has extension then should have selection box otherwise figure out what the dealio is todo: after post to server check if this still happens: Ayanova requires javascript is showing now all of a sudden on requests as if it's trying to serve app stuff from the server !? refresh login and first response is the raw html page with noscript showing maybe not even an issue, it does need that page after all TODO: 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: 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: 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: Popup notes now AlertNotes - a whole section of important notes at the top that shows *all* notes combined like customer popup and contract notes that shows all the time in the workorder UI with an option to minimize maybe or something This would be better than popup as it's always visible not dismissed and less ui fuckery to boot. See case 3855 todo: use trans key "AlertNotes" in place of any popup notes variation todo: 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: 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: many stock reports could be made now for most objects todo: Whats new in this release popup or link tied into the update process of the client?? todo: 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: WHEN HAVE WORKORDER FORM customer alert notes todo: remove widget now? Back and front (comment out obvs not remove entirely) todo: 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 ## SERVER MISC ITEMS todo: seeder is putting customer users in as techs in sample workorders (on scheduled user for sure at least) todo: notify on server boot?? (general notify to admin user or whatever?) or on shutdown? todo: start testing with real licensing scheme ("notfound") make sure automatic license updates work properly todo: notify on user login? todo: 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: 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: //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: custom required rules only apply to new records!! todo: Contract Duplicate throws exception at server (id attempted to be set, probably forgot to set copy to null id) todo: 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: 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: update to latest postgres portable and document how to do it as well or a link to how to do it todo: 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: 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 .... todo: Error at the devops server just looking at gold contract: 2021-03-26 18:21:36.8769|ERROR|SERVER|Error=>System.NullReferenceException: Object reference not set to an instance of an object. at AyaNova.Biz.ContractBiz.PopulateVizFields(Contract o, List`1 contractOverrideTypeEnumList, Dictionary`2 preTrans) in C:\data\code\raven\server\AyaNova\biz\ContractBiz.cs:line 531 at AyaNova.Biz.ContractBiz.GetAsync(Int64 id, Boolean populateDisplayFields, Boolean logTheGetEvent) in C:\data\code\raven\server\AyaNova\biz\ContractBiz.cs:line 170 at AyaNova.Api.Controllers.ContractController.GetContract(Int64 id) in C:\data\code\raven\server\AyaNova\Controllers\ContractController.cs:line 100 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Logged|12_1(ControllerActionInvoker invoker) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- 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.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: 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'; LATER ...... todo: Changes to allow in place updates of server without erasing data: 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: 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: NOTIFICATION after the fact 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: GetWorkorderSerial/name from leaf nodes traverse up the tree and fetch the serial number once coded fixup in purchaseorderbiz::getasync MIGRATE_OUTSTANDING bit todo: 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: unit meter reading event? TODO: //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: 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: 3891 3: Implement a workable duplication system SEE CASE 3891 for duplicate at client idea Tested on Project, works perfectly, also found some optimizations to make around new records in create and also found that new: true is unnecessarily being set on route todo: duplicate the duplicate stuff in Project on all other forms - rejig the formstate setting and object setting code for duplicate based on project - replace duplicate code with project version - Remove at server duplicate route and de-document if found anywhere also any redundant support code that was related to duplication NOT THE FOLLOWING THOUGH which are too complex to dupe at client Translation, User, Purchaseorder, Contact, consider: duplicate workorder if to be replacement for templates needs ability to: move all dates forward relatively remove big chunks of things all at once bugbug: tags are not *displaying* when a record is opened until click in a field Does not happen on devops which was posted June 17th so it happened after june 17th happens with chrome or firefox locally but not on devops so it's a local code issue Same browser as devops so not a browser issue happening in all objects with tags not happening in wiki reveals only when a change to the form is made of some kind that triggers I guess formfieldchanged event. Fuck. tag picker hasn't been modified since april 30 and only to change a font bug isn't due to change in tag picker itself I'm leaning toward a regression when updated tag picker source {{#each ayReportData}}

Work order: {{ Serial }}

{{Notes}}
{{#if CustomerSignature}}

Customer signature:

Signed on: {{ ayDateTime CustomerSignatureCaptured}}
Signed by: {{CustomerSignatureName}}
{{/if}} {{#if TechSignature}}

Tech signature:

Signed on: {{ ayDateTime TechSignatureCaptured}}
Signed by: {{TechSignatureName}}
{{/if}} {{/each}} =-=-=-=-=-=-=-