@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 6 - BETA "MAKE IT HAPPEN" 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





2021-12-10 STATS
198,588 lines of code in all projects (code only not comments)
Languages: Vue, C#, SQL, Javascript, JSON, markdown, XML, YAML, HTML, Batch, CSS
Platforms: Windows, Linux, iOS
FIRST BACK END SOURCE CODE COMMIT JUNE 28 2018 (3 years 6 months ago to jan 4th 2022)
FIRST CLIENT SOURCE CODE COMMIT JAN 3rd 2019




# OUTSTANDING MAJOR AREAS TO BETA

# NOW DOING: - triaging list of must have widgets, cleaning up layout to squeeze them in (maybe done), then finishing up the must haves
	make sure nice to haves or not done get cased somewhere for future v.next or whatever
	figuring out the seed data adn will it suffice for widgets required once have figured out widgets required
		(demand drives features not features awaiting demand)


# SEEDING ISSUES 


??seeder wo created date not set properly, should match the way it's generated

seeder make reminders and reviews for all users, just random scattering for now to future month ahead at least one per day to show off schedule and widgets
seeder wo need new fields and generate data to show off and test kpi widgets and features
	Add completed date to workorder, should be set when a closed status is set
	used for numerous kpi stuff
	adjust seeder to work with it so the closed state created date matches wo completed date

	Also, can we calc "time to respond" based on anything extant or should there be some kind of additional field / system for that
		i.e. maybe a workorder status is also a response status like some are closed??, then a mirror first response field like completeddate



# WIDGETS 
https://www.calculator.net/percent-calculator.html

- Widgets to make for beta in order of priority
	**MUST HAVE***

		* LIST overdue workorders (booked on, in the past, not a closed status, passed completeby date) for current scheduleable user
			criteria:
				tags wo, woitem

SELECT distinct(AWORKORDER.ID),
	AWORKORDER.SERIAL,
	AWORKORDER.completebydate,
	ACUSTOMER.NAME,
	AWORKORDER.NOTES
FROM AWORKORDER
LEFT JOIN AWORKORDERITEM ON AWORKORDER.ID = AWORKORDERITEM.WORKORDERID
LEFT JOIN AWORKORDERITEMSCHEDULEDUSER ON AWORKORDERITEM.ID = AWORKORDERITEMSCHEDULEDUSER.WORKORDERITEMID
LEFT JOIN AWORKORDERSTATUS ON (AWORKORDER.LASTSTATUSID = AWORKORDERSTATUS.ID)
LEFT JOIN ACUSTOMER ON (AWORKORDER.CUSTOMERID = ACUSTOMER.ID)
WHERE (LASTSTATUSID IS NULL	OR AWORKORDERSTATUS.COMPLETED = FALSE) and aworkorder.completebydate < now()
	AND AWORKORDERITEMSCHEDULEDUSER.userID = 10
ORDER BY AWORKORDER.ID ASC




		* LIST overdue workorders list not user centric available to service manager roles
			criteria:
				tags wo, woitem

		LINE/BAR Count of work orders created per day over time (from case 1882)
			criteria: 
				timespan and INTERVAL
				tags wo
		BAR % wo completed status vs not completed by completed date within interval
			query is 
				all wo not completed that should be by now within the interval vs all that were completed within the interval, count up each, count up the total and present as a pct for that interval
				count of wo with complete by in the interval and not closed /  count of wo with complete by within the interval and closed
			criteria: 
				timespan, interval
				tags wo
		BAR-VERT Billable hours leader board case 3696:	https://www.openfaas.com/blog/serverless-single-page-app/?utm_source=DigitalOcean_Newsletter
			criteria: 
				timespan, interval
				tags wo
		
		BAR Count of wo within each status by time period / tags
			shows all status types that are in the data returned only, not *all* status though I think it does that automatically
			future: click on status bar it opens a filtered list of all wo by that status
		
		LIST work orders by status	(case 1974)			
			criteria: 
				wo status
				timespan
				tags wo, woitem



	**NICE TO HAVE**
	(these are not triaged yet)
	DASHBOARD:CR - open wo list by selectable status case 1974
	avg time or time breakdown by % of overdueness of workorders
		i.e. 10% of overdue were x days overdue etc
	avg time in each status by time period / tags
		this could cover response time as they can just designate a status as unresponded or new
	% wo within each status by time range / tags
		this will show the state of things overall
	




# OUTSTANDING BEFORE RELEASE

- License agreement change from beta to regular
- Docs completed filling in, many empty pages still

