diff --git a/ayanova/devdocs/todo.txt b/ayanova/devdocs/todo.txt index 9beaab75..b136e9a9 100644 --- a/ayanova/devdocs/todo.txt +++ b/ayanova/devdocs/todo.txt @@ -3,10 +3,12 @@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ -GENERAL TODO ITEMS THAT CAME UP DOING THIS SECTION - TODO: Deploy to linux server and test reporting stuff out +todo: report add "HasLogo" or "HasSmallLogo", "HasMediumLogo" to server meta data then leverage it in the logo helper? + +todo: hide swagger logo and branding in api explorer + todo: chunk-vendors has fa-brands in it which is fucking huge, what else is in there I don't need? eradicate fa-brands! Looks like I'm doing it wrong, I was using a generic NPM module when there is a Vue specific one that also has guidance to limit to just the icons I actually use: @@ -31,470 +33,8 @@ todo: need to be able to have a link system whereby a user can directly open a r todo: Default logos included with sample data - - -REPORTING - -Useful links: - https://handlebarsjs.com/ - Report templates pre-designed and open source: https://github.com/wildbit/postmark-templates - Example jsreport designer: https://playground.jsreport.net/w/admin/dI2_fUqZ - - - todo: code front end enough to see if need standalone designer or not (does it bloat the package needlessly?) - todo: Widget REPORT data must include extra report fields like User name in display format etc - todo: future changes, do I need some kind of versioning in the report or some part of it? - todo: iterate back and forth between back and front, get to basic ability to report off widget and go from there - - - - - PLAN: DATA SOURCE - Can report off single object or DataList, but then datalist isn't all the fields of the object. - Was thinking it gets sent by the client back to the server but that's bandwidth wasteful - in v7 reports are basically designed arounda single object but accomodate multiple and it's same fields? - There is really no concept of a single report vs a list report is there? - Only "summary" vs "detailed" which in essence means flat vs hiearchical for wo and less vs more fields for flat objects - I'm thinking a report is for an object type, i.e. "Widget" - reporter gets a list of id's if it's one then it's one, if it's a list then it fills out the data from the list - if user is reporting off a datalist that is filtered then the id's are all that's needed to report off that, if it's a single then just pass the id - This way server does the work of fetching the data and this will even work client-less - Server must populate an alternate version of the object because the Client consumes a widget differently than a report would - Report needs all data fetched and populated even if it's an id reference to another object - Can use name display format - When a report gets a widget it's getting something different than if the client gets a widget - Every linked ID needs to be resolved using displayformat I think - Report just wants the data all populated, though it will decide how to display it but it can't fetch it - So widget for report is mirror of widget but also includes resolved linked data, for example the user name for the userid field - I'm thinking ideally it keeps the id as well because it may be useful for report work to have the source id and be able to fetch the user record for example and populate something - Report widget is a superset of biz object widget - Does the report Widget have a full User record or just the name? - I'm thinking this is case by case, some objects will clearly need more data from related objects particularly workorders etc - So biz object has report form DTO basically that is returned based on a single or list of id's in an array always - Since data is wrangled only at the server nothing wastes bandwidth, it's up to the report designer to include or not fields and they will only get sent if in the report with the rendered report - SECURITY: - This one is tough, I guess the rights flow from the biz object on a direct request but when reporting off a notification I guess it needs to check rights at the moment of processing the report - - ACTUAL: - All data sources are arrays by default. If it's a single object then it's a single record array. - Every report is intended to be single or multiple, up to designer but the same data gets fed either way - Every AyaType has a superset report dto object that contains all the regular object fields but also extra as required for reporting - linked object id's are populate with names in display format or whatever makes sense for that object - Biz objects have a standard interfaced GetReportData method that accepts an array of id's and returns an array of actualized data for reporting / export etc - All done without security, it's the report render routes responsibility to check that for the situation of the request - - _PLAN: REPORT TEMPLATE - _ACTUAL: - _DB Fields - id - allowedroles (roles value for all roles allowed to view this report, defaults to ALL unless they set more restrictive) - aytype (Type report is designed to handle and offered in UI for areas of that type), - content (text unlimited, html source markup, not null, can reference external libs maybe or curated list of local ones?), - css (text unlimited, css passed to report, null ok), - jsprerender (javascript for modifying data in advance of rendering, prerender function is called there can be other functions it calls no problem), - jshelpers (javascript helper functions all passed to handlebars before processing), - rendertype (type to render, default is pdf, but could be text, csv etc), - *tentative locale (browser locale to be set for processing, default locale? tentative here as well, need to see what can be done / is needed, leverage ayanova client code already written) - *tenative header, footer (text unlimited html source markup, can be null), - *tentative precomp (text, precompiled template if turns out to be excessivly slow to compile on the fly) - - PLAN: RENDER - Both a route (for external calls) that returns a report and an internal biz object that is used by notification for the same purpose - so the route just calls the biz object which handles processing, getting data, checking rights and then making the report and either attaching it to an email (maybe I do need that temp server folder after all) - or return to route to return to Client end - ACTUAL: - ReportController, ReportBiz - - TODO: LOCALIZATION - This should be a display function, nothing to do with source data which is provided unaltered to the report scripts to display as they wish - Maybe a set of the smallest most used js libs for formatting for display (already made HB helpers?) - - TODO: CUSTOM FIELDS WIDGET for reporting that can produce a result from the custom fields object that is suitable for easy reporting - - - - TODO: REPORT DESIGNER / RENDER ROUTE / WIDGET OBJECT - Enough UI to get started testing reporting and seeing what features need to be added and where - Render route, pass data, design report - replicate the jsreport designer as much as necessary for our purposes but don't get ahead of things, do it incrementally - also look at v7 reprot designer for ideas - - - - TODO: BASIC CAN REPORT OFF DATA WITH TEMPLATE ENGINE WORKING TESTS - - Make a sample report with handlebars of each kind of report - Report off a single widget with handlebars - Report off a filtered widget list with handlebars - Report off a list with custom javascript functions for totals and subtotals - _Report with logo - Go through v7 reports of all kinds and look for anything to test that I might have missed above or below - - - TODO: Confirm basics before coding - _Handlebars works properly - page breaks properly - I guess when it starts a new record in a big list of data or something i.e. in a list of widgets it starts a new page on a new widget - _Wiki / Markdown renders prints - _logo / graphics - _custom javascript functions - Shared javascript libs - Localization - _handlebars helpers - Localized dates and currency - Bar codes - Mailing labels - Alternate paper sizes A4, Letter etc - Reports on each type of data anticipated - Security of scripts / scrubbing or sandboxing - make sure can't access file system at server with a malicious report - logging - log errors, handlebars template errors, javascript errors etc - timeout - handle timeout waiting for report - -SERVER render route actual: - template with content, script and style is retrieved - (for testing from default report in memory or whatever is easiest) - Datasource determined (for testing from report default) - render engine determined (for testing from report default) - locale determined (for testing from report default) - Render out and return - call render engine, provide report and data as one object I guess - check with jsreport source, what do they do for this? - return results to browser - -CLIENT TODO HERE: Nothing at client until I get to here to save backtracking - TODO: Sample reports from client end with passed in data like any of the data-table based ui pages - TODO: Sample reports from client with actual objects - TODO: build the report designer at client end - Need to get to a point where Joyce can do testing and whip up some reports and give feedback on improving that - Confirm it won't load extra stuff unless user actually designs report - If not then make it an external app or alternate or whatever it takes - - - -TODO: LOAD TEST - Absolutely must load test with a zillion records just to be sure the whole system can handle it - Also load test multiple reports over and over quickly - ------------ REPORTING NOTES ---------------------- - - -Assume headless chrome first for rendering, if it suffices then don't bother with other renderers unless it becomes necessary. - it's the most modern and probably supported long term way of doing the rendering and also easiest to grok for users since they develop in chrome should look the same or closest - - - TODO: Template engine / javascript test - Render a report off static data - Check how jsreport feeds javascript to their rendering process - https://github.com/jsreport/jsreport-core - https://github.com/jsreport/jsreport-core/blob/master/lib/render/engineScript.js - - //actual render here - https://github.com/jsreport/jsreport-chrome-pdf/blob/d3fe318aac3628d8cb62f86f8f71314f21745798/lib/conversion.js - - Design a simple report with static json data that exercises the template engine and javascript functions both shared and unique to the report - Excercise both handlebars and custom javascript and shared javascript - also css needs to be in there as well, just working, not necessarily correct or beautiful, just make sure it can work - - Process: - handlebars compiles template - handlebars runs compiled template against data and generates HTML - Open HTML generated in headless and pdf it - return pdf - -CLIENT UI - At client maybe pick output format first then select report, so can pick HTML to just view immediately, can pick pdf to download or print, can pick csv to export etc - - - -REPORT TEMPLATE FORMAT - Report template is a db stored object with fields relating to various bits of the report design: - content - the html markup for the report - css - css style to apply to report - script - javascript methods to use with report - Helpers for handlebars vs pre-process data before render? - no need for shared, can just copy or be predefined ones we provide for most situations - defaultlocale - default locale to render from - Present when: - What if, a report is designed for a widget object and handles list of widget objects - Then, the id's are passed in order to the server if it's a list and it in turn just fetches each widget and adds it to the report data based on id's - Reason being that a datalist may not have all the fields so either we include all in report mode (but then it's not coming from client as that would be wasteful if not displaying) - defaultDataAyType - default object type for this report when it's intended to report directly off an object - i.e. Widget type so all the report requires is an ID to render and it will fetch that and report it - defaultDataList - default dataListOptions values (saved datalist?) - can be subbed at runtime by giving alternate or this will just be the default - defaultData - static data saved with report like a json fragment or something - renderAsType - renderType (pdf, text, csv, etc this way the report is designed specifically for that type and if they want more than one they need to copy and modify) - - - - Data - Reports during render can be told to use ayaType and id, dynamic data list object or static data object passed directly into route - priority is aytype, direct data then datalist - can pass in a datalistoptions or actual data during render or if not specified then it looks to it's defaultDataList first, then to it's defaultData - if no data source specified then it could be just a blank template form for hand filling or something so just print it anyway - - - - -TODO: - Render route api - - route: - report/render - parameters: - reporttemplateid - (any value in template having dynamic option? or just predefined?) - dataObjectId (if reporting directly off an object type then this is the id of the object to fetch) - dataListOptions object (optional, overrides data) - data (optional, json format, overriden by dataList if specified instead) - render (optional, defaults to default PDF renderer but can support other kinds, should support more than one of same kind i.e. pdf-chrome, pdf-weasy) - enum type renderType - pdf-chrome, pdf-weasy, text, excel, docx, html - localeHint (some kind of locale hint as to how to process dates and stuff or maybe this is in the report itself) - Actually, the report itself should contain the chosen localization stuff as it will be generated without a client involvement at times - so the designer would set this, maybe it follows the server or maybe we *do* send a hint but also the report has a default locale if none specified - hard coded - Process: - consolidates the data, report, checks rights, sanitizes report html / css using whatever tool is necessary (client should also do this) - renders document, perhaps in a queue system is best - - returns: - like a download route, returns rendered document with correct mime type set - - report object - Mix of javascript, html and css and some header shit - Columns: - id, content, css, js, version?(need version for future proofing when changes to designer or system ensue), - - - -COMMERCIAL OPTIONS -=-=-=-=-=-=-=-=-=- - -Look at stimulsoft again, see email, it appears I can buy a single developer and just distribute it with ayanova at will no extra royalties etc - - - - -ROLLING MY OWN -=-=-=-=-=-=-=-=- - -DESIGN -Users will be able to design report templates inside AyaNova (unless it doesn't seperate as a bundle and bloats too much then maybe as an external app) - -This is the jsreport designer libs used for reference: https://github.com/jsreport/jsreport-studio/blob/master/package.json - -I will use the Monaco editor which is what vscode uses, here is a Vue wrapper: - https://github.com/egoist/vue-monaco - - -RENDER -Going to need to render at the server, possibly from data passed from teh client to the server or generated AT the server in the case of notification deliver reports - (Localization is a "black hole" issue if rendered AT the server) -Need to queue rendering, can't just spin up endless converters for every report - -JSReport renders at server and returns result to client, the API docs show pretty clearly how this happens: - https://jsreport.net/learn/api - Note that the api docs also give some ideas as to how I should structure my api - -HTML -> PDF - JSREPORT has a comparison table of various html to pdf tools here: - https://jsreport.net/learn/pdf-recipes - - - Headless Chrome - https://github.com/jsreport/jsreport-chrome-pdf - FAST SPEED (according to jsreport docs) - jsreport uses headless chrome by default which has built in pdf from html ability. - they use a NODE library Puppeteer for it, but there is a c# wrapper for .net core linux windows mac: https://github.com/hardkoded/puppeteer-sharp - some kind of example that may be relevant: https://github.com/kblok/netconfar-puppeteer-sharp-demo/blob/master/hacking-the-browser-api/Controllers/MediumController.cs#L13 - Maybe not the only one for c# core, need to dig around - Issues: - Issue with header / footer not being settable apparently which is a big breaking issue for many biz reports usage - someone said that another pdf tool can be used to set those post processing but fuckery abounds - other solutions below apparently don't have this issue. - Even jsreport has listed workarounds and tools to resolve this - Update: apparently there are ways: - https://stackoverflow.com/questions/44575628/alter-the-default-header-footer-when-printing-to-pdf?noredirect=1&lq=1 - see last comment seems relevant, also other linked cases all mention various things. Finally, could use a pdf writer tool to post process maybe. - - There seem to be many potential issues with missing libraries, rights and sandbox and etc etc etc on linux - These things kind of turned me off this a bit, it's not plug and play and simple - - - LINKS: - https://github.com/hardkoded/puppeteer-sharp - https://github.com/puppeteer/puppeteer - https://stackoverflow.com/search?q=puppeteer-sharp - https://stackoverflow.com/questions/62042078/puppeteer-sharp-for-server-side-html-to-pdf-conversions - https://www.singlestoneconsulting.com/blog/how-to-generate-server-side-pdf-reports-puppeteer-d3-handlebars/ - https://github.com/hardkoded/puppeteer-sharp/issues/1510 - shows being used by someone other than jsreport which buries all the details in endless libs - https://github.com/hardkoded/puppeteer-sharp/issues/1514 - - WeasyPrint - https://github.com/jsreport/jsreport-weasyprint-pdf - SLOWEST SPEED - https://github.com/Kozea/WeasyPrint based on python, does it's own rendering doesn't rely on a web browser engine like the rest - free, recommended by wkhtmltopdf author as an alternative - May be slow, slower than the other options likely, has some installation steps that are a bit convoluted but ironically only for windows as it's included in package managers - Very good support for modern css3 PAGE properties apparently - WRAPPER - https://github.com/balbarak/WeasyPrint-netcore/blob/master/src/Balbarak.WeasyPrint/WeasyPrintClient.cs - - - wkhtmltopdf - https://github.com/jsreport/jsreport-wkhtmltopdf - MEDIUM SPEED - https://wkhtmltopdf.org/downloads.html - Well used, old based on older webkit so doesn't support css3 but likely enough for our purposes - has an easy installer for all platforms - free - Has warnings about how unsanitized html can take down a server or own it somehow - WRAPPERS - https://github.com/carloscds/HtmlToPDFCore/tree/master/HtmlToPDFCore This one looks cool, all platforms supported includes binary possibly? - https://blog.elmah.io/generate-a-pdf-from-asp-net-core-for-free/ - - -HTML -> DOCX - This is a possiblity that needs to be researched, instead of pdf go docx which is in theory multi platform and openable on other devices? Not sure - https://github.com/jsreport/jsreport-docx - https://github.com/EricWhiteDev/Open-Xml-PowerTools - -HTML -> XLSX - https://github.com/jsreport/jsreport-xlsx - -HTML -> TEXT - https://github.com/jsreport/jsreport-html-to-text - https://github.com/jsreport/jsreport-text - - -TEMPLATE ENGINE - https://github.com/jsreport/jsreport-handlebars - Handlebars by default for jsreport which is easy peasy to work with - -PDF META DATA EDITING - https://github.com/jsreport/jsreport-pdf-meta - -Render outputs - JSReport renders to different outputs, they call it recipes https://jsreport.net/learn/recipes - HTML - just outputs as html for viewing in the browser / printing from browser - PDF: https://jsreport.net/learn/pdf-recipes - Outputs 5 different pdf converters because they all support different feature sets which is ominous - -"BLACK HOLES" - How to localize same as client but at server for dates and currency etc - maybe if it's rendering via a headless chrome can just pass the locale strings from the client browser or something along those lines - maybe since it's all one user generally in same zone they can just stick with one format for all reports? - - Can I render at the client for some things or better to just go all server? - Does client send data back to server for render or ...? -=-=-=-=- - - -Research procedure: - REQUIREMENTS - Look at existing reports in v7 and generalize them and the features provided that are used - pdf, email, print, download - print / download / email / export immediately as an option no only preview and then those other things - custom fields must be available, perhaps as widgets that handle if they are present or hidden and etc - whatever is easiest from a design point of view - wiki must be a type of field like any other that can be inserted into a report and will properly render - this way they can make a report with only a wiki or a report with a hybrid data and wiki or whatever - and it flows with how the wiki is now just a field on the data object like any other - grid filter options and filter name must be an available field for report designer - probably need a filter summarizer widget that can also be used inside the UI at the top of grids as well - logo field with choice of size to correspond to the logo route - graphs and charts that show in UI should be printable / KPI Metrics stuff - labels wtf? - bar codes, holy fuck this looks good: https://github.com/metafloor/bwip-js used by jsreport too in sample - notification needs to be able to generate reports and send them - Schedule form reporting - keep in mind, but ultimately it's probably a dedicated schedule thing - - test harness UI so can quickly test out things via widget list - if it's faster, just whip up some kind of standalone project for testing? - - Once clear on needs, research solutions online - This case has a lot of old research in it: - https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3451 - look at commercial ones just to steal ideas - - POTENTIAL STRATEGIES - HTML to PDF generated at the server then downloaded or viewed - JSREPORT commercial tool seems to do this and if you look at their samples in their designer it gives clues as to how we could do it ourselves - - OPEN SOURCE TOO: https://github.com/jsreport - - Their example playground for designing their sample reports shows exactly how they do it, it's like I imagined, templated like mustache / vue exactly - probably rendered to pdf need to dig more and the samples show exactly the types of css and html features needed to do reporting - https://playground.jsreport.net/w/admin/dI2_fUqZ (for example this sample report shows
which is interesting) - - The examples are golden for me if I want to go this route, they showcase solutions to literally all the problems I recall Joyce mentioning. - Here is how they describe the overall concept: " The original concept based on javascript templating engines and pdf converters has been proven in time by more than 200 000 downloads." - - - - - OPEN SOURCE TOOLS - JSREPORT it's fucking open source completely!!! - https://github.com/jsreport - I can just pore over it and get the gist of what I need - - Definitely something here but not sure if it's appropriate or not: - https://github.com/FastReports/FastReport - They have commercial versions, not clear what this open source one is specifically in relation to the rest but it puports to be free and work on .net core - - COMMERCIAL REPORTING TOOLS FOR REFERENCE / IDEAS - Seems as though they render on the server then just transport somehow to the client - maybe canvas, as an image, etc - https://www.telerik.com/blogs/using-telerik-reporting-in-net-core-applications - HTML, PDF and OpenXML-based renderings are supported on Linux/macOS. - uses GDI to draw to and requires a libgdiplus library for linux macos to replicate Windows method - Seems like it's not a step in the right direction as it's very Windows graphical in nature and they just try to throw a shim over it on linux - - JSREPORT - https://playground.jsreport.net/w/admin/dI2_fUqZ - - - - - -TODO: Report templates pre-designed and open source: https://github.com/wildbit/postmark-templates - - - -todo: from reporting specs doc, not vetted, was written a while ago: - - All v7 reports ported to RAVEN - - ALL Fields even the ones that don't show on the report but are available for adding to a report in the editor need to be available - - - REPORTS - - Report object has following properties: - - DataList name it's based off of - - Required fields from DataList - - Report template itself with it's own code and template requirements TBD - - Report columns returned: When user selects to show a report, client will fixup any missing columns from the datalistview currently in use - - For example they are viewing a table based on a TestWidgetDataList DataListview with only 3 columns in it - - They drop down the reports list which shows all reports based off TestWidgetDataList view - - They select a report to print. - - Report code looks at report's required fields from DatalistView and sees report uses 6 fields listed - - Code compares report fields to in use DataListview fields and appends any report required fields missing from current view to the right of the collection in the current DataListview - - When report is run it will have all fields this way returned but will still be sorted and filtered by table view - - As part of editing process user can select an existing datalistview to prime their report editing view - - A report can be selected from any client table that is based on the same view - - -TODO: Reporting datasources - Needs to be able to handle getting data from different types of sources and be cool with it - e.g. Some datatables with selections are directly off a server list, not the regular datalist - others are datalist - yet others may just be an array at client with no tie to server at all - IDEALLY: report code should just handle whatever data is thrown at it. - Maybe each type of data should have a property to indicate it's of a kind so the report code knows what to offer / handle with it - Reporting code needs to be flexible and just work with what it gets - -todo: REPORTS v8 MIGRATE / EXPORT (CUSTOMIZED NOT STOCK) FROM v7? Try to see if plugin can export any aspect of reports +todo: Will this be a thing or keep as a case for future? + REPORTS v8 MIGRATE / EXPORT (CUSTOMIZED NOT STOCK) FROM v7? Try to see if plugin can export any aspect of reports code behind? even if just exported as comments in js for the new format just to have the formula's etc basic layout, maybe as HTML? @@ -502,30 +42,42 @@ todo: REPORTS v8 MIGRATE / EXPORT (CUSTOMIZED NOT STOCK) FROM v7? Try to see if Any info to assist report designer with V8. Be nice to see field list with translation for equivalent new. -todo: REPORTING wiki Download, open as pdf, email? +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: CUSTOM FIELDS WIDGET for reporting that can produce a result from the custom fields object that is suitable for easy reporting + +TODO: Report confirmation checklist + page breaks properly EXAMPLE NEEDED + I guess when it starts a new record in a big list of data or something i.e. in a list of widgets it starts a new page on a new widget + https://playground.jsreport.net/w/admin/dI2_fUqZ (for example this sample report shows which is interesting) + _Wiki / Markdown renders prints EXAMPLE NEEDED + _custom extra javascript functions EXAMPLE NEEDED + Bar codes bar codes, holy fuck this looks good: https://github.com/metafloor/bwip-js used by jsreport + Mailing labels + Alternate paper sizes A4, Letter etc + Reports on each type of data anticipated + Security of scripts / scrubbing or sandboxing + make sure can't access file system at server with a malicious report + logging + log errors, handlebars template errors, javascript errors etc + timeout + handle timeout waiting for report (infinite loop scenario?) -todo: REPORTING wiki in datalist? - - will need for reports but can't show in a grid, maybe it's available for something but can't be seen or filtered? - - shows in grid as basically a bool like has wiki or not but doesn't show any actual wiki? - - this is only to feed report, no other purpose to it. +TODO: ON UPDATE TO NEW version + Right now it doesn't always refresh, have to manually do so, it should reload and ditch the cache on update, not sure why it isn't to be honest + Try a test of it here locally and with release build, check network traffic, is it in fact actually updating and it's just the login page that isn't or...? + have an url that opens automatically or a notification and link to one after a new version has been detected just + like visual studio does in order to show what is new in this version + maybe ideally it opens to a new document page "whats new in version x.xx" + this way no need to go beyond the local server or hit our site unnecessarily -Report templates pre-designed and open source: https://github.com/wildbit/postmark-templates - -todo: Report editor for creating new report accessed from the report any **existing** reports preview form if have the rights. - - or maybe from the report selector dialog box if they have the rights, although would that fuck up navigation process? - - This seems better because, what if they can't preview a report for some reason, then they can never fix it or make a new one? - - NOT like v7 where accessed from the object edit form (this is to keep menu options down to a reasonable number) - - Every list sb reportable case https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3653 - - Also search results and history? Can feed from UI level to report component? - - Reporting case with various things pertinent to look over BEFORE starting in on this: - https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3451 - - https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/1849 - Instantly print? https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/818 - Guy took the time to request it, so have a look think and see if there is a way to do this - https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/1734 - - https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/962 DASHBOARD / KPI / BIZ METRICS todo: DASHBOARD @@ -552,6 +104,7 @@ todo: MAPPING https://blog.mapbox.com/openstreetmap-a-global-map-for-worldwide-insight-4e041cbf1ec1 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 @@ -577,19 +130,6 @@ todo: clickable urls - ------------------ - -TODO AFTER CLIENT block ABOVE: -TODO: ON UPDATE TO NEW version - have an url that opens automatically or a notification and link to one after a new version has been detected just - like visual studio does in order to show what is new in this version - maybe ideally it opens to a new document page "whats new in version x.xx" - this way no need to go beyond the local server or hit our site unnecessarily - - - - @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@ ROADMAP STAGE 6 - INSTALLER, LICENSING, ROCKFISH SUPPORT FOR RAVEN @@ -672,6 +212,7 @@ todo: Notifications todo: can beta test at this point 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"