######################################################################
Grab bag stuff that didn't fit into official TODO 
and may not be worth doing or isn't urgent
######################################################################









{
  "data": {
    "ayaTypes": [
      {
        "ayaType": "Backup",
        "change": "OpsAdmin",
        "readFullRecord": "BizAdminRestricted, BizAdmin, OpsAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "BizMetrics",
        "change": "BizAdmin",
        "readFullRecord": "BizAdminRestricted, Accounting, Sales, SalesRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "Contract",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "Customer",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "CustomerNote",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "CustomerServiceRequest",
        "change": "BizAdmin, Service, Customer",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, CustomerRestricted",
        "select": "All"
      },
      {
        "ayaType": "DataListSavedFilter",
        "change": "BizAdmin",
        "readFullRecord": "All",
        "select": "NoRole"
      },
      {
        "ayaType": "FileAttachment",
        "change": "BizAdmin",
        "readFullRecord": "BizAdminRestricted, BizAdmin",
        "select": "NoRole"
      },
      {
        "ayaType": "FormCustom",
        "change": "BizAdmin",
        "readFullRecord": "All",
        "select": "NoRole"
      },
      {
        "ayaType": "FormUserOptions",
        "change": "All",
        "readFullRecord": "All",
        "select": "NoRole"
      },
      {
        "ayaType": "Global",
        "change": "BizAdmin",
        "readFullRecord": "BizAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "GlobalOps",
        "change": "OpsAdmin",
        "readFullRecord": "OpsAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "HeadOffice",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "License",
        "change": "BizAdmin",
        "readFullRecord": "BizAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "LoanUnit",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "LogFile",
        "change": "NoRole",
        "readFullRecord": "OpsAdminRestricted, OpsAdmin",
        "select": "NoRole"
      },
      {
        "ayaType": "Memo",
        "change": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted",
        "readFullRecord": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted",
        "select": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted"
      },
      {
        "ayaType": "Notification",
        "change": "All",
        "readFullRecord": "All",
        "select": "NoRole"
      },
      {
        "ayaType": "NotifySubscription",
        "change": "All",
        "readFullRecord": "All",
        "select": "NoRole"
      },
      {
        "ayaType": "OpsNotificationSettings",
        "change": "OpsAdmin",
        "readFullRecord": "BizAdminRestricted, BizAdmin, OpsAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "Part",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PartAssembly",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PartInventory",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PartInventoryDataList",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PartInventoryRequest",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PartInventoryRequestDataList",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PartInventoryRestock",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PartWarehouse",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "PickListTemplate",
        "change": "BizAdmin",
        "readFullRecord": "All",
        "select": "NoRole"
      },
      {
        "ayaType": "PM",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItem",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemExpense",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemLabor",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemLoan",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemOutsideService",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemPart",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemScheduledUser",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemTask",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemTravel",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PMItemUnit",
        "change": "BizAdmin, Service",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "Project",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "PurchaseOrder",
        "change": "BizAdmin, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, InventoryRestricted",
        "select": "All"
      },
      {
        "ayaType": "Quote",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItem",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemExpense",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemLabor",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemLoan",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemOutsideService",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemPart",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemScheduledUser",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemTask",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemTravel",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteItemUnit",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "QuoteStatus",
        "change": "BizAdmin, Service, Accounting, Sales",
        "readFullRecord": "All",
        "select": "All"
      },
      {
        "ayaType": "Reminder",
        "change": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted",
        "readFullRecord": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted",
        "select": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted"
      },
      {
        "ayaType": "Report",
        "change": "BizAdminRestricted, BizAdmin",
        "readFullRecord": "All",
        "select": "All"
      },
      {
        "ayaType": "Review",
        "change": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted",
        "readFullRecord": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted",
        "select": "BizAdminRestricted, BizAdmin, ServiceRestricted, Service, InventoryRestricted, Inventory, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor, OpsAdminRestricted, OpsAdmin, Sales, SalesRestricted"
      },
      {
        "ayaType": "ServerJob",
        "change": "OpsAdmin",
        "readFullRecord": "BizAdminRestricted, BizAdmin, OpsAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "ServerMetrics",
        "change": "OpsAdmin",
        "readFullRecord": "OpsAdminRestricted, OpsAdmin",
        "select": "NoRole"
      },
      {
        "ayaType": "ServerState",
        "change": "OpsAdmin",
        "readFullRecord": "All",
        "select": "NoRole"
      },
      {
        "ayaType": "ServiceRate",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, Tech, Sales",
        "select": "All"
      },
      {
        "ayaType": "TaskGroup",
        "change": "BizAdmin, Service",
        "readFullRecord": "All",
        "select": "All"
      },
      {
        "ayaType": "TaxCode",
        "change": "BizAdmin, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "Translation",
        "change": "BizAdmin",
        "readFullRecord": "BizAdminRestricted",
        "select": "All"
      },
      {
        "ayaType": "TravelRate",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Service, Tech, Sales",
        "select": "All"
      },
      {
        "ayaType": "TrialSeeder",
        "change": "BizAdmin, OpsAdmin",
        "readFullRecord": "BizAdminRestricted, OpsAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "Unit",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "UnitMeterReading",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "UnitModel",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "User",
        "change": "BizAdmin",
        "readFullRecord": "BizAdminRestricted",
        "select": "All"
      },
      {
        "ayaType": "UserOptions",
        "change": "BizAdmin",
        "readFullRecord": "BizAdminRestricted",
        "select": "NoRole"
      },
      {
        "ayaType": "Vendor",
        "change": "BizAdmin, Service, Inventory, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrder",
        "change": "BizAdmin, Service, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractorRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItem",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractorRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemExpense",
        "change": "BizAdmin, Service, Accounting, TechRestricted, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractorRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemLabor",
        "change": "BizAdmin, Service, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractorRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemLoan",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractor, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemOutsideService",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemPart",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractor, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemPartRequest",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractor, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemPriority",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemScheduledUser",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractorRestricted, SubContractor, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemStatus",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemTask",
        "change": "BizAdmin, Service, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractorRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemTravel",
        "change": "BizAdmin, Service, Accounting, TechRestricted, Tech, SubContractorRestricted, SubContractor",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractorRestricted, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderItemUnit",
        "change": "BizAdmin, Service, Accounting, Tech",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, TechRestricted, SubContractor, Sales, SalesRestricted",
        "select": "All"
      },
      {
        "ayaType": "WorkOrderStatus",
        "change": "BizAdmin, Service, Accounting",
        "readFullRecord": "BizAdminRestricted, ServiceRestricted, Tech, Sales, SalesRestricted",
        "select": "All"
      }
    ]
  }
}












