Organization-Guide/Project/PROJECT.md
2022-04-23 10:12:28 +02:00

71 KiB

Project Status and Tasks

Summary

Last update of this file: 2022.04.23

Most recent changelog

April 2022

New

Application
Framework

Bug fixes

Framework

Other

Challenges & problems

UI

  • Adding existing events to dynamically added DOM elements becomes a real problem.
    • Solution: Implement event bubbling

Key tasks

Priority Category Task
2022.08.27 Scope Which modules should be developed first
2022.08.27 Scope Which features must be part of the modules at the start
2022.08.27 Scope What is the expected timeline for the different modules
Navigation Allow to hide navigation elements even if the module is installed
Navigation Also disable routing for front end. This way only the functionality is available (api)
Customer Management Implement names, address, contact elements
Customer Management Implement custom fields
Job Manage jobs
Job Consider to combine Job and Workflow (e.g. job only schedule + cmd, workflow is the script to execute)
Tag Implement a tag search hook which finds content based on tags
Search Implement a search result page which gets populated from api search responses. The search result should have two templates (list and module specific). The list is just a simple link list, the module specific table groups the results from the different modules together and allows every module to show their result list in a special way (e.g. media files, tasks, ...).
UI Select Create a select with a search field (data can be remote or local), with mandatory option, with selected default value
Advanced select
UI / Forms Elements added to the DOM should automatically get bound (e.g. use event bubbling)
UI / Forms Implement local (inline and external)+remote add function
UI / Forms Implement local (inline and external)+remote update function
UI / Forms Implement local + remote delete function
UI / Forms Redirect to other page after success (define data-redirect?)
UI / Tables Implement local + remote re-order
UI / Tables Implement local + remote sort (make remote request, and add data to table)
UI / Tables Implement local + remote filter (make remote request, and add data to table)
UI / Tables Highlight filtered columns so the user can see the filtering
UI / Tables Implement export to excel, csv (maybe pdf?)
UI / Badge Input Implement default badges
UI / Badge Input Implement mandatory badges
UI / Badge Input Implement removing badges local + remote
Permission Better permission handling (only show tickets the user is allowed to see) difficult
Permission When returning models (backend and api requests) the permission should be checked (all modules)
Permission After completely figuring out permissions every api function needs to be checked if it behaves correctly depending on the different permissions (e.g. user created the model, user who is allowed to access the model but not change it, ...)
Customer Management (SD) Contract import from CRM system (maintenance contract)? (SD specific)
Exchange (Importer/Exporter) (SD) GSD import script for customers (new entries and changed entries) (SD specific)
Exchange (Importer/Exporter) (SD) GSD import script for customer addresses (new entries and changed entries) (SD specific)
Exchange (Importer/Exporter) Allow to define exchange scripts as auto-run with a interval
Admin [UI] Add user & group settings
Admin [UI] Add account/group removal from each other
Admin [UI] Add permission removal from accounts/groups
Admin [UI] Add permission modification for accounts/groups
Admin Create api key/token permissions
Admin Create api key/token handling
Admin Handle logging for api keys/tokens
Admin Handle "login" for api keys/tokens (maybe create dummy account for that?)
Support Ticket creation
Support Ticket response
Support Status update via email (customer)
Support Feedback/rating via email click (using time limited hash) difficult
Support Response from customer via email (using time limited hash). Requires ticket email address, maybe create one per app? difficult
Support Upload files to random support directory
Support Allow ticket creation from external sources (e.g. website) by using an api key. Allow custom fields in this form as well.
Templates, Controllers, Views and Models Allow custom templates, controllers, views and models, which don't get replaced during updates (e.g. for ItemManagement, CustomerManagement, HR, ...). These should be stored in a directory called Customized in the parent directories Controller, Themes, Views and Models. Whenever a custom controller is uploaded/changed the routes of all the applications need to be checked and adjusted.
Media Drag and drop upload
Media Ctr+C/Ctrl+V upload
Media Move files and directories to subdirectories (drag/drop and Ctrl+C/Ctrl+V)
Media Bulk actions (move, delete, download, ...)
Media Better file and directory permissions. Similar problem applies to permissions. difficult due to subdirs
Media Implement download of directory
Media Add password support for directories.
> Difficult because of subdirectories
Media Allow to actually replace media files (same DB id but replaced the file on the hard drive)
Media Allow links as media files (e.g. use path). If a link is detected it should forward to that link, this would also allow other modules to create pseudo media elements e.g. helper/editor. Upon clicking on it e.g. the editor is opened. This would mean the editor needs to create this media model whenever the user creates a document. The path needs to be the same as in the moduel itself e.g. Accounts/... or whatever the user defined as path in the module itself. The url should be relative e.g. /editor?id={id} which makes it domain name independent.
Media Allow to create a collection when uploading multiple files
Contract Management Show contracts after clicking on document list in contract
Contract Management Create task/message if a contracts term runs out
Contract Management Create job which informs people about contract end of life
Contract Management Setting to change responsible person/group A to B (e.g. person leaves company)
Contract Management Implement directory view for contracts
System Create frontend event which checks for server messages regularly (e.g. server goes into maintenance/read-only mode)
Workflow Individual UI templates incl. styles
Workflow Script management
Workflow Allow email message and response (text+time limited links via hash)
Invoice Management OCR
Invoice Management Auto content recognition (supplier, articles, costs, taxes, payment terms)
Invoice Management Define approval workflow
Invoice Management Allow notes
Invoice Management Allow questions to other users (reference tasks and or media messages)
Invoice Management Allow to add additional documents (maybe create root invoice element if multiple bills reference each other?)
Invoice Management Allow PDF modifcation (allow notes on pdf, approval stamps) difficult
> This requires a JS live preview for adding this at a specific position (maybe PDFJSAnnotate, maybe customize pdf.js)
Invoice Management Job/Schedule which checks unhandled invoices
Invoice Management Hooks/Workflows for invoices
Invoice Management Job/Schedule which checks unhandled invoices
Quality Management Create quality issue (for account, article, other?)
Quality Management Define workflow based on report type?
Quality Management Statistics ???
Quality Management Expand GSD Exchange importer a lot of work (SD specific)
Workflow Remove article. How to handle data (custom database table?)
Workflow Create article. How to handle data (custom database table?)
Customer Management (SD) Expand GSD Exchange importer to also import customer files from CRM (files, emails)
Customer Management (SD) Expand GSD Exchange importer to also import customer notes (notes, visitor reports)
Sales Create easy way to create quick visitor reports (= maybe use notes for this with a type 'visit')
Sales Allow to create visitor report on cell phone by using location matching (geolocation)
Sales Analyze reports per sales rep (e.g. use filter for export?)
Item Management Implement Names, base data, media files
Item Management Implement parent item which can hold information (e.g. files) which can be used across all children
Item Management (SD) Expand GSD Exchange importer to also import articles (SD specific)
Billing Basic invoice data (no stock movement)
Billing (SD) Expand GSD Exchange importer to bills (SD specific)
Billing Bill expenses such as insurance, freight, etc. also need VAT percentages. Best would be to create cost types, this would allow to add multiple freight expenses and print them below the invoice
Billing Show invoice pdf in preview on change
Sales Sales rep ranking
Sales Individual rep sales analysis (e.g. top customers, sales by product group, lost customers, ...)
Customer Management Customer sales info/statistics (total sales, invoices, articles, groups)
Customer Management (SD) Invoice pdf importer from hard drive (without using the Exchange module) (SD specific)
Customer Management Create a view where you can see all bills of the customer
Customer Management Create a view where you can see all items of the customer
Sales Analysis (customer) Sales + Gross profit
Sales Analysis (customer) Quantity orders + quantity articles
Sales Analysis (customer) Segment sales
Sales Analysis (customer) Top articles
Sales Analysis (customer) Cross selling (bought as well)
Sales Analysis (customer) Amount of invoices
Sales Analysis (customer) Amount of different articles
Sales Analysis (item) Sales + gross profit
Sales Analysis (item) Quantity sales
Sales Analysis (item) Amount of customers
Sales Analysis (item) Cross selling
Sales Analysis (item) Top customers
Sales Analysis (item) Amount of article sales
Sales Analysis (item) Amount of new customers
Sales Analysis (item) Amount of lost customers
Job Create job which can automatically create checklists (e.g. end of month checklists)
Checklist Create module
Checklist Checklists can create tasks, the tasks can (optionally) have an effect on the checklist status
Checklist Checklists can be modified by assigned users/all users who have permission for the checklist
Checklists Allow to define recurring date/time
Marketing Create promotions (incl. basic info)
Marketing Promotion type (somehow use for cost center)
Marketing Create events (incl. basic info)
Marketing Event types (somehow use for cost center)
Human Resource Management Handle staff information (encrypted)
Human Resource Management Handle staff positions
Human Resource Management Manage documents (encrypted)
Human Resource Management Manage contracts (encrypted)
Human Resource Management Manage salary (encrypted)
Human Resource Management List of assets and documents handed over to employees (to be returned on leave)
Item Management Add an area for markers (e.g. not sold for a x month, not purchased for x month, bad margin... etc.) Similar to an alarm system (maybe green, yellow, red markers?)
Item Management Consider to use name for attribute identification (currently only used for localization). Is this really required?id might be fine?
Item Management Add an area for markers (e.g. not sold for a x month, not purchased for x month, bad margin... etc.) Similar to an alarm system (maybe green, yellow, red markers?)
Item Management Create a second optional list view where the item is shown at the bottom of the list which allows the user to the the item list at the top and the item itself below. Either create a custom view or somehow append an iframe below the list which is loaded based on the selected item
Human Resource Clocking Basic clocking (browser + hardware)
Human Resource Clocking Hardware needs to make web requests for the chip clocking
Human Resource Clocking Clocking overview for employees
Human Resource Clocking Vacation / absence management for employees
Human Resource Clocking Clocking overview/analysis for managers/hr
Human Resource Clocking Vacation / absence overview/analysis for managers/hr
Human Resource Clocking Vacation approval workflow
Human Resource Clocking Clocking change approval
Human Resource Clocking Export of clocking times (hr)
Human Resource Clocking Export of vacations, sickness, ... (hr)
Dashboard Drag&Drop element sometimes disappear on drop
Dashboard Create default dashboard templates which can be used by users, changing them copies it for this user
Dashboard Allow people to modify a dashboard and automatically save it / reload it
Dashboard Implement a way for other modules to provide dashboard components (allow modules to register themselves in a database table)
Billing Only create pdf preview if preview is visible?
Billing [Analysis] Gross profit (total bill and elements)
Billing Show bill relations (on tab which shows all related bills)
Billing Create send as email button inside the bill. this opens the send email view where the email is pre-written with the attached pdf
Billing In the supplier and client view you should be able to select multiple bills and click print for printing
Billing In the supplier and client view you should be able to select multiple bills and click send as email for email sending
Billing The send bill as email should have a global settings where you can either define a global email or empty = user specific email
Billing Sending emails should have a default email format and a default invoice naming convention, additionally there should be the option to define a user specific email text and pdf naming convention
Billing Clients should have a invoice_email address which is stored in the client
Billing Allow to define re/usable templates (e.g. recurring invoices)
Billing Allow to define re/usable texts
Billing Automatic email invoice after finishing if user wants to use that
Billing Batch print/export invoices based on filter
Billing Bill element sorting should have a small bar at the beginning of every element which allows the user to drag/drop the element up or down. Of course the up/down arrows which are currently implemented should remain.
Billing Forward bills to sales rep (if bill > X EUR or specific type)
Billing Implement approval concept for invoices and invoice elements (e.g. price, tax, margin etc.). The problem is that different changes may require different responsible people to approve this, this means you would need some indication which shows which approval is still outstanding. Of course a less detailed visual indication would be a red, yellow, green marker at the beginning of the invoice/element or background highlight
Billing Allow to import existing bills (e.g. order -> invoice, offer -> confirmation -> delivery note ...)
Share media files between imported bills for easier searching. Maybe do this by creating a root element which all bills reference and show files of this root bill?
Billing Show list for recommended purchase items + type tags e.g. re-order because empty, cross selling, promotion (if promotion already used, don't offer any longer)
Billing BillTypes should have stock movement types assigned to them
Warehouse Management (SD) Implement stock GSD stock importer (SD specific)
Purchasing Create item list for purchasing
Accounting (SD) Implement GSD accounting importer (SD specific)
Accounting Print receivable of customer (also allow to do this from the client view in the Client Management)
Client Management Create a map of all customers (maybe as data points or as heat maps)
Client Management Create a map of sales (maybe as data points or as heat maps)
Client Management Create default letter Doc (with/without letter head)
Client Management Add list for top articles on profile page... important for customer calls
Client Management Add list for recommended purchase items + type tags e.g. re-order because empty, cross selling, promotion (if promotion already used, don't offer any longer)
Client Management Create a simple button to send an email to a customer, this also should have the option to change the mail address (e.g. drop down with all available email addresses and option to manually write it)
Client Management Add a geo map of the customers location (either on a real map or on the already added SVG maps)
Client Management Make customers only visible/readable to authorized people (e.g. sales rep may only see his own clients)
Client Management Client view should be customizable since different groups have different interests and read permissions (e.g. sales reps, finance, etc.)
Client Management Allow to specify the accounting account (e.g. a customer who is a supplier may have the same account)
Accounting Analysis Create different P&L structures
Accounting Analysis Create different balance structures
Accounting Analysis Create cash analysis structure
Accounting Analysis Create asset/depreciation structure
Accounting Analysis Create comparison feature for the above mentioned structures (budget, IFRS, ...)

Archived

Deadline Done Category Task

Todos

Todos/tasks which are not important enough to be part of the milestones (or don't impact the milestone progression significantly).

Priority Category Task
high Forms Invalid api responses should undo the UI changes
high Forms Adding a template to the DOM should modify its id/generate a custom/random id for the added element
high Forms If a form has unsaved content the browser should ask if the user really wants to change the page or close it (use beforeunload event).
medium Job Consider to run jobs through the cli application. This means a job executes php cli.php put:/admin/job -i 3 which runs the command of job 3. This would allow to log the job execution time and response. If you don't want to wait for the execution to finish you may as well run it async (this means of course no execution time or output can be logged, but at least the start time).
medium CMS Create functionality which allows to replace application files. Instead of just overwriting them they get backed up in a backup directory.
medium UI select Bind data to select options such as visible elements and data pre-fills. When an option is selected certain ui elements become visible and get filled out with default values.
medium Knowledgebase Add org ID to wiki app (optional) and add a default flag. In the backend load the default wiki app for the current organization $this->app->orgId
medium Tasks Allow to create a reminder for a task (e.g. small bell next to the user name which highlights the task/removes the has_seen flag + says somewhere you got remindered)
medium Tasks Create different overviews list by date + list by priority (very high + next day, high + next 2 days, medium + next 5 days, low + next 10 days, very low + remaining). Of course the grouping may change based on how long ago the creation date is.
medium Tasks Show stats at the top (e.g. open, in progress, maybe even open high priority)
medium Billing Allow to define multiple documents which are created upon invoice completion. Right now only the internal invoice document is generated.
medium Push/pull content Auto update data changes in the backend (e.g. pull every x seconds, or use websockets for push)
medium Concurrency lock Lock data for concurrency (e.g. table row lock or heartbeat)
medium Logs Immediately send errors also via email to the admin/server email address if it is configured that way (maybe create callback global and for different log levels).
medium Url format Change the url format in most modules from query parameter to path (e.g. /module/profile?id=Admin to /module/Admin/profile)
medium Modules Many models would benefit from unit and app association. Sometimes models should only be available/associated with a specific unit (e.g. news article for website, backend, shop etc.)
medium Frontend Action Create an action which adds/removes DOM elements
medium Frontend Action Log DOM changes to the user
medium Modules Find a way to handle optional modules (e.g. comment module in the news module) in the past the Mapper was modified (comments were removed) if the comment module was installed. Somehow this is no longer available but maybe another solution could be a different Mapper which is replaced if the comment module is installed. But instead of replacing a complete file, a diff should be generated between the files and the ADDED lines should be merged. How to handle uninstall because here it doesn't work? I would need to know exactly what to remove.
medium DataMapper In the DataMapper implement iterable fetch. Currently all models are returned in one go, additionally an iterator should be returned for iterable access in case of MANY results (e.g. Exchange module). Maybe add mapper function (->iterable() which then returns an iterator after ->execute())
medium Editor Create immediate text preview similar to a rich text editor or Typora.
medium Editor Add inline charts (e.g. Mermaid and Toast UI Chart)
medium Editor Add math formulas (e.g. Katex)
medium Editor Add emojis
medium Admin Create a view where it's possible to create/activate, change and delete/deactivate hooks for events.
medium EventManagement Use Cli application for async event handling, alternatively web requests via curl, alternatively at runtime of the main process. This should depend on the configuration of the application.
low Registration Allow users to register by themselves (if activated in the backend)
low Registration Send an email after creating a profile/self-registration with login information
low Tasks Show which tasks have a file attached (similar to emails)
low Tasks Show in the different task overviews who the task is for.
low Forms On change highlight the data/element that got changed (e.g. background color transition in and transition out)
low Framework Schedule Use Interval for scheduler instead of string etc.
low Email Continue implementation of email sending and receiving
low ER diagrams Update/Create for all modules
low UI tabs [Template] Fix tab indices's. On many pages the tab indices's are broken (tabs, table/list, links, forms)
low Surveys Currently the demo (demoSetup/*) only uses one language (en). Generate surveys with multiple languages similar to other module demos (e.g. Wiki, News). In that case also prefix the text with the language so it's easy to see which language is loaded e.g. EN: (like in the tag module demo)
low Surveys Consider to add a closing paragrah. The description comes at the end, but maybe a paragraph at the end of the survey should be added?!
low Modules The modules use the module name for identification in many places where the module id should be used for performance reasons
low Framework graph Implement find cycles using graph coloring
low Framework graph Implement find negative cycle
low Framework graph Implement find cycles with n length
low Framework graph Implement find cycles with odd length
low Framework graph Implement find islands
low Framework graph Implement check if strongly connected
low Framework graph Implement find longest path
low Framework graph Implement get the girth
low Framework graph Implement get the circuit rank
low Framework graph Implement get the node connectivity
low Framework graph Implement get the edge connectivity
low Framework graph Implement check if bipartite
low Framework graph Implement check if triangle free
low QueryBuilder Implement sum
low QueryBuilder Implement count
low General Once read only variables become available many models can remove getter/setter function (e.g. ApplicationAbstract, ConnectionAbstract and various models)
low Query Grammar Implement schema modification grammar (alter tables)
low Router, EventManager, Hook Instead of doing only regex matching, combine it with a tree search, this should be faster
low Text search Implement a decent full text search for files/variables which finds texts that are similar (e.g. similar spelling, only some words in between, maybe different word order, etc.)
low OAuth2 Implement client
low OAuth2 Implement server
low ServiceWorker Implement caching and responding
low Code Implement QR code creation
low Code Implement data matrix creation
low Code Implement data matrix reader
low Code Implement various bar code readers
low Speech recognition Remove the speech recognition wrapper once it becomes standard
low Voice commands Implement table/link navigation
low Input validation Implement nicer input validation (e.g. show check mark and x in the input fields / optionally)
Input validation
low jsOMS UriFactory Consider to parse EVERY URL with the Uri factory. This however might cause double parsing and therefore bugs
low UI Tabs The frontend loads the correct tab based on the provided fragment, but it is slow. Doing this in the backend can already fix this but the frontend implementation should be fixed, because this should be the job of the frontend.
low Module build process Default inspections/tests (unit tests, info.json, language files used, language files in all languages same content, amount of languages, routes in controller available, dependencies valid, code coverage, phpstan, phpcs) (daily/on change)
low Module showcasing Text file with all the module git links which gets loaded from the website and then shows the modules based on the module information etc.
low Module Implement in app download and installation
low Logs The "Log" tabs in many models should have a separate permission which hides them. Maybe a user needs to have read permissions of the monitoring module in order to see them? Alternatively it could be a *_MONITOR permission for the specific model in every module. This is a little bit finer but also expands the permission complexity
low UI sections/portlets Sections/portlets with a footer sometimes have problems with floated elements. e.g. a right floated button will break the layout if the left element(s) are too long causing wrapping.
> Solution: create flexbox with margin
low Admin: Settings template In the Settings->Localization->Numeric the number format (decimal, thousands) don't have a spacer in between. Margin left doesn't work.
low Auditor Consider to create foldable/tree view for json logs e.g. https://www.cssscript.com/json-data-tree-view/
low Auditor Implement blockchain for the auditor. This either requires database locking (slow),modification of audit logs after inserts (slow) or a background process which calculates theblockchain (OK)
low Auditor Create printable reports based on specific changes
low Database Editor Implement basic functionality / queries in UI
low Fleet Management Implement
low Helper Implement direct print instead of opening a new window with document.getElementById('iHelperFrame').contentWindow.print();
low Investments Implement request and approval process
low Investments Comparison/calculations
low Labeling Create module
low Labeling Create easy front end label editor (drag and drop, images, textareas, database values, ...)
low Labeling Create default label layout for items
low Item Management ItemAttributeTypes should specify which datatype they expect. The ApiController needs to validate if a value can be created for an attribute type (check validation pattern, datatype, is required)
low Item Management Show additional important item information for sales/purchase, currently too controlling/stats focused
low Item Management Define some attributes mandatory (e.g. HC-code/tariff code number)
low Kanban Implement card status (archive, public, inactive)
low Kanban Implement unread cards/comments notification/highlight
low Kanban Highlight card with new comments (e.g. make comment count background red?)
low Kanban Consider to replace card comments with normal comments from the Comments module
low Knowledgebase Implement category create/edit view
low Knowledgebase Implement doc create/edit view (similar to news/editor)
low Knowledgebase Add category back/up button when in a subcategory
low Monitoring Implement integrity check based on installed version and remote hash list (see monitoring-security.tpl.php)
low Messages Implement email sending/receiving
low Messages Implement internal message/conversion storage
low Messages Implement global messaging to users/groups in the app as notification. Allow to define which users and or groups to message, also define multiple localization if needed. Allow to create template messages (e.g. Server is going into maintenance in X minutes)
low Organigram Create better organigram (better grouping, maybe as SVG)
low Organigram Make the organigram printable
low Organigram Make the organigram versioned/approved (e.g. for ISO)
low Quality Assurance Implement module
low Q&A Implement question create view
low Q&A Add question answer component/like comment in question
low Q&A Create Q&A app with login
low Supplier Management Create a view where you can see all bills of the supplier
low Supplier Management Create a view where you can see all items of the supplier
low Supplier Management [Doc] Create default letter Doc (with/without letter head)
low Supplier Management [Payable] Print payable
low Supplier Management [Analysis] Purchase EUR + gross profit
low Supplier Management [Analysis] Quantity order, quantity articles
low Supplier Management [Analysis] Segment purchase
low Supplier Management [Analysis] Top articles
low Supplier Management [Analysis] Cross selling
low Supplier Management [Analysis] Cross selling
low Tasks [Analyzer] Implement analyzing functionality (tasks created, answered, time required to finish task, always in time?)
low Tasks Instead of hiding (or as an additional type) tasks created from other modules (e.g. support) make them link to the UI where it can be handled (e.g. ticket)
low Tasks Make answer box on the right scroll down with the content, this way you can immediately respond without scrolling
low Tasks Attach custom event, if status is changed (e.g. trigger checklist event). Maybe don't do it, maybe other modules should instead check the status of the task!!!
low Tasks Implement email notification on progress/changes (new task, forwarded, ...)
low Tasks The unread task count is currently not really correct and needs to be fixed
low Tasks Allow batch handling of tasks in the dashboard/overview for faster interaction (e.g. select and close)
low Tasks Create a user calender for tasks which only shows when tasks are due
low Tasks Don't show Tasks in dashboard which are far into the future, maybe create another list for this?
low Tasks Implement has seen and unseen (use system where every task has a seen flag for a user if it is seen)
low Tasks Allow users to unset the seen flag.
low Tasks First show open tasks to the user, then show open tasks to other users, then show all closed/canceled/finished tasks
low Calendar Load events back to a fixed amount of months (e.g. current month, previous month and next month)
low Calendar Implement event popup in the UI on click
low Calendar Create different interval templates (year, quarter, month, week, day)
low Calendar Allow user to define the start of the week (e.g. Sunday, Monday)
low Calendar Implement gantt chart
low Calendar Create iCal parser/reader and builder
low Calendar Create database, models and mappers
low CMS Make file content view 100% container height
low CMS Allow content changes and saving
low CMS Ideas for applications based on modules (e.g. monitor/log dashboard, sales dashboard, calendar, support/ticket, clocking, Q&A, Wiki, shop)
low CMS Implement line numbers in code view
low CMS Implement code formatting / syntax highlighting
low CMS Allow different content types (e.g. pages, posts, ...) with individual templates
low Workflow Implement an approval module which only runs a module/user specific action once it is approved. This functionality might be part of the workflow module or at least smoothly interact with this module. Additionally, it should probably make use of the Tasks module
low Workflow New customer is created (approve)
low Workflow New bill is created (approve, validate)
low Workflow New supplier is created (approve)
low ReadOnly Find a way to implement a read only setting. This could be helpful for maintenance times.
low UriFactory Consider to use \urlencode() on every query parameter in the UriFactory
low Module Mapper Implement module description, name, createdAt in the database table and use them. Currently they are available in the model but not yet implemented in the database schema
low Templates In some forms there are 2 buttons which a user shouldn't accidentally press (a save and create button or delete button). Position them far apart by using flexbox positioning (e.g. Module->Support->Settings)
low CMS Make pages editable
low CMS Make posts editable
low UI Slider Create a slider element with two elements which the user can slide (optionally also only one slider should be possible) (https://codepen.io/thebabydino/pen/NWWerZG)
Slider
low UI Slider Create a radial slider (https://codepen.io/equinusocio/pen/OJMBpdK)
Slider
low Demo setup - Billing Improve customer order randomization (types, dates) in the demo setup file setupBillingClients.php
low Demo setup - Billing Create text lines in bills, currently no text lines are created only entries with items, but sometimes you want to write some text in an invoice
low Billing Costs such as shipping, insurance etc. should not be hard coded but customizable costs stored in a separate table.
low Demo setup - Support Use default values for ticket attribute types in some cases instead of always using custom values
low Update Create update logic for application, resources, modules, ... in the Admin/ApiController (apiCheckForUpdates)
low Billing Create setting for bill format per bill type (e.g. invoice, order, ...). NO! This should be handled with the different bill types! The bill types should also have a format defined and a default template. Bill types should have multiple bill templates assigned to them (e.g. invoice, proforma invoice, picking checklist, ...)
low Billing The bill archive should store the customer/supplier localized version since this is the official document
low Billing Customers and suppliers should have default invoice and delivery addresses which should be used if no other address or custom input is used
low Editor The tools above should directly insert the markdown into the textarea
low Kanban The kanban board currently assumes up to 4 columns, however there should be a layout which allows more than 4 columns. Don't use flexbox but min-width and max-width combined with a horizontal scrollable board content
low Media Allow to index a local file if it is not in the database (e.g. button with text "Add to Application"). Un-indexed files cannot be changed/moved/deleted.
low DataMapperAbstract Implement data binding
low Email Find a way to localize some hard coded email content. Pass localization array? Manually overwrite email body if a hard coded/default message should be returned (maybe by checking for a flag/status code)?
low DataMapper / ModelFactory Some models may require special initialization. For such cases a model factory should be implemented and used by the data mapper. One solution could be to create a default ModelFactory which behaves as the current DataMapper functions which set/update the model members. This factory could be extended in case custom behavior becomes necessary. In the Mapper you would just have to define a const FACTORY constant which references the factory to use (instead of the default one). Since there hasn't been a situation where this was necessary it will not be implemented until we actually need this (it would additional overhead which maybe never becomes necessary)
low Editor Create special markdown content (calendar, chart, task, news, comment, media, ...)
low Editor Allow download as markdown, text, PDF, word
low Event Management Implement goal definition. Goals could be based on tasks (every completed task represents x%), linear time line (every day represents x%), value based (a calculated value represents x%), manual input based (the user decides the completion %)
low Event Management Add milestones
low Project Management Implement goal definition. Goals could be based on tasks (every completed task represents x%), linear time line (every day represents x%), value based (a calculated value represents x%), manual input based (the user decides the completion %)
low Project Management Add milestones
low Promotion Implement goal definition. Goals could be based on tasks (every completed task represents x%), linear time line (every day represents x%), value based (a calculated value represents x%), manual input based (the user decides the completion %).
low Finance Implement accounting forensics (Benfords Law, cent value distribution analysis, amount of bookings between specific amounts, amount * bookings between specific amounts, etc.)
low Item Management Item view should be customizable since different groups have different interests and read permissions (e.g. sales reps, finance, etc.)
low Item Management Show different prices on item profile frontpage (e.g. domestic, export, quantity discount)
low Purchase Consider to add a purchased analysis, used analysis and manufactured analysis (currently only sales focused). Examples items delivered in time, bad quality ratio)
low Kanban Allow board templates? maybe at least colors?
low Kanban Allow card templates? maybe at least colors?
low Billing Automatically create recurring bills (invoices, delivery notes, etc.) if a customer wants to receive items automatically
low Media Create preview option for images (e.g. ctrl+mouse hover or a different "list-view" like in explorer)
low Media Validate file size on the frontend before uploading
low Media Automatically change the file encoding of text files
low Media Enable image interlacing (in the past there was a bug)
low Media Implement media encryption/decryption (optionally)
low Media Implement media password protection for read (optionally)
low Media Implement resumable uploads
low Media Implement path changes in the frontend
low Media Allow the modification of collections
low Media Implement external resources (URLs, dropbox, aws, ...)
low Media Allow to edit the breadcrumbs, which replaces them with a text field which can be changed then than automatically loads the new path
low Media Implement temporary file storage (very useful for making files downloadable for a limited time). Maybe create a new temp file directory or database collection where a available_until timedate gets defined (must be handled in the database). The biggest problem is how to delete them, this requires a background process/task scheduler. Additionally, these files must have permissions because they may be only for one user or a group of users
low Media Allow to rename files/directories virtually and actually
low Media Allow to move/cut/delete files/directories virtually and actually
low Media List data from online drives such as dropbox, google drives, AWS
low Knowledgebase Consider to use the Editor module for the content instead of handling the content separately in the wiki module.
low Messages Allow to transform a message as task
low Messages Implement push notification
low Messages Users may be invited to old conversations
low Navigation Improve goto command to match based on proximity and only based on visible links
low Navigation Consider to create on navigation language file (same as routing files) during the installation process
low Navigation Create settings page which allows to modify the navigation in the module settings
low Navigation Consider to implement child elements on hover (sidebar and content)
low News Implement email/message notification on create
low Profile Find a way to hide some contact/address information for some modules. Some information are only meant for specific modules (e.g. private address, phone number e.g. HR module) The reason why this is difficult is that this information should not be part of the model table but in the relation (many-to-many). At the moment the information in the relation table is not used apart from the relations it self. A solution could be to specify a filter in the relation in the mapper. Empty = all relations, filter = only populate the model array with relations which match the filter.
low Support Create support app with login
low Support TicketAttributeTypes should specify which datatype they expect. The ApiController needs to validate if a value can be created for an attribute type (check validation pattern, datatype, is required)
low Tag Create settings with a set of default colors
low Settings Implement a setting which lets users see all content no matter the content language (e.g. all News)
low Help Create better search help, the current implementation is very simplistic
low Search Consider to prioritize search results based on the page the user is currently on (e.g. help page -> first return help results)? The bad thing about this would be different search results for the same search term depending on the page the user is on. A solution could be to auto prefix the search with the module name and if the user wants a independent global search he just removes this prefix (or use a drop down like search filter like github where you can select repository, organization, ... before pressing enter). Alternatively create a prefix button which shows where the search is (e.g. button with globe as icon = global, module name = module...) and if someone clicks on that icon the person can change the search filter (or by typing :modulename which does the same but without clicking the button for people who want to use their keyboard only)
low Media uploader The Media Controller/Uploader on the frontend should support multiple upload inputs in the same form, currently only one upload intput field is allowed. This is useful if a model can have multiple different media types. Maybe this also effects the backend?
low Media uploader (frontend) The Media uploader on the frontend should check if the file size is reasonable (e.g. less than 50GB) and if the file type for that form is valid
low Media uploader Implement resumable uploads
low Handheald device Going a page (or tab) back should be done with swiping
low WarehouseManagement Create StockMovement explanations (these are NOT StockMovementTypes but reasons why a stock booking happened e.g. destroy, return, ...). See StockMevementType at the end for some examples which should be turned into these explanations.
low Workflow Request IT permission changes (go to head of department, then IT?)
low Workflow Article price changes
low Workflow Article customer price changes
low Workflow Credit score/delivery approval
low Permission If a user doesn't have sufficient permissions for something the user should receive info message/log with a button to request these permissions.
low Monitoring optimization The Monitoring module should have a tab with optimization suggestions
low Monitoring optimization If a user has all sub permissions instead of the parent permission with a wildcard for the child permissions. The optimizer should suggest to change this (e.g. user has all permissions for every element in a view but not the module permission, this should be changed). This could save a lot of performance when checking permissions.
low Form Allow on change listener in input elements. If this is set, automatically update the data after a change (for text elements e.g. input[type=text], textarea use delay before submitting)
low Table Tables have a re-ordering function, this should be generalized. This should not be part of a table but some general orderable container! (e.g. we also need it for sorting cards/columns in the kanban)
low Table Implement column visibility (save locally and apply locally only)
low Table Implement table filter
> alphanumeric
> greater
> greater equals
> lesser
> lesser equals
> contains
> doesn't contain
> in between
> regex
> pre-defined values/select
> checkboxes if 0/1 values
> consider other filters for data that is not shown in the table? Backend filter options?
low Table Allow export by also based on selected elements (optionally in a different language)
low BasicOcr Implement image reading for non-mnist files (either convert to mnist or use something else)
low Directory If the object oriented/node version of the local file handler changes files the already loaded nodes need to be updated (e.g. when calling delete, add, ...)
low TextAnalysis Implement text similarity algorithms (https://medium.com/@adriensieg/text-similarities-da019229c894)
low Image Implement image de-noising (consider https://www.hindawi.com/journals/complexity/2021/5578788/)
low Image Fix kernel 5x5 implementation with imagecolersat and imagecolerat (https://rosettacode.org/wiki/Image_convolution). Currently not doing anything.
low ModuleManager The function initRequestModules pre-loads all modules based on path. However it should also be possible to define the application for this. Otherwise modules will be loaded on the same uri even if it is a different application which only has the same uri on accident.
low cOMS Create tool which checks size and form of defined objects (in multiple orientations) with other elements. No match -> error
low cOMS Create a tool which measures the volume and volume distribution in containers (incl. x-ray images). Define objects (in multiple orientations) and where the low and high levels are. If volume below or above threshold or volume distribution is bad (e.g. bubbles) -> error
low cOMS Create tool which matches texts and layouts (e.g. labels). Define layouts with mandatory elements, optional elements, colors, sizes, regex text. No match -> error
low Application Api and backend use different ways how to return information from a controller. One is modifying a response and the other one is returning a view. Both should be unified so that the information flow is always the same. Suggestion: Either always modify the response or always return a response.

Archived

Priority Done Category Task

Bugs

Tasks & decisions

Priority Category Task
low Navigation The sidebar navigation is not working properly if the content is too wide. In this case the sidebar becomes smaller than its defined width (test by resizing the window)
low KMeans In some weird cases the Cluster test fails. This happens approximately 1 / 1,000,000 test runs (invalid center coordinate value). Idea: Since the coordinates are chosen randomly a debug session with a loop might be necessary where the same test runs until it hits the bug.
low Table The table overflow was fixed with putting them in a scrollable container (in the portlet). This broke the .sticky head, since the table no longer knows the head is out of view. Since it's in an overflow container it doesn't know about its changed scroll position. If this cannot be solved don't revert back because overflowing tables are much worse!
low Rest There is a weird bug where the multipart/form-data cannot use the normal boundary= header to define the boundary. If this correct format is used the server somehow cannot populate the php://input correctly. If we move the = to a different position e.g. bound=ary this works fine. Currently this is solved by not using a = sign but /. This requires further inspections later on and could result in a bug with a different webserver (e.g. nginx).
low Graph In directed graphs getNeighbors() might return wrong neighbors.
low Forms The FormManager expects a table/tbody for inline edits. This should not be the case, generalize!
low VoiceManager If voice input is enabled check every x seconds if the service is still running. I think it stops automatically after some time?!
low ModuleManager The module get() function uses object as return. This is a workaround to fix static inspection. There is no inline docblock to type hint the correct function return since it can be so many. Howerver with object the code quality check tools at least don't complain in the different modules where we call ->get(...)

Archived

Priority Done Category Task

Drafts, concepts & ideas

Drafts, concepts & ideas which are more complex or require more explanation.

Invoice OCR (already started with the implementation!)

Steps:

  1. Turn into image if it isn't image
  2. Modify image (grayscale, remove noise, thresholding, dilate, erode, opening/morphology, canny, skew correction/deskew, rotate e.g. upside down or slanted)
  3. Extract text (maintain layout)
  4. Get all suppliers and match against invoice (find name, alternatively try invoice match_code)
  5. Has supplier template defined? Find custom areas. Sometimes a page 2 template must be defined if the second page looks different.
  6. Match template areas to invoice (consider slanted invoice, longer text etc.), extract partial images.
    1. Template areas should ideally contain a keyword and the actual value.
  7. Parse partial images
  8. Match according to regex
  9. Find item list area from template (recurring elements unless only one element is defined)
    1. Start should be defined by keywords (e.g. table headline)
    2. Create sub definitions such as quantity/unit, single price, total price, ...
    3. How to identify end of list?
    4. How to handle multiline line elements (e.g. detailed article/service description)
    5. How to automatically find account (e.g. article number, description, template definition)?

Software:

  1. Tesseract + OpenCV + above mentioned steps
  2. Some Api (e.g. google vision ai, amazon textract, amazon recognition)

Workflow

  • Listen to multiple event triggers (a state might get triggered from different triggers)
  • Every state needs to load the workflow instance globally for that state
  • A workflow must have multiple events such as
    • events must have a name/id
    • events can have a description
    • if (with true and false branches and with simple && and || connections)
      • Comparisons:
        • equals
        • not equals
        • exists
        • doesn't exist
        • greater than
        • lesser than
        • greater or equals than
        • lesser or equals than
        • contains
        • doesn't contain
        • in between (inclusive)
      • Connections
        • Only simple && and ||
        • No complex sub conditions e.g. (a && b) || (b && (c || d))
    • Function
      • Call
        • function from module
        • function from static script
        • function from workflow
        • simulate api call (internally populate request/response)
      • Define variable names in order of function parameters
      • Define response variable name
    • Data definition (important for naming and defining values for follow up steps)
      • Fixed values
      • Dynamic re-assigning/copying
        • take old variable and re-name it
        • allow array path e.g. varname/key1/key2 => newvarname
        • the same variable can be copied to many different new variable names
    • Event trigger
      • similar to function but trigger event
    • Routing
      • similar to function but run routing into dispatcher
    • Rest request
      • similar to function but using rest
    • Execute script assigned to workflow template
      • This way workflow could be completely defined in a custom script if it is very complicated
    • Response message population
    • Create workflow diagram (see example below)
flowchart LR
	subgraph A
    A_TRIGGER[State1: Event Triggers]-->IF{if}
    IF-->|TRUE|IF_TRUE1[Run]
    	IF_TRUE1-->RUN1[Collect result]
    	RUN1-->NEW_VAR[Assign data]
    	NEW_VAR-->TRIGGER2[Execute Event]
    	NEW_VAR-->MESSAGE[Populate Message]
    IF-->|TRUE|RUN2[Run]
    	RUN2-->OTHER1[...]
    IF-->|FALSE|ELSEIF{if}
    	ELSEIF-->|TRUE|ELSE_TRUE[Run]
    		ELSE_TRUE-->OTHER2[...]
    	ELSEIF-->|FALSE|FALSE[Error]
    end
    
    A-->|State Change|B
    A-->|State Change|C
    
    subgraph B
    B_TRIGGER[State2: Event Triggers]-->B_IF{...}
    end
    
    B-->|State Change|C
    
    subgraph C
    C_TRIGGER[State3: Event Triggers]-->C_IF{...}
    end