- New website for v8?
- New forums for v8?


- Beta testing completed
	this is going to be huge becuase users will find a million bugs and issues with how things work and it will be a big clusterfuck for a while so plan for time and patience
- Here switch from BETA to RC designation, let it soak for a bit before full release
- onboarding process for v7 users guide to migration and also including licensing and etc which requires figuring out pricing and shit
trial / seeder system
		do not specify by size but rather scenario
		we care about size for load testing but don't want to give impression we think HUGE is just a few 10s of thousands of workorders because it's a db issue at a certain point
		Also NO time estimates in the UI, just make sure they are all a reasonable length of time to generate, like no more than 15 minutes or something, ideally less than 5 minutes

		This should be coded by *task* rather than object to make life easier when we implement
			i.e. a MakeWorkorderItemPartRequest task would go through the rigamarole of making a part request, a PO to fulfil it etc
			or something along those lines, ideas fuzzy at the moment
			maybe it's what is there plus additional Task based ones
			maybe the UI drives it because we have specific ideas for that 
dashboard widgets
		Not the highest priority for BETA but there shoudl be at least a couple so that feature can be tested also it shoudl at least replicate v7 stuff
		Just enough an no more, this could be endless, come up with a top 5 or something and limit it to that
		(this is also a very juicy v.next feature thing too)
		Note that it *must* at minimum recreate the v7 dashboard stuff (but nicer and graphical)
			personal upcoming events like maybe an "next 5 open work orders I'm scheduled on"
			or a widget that is upcoming work orders that are a specific status (maybe, just speculating here)
		Late night high email to myself about dashboard widgets:
			Dashboard segregate by levels of detail. Adobe people want overview quick some more detailed like Google maps timeline insights can't drill out to year no big overview.
			In app lists are ultimate detail need coarser grained widgets option just big picture stuff.
- Plugin / addon replacements implemented and fully tested
	qbi - 4alarm can't migrate until this is done
	qboi
	(if pt, well after release if ever)	
	??? others??
- Regression tests completed and ready to use *before* release so we can add issues to it as they come up and test reliably
- Rockfish licensing finished up
	lots to do there but enough for trial and sales for now in existing is enough
	one license redundant route also should be baked into initial release even if it points to same place for now
- Biz decisions
	Share it product pages for v8 so can be purchased
	pricing
		When did we last raise prices?  What date?  What has been the amount of inflation since that date?
		What can the market bear?
		** Prices must be at *least* lastprice + inflation **
		Simpler pricing, simpler licensing but higher to take into account the bits and pieces we will now include rather than optional
	licensing
		Need options for every plugin option etc, right now it's just made up accounting and rental shit
	hosting offering
		Initially we offer to setup and manage their server...or...do we rent a server for them adn run it ourselves and they pay us what we pay to d.o. plus premium for service, plus license rental?
		i.e. self hosted licenses cost one amount, we host licenses are rental and another amount
		is all self hosted perpetual for the license itself and support and updates is the recurring part?
		or are some self-hosted licenses month to month because cheaper??
		complexity is a fucker though so keep in mind too convoluted = a lot more work on our behalf so keep it simple as possible
	ShareIt Purchasing pages on our site for raven
		we might go with other vendors in future keep in mind
		also accepting crypto?? (then fuck shareit in that case we don't need a middle man)
	Export restrictions??
		Since it's all open source now, are there still export restrictions??
			canad ones maybe that apply to us?
	Legacy area for v7 on release and new area for raven
	forum for support squared away












## MISC ITEMS THAT CAME UP  

Coded by importance 

1 means before beta
2 means before release 
3 means make a case for it for v.next



# INSTALL


██╗███╗   ██╗███████╗████████╗ █████╗ ██╗     ██╗     
██║████╗  ██║██╔════╝╚══██╔══╝██╔══██╗██║     ██║     
██║██╔██╗ ██║███████╗   ██║   ███████║██║     ██║     
██║██║╚██╗██║╚════██║   ██║   ██╔══██║██║     ██║     
██║██║ ╚████║███████║   ██║   ██║  ██║███████╗███████╗
╚═╝╚═╝  ╚═══╝╚══════╝   ╚═╝   ╚═╝  ╚═╝╚══════╝╚══════╝


todo:2  subscribe to all sources of security vulnerabilities that could apply to users of AyaNOva 8 (and 7)
	Need an ongoing defined process to follow to ensure we are not caught by surprise with any security vulnerabilities
	Github watch and star all tools used for starters so get notifications via github about new releases etc
	nginx
	ubuntu
	.net core
	front end vue & libs


## DOCS
██████╗  ██████╗  ██████╗██╗   ██╗███╗   ███╗███████╗███╗   ██╗████████╗ █████╗ ████████╗██╗ ██████╗ ███╗   ██╗
██╔══██╗██╔═══██╗██╔════╝██║   ██║████╗ ████║██╔════╝████╗  ██║╚══██╔══╝██╔══██╗╚══██╔══╝██║██╔═══██╗████╗  ██║
██║  ██║██║   ██║██║     ██║   ██║██╔████╔██║█████╗  ██╔██╗ ██║   ██║   ███████║   ██║   ██║██║   ██║██╔██╗ ██║
██║  ██║██║   ██║██║     ██║   ██║██║╚██╔╝██║██╔══╝  ██║╚██╗██║   ██║   ██╔══██║   ██║   ██║██║   ██║██║╚██╗██║
██████╔╝╚██████╔╝╚██████╗╚██████╔╝██║ ╚═╝ ██║███████╗██║ ╚████║   ██║   ██║  ██║   ██║   ██║╚██████╔╝██║ ╚████║
╚═════╝  ╚═════╝  ╚═════╝ ╚═════╝ ╚═╝     ╚═╝╚══════╝╚═╝  ╚═══╝   ╚═╝   ╚═╝  ╚═╝   ╚═╝   ╚═╝ ╚═════╝ ╚═╝  ╚═══╝





## MIGRATION ITEMS
███    ███ ██  ██████  ██████   █████  ████████ ███████ 
████  ████ ██ ██       ██   ██ ██   ██    ██    ██      
██ ████ ██ ██ ██   ███ ██████  ███████    ██    █████   
██  ██  ██ ██ ██    ██ ██   ██ ██   ██    ██    ██      
██      ██ ██  ██████  ██   ██ ██   ██    ██    ███████ 
                                                        



## TESTING ITEMS
████████╗███████╗███████╗████████╗██╗███╗   ██╗ ██████╗ 
╚══██╔══╝██╔════╝██╔════╝╚══██╔══╝██║████╗  ██║██╔════╝ 
   ██║   █████╗  ███████╗   ██║   ██║██╔██╗ ██║██║  ███╗
   ██║   ██╔══╝  ╚════██║   ██║   ██║██║╚██╗██║██║   ██║
   ██║   ███████╗███████║   ██║   ██║██║ ╚████║╚██████╔╝
   ╚═╝   ╚══════╝╚══════╝   ╚═╝   ╚═╝╚═╝  ╚═══╝ ╚═════╝ 


todo:3 todo: check out this SPA memory leak detector, it *does* have a login ability btw in case it's not obvious, something about extras or ...?
	https://github.com/nolanlawson/fuite


## REPORTING ITEMS
██████  ███████ ██████   ██████  ██████  ████████ ██ ███    ██  ██████  
██   ██ ██      ██   ██ ██    ██ ██   ██    ██    ██ ████   ██ ██       
██████  █████   ██████  ██    ██ ██████     ██    ██ ██ ██  ██ ██   ███ 
██   ██ ██      ██      ██    ██ ██   ██    ██    ██ ██  ██ ██ ██    ██ 
██   ██ ███████ ██       ██████  ██   ██    ██    ██ ██   ████  ██████  




---


## CLIENT MISC ITEMS


   _____ _      _____ ______ _   _ _______ 
  / ____| |    |_   _|  ____| \ | |__   __|
 | |    | |      | | | |__  |  \| |  | |   
 | |    | |      | | |  __| | . ` |  | |   
 | |____| |____ _| |_| |____| |\  |  | |   
  \_____|______|_____|______|_| \_|  |_|   
                                         

todo: 1 should a superuser really have a dashboard?


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 profiler page has columns: Request Start 	Response Start 	Dom Complete which are all empty, somethjing new added that needs to be disabled maybe??

todo: 2 adm-import lists a lot of objects that are work order item children etc, I think people mainly want invenotry (which isn't there), customers, ho maybe, whatever is the biggest lists
	so remove unimportable types, implement most desired import types
............................



todo:3 Schedule, what is the maximum number of techs can show in team view, can show more with scroll?
	seeder should prevent going over this max (tags/prefilter/gen less)

todo:3 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 First print if it's downloading or will need to download chromium it should state there will be a delay while it attempts to download and install chromium render engine
	or maybe trigger it on first boot?
	Not sure how to do this effectively needs time to marinate

todo:3 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:3 metrics ops page should show the little dots so know where to position the mouse to see the reading at that point
	also, there needs to be more "dots", it's too few to get proper idea
	also todo under server that metrics isn't really capturing the whole server metrics only the ayanova process metrics as far as I can tell 


todo:3 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:3 todo: put reset link somewhere in UI so user can just click on it, maybe the login form?? Or the About form? about->log form?

todo:3 translation cleanup, work order sb Orden de trabajo but is translated as Pedido?! (which is very generic and not work order, usually like a restaurant order or online shipping order sense for pedido)
	I did a couple but realized it needs to be done one by one roundtripped carefully as it's used in alternative tenses and forms throughout

todo:3 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

todo: 3? schedule form sync with ical, there's a case for it 

todo:3 window.$gz.locale.diffHoursFromUTC8601String is often calculated a total of 1.99 due to some rounding even though the two times look identical
	must be seconds or something, needs a round up in those cases, that's weird.  To recreate try a start time of 11:21 and end time of 1:21pm which should be two hours but is 1.99 hours
	sometimes it just works, I'm guessing it's a milliseconds issue or something, round first maybe to remove ms then calc?
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: some way to quickly add objects to wo would be nice 
	like a shortcut keystroke to add a ctl-shift-u for unit or whatever
	or maybe a quicker way to get to the items menu or a FAB or something ..??

todo: 3 use <v-spacer v-if="!$vuetify.breakpoint.xs"></v-spacer> technique for any dialogs where small mobile view hides far right button
	see home-schedule more info dialog for more info :)
	This really means search for all the <v-spacer uses in client code and test that particular one in mobile and see if it's right side buttons are cut off or not
	(can just test in 360px max in dev laptop)

todo:3: tag cloud feature exposed to UI somewhere?

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: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: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:3 Seeding UI keep track of timing and later down the road when firmed up, provide estimate (average server will take):
	2021-05todo:31 10:26:45.4801|INFO|Seeder|Small level sample data seeded in 27 seconds
	2021-05todo:31 10:47:07.3417|INFO|Seeder|MEDIUM level sample data seeded in 2 minutes and 13 seconds
	2021-05todo:31 10:56:04.9450|INFO|Seeder|LARGE level sample data seeded in 4 minutes and 17 seconds
	2021-05todo:31 12:06:34.2680|INFO|Seeder|HUGE level sample data seeded in 24 minutes and 54 seconds
todo: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#]
todo:3 Attachment ui sucks for big upload as it just sits there apparently doing nothing with no feedback
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: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: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:3 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:3 todo: why should user be able to open a part inventory transaction record in the first place?  It opens to the history form, isn't that weird, theres nothing to see that isn't 
in the grid is there??

todo: 3 Schedule form reporting?
    could just default to regular reporting list, doesn't absolutely need to be a calendar at least at first
    as long as it has all appointments consolidated in single list
    Will need to support it at the server though, perhaps it bypasses normal report routes in some way

todo:3 CURRENCY / DECIMAL control, not too happy with them, considering rolling my own maybe here are some ideas:

To get current use the latest version which is completely different and seems ok, here is a dude who implemented it with vuetify so would need to copy this
as it's too small to just use his I think: https://github.com/phiny1/v-currency-field/blob/master/src/VCurrencyField.vue

For the record the current vue-currency being used is "vue-currency-input": "1.20.3",
	https://stackoverflow.com/questions/43208012/how-do-i-format-currencies-in-a-vue-component
	Also a good post about rounding on that page as well
	There is currently no intnl aware parser for currency, however
		Here is an excellent idea about using the tostring formatter to figure out the parsing code
			https://stackoverflow.com/questions/59678901/using-parsefloat-in-different-locales
		So use that concept, but also add to it for the currency one to remove the currency symbol entirely and replace it with nothing so it can then be parsed 



function localeParseFloat(s, locale) {
    // Get the thousands and decimal separator characters used in the locale.
    let [,thousandsSeparator,,,,decimalSeparator] = 1111.1.toLocaleString(locale);
    // Remove thousand separators, and put a point where the decimal separator occurs
    s = Array.from(s, c => c === thousandsSeparator ? "" 
                         : c === decimalSeparator   ? "." : c).join("");
    // Now it can be parsed
    return parseFloat(s);
}

console.log(parseFloat(localeParseFloat("1.100,9"))); // user's locale
console.log(parseFloat(localeParseFloat("1.100,9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1.100,9", "nl"))); // Dutch locale: reversed meaning of separators
// And the same but with separators switched:
console.log(parseFloat(localeParseFloat("1,100.9"))); // user's locale
console.log(parseFloat(localeParseFloat("1,100.9", "us"))); // US locale
console.log(parseFloat(localeParseFloat("1,100.9", "nl"))); // Dutch locale: reversed meaning of separators



## SERVER MISC ITEMS


   _____ ______ _______      ________ _____  
  / ____|  ____|  __ \ \    / /  ____|  __ \ 
 | (___ | |__  | |__) \ \  / /| |__  | |__) |
  \___ \|  __| |  _  / \ \/ / |  __| |  _  / 
  ____) | |____| | \ \  \  /  | |____| | \ \ 
 |_____/|______|_|  \_\  \/   |______|_|  \_\
                                             


todo: 2 trial eval server on digital ocean, need way to generate unique login creds and data for people who are trialing based on request to try it on 
a d.o. server online.  Basically ease it from our end to make it simple and maybe automatic as possible but also have it work with trial login accounts, so maybe a way to 
provide some config params to the seeder or an external app that does it through API maybe (rockfish option??)
idea is someone can request and we can have a server up and running for them with little effort on our part
Going to need a wildcard cert for helloayanova.com maybe if appropriate because I need to spin up trial56 or etc as are already set up but dns warning if go to them
https://community.letsencrypt.org/t/create-certs-for-different-machines/107091/11

todo: 2 test notification sent from ops notification settings form should include a link so can test that the link back url is working 

todo: 2 AyaNova is not logged an event when a serial number is reset but ther is an event type for that purpose
  I'm not certain if this is related to editing an object to change the serial or the seed being changed
  When this is coded add it to the documentation at adm-history.md

todo: 2 remove unused translations
  add code at server to scan all reports and parse out translation keys used into a single list of unique values for use later
  Find way to find all translations in client project requested and make into unique list
  Find way to get all translations specified at server and make into unique list
  Determine if there is anything that will come over from v7 that would be broken if removed from v8??
    what is the policy here anyway exactly?  This needs to be determined.
    is it possible for v7 imported objects to refer somehow to translation keys that v8 doesn't actually use anywhere or is it just the translated text itself that would be outdated?
  find way to take unique list and auto-compare it to actual translations and spit out list of potentially unused

todo: 2 VERY IMPORTANT test on windows where all paths have spaces, i.e. set the server data path to a location with funky folder names with spaces etc
	confirm everything in raven that writes to disk still works, logging, backup, attachments, temp files served (reports) etc


todo: 2 search for //MIGRATE_OUTSTANDING in server and in client and deal with it

todo: 2 sample seeder add "In progress" status to workorder status list as there is currently no match to that

todo: 2 metrics are useless bullshit
	underreporting completely, doesn't show actual cpu usage
	how to tell if it's swapping, that's critical, how close to all memory being used up?
	should report percentage of real memory used, percentage of swap file used, percentage of entire machine cpu used
	right now seems to be showing maybe only ayanova process itself but that's not helpful when doing ops metrics tasks looking for bottlenecks
	Also, add a shorter time frame, 6 hours as smallest is bullshit, make it 1 hour

todo: 2 Log levels are all over the place at the server
	After attempting to diagnose an issue I'm leaning towards save trace for when need to see sql and put all other shit above trace completely
	the sql kind of eats up all the space, however I guess that's useful, but it's so huge it's concerning and hard to deal with
	needs a ponder and decide what is best for tech support purposes

todo: 2 add an ops notification on server boot
	this way can catch if the server is rebooting regularly in linux or iis when the processmanager restarts it

todo: 2 wrap this error in a debug build block before release:
	2021-12-22 16:19:07.0290|ERROR|AyaNova.Biz.TranslationBiz|********* GetSubsetAsync problem: Duplicate keys: WorkOrderItemPartQuantity)

todo: 2 Test with expired key, can superuser login and no one else?? **CRITICAL**
	Awaiting a raven license key generator first, currently do not have one, 404's in rockfish!!
todo: 2 rockfish generate keys for purchased licenses, the real deal
todo: 2 lost contact with db server notification message to be sent once to ops admin??
	don't want too many but should notify


todo: 2 make priority / woitem / wostatus colors distinct from each other
	whitecaps color scheme shale/pastel etc
	Note: wostatus will be the default color source so concentrate on making that look nice and clean
	change from strong primary colors to more faded pastel colors
	maybe priority in primary and status of both kinds more muted but also in different ranges so no clash
		i.e. no two the same color or even close between each so in theory you can see at a glance which is which
todo: 2 Server metrics don't seem to tell the story of teh overall server
	i.e. when reporting is jammed up on linux and the server manager shows 100% cpu, inside the ayanova server ops metrics shows a much smaller number and responds
	so it seems it's reporting only on ayanova's share of what is happening but if the overall server is bottlenecking we need to show that as well

todo: 2 make sample data appointments suitable for evaluation of calendar
	spread throughout the day
		right now a bunch are extremely close if not on the same time window for same wo
	Nicer colors
		use the whitecaps promo pastel colors for a more sophisticated look, i.e. don't take color from extreme full ffffffff but back towards gray with a bit of transparency thrown in would be nice
			shale blue
	make sure there are plenty spread near the current month outwards so that users will see stuff immediately when they open it
	put them between 8am and 5pm
	Set the calendar default to 7am for first appointment
todo:2 update to latest postgres portable and document how to do it as well or a link to how to do it
todo:2 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:2 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:2 start testing with real licensing scheme ("notfound")
	make sure automatic license updates work properly
todo:2 notify on server boot?? (general notify to admin user or whatever?)
	or on shutdown?

todo:2 errors are inconsistent some use "error" some use "code" to mean the same thing
	this is likely because "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: 2 Should the database integrity check run as a regular job?
	because a person could fuck up the db while the server is running and the server wouldn't notice until it tried to access a fucked up table



NOW
....
todo:3 notify on user login?
todo: 3 ExportController, right now is passing guid.empty to get export data so there is no job, needs to be jobified like reports so fix this up at front and back stealing from reporting code

investigate: 3 hard cap on appointments brought back controlled by client in settings otherwise unusable
	ideally centered around current date
	applies to month view
	force user to filter by tags if too much, i.e. truncated result with error so they can see it was limited
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:2 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:2 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:2 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





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






@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ 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
	Also something new from the peachtree people, online edition of something or another, a guy asked about it the other day Nov 2021



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ 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: 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: GUIDED TOUR
	- This is an extremely 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

todo: PRICING 
  Joyce has done a document of preliminary research, still outstanding:
    - she recommended same pricing for subscribers as a discount off new pricing for newbies, not sure what the new pricing is, maybe the inflation prices she researched?
    - how to adjust for fact of losing remote access extensions, do we just eat it and lose revenue?
    - which accounting and other add-on's are worth doing still?
    - Nothing about hosting ourselves or running servers for people or way it would work (I did give her the links to discourse but not sure she looked at it)
       etc so that all needs to be completely worked out, look at the discourse stuff again



@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ 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 


tradingviewpw
upupandaway1

MUSIC TO ADD TO COLLECTION
"EVERYTHINGS FINE!!!!!!!!" song bleeding etc
BOC - cities on flame
MID CENTURY MODERN TUNES - https://www.allmusic.com/album/ultra-lounge-vol-14-bossa-novaville-mw0000024024 
redbone come and get your love























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

https://www.ayanova.com/download/ayanova-windows-x64-single-setup.exe
https://www.ayanova.com/download/v8-migrate.exe
Current v8 docs home: https://www.ayanova.com/docs/

BUILD 8.0.0-beta.1-rc3 CHANGES OF NOTE

- Database *must* be freshly generated for this update as it has multiple schema changes
- added dashboard docs page
- added dashboard widget "Scheduled" available to scheduleable users (techs) which shows today's work orders they are scheduled on
- added dashboard widget "Reviews" available to all dashboardable users which shows today's Reviews
- added dashboard widget "Reminders" available to all dashboardable users which shows today's Reminders
- added dashboard widget Open customer service requests in a list
- added dashboard widget Not Scheduled showing unscheduled work orders in a list
- added dashboard widget Service rate quantity showing personal service rate quantity on chart as line or bar version
- added dashboard widget Service rate quantity - All showing all selected criteria users service rate quantity on chart as line or bar version
- Added *back* User color as it now ties in with widget charts (user edit form, import, backend, docs etc)
- v8-migrate plugin, fixed new issue related to removal of unused locale / translation keys preventing migrate
- Login form added prominent warning "beta test - not for production use"
- Seeder, minor changes to ensure future work orders don't have labor or other things that don't make sense if future date
- seeder now 10% of future wo have no scheduled users set to show off unscheduled widget
- seeder no CSR generated in future
- Fixed bug in data table filter controle when changing existing filter AND OR conditions radio buttons was not flagging as dirty so it could be saved