todo: validation errors not expanded in errorbox, 
	for example saving a widget with same name results in proper display at name field but in error box says: 
	Validation error
	ErrorAPI2200
	I expect it to say the full errorapi2200 bit or simply "Validation error"
	or, maybe it's ok as is?


todo: Attachments button should indicate attachments:
	Flags hasattachments status visually, do it!
	(Says add attachment when none)



todo: going to need some default views for certain lists that come with AyaNova automatically (even if migrating)
	some lists may need a list of all but also a list of all relevant items only (part inventory?)
	Views that supply common tasks or functionality that was in v7 in another way
	perhaps need a case to consolidate that under or maybe add the views during development?
todo: Look for english text at server and client source code and change it all to translation keys

todo: Users / Contacts lists not reportable from main UI
	not using regular DataList for user lists and contact lists?
	currently not reportable as a list easily since not a GZDataList but could probably rectify that even without switching to datalist
	likely just a bit of code required to enable it
todo: consider that a picklist could come in separate versions that are most appropriate to their area
	so a PO might show a different part list than a wo etc
	not sure if sustainable as the system just expects one picklist per ayatype, but it could be tied into the variant or 
	maybe needs additional hint
todo: PROBABLY NOT REQUIRED SEE BOTTOM LINE BELOW: missing feature, can't filter widgetlist by User due to no UserList being available
	Is this meant to be text only filter and we have no id filter system?
	How hard to add proper list selection and ID because it seems important?
thoughts:
	I think it might be possible to do this, but may not be desireable to do this:
		Right now it assumes user is filtering by name which is useful and easy in some ways
		if it was by ID that's pretty specific and not necessarily better for the user
		it's better that they can select by click
		but it's limiting in that they can't type "Ford*" and get all items that start with "Ford " i.e. all Ford dealers 
			but if they want a specific ford dealer they can type "Ford Nashville Center" or whatever and get that specfic one
		## BOTTOM LINE: the text filter works perfectly even for filtering widgets by user name and you can do starts with etc so easy peasy, I don't see the need for this
