Files
raven-client/ayanova/devdocs/todo.txt
2020-09-08 22:53:19 +00:00

833 lines
46 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 4 - REPORTING / DASHBOARD / KPI
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
GENERAL TODO ITEMS THAT CAME UP DOING THIS SECTION
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:
https://github.com/FortAwesome/vue-fontawesome
This could be a big breaking change so need to do it carefully and all at once as it's own project
Definitely need to do though, it will save a lot of size to just include the actual icons I'm using which is a handful
todo: Why is the delete button pushed to be exposed all the time, surely it's not that commonly used?
todo: LOGOUT UI button is still fucked on mobile
needs a re-think, positioning it at the bottom is not working
todo: think about gz-error box and v-if="formState.ready"
error can't show if form fails to init for some reason!
or maybe it can because it's set to show in case of error during init
todo: need to be able to have a link system whereby a user can directly open a report from an object via one link after login
just like how you can open a specific widget from a url link, but to extend that there is also a report parameter and it triggers
the ui to first open the object then populate it from the report
Maybe a report viewer page after all or phantom link with no page that just opens the report directly as if the user had gone through the objects edit form
Maybe even a report viewer URL that is based off the server and they never actually use the full client software?
meh
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 <div style="page-break-before: always;"></div> 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
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?
anything that would help, even just the name of it and it's existence and a TODO in the middle is better than nothing at all
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: 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.
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
- Joyce kpi / charts and graphs
- these cases:
https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/2024
https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/1974
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@ ROADMAP STAGE 5 - FINALIZE ALL NON BIZ OBJECT SPECIFIC FUNCTIONALITY
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
todo: Much of this stage below needs TRIAGING, do that first.
Any real (corebizobject) shit goes to stage 7
todo: MAPPING
getting a *lot* of request about this
https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/1816
maybe stage 7 or I guess could fake it for now, it's going to be known what will be needed
https://news.ycombinator.com/item?id=23722133
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)
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: back and forward buttons when running without browser controls in application mode?
- wait and see on this one, as it will be likely outside of any particular form so not something to be baked in early necessarily
todo: GUIDED TOUR
- This is an important feature and at least get a basic one in there for starters and initial release
- This is a replacement for the tutorials and videos in v7 a
- Need to add that auto-pilot thingy that allows for guided tours in HTML apps
- Specifically it should at least have an ONBOARDING walk through of how to move around, enter data, get help etc. Not feature specific but usage specfic.
- Later I'll add feature specfic tutorials like how to make a workorder etc
todo: clickable urls
https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/1738
-----------------
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
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
todo: WINDOWS INSTALLER
Runner harness wrapper thing?
even if windows only
it could modify config since it's outside the server
check for Postgres server extant and if not automatically start the standalone postgres instance
manage postgres start and stop and configuration changes, sit in tray, run AyaNova server from there?
easy way to select command line params without resorting to editing text files for end user
initially it's an installation option, but then need to edit after the fact
Quick check of installers available still and is it still kosher to keep using INNO setup or is something better, more supported by windows etc?
Wix if want MSI (some say that's desireable)
INNO is still relevant
I don't need hardly any requirements that can't just be copy or unzip deployed so maybe don't even need an installer for now?
(zip distribution is going to be problematic with Windows file protection shit)
https://docs.microsoft.com/en-us/dotnet/core/deploying/
https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
Completely packaged and installable. REady for users to install as a test as I iterate stage 7 below
All the stuff needed for someone to run it as a test without the real objects yet.
Some kind of expiring license so they can't just keep using it as fucked as it may be some might do that
I want short targetted testing only, not someone downloading and trying it out a month later, that's useless for us
This needs to be focused on what I need to get from people about testing
todo: LINUX INSTALLER
Linux users don't mind doing the manual config thing as much, they're used to it and it could just be a shell file anyway
So mainly this would be a documentation steps to install type issue
todo: DOCUMENT DOCKER
Present dockerfile maybe for docker installation with FILES folder pre-ready to build / run
Whatever docker needs
Or maybe private registry with docker images on our servers somewhere
todo: rockfish, can't do purchase for raven or view it I think
Test a whole sales process from eval to purchase and make it work
todo: rockfish, upgrade to latest bootstrap, out of date Currently
todo: rockfish, trial license fetched On date not updating? (not showing in UI)
todo: Joyce rockfish notes:
Licensing:
noticed that the field "Fetched on" is NEVER updated.
is it much to be able to see the TIME as well as the DATE, when "Requested" and when "Processed"?
There are drop down selections NEW, APPROVED, REJECTED for the (already generated) listed keys. But can not actually save to a different Status. What is the purpose of the drop down options if can not select?
todo: Discourse bootstrapping install
look over, get ideas make case steal ideas profit FTW$
https://github.com/discourse/discourse/blob/master/docs/INSTALL-cloud.md
//here is their standalone config yml definition for DOCKER
https://github.com/discourse/discourse_docker/blob/master/samples/standalone.yml
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 7 - "REALITY"
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
All in on porting over all the real objects from v7
todo: First of all triage the features to port over in the sanest order so not stubbing too much stuff
Try to get scheduleable stuff early because schedule form will take some time
todo: Schedule form
- new gold standard is Google schedule so emulate that amap
- This one is big but requires the data to be there so as soon as implement enough things that are scheduleable then do this
- printing / reporting
todo: Notifications
Many are on hold until there are real objects to code against, now is the time to code them as the objects are added
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 :)
todo: Document in user manual all form controls with instruction on how to use the various controls etc
- "Anatomy of a AyaNova Form"
WORKORDER UI
todo: Investigate Workorder structure and datagrid see case https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3768
Likely that workorder grids inside will not be full blown custom datagrid I wrote but just a vanilla v-data-table control since there is likely no need for the full customization shit
todo: workorder UI layout stuff (TTM!! Don't re-invent the wheel!)
There's been a lot of ideas about wo floating around and considered, but at the end of the day what I have works so maybe try to meld
into what I have the new concepts and see what comes out. Support a rich wo UI on big screens and scroll around UI on phone maybe.
some notes:
Workorder UI good ideas here: https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3475
Basically (based on RI) it boils down to don't make the user go up to the workorder item level when they can go sideways directly to an alternate child of woitem
i.e. going from parts to labor shouldn't require going up a level
All workorder in one document and just really really tall? (people bitch about RI requiring too many navigation steps to get to shit)
Header and items in one document then bottom in seperate pages?
Is it going to be far easier to code this bitch if I have all the workorder data at hand or..?
How does WBI handle all this because it's kind of the poster child for RAVEN
Workorder is one of those things that may require different views for phone and tablet and laptop etc
Kind of like two views, tiny phone and anything larger
On a PC people will want and expect it to look as much like v7 workorder as possible, maybe that's still a valid layout
just tweaked to work better as a web app a bit but theoretically I could almost duplicate that layout with the tools I have
Consider UI in this as well, will need to decide at least what is visible when
Workorder UI good ideas here: https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3475
How to add items, like new woitem?
send to server get back new object?
lots of biz rules and stuff need to happen, want to minimize load at client
but lots of data back and forth is not ideal
maybe request a woitem and get it back?
what exactly needs to be processed in the wo when items are added / removed?
math / totalling?
simple calcs sb client doable
this will drive what has to happen.
Need to go over all wo features and factor them into this decision properly
The whole idea of a completed section of a wo and stuff, is that dropped due to TTM or still viable?
maybe can pick out the best new features of that which can be integrated into existing design rather than re-inventing the wheel
Here is an overview: https://rockfish.ayanova.com/default.htm#!/rfcaseEdit/3412
How best to be able to service LoanUnits on a workorder?
Just make them Units with extra properties exposed if type of loaner?
This seems simplest, but what will it effect?
Hard to make them serviceable if they are an alternate table of source for what's being repaired as that breaks a lot of other code or adds exceptions
Customer is then who exactly because it's fundamental to a lot of wo functionality?
from a biz perspective isn't it like you are your own customer when you service your own equipment that you loan out?
Does Serial field need to be numeric, could it be text instead?
prompted by case 3428 saying that it's hard to deal with constant conversion to text for UI etc
plus, I'm thinking it opens door to textual scheme like appending -A or whatever to a wo.
or, is that a display issue?
Calling something "serial" implies it's unique but it isn't, maybe I should call it "number" instead or "ID" or something?
INFO: did a test workorder with ALL fields filled out heavily and one woitem, exported from db entire graph based on detailed report so every line was every item repeated
still only 84kb and it's a lot bigger than any typical wo in v8 would be as it will be far more efficient without having to repeat lines flatly
so I think size of object is a non-issue really from a practical standpoint.
UI
idea: UI reflects tentativeness state of object:
The UI doesn't imply something is done by changing it fully until the save is completed.
This serves two purposes:
1) user knows at a glance what isn't saved yet and will know it's waiting for save clearly, hopefully leading them to save more often,
2) client doesn't need to track invisible shit behind the scenes, can more easily do patch updates right off UI source
e.g.:
if deleted a row in parts, that row doesn't disappear but rather shows crossed out, maybe grayed out but still there until save to indicate it's tentative status
if added a row, shows green or something or bold or asterisk, (can style with css based on state) until saved
problems:
how to handle regular fields that are changed (that's a lot of field data to track for changes)?
Maybe client keeps a virgin copy of the original wo for comparison
periodically does a compare and flags differences on updates?
(this would also help to serve as an Undo maybe?)
todo: Documentation
Need to think this through carefully
Need to get the critical bits in for onboarding and importing so people can get going
Most important stuff is anything non-obvious
Seems pointless to have one doc per form that just says "The name field is the name and must be unique"
maybe have that kind of stuff in the form basics and then have a doc per OBJECT instead with anything unique or interesting about the object
(and each object form has a link to formbasics so can link to the object form from UI and they get both)
Parts of it can be done post-release for sure
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 8 - EXTENSIONS (was plugins)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
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?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@ ROADMAP STAGE 9 - RELEASE
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
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
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
@@@@@@@@@@@@@@@ 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 2020 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
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