@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ 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
March		
	Workorder*, quote*, pm* implementations	
		case 3850 has all the good stuff about how to do this, UI concepts are basically worked out at this point and contract and po have resources to copy from for error / lists etc
April
	Schedule form
	Review all v8 cases top to bottom and triage / implement
	V8Migrate completion
	All stock reports (and schedule ones)
May
	Manual pages
	Extensions to replace current add-on's (accounting etc)
	Load testing
	Beta testing
	Rockfish / Back end infrastructure 
	Biz decisions about hosting etc
June 1st 
	Release!


## CURRENTLY WORKING ON: Workorder


## MISC ITEMS THAT CAME UP  

## E2E TESTING


## V8MIGRATE

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: custom required rules only apply to new records!!

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: 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: <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: 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: 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: 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.<InvokeActionMethodAsync>g__Logged|12_1(ControllerActionInvoker invoker)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>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.<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: 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....
	also this includes *all* of the initial workorder object so there's that
	might be that they don't need it but for consistency should check into it



########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################
########################################################################################################################



CURRENTLY DOING: labors (but involves contract change below)

todo: contract changes
	update woform to show contractviz as static text with change button beside it
	when you click on change, if the record is dirty it prompts to save first before proceeding
			otherwise it pops up a dialog to select a new contract then immediately saves it			
			On success it will force a navigate to the same record to cleanly update.
			Also this way people know it's a big deal to do it and it could also be wrapped in role restrictions easier too!!
	At server, if NEW record and contractid already set then use that otherwise find effective one and set (only way it's set automatically) or leave empty
		so user can select on new themselves 
	At server if UPDATE record and contract id has changed then recalc

todo: test contract changing, application on new etc and fully works with labor before getting too carried away carrying over to other things

todo: tax code ref integrity check should include wo or...:
todo: tax codes, should they just be used to SET a mirror set of fields in other objects thus allowing them to be deleted etc`
	currently the workorder stores the tax code id as well as all the data about it that is relevant to teh workorder, but this sets up a link between them
	that is technically unnecessary.  If the intention is to decouple them, this is a bit of a wasted redundancy, however it does flow like all other things cleanly and displays etc
	not sure what to do with this, needs a think.  

	It *is* important to keep the redundancy, that's a good solid new feature...hmmm...
	perhaps the issue is if they delete the tax code it should set the woitem* things that store it's id to null as it will no longer exist, but then the name wouldn't show

	I'd like to see it implemented as somethign that is just applied to it and not something that is stored with it and flow that out to PO and global settings etc
	then it's less sticky, people can just delete a tax code any time and don't need to rule check all the shit

	However it is decoupled now as it stands because it will still have the taxes applied even if the code is deleted separately, just won't display in the UI properly
	but that *is* kind of an issue anyway

	Circle back to this one

ORDER: Travel, tasks, parts, loans, units, outside service

todo: "DispatchFull" and "DispatchLimited" roles MUST be renamed to "ServiceFull" and "ServiceLimited" to match other roles and intent
	dispatch is a subset of a service manager job
	Rename at both ends and all translations and docs as well.

TODO: Workorder should include contract in effect info directly on fetch so it's available to display in UI somewhere and 
	to use in calculations on the form for immediate feedback if necessary

TODO: test new from scratch wo regularly

TODO: Contract rates 
	variant for picklist provide bool check contract and then aytype:id pairs that might have one.

TODO: actual feature stuff once form there

OVERALL	

	- then full in front end and flow out to back end as required, remove any backend that was a defunct evolutionary path so no cruft left around
		many UI affecting cases, some bigger than others, almost none though are deal breakers in terms of just putting all the controls on first then refining 
		so can go whole hog on adding controls and stuff, but make sure that they are all dealt with as hideable wherever possible and in some cases need to add
		a hideable for entire collection object (i.e. can hide all of outside service so it never shows etc)
		Don't forget Viz fields as well
	- Keep working on front and back responds to front needs as I go
	- load and stress test on client
		This one really needs a e2e test that works and will hammer it so we can run that from multiple locations






#####################################################################
=================== WORKORDER TODO / ON HOLD ========================

todo: workorderitemlabor new record stop date sb +1 hour
todo: make sure all rules are mirrored at both ends (like date precedence etc)
todo: signature: report helper display signature and form ui control to capture /display signature 
TODO: Test address / units select alternate when have units working
TODO: Sequence field sb hidden by default, most won't want it I'm guessing
	really need to pin down some default form customization for wo
	it's got an overwhelming number of fields in it, 
	really will need that simple or complex mode trial data seeding feature talked about

TODO: Seeder has non service users set on scheduled user records (like head office etc)
	it doesn't crash but makes no sense logically

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: special service rates for contract etc 
	currently just pulls all rates (woitemscheuleduser)


	



	------------------------------------------


	
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
	

	
## OBJECT ORDER 
Preliminary order to get the ball rolling, these are the easiest starting point:

	Inventory Migration
		migrate inventory added to v8migrate as final step of export; code it based on balances and also insert serials etc
	it checks the balances in v8 then compares to v7 then issues an adjustment to bring into sync
	this way (last thing) we are always covered no matter what happens with wo import etc




	Workorder
		When do this need to go back and do a bunch of //MIGRATE_OUTSTANDING
			i.e. show all
			todo: Consider adding latitude / longitude to wo, quote, pm objects
			rate split
	can copy over from the unit or customer or set themselves
	and can always hide
	means wo could be scheduled for ad-hoc locations and serviced that way, i.e. a truck parked on the side of the highway etc

	Quote

	PM

	Schedule form 

	

# 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


## v7 DB DEPENDENCIES
object
	depends on

AssignedDoc * Already handled automatically by v8 migrate
	none

xaclient 
	adispatchzone - TAG
	aheadoffice
	aworkorder

xaclientgroup - TAG
	none

xaclientnote
	aclientnotetype - TAG
	aclient

xaclientnotetype - TAG
	none

DEPRECATED - aclientnotifyevent - 
	none

aclientservicerequest
	aworkorderitem

DEPRECATED - acontact - 
	acontacttitle

Xacontract
	aregion - TAG

Xacontractrate
	acontract
	arate

X adispatchzone - TAG
	aregion - TAG

DEPRECATED / HANDLED AUTOMATICALLY BY IMPORT afile
	none

xaglobal
	ataxcode
	aworkorder
	aworkorderstatus

xaglobalex
	none

xaheadoffice
	aclientgroup - tag
	acontract

aintegration
	none

aintegrationmap	
	aintegration

Xaloanitem
	aregion - TAG
	aworkorderitemloan

xamemo
	auser

DEPRECATED - anotify*
	lots of tables, but it's all obsolete and won't be ported

HANDLED BY IMPORT - aobjectcustomfield
	(defines custom fields, is part of base import already, nothing special required here)

apart
	apartassembly
	apartcategory - TAG
	aunitofmeasure
	avendor

apartassembly	
	none

apartbywarehouseinventory
	apart
	apartwarehouse

apartcategory - TAG
	none

apartinventoryadjustment
	none

apartinventoryadjustmentitem
	apart
	apartinventoryadjustment
	apartwarehouse

apartserial
	apartinventoryadjustmentitem
	apurchaseorderreceiptitem
	aworkorderitempart

apartwarehouse
	aregion - TAG

xapriority
	none

xaproject
	aregion - TAG
	auser

apurchaseorder
	aproject
	avendor

apurchaseorderitem
	apart
	apartwarehouse
	apurchaseorder
	ataxcode
	aworkorderitempartrequest

apurchaseorderreceipt
	avendor

apurchaseorderreceiptitem
	apart
	apurchaseorder
	apurchaseorderitem
	apurchaseorderreceipt

xarate
	aclientgroup - tag
	arateunitchargedescription - DEPRECATED per case 3432
	aregion - TAG

DEPRECATED case 3432 - arateunitchargedescription
	none

xaregion - TAG
	aworkorderstatus ?! WTF?

xregionnotifystat ?wtf is this?
	aregion - TAG

REPLACED NEW FORMAT - areport
	aregion - TAG

xaScheduleableUserGroup - TAG	
	none

xascheduleableusergroupuser
	aScheduleableUserGroup - TAG
	auser

aschedulemarker (now "Reminder")
	none ?must be at least user in there...weird

DEPRECATED - asecuritygroup (nope)
	none

xaservicebank
	none

atask
	none

ataskgroup
	none

ataskgrouptask
	atask
	ataskgroup

xataxcode
	none

aui* (these are all v7 UI saved settings that are not applicable to v8)

xaunit
	aclient
	aunitmodel

xaunitmeterreading
	aworkorderitem

xaunitmodel
	aunitmodelcategory - TAG
	avendor

xaunitmodelcategory - TAG
	none

DEPRECATED NO MORE - aunitofmeasure
	none

xaunitservicetype - TAG
	none

xauser
	adispatchzone - TAG
	aheadoffice
	apartwarehouse
	asecuritygroup
	avendor
	aworkorder

xausercertifcation* (these are now tags and already rolled into v8 migrate tool)

xausermru DEPRECATED
xauserright DEPRECATED

xauserskill* (now tags and already accounted for in v8 migrate)

xavendor
	none

xawikipage* (already accounted for in v8 migrate code, object by object will export)

aworkorder (new structure, some of these are no longer joined due to seperation of wo types in v8)
	aproject
	aregion - TAG
	aworkordercategory - TAG
	aworkorderpreventivemaintenance
	aworkorderquote

xaworkordercategory - TAG
	none

aworkorderitem
	apriority
	aunit
	aunitservicetype - TAG
	aworkorderitemtype - TAG
	aworkorderstatus

aworkorderitemlabor
	arate
	aservicebank
	ataxcode
	aworkorderitem

aworkorderitemloan
	aloanitem
	ataxcode
	aworkorderitem

aworkorderitemmiscexpense
	ataxcode
	aworkorderitem

aworkorderitemoutsideservice
	avendor
	aworkorderitem

aworkorderitempart
	apart
	apartserial
	apartwarehouse
	ataxcode
	aworkorderitem

aworkorderitempartrequest
	apart
	apartwarehouse
	apurchaseorderitem
	aworkorderitem

aworkorderitemscheduleduser
	arate
	aworkorderitem

aworkorderitemtask
	atask
	ataskgroup
	aworkorderitem

aworkorderitemtravel
	arate
	aservicebank
	ataxcode
	aworkorderitem

xaworkorderitemtype - TAG
	none

aworkorderpreventivemaintenance
	aworkorder
	aworkorderstatus

aworkorderquote
	aworkorder

aworkorderservice
	aworkorderpreventivemaintenance
	aworkorderstatus

xaworkorderstatus
	none


	


------------------------------------------------------------------------------------------

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: //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: 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"

WORKORDER UI
todo: Investigate Workorder structure and datagrid see case https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3768
	Likely that workorder grids inside will not be full blown custom datagrid I wrote but just a vanilla v-data-table control since there is likely no need for the full customization shit
todo: workorder UI layout stuff (TTM!!  Don't re-invent the wheel!)
	There's been a lot of ideas about wo floating around and considered, but at the end of the day what I have works so maybe try to meld 
	into what I have the new concepts and see what comes out.  Support a rich wo UI on big screens and scroll around UI on phone maybe.
	some notes:
		Workorder UI good ideas here: https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3475
			Basically (based on RI) it boils down to don't make the user go up to the workorder item level when they can go sideways directly to an alternate child of woitem
				i.e. going from parts to labor shouldn't require going up a level
		All workorder in one document and just really really tall? (people bitch about RI requiring too many navigation steps to get to shit)
		Header and items in one document then bottom in seperate pages?
		Is it going to be far easier to code this bitch if I have all the workorder data at hand or..?
		How does WBI handle all this because it's kind of the poster child for RAVEN
		Workorder is one of those things that may require different views for phone and tablet and laptop etc
			Kind of like two views, tiny phone and anything larger
		On a PC people will want and expect it to look as much like v7 workorder as possible, maybe that's still a valid layout
			just tweaked to work better as a web app a bit but theoretically I could almost duplicate that layout with the tools I have

	
	Consider UI in this as well, will need to decide at least what is visible when
		Workorder UI good ideas here: https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3475
	How to add items, like new woitem?
		send to server get back new object?
		lots of biz rules and stuff need to happen, want to minimize load at client
		but lots of data back and forth is not ideal
		maybe request a woitem and get it back?
		what exactly needs to be processed in the wo when items are added / removed?
			math / totalling?
				simple calcs sb client doable
			this will drive what has to happen.
	Need to go over all wo features and factor them into this decision properly
	The whole idea of a completed section of a wo and stuff, is that dropped due to TTM or still viable?
		maybe can pick out the best new features of that which can be integrated into existing design rather than re-inventing the wheel
		Here is an overview: https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3412
	How best to be able to service LoanUnits on a workorder? [UPDATE: added shadow units feature]
		Just make them Units with extra properties exposed if type of loaner?
			This seems simplest, but what will it effect?
		Hard to make them serviceable if they are an alternate table of source for what's being repaired as that breaks a lot of other code or adds exceptions
			Customer is then who exactly because it's fundamental to a lot of wo functionality?
			from a biz perspective isn't it like you are your own customer when you service your own equipment that you loan out?
	Does Serial field need to be numeric, could it be text instead?
		prompted by case 3428  saying that it's hard to deal with constant conversion to text for UI etc
		plus, I'm thinking it opens door to textual scheme like appending -A or whatever to a wo.
		or, is that a display issue?
		Calling something "serial" implies it's unique but it isn't, maybe I should call it "number" instead or "ID" or something?
	INFO: did a test workorder with ALL fields filled out heavily and one woitem, exported from db entire graph based on detailed report so every line was every item repeated
	still only 84kb and it's a lot bigger than any typical wo in v8 would be as it will be far more efficient without having to repeat lines flatly
	so I think size of object is a non-issue really from a practical standpoint.


	UI
	
		idea: UI reflects tentativeness state of object:
			The UI doesn't imply something is done by changing it fully until the save is completed. 
			This serves two purposes: 
				1) user knows at a glance what isn't saved yet and will know it's waiting for save clearly, hopefully leading them to save more often, 
				2) client doesn't need to track invisible shit behind the scenes, can more easily do patch updates right off UI source

			e.g.:
			if deleted a row in parts, that row doesn't disappear but rather shows crossed out, maybe grayed out but still there until save to indicate it's tentative status
			if added a row, shows green or something or bold or asterisk, (can style with css based on state) until saved
			problems: 
				how to handle regular fields that are changed (that's a lot of field data to track for changes)?
					Maybe client keeps a virgin copy of the original wo for comparison
					periodically does a compare and flags differences on updates?
					(this would also help to serve as an Undo maybe?)



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 teh 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 CHANGES OF NOTE

build 105
- direct report url now works again properly.  Used by notification to send links to reports and possible future other links to provide an url that opens in teh AyaNova client directly to viewing a report, so that the url [clienturl]/viewreport?oid=1&rid=1 for example will open report id 1 with object id 1
- Can now hide columns that are filtered or sorted without error in data tables; Data Table column selector button will change to larger and accented when this is the case and the column selector form will highlight these hidden columns that affect the view with raised elevation, accent color and filter/sort icon (both show, there is no distinction which type of way it's affecting)
- fixed
	Search form object types selection need enum list variant of object types to only show for roles allowed then change search form picklist to use that variant
	Notification events list (notify subscription) needs variant that controls what they have role access to
	memo to dropdown list shows all users for selection then after selecting one shows only that selected when you next drop down, should show all users still like first time.
	memo click on reply or forward should put cursor into top of edit message control (notes)
	memo read now flags correctly
	taxcode form has default of .05 in taxa, change to zero
	Default warehouse try to enter a tag bombs with error
	PartInventory data table errors out when click on column selector 
	Part inventory list remove description field 
	PO form Hide serial field until an ID is set (i.e. don't show 0)
	PO Form serial field read only unless superuser
	PO item Receive button confusing as it receives all, change text to receive all
	PO item table to optionally show part Name field and show hide via customize form
	PO item not showing taxaviz and taxbviz
	Part inventory list also show on order and on order committed
	Ability to remove (optional) data table filter set internally when viewing from objects own menu for partinventory, inventorytransactions, reviews, servicebank		
		(was: **Part inventory list view will NOT show all parts if previously selected to view the actual part inventory for a single part.)
		FIX: Added UI elements at top of grid to remove single object filter (where applicable) and display which object(s) data is displaying consistently
	Part inventory adjustment adding from list that is already restricted to one part [OR WAREHOUSE] only (coming from part [OR WAREHOUSE] form menu) should pre-select the part [OR WAREHOUSE] in the new adjustment form
	Inventory limited role is presented delete button in part assembly list, should only be able to view
	Accounting role: if select Contacts listview, get error "! Not authorized"
	Taxes won't let me change an existing Name if previously selected on any other record. 
	Taxes won't let me change the Active status if previously selected on any other record.
	Unit charge description should offer auto suggest from prior entries to save typing
	User settings language and time zone and currency help / suggestions
	User settings map template hint shows google maps as default
	have a field area in the Global Settings for a setting labeled "Next PO Number" 
		In global settings "Next seed number", will consolidate that area in future and make it look nicer, right now it's kind of a "junk drawer" of functionality

- not changed
	Tag extension should have tag picker instead of empty field in cases where you are picking from existing tags
		** It would not work with the system in place.  Tag picker control is designed for multiple tags,
		tags extension system is designed to replace / remove a single tag at a time by design, so wouldn't save any typing by user anyway as would be restricted to one tag
		and would need extensive changes to working code to implement
	Tag extension to report results of operation? i.e. how many tags deleted etc
		** Not practical at this time / have made a case to look into down the road, would require extensive changes to working code at both server and client
	Tag extension or any extension refresh main data table it was run from after operation (so can see results) automatically
		** looked into and realized could cause issues forcing a refresh when the user doesn't want it necessarily if they are picking and choosing records to work with in extension more than once
	REMOVE THE extra decimal place  - make it so max of two decimal places so if have a 6.25% tax would enter in 6.25; if 16.75% would enter in 16.75   I know of no known tax rate that has more than 2 decimal places
		** Many places globally have 3 decimal place tax rates, even in the US https://taxfoundation.org/2020-sales-taxes/
	When I click to enter a tag (but have not yet typed anything), I'd expect/like to see a list of ALL existing tags drop down that I can then scroll down and select(doesn't do this as of right now March 15 2021 alpha-104)
		** Oh, ok, I thought you meant an area where tags could be viewed.  That's not practical, there could be 10,000 tags, it's open ended, we can't send the whole list every drop down of every tag.  What's the use-case for this?  
		like if a person isn't sure what tags to use or...??
	When select "-" in the Filter Manager, I expect that no filtering/sort order etc, will be applied. I expect  that selecting "-" resets all back to nothing.
		BUT when I select the "-" in Filter Manager, the last filtering/sorting that was used on the grid REMAINS. Wanted to bring this to your attention in case there to confirm this is as expected?
		Scenario: Filter on one or two columns. Sort on one or two columns. Via Filter Manager save this as a filter view. Now select "-" in the Filter Manager (at which point I expect that selecting "_" would remove the filtering and sorting and reset the datatable back to no filtering/sorting.
		** Hmmm...this one is tricky, it's actually resetting back to whatever the user last set manually when you click on that -
			so if you just made a filter and saved it and go back to - you're effectively saying take me back to the last manual filtering I set up
			I don't want to toss that away because a user may be building multiple filters and saving them based on prior settings.
			Not sure what is the best course of action here, but it's working as designed, it just seems weird in this particular scenario because you just saved it as a filter
			but on the other hand if you were to manually set something, then go and select a saved filter then go back to manual with the - it would go back to whatever filter you were working on previously.
			The X button is for explicitly resetting to no filter regardless of the scenario, the - means "take me back to whatever filter I had set before I did this thing"
			Needs more thought I guess.