possible implementation:
	it appears that the server code filter criteria builder is built with this in mind (see below)
	so it may be a case of changing DataList field definitions like this one:

	   FieldDefinitions.Add(new AyaDataListFieldDefinition
            {
                TKey = "WidgetName",
                FieldKey = "widgetname",
                AType = (int)AyaType.Widget,
                UiFieldDataType = (int)UiFieldDataType.Text,
                SqlIdColumnName = "awidget.id",
                SqlValueColumnName = "awidget.name",
                IsRowId = true
            });

	to uiFieldDataType = InternalId instead and some fixup at the client datagrid to support that as a text view column.
	For now I'm going to leave it as is, it's not the end of the world to have to redefine it (though post release it might get ugly)

Server:datalistsqlcriteriafilterbuilder:
  //prep for possible ID field filter instead
                    string columnNameToFilter = string.Empty;
                    UiFieldDataType DataTypeToFilter = UiFieldDataType.NoType;
                    //Check if filtering by ID rather than by name
                    //this is indicated by this column being an id type
                    //and by the comparison operator being eq or neq
                    //and the value being a number not a string
                    if (DataListField.HasIdColumn() && IsPossibleIdValue && (opType == DataListFilterComparisonOperator.Equality || opType == DataListFilterComparisonOperator.NotEqual))
                    {
                        columnNameToFilter = DataListField.SqlIdColumnName;
                        DataTypeToFilter = UiFieldDataType.InternalId;
                    }
                    else
                    {
                        DataTypeToFilter = (UiFieldDataType)dataType;
                        columnNameToFilter = DataListField.GetSqlValueColumnName();
                    }


todo: VUE / VUETIFY ROADMAP RELEASES (Sept 23 2020 was put on hold as it appears vuetify is way behind so looking like post release but check again here)
	Q1 2021 is vuetify v3
	https://vuetifyjs.com/en/introduction/roadmap/
	look at what's coming on the radar before release in the big libs I'm using at front end as well, i.e. new vue or vuetify major release etc
	I would really like to release without a huge new migration looming over my head post release with potential breaking changes
	Vue 3.x is about ready now or very shortly: https://v3.vuejs.org/guide/migration/introduction.html#overview
		"The Composition API is purely additive and does not affect / deprecate any existing 2.x APIs. I"
		looks like I can switch to vue 3 without code changes, at least when it comes to composition api
	Vuetify 3.x is lagging way behind vue 3.x and doesn't appear to be even close so 
		Put front end newification on hold until it all shakes out, looks like post release`
	

todo: See if this has a use: as an aside there is a relative time formatter available which might be handy 
	does locale aware things like "5 days ago" or "8 years from now" etc
		https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat

todo: hide swagger logo and branding in api explorer
	Is this really that important?
	also, in the docs is a section specifically saying I should do something because I'm using newtonsoft json not microsoft built in
		https://github.com/domaindrivendev/Swashbuckle.AspNetCore#systemtextjson-stj-vs-newtonsoft
	https://github.com/domaindrivendev/Swashbuckle.AspNetCore


todo: keycodes mirror common menu options like save close back etc
	Ok, half coded this then realized it would conflict with almost every browser and os combination plus whatever hotkey helper people have installed
		https://stackoverflow.com/questions/3329420/what-are-cross-browser-and-cross-os-safe-keyboard-shortcuts-usable-for-web-appli
	but, if I were to do it then this is how:
	https://github.com/jaywcjlove/hotkeys
	import hotkeys from "hotkeys-js";
	//https://github.com/jaywcjlove/hotkeys/issues/115#issuecomment-654283151
	Vue.prototype.$keys = hotkeys.noConflict(true);
todo: can I support keycodes for saving in AyaNova and other shit that are the same as in v7 or as much as possible, i.e. ctrl-s to save (or whatever was defined)
	watch out the report editor uses a bunch of hotkeys pre-defined
	What v7 used to support:
		f1 - help,     case (Keys.Alt | Keys.X) //Close form, alt-w new workorder, alt-m new pm workorder, alt-q new quote, alt-c new client, alt-u new unit, alt-p new part, ctrl-alt-g grid criteria for development, 
		IMPORTANT / DO THIS: insert date and time (localized) as text anywhere with a key combo
			https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/1514



todo: service workers for monaco going in root of website folder, must be a config setting to move it into the proper place (not there)
	couldn't find anything about it, may need to post to ask, it's not the end of the world but kind of stupid looking as all the rest of the js is in subfolder
	https://github.com/microsoft/monaco-editor-webpack-plugin/issues/126
	awaiting reply, if nothing by the time I get here then delete and wait for email notification or if I care enough again to bother with it (cosmetic)


todo: consider feature to set server to always use a pre-set browser locale settings and not the ones in the browse itself
	Scenario is user in another country but needs to login and work with central server?
	server - wide 
	User specific
	YAGNI / TTM?

todo: REPORTING bits and pieces
	- page breaks properly EXAMPLE NEEDED
		this is the current CSS property, not the one jsreport was using: https://developer.mozilla.org/en-US/docs/Web/CSS/break-before		
		There are many options including ones for columns and some to prevent page breaks splitting up blocks.

			<div style="break-before: page;">
				<h2>{{ Name }}</h2>
				<div>Notes: <span class='example'>{{ Notes }}</span></div>
			</div>
		
		old jsreport ref:	https://playground.jsreport.net/w/admin/dI2_fUqZ (for example this sample report shows   <div style="page-break-before: always;"></div> which is interesting)	
	- print properties in css ref: https://www.tutorialspoint.com/css/css_print_references.htm
		@page https://developer.mozilla.org/en-US/docs/Web/CSS/@page

	- custom extra javascript functions EXAMPLE NEEDED
		actually there's nothing really to this, just define function outside of the prepare block and it's there to use

	- Mailing labels
		if a hassle can skip, it's an unusual thing probably today and users could export to open office then print or whathaveyou

	- Alternate paper sizes A4, Letter etc
		https://developer.mozilla.org/en-US/docs/Web/CSS/@page/size
		Also note that can pass on pdf render options to the puppeteer pdf rendering code which include 
			http://www.puppeteersharp.com/api/PuppeteerSharp.PdfOptions.html

	- Helper for datalist filter human readable
		also useful for the UI of the datalist as well

	- readable errors:
		https://stackoverflow.com/questions/56959242/how-do-i-get-readable-browser-page-errors-out-of-puppeteer-sharp

todo: notification queue?  Is there a need for a form where can see all queued notifications and delete them or something in case of issues?
	or maybe  just a single clear it all out button?\
	
todo: datetime controls, would be nice to add a More menu | that can be used to 
	pick date ranges like if it's a start date it can quickly be used to pick the first day last month or 
	last day of a pre-set range from our already defined date range choices for grid filters
	some of the 3rd party date pickers were like that

todo: ON HOLD TIL LATER Lagging typing in name field on customize form for data grid filter 
	Giving up on this for now, but noticed the following:
		No exceptions or errors just regular processing
		On a lighter grid with less columns it's much faster so the column count contributes majorly
		If I remove the v-model binding from the name control it types fast so it's the recalc going on from the model change
	TO TRY LATER: 
		More computed property usage (if any now) and less methods because functions run on every change wherease computed are not if not necessary
			methods are going to be slower than computed properties theoretically
			Pick through and replace function calls in UI with computed properties bit by bit and see what happens
		Several collections bound to array in data object, is that array changing on typing text?  Triggering something?
			Should it be bound to a computed getter instead of directly to the data object?
			

todo: document "variants" for picklists somewhere in the API docs
	UserPickList inside, outside
	UnitPickList customerid:333

todo: erasedatabase for import causes a conflict with client cached settings like lxistview etc
	Noticed it when v8 migrate and superuser account getting error about missing datalxistview when reviewing imported data
		was easy to just switch to the default view and force it to reset for that grid so not life or death issue for sure
	Client needs to also erase it's cache, but how will it know?
	Maybe not a significant issue, if needs addressing look into a flag of some kind, maybe a version match or something
	but considering how rare this would be outside of onboarding etc I'm inclined to maybe say fuck it.
	Best solution probably when client sees something it expects to be at server is missing to trigger a reset process