december 2021 - closing

This commit is contained in:
Dennis Eichhorn 2021-12-31 22:33:34 +01:00
parent 8cee7542c9
commit 5ab35b4fb3
3 changed files with 958 additions and 246 deletions

424
Project/Module Features.md Normal file
View File

@ -0,0 +1,424 @@
# Module Features
This document contains a short overview of planned features and functions for the different modules.
[TOC]
## General Modules
### Organization
The organization module provides basic structures such as units, departments and positions which are helpful to manage organizations and companies. These structures can be used by other modules for additional more detailed structures and functionalities.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Units | Create units and sub-unites to manage large organizations (e.g. company with multiple subsidiaries) |
| Departments (Teams) | Allow more detailed structuring of units |
| Positions | Assign functions and positions to users (job positions/titles) |
#### Ideas (won't exist for a long time)
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------- |
| Organizational chart | Automatically generate a versioned organizational chart |
### Tag
The tag module provides global and user defined tags which help to categorize content throughout the entire application. Tags make it possible to group information from many different modules under one key word/key phrase (e.g. news article, tasks, media files, contracts, promotions, etc. referencing the same event).
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Global tag | Tags which can be used by all users and modules |
| User defined tag | Users may define their own tags to categorize their private data |
| Search | Content can be searched by tag name throughout all modules |
| Structure | Tags can have a custom color, an icon and localizations for different languages |
### Media
The media module is a important core module since it manages all media files (e.g. images, text files, videos, ...). All modules who deal with files use this module to manage media files.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Upload | Upload media files by Drag&Drop and file selector |
| Download | Download files and directories (including virtual directories) |
| Media storage | Show media files in lists similar to an explorer view on an operating system |
| File preview | Show media content for many file types online (e.g. pdf, images, ...) |
| Drag and Drop | Drag & Drop file movement similar to local file management |
| Virtual files | Similar to links to files in other directories to reduce storage needs and to allow referencing the same file |
| Password protection | Protect files with a user defined password |
| Encryption | Encrypt files for additional protection (e.g. useful for personnel contracts) |
| User files | Every user has his own directory in which their files can be stored |
| Module files | Modules can have their own directory to store module specific files |
| Local files | Files on the server can get included by referencing the file path or directory path |
| Remote files | Files available on the web can be included and shown similar to local/uploaded files |
| Permissions | Files and directories can have permission settings limiting the interaction from different users/groups |
| Tags | Media files can have tags |
#### Ideas (won't exist for a long time)
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Pausable uploads | Uploads can be paused and continued later (e.g. for large files or bad Internet connection) |
| Online drives | Online drives (e.g. dropbox, google drives, AWS) can be included and shown |
### Workflows
The workflow module lets an organization define processes which help to standardize work practices, reduce mistakes and help to monitor the progress of these processes. Such workflows can be for example sales approval, quality control, product introduction, ...
| Functionality / Feature | Description |
| ------------------------ | ------------------------------------------------------------ |
| Module workflows | Module interactions can trigger functions of other modules based on specific criteria |
| Custom workflow template | Templates to visualize a process (e.g. progress status and input fields to directly input data required for the workflow) |
## General Business Modules
### Kanban
The kanban module implements a kanban board.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Structure | A kanban board can have multiple columns, each column can have cards and each card can have comments |
| Board design | Boards can have custom backgrounds (colors or images) |
| Card design | Cards can have different colors |
| Card types | Cards can be text (incl. images), tasks, events, calendars, progress status |
| Media files | Cards and comments can have references to media files |
| Tags | Boards can have tags |
### Contract Management
The contract management module handles contracts.
| Functionality / Feature | |
| ----------------------- | ------------------------------------------------------------ |
| Responsibilities | Define users or user groups who are responsible for certain contracts |
| Reminder | Send reminders for terminating contracts |
| Multiple documents | Assign multiple documents and contract versions to a contract |
| Preview | Preview PDF scans |
| Categories | Assign contracts to different categories |
| Contract data | Store and analyze contract data (e.g. costs, earnings, risk protection, ...) |
| Units | Contracts can be assigned to different units |
| Accounts | Contracts can be assigned to different accounts (e.g. customer/supplier) |
### Q&A
The question and answer (Q&A) module lets users create questions which other users can answer.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Voting | Users can vote on questions and answers |
| Media files | Questions and answers can have media files |
| Comments | Questions and answers can have comments |
| Applications | There can be different Q&A applications to separate communities (e.g. employees, customers, specific topics, ...) |
| Tags | Questions can have tags |
### Knowledgebase
The knowledgebase module is a place where articles can be published to document process, explain organization structures, explain products, etc. This module is similar to a wiki (e.g. wikipedia).
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Categories | Knowledgebase articles can get categorized |
| Media files | Articles can have media files |
| Versioned | Articles can have versions |
| Applications | There can be different knowledgebase applications to separate communities (e.g. employees, customers, ...) |
| Tags | Articles can have tags |
### Helper
The helper module lets authorized users upload self-coded scripts which make use of the application functions, application database, external api or whatever you can imagine.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Templates | Helpers always have a base template which provides the core functionality and core resources |
| Instances | Instances of a helper make use of the base template in combination with new input data and store this output |
| Standalone templates | Templates can be standalone, which means they don't need a instance which makes use of them |
| Export templates | Allow different export templates to export the helper output as pdf, word, print, csv or powerpoint |
| Tags | Scripts can have tags |
Examples:
* Business reports (the base template defines how the business report looks like but the instance allows you to upload new data e.g. csv files which then is used to create a new business report)
* Design a newsletter template once with text input fields can be changed to create a new newsletter but always with the same design
* Create a training certificate template for customers for your products once with input fields for the customer name which then can get exported as pdf (or print)
> Since you can upload whatever script you want this function should only be given to authorized people (e.g. only administrators).
>
> In order to create such helpers one must be able to program in php.
### Checklist
The checklist module lets users create checklists.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Templates | Checklists templates can be defined in the application (task description, allowed input e.g. checkbox, text field etc.). |
| Instances | Checklists instances can be manually created or automatically at a specific point in time (e.g. monthly) |
| Media files | Checklists can have media files |
| Versioned | Checklists are versioned |
| Export | Checklists can be exported (pdf or printed) |
| Tasks | Checklists can create tasks (optional) which automatically check off checklists elements upon completion |
| Instance interaction | Instead of interacting through tasks with the checklists user may also directly interact with the checklist (optional) |
| Tags | Checklists can have tags |
### Tasks
The tasks module is for creating and solving tasks/todos. Tasks can be given from users to oneself or other users. Modules can also create tasks (e.g. checklist module, workflow module, ...).
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Groups/Accounts | Tasks can be created for groups and single accounts/users (users may also create tasks for themselves) |
| CC | Tasks can be sent to users by CC allowing them to see the task progression |
| Priority | Tasks can have different priorities to sort them |
| Due | Tasks can have a due date |
| Forward | Tasks can be forwarded to other users/groups (e.g. if someone else should continue with the task) |
| Analysis | Tasks can be analyzed (amount of tasks created, finished, time needed to solve them, ...) |
| Media files | Tasks can have media files |
| Tags | Tasks can have tags |
## Userspace Modules
### Dashboard
The dashboard module provides a customizable front page for the user where information from many modules can be shown (e.g. new tasks, new messages, top news, ...).
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Customizable | Users may change which information are displayed and how they are shown |
### Profile
The profile module handles users who can login into the application and provides a profile page for every user where basic information about this user are shown, the user can change the account settings and some of their data is shown.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| User data | Shows user data such as contact details, addresses data, job title, ... |
| Module data | Modules can add custom information belonging to the user to a profile page (e.g. show media files uploaded by the user) |
| Account settings | The user can change their account settings (e.g. localization, address, ...) |
#### Ideas (won't exist for a long time)
| Functionality / Feature | Description |
| ------------------------ | ------------------------------------------------------------ |
| User defined information | Let the user decide which information should and shouldn't get shown (e.g. hide address but show birthday) |
### News
The news module is for creating and displaying news articles (for organizational purposes such to employees e.g. company events or for public purposes e.g. news for customers).
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Articles | Users can create news articles incl. inline images, videos, media attachments and special elements (events, tasks, ...) |
| Publish date | Articles can have a publish date on which the article should be shown |
| Media files | News articles can have media files |
| Tags | News articles can have tags |
#### Ideas (won't exist for a long time)
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Applications | There can be different applications to separate communities (e.g. employees, customers, ...) |
### Editor
The editor module is for creating text documents for internal purposes (e.g. notes, transcripts, ...).
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Markdown | Documents are created from a extended markdown format |
| Styling tools | Text can be styled by typing markdown or by using the styling tools which perform these tasks in the background |
| Media files | Documents can have media files |
| Tags | Documents can have tags |
#### Ideas (won't exist for a long time)
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Wysiwyg | A wysiwyg editor like [Typora](https://typora.io/) |
| Inline charts | Allow inline charts (e.g. [Mermaid](https://github.com/mermaid-js/mermaid) and [Toast UI Chart](https://github.com/nhn/tui.chart)) |
| Inline math formulas | Allow inline math formulas (e.g. [Katex](https://katex.org/)) |
### Calendar
The calendar module provides a calender for creating and managing events, appointments, meetings, daily tasks, ...
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Public/private | Calendar entries can be public or private |
| User access permissions | Users can be given read and write permissions to a calendar |
| Multiple layouts | Calendars can have multiple layouts (annual, monthly, weekly and daily) |
| Calendar comparison | Multiple calendars can be shown and compared at the same time |
| Scheduling | Events can be schedules across multiple calendars (find and fix conflicts) |
| Markdown | Calendar entries use markdown for styling |
| Media files | Calendar entries can have media files |
| Tags | Calendar entries can have tags |
| Import | Multiple calendar formats can be imported (outlook, google) |
### Messages
The editor module is for creating text documents for internal purposes (e.g. notes, transcripts, ...).
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Email | Messages can be emails |
| Rooms | Message rooms can be created where users can join and see all messages (similar to a chat but persistent) |
| Database archiving | Emails can be archived in the application database |
| Media files | Documents can have media files |
| Tags | Messages can have tags |
## Sales, Purchasing & Warehousing Modules
### Client Management
The client management module is for handling client data for companies.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Profile | Client profile view showing customer data |
| Analysis | Sales analysis (sales, profit, cross selling potential, purchasing behavior, ...) |
### Supplier Management
The supplier management module is for handling supplier data for companies.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Profile | Supplier profile view showing supplier data |
| Analysis | Purchase analysis (costs, profit with purchased goods, prize increases, purchasing behavior, ...) |
### Item Management
The item management module is for handling item/article data for companies.
| Functionality / Feature | Description |
| ----------------------- | ------------------------------------------------------------ |
| Profile | Item profile view showing item data |
| Analysis | Item analysis (sales, costs, prize increases, purchasing behavior, ...) |
### Warehouse Management
The warehouse management module is for handling stocks for companies.
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Billing
The billing module allows users to create ingoing and outgoing bills (e.g. invoices, delivery notes, ...).
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Purchasing
The purchasing module is for grouping together and providing purchasing activities.
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Sales
The sales module is for grouping together and providing purchasing activities.
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Support / Ticket Management
The support module is for handling support/ticket requests either for internal or external purposes (e.g. customer support/tickets).
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
## Marketing Modules
### Promotions
AAAAAAAAAAAAAAAAAAA
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Events
AAAAAAAAAAAAAAAAAAA
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
## QM, R&D and QS Modules
## Finance Modules
## Administration Modules
### Admin
AAAAAAAAAAAAAAAAAAA
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Jobs
AAAAAAAAAAAAAAAAAAA
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Exchange
AAAAAAAAAAAAAAAAAAA
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Monitoring
AAAAAAAAAAAAAAAAAAA
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |
### Auditor
AAAAAAAAAAAAAAAAAAA
| Functionality / Feature | Description |
| ----------------------- | ----------- |
| | |
| | |
| | |

View File

@ -2,57 +2,84 @@
- [Summary](#summary)
- [Milestones](#milestones)
- [Todos](#todos)
- [Features](#features)
- [Bugs](#bugs)
- [Drafts, concepts & ideas](#drafts-concepts-ideas)
- [Most recent changelog](#most-recent-changelog)
## Summary
Last update of this file: 2021.12.04
Last update of this file: 2021.12.31
### Timeline
## Most recent changelog
### Key changes this month
### December 2021
### Challenges & problems
#### New
### Next steps
##### Framework
* Implemented the new `DataMapper` / `DataMapperFactory` pattern
* This solved various issues and todos (see archived todos for details)
##### Frontend
*
#### Bug fixes
*
#### Other
*
##### Tests
*
## Challenges & problems
### UI
* Adding existing events to dynamically added DOM elements becomes a real problem.
* Solution: Implement event bubbling
## Next steps
Continue with milestone task implementation.
Continue with increasing the test coverage of the modules.
## Milestones
Based on the pilot candidate with whom the functionality will be implemented.
Based on the pilot candidate with whom the functionality will be implemented.
| Deadline | Done | Milestone | Costs | Value |
| -------- | ---- | ------------------------------------------------------ | -------------- | -------------- |
| | | Replace ticket system from Z* | 7,200 EUR | 8,000 EUR |
| | | Replace document/contract management from CRM | 3,000 EUR | 6,000 EUR |
| | | Implement invoice management process | 0 EUR | 5,000 EUR |
| | | Replace QM from CRM | 700 EUR | 1,500 EUR |
| | | Replace workflows from CRM | 1,000 EUR | 3,000 EUR |
| | | Move sales reps from CRM | 3,000 EUR | 6,000 EUR |
| | | Replace Marketing events, seminars, shop data from CRM | 1,500 EUR | 2,000 EUR |
| | | Sales analysis (replace D* from G*) | 1,000 EUR | 2,000 EUR |
| | | Digitalizing human resource Human Resource Management | 0 EUR | 500 EUR |
| | | Replace billing from G* | 15,000 EUR | 20,000 EUR |
| | | Replace stock from G* | 7,500 EUR | 8,000 EUR |
| | | Replace inventory from G* | 500 EUR | 1,000 EUR |
| | | Replace manufacturing from G* + R&D + Quality control | 500 EUR | 10,000 EUR |
| | | Replace accounting from G* | 10,000 EUR | 12,000 EUR |
| | | Replace asset management from G* EUR | 500 EUR | 500 EUR |
| | | Replace reporting from L* | 4,200 EUR | 5,000 EUR |
| | | | **55,600 EUR** | **90,500 EUR** |
* The current costs are the annual value for the pilot candidate based on actual costs but subjectively split into more detailed cost positions (the invoices from the suppliers are not always detailed enough to differentiate between the different functions/modules).
* The future costs are costs that currently don't exist but are expected to come up in the future if the pilot candidate intends to implement **some** of the current software needs.
* The new value is an estimation of how much the newly implemented software (Orange Management) will subjectively provide compared to current/future solutions. These are **NOT** the costs for the pilot candidate or cost savings. The costs for this will be discussed afterwards.
*The annual value is the relative value for the pilot candidate based on the current cost structure.*
| Deadline | Done | Milestone | Current Costs | Future Costs | New Value |
| -------- | ---- | ------------------------------------------------------ | -------------- | -------------- | -------------- |
| | | Replace ticket system from Z* | 7,200 EUR | | 8,000 EUR |
| | | Replace document/contract management from CRM | 3,000 EUR | | 5,000 EUR |
| | | Implement invoice management process | 0 EUR | 5,000 EUR | 5,000 EUR |
| | | Replace QM from CRM | 700 EUR | | 1,500 EUR |
| | | Replace workflows from CRM | 1,000 EUR | | 3,000 EUR |
| | | Move sales reps from CRM | 3,000 EUR | | 6,000 EUR |
| | | Replace Marketing events, seminars, shop data from CRM | 1,500 EUR | | 2,000 EUR |
| | | Sales analysis (replace D* from G*) | 1,000 EUR | | 3,000 EUR |
| | | Digitalizing human resource Human Resource Management | 0 EUR | | 500 EUR |
| | | Replace billing from G* | 15,000 EUR | | 20,000 EUR |
| | | Replace stock from G* | 7,500 EUR | | 8,000 EUR |
| | | Replace inventory from G* | 500 EUR | | 1,000 EUR |
| | | Replace manufacturing from G* | 500 EUR | | 1,000 EUR |
| | | R&D + Quality control | 0 EUR | 10,000 EUR | 10,000 EUR |
| | | Replace accounting from G* | 10,000 EUR | | 12,000 EUR |
| | | Replace asset management from G* | 500 EUR | | 500 EUR |
| | | Replace reporting from L* | 4,200 EUR | | 5,000 EUR |
| | | **Total** | **55,600 EUR** | **15,000 EUR** | **89,500 EUR** |
### Cost basis
The estimated annual costs in the milestones are based on the total annual costs from the software from the pilot candidate. These total costs are then subjectively distributed to the different software aspects.
The estimated annual costs in the milestones above are based on the total annual costs from the software from the pilot candidate.
| Type | License | Customization | Total |
| --------- | -------------- | -------------- | -------------- |
@ -64,213 +91,501 @@ The estimated annual costs in the milestones are based on the total annual costs
*Website costs are not included, they can be estimated at another 30,000 EUR per year*
### Tasks & decisions
### Software vendor comparison
| Deadline | Done | Task |
| ---------- | ---- | ------------------------------------------------------------ |
| 2022.08.27 | | **Define scope**<br />Which modules should be developed first<br />Which features must be part of the modules at the start<br />What is the expected timeline for the different modules |
| | | **Navigation**<br />Allow to hide navigation elements even if the module is installed.<br />Also disable routing for front end. This way only the functionality is available (API). |
| | | **Customer Management**<br />Names<br />Address<br />Contact elements<br />Custom fields<br />Contract import from CRM system (maintenance contract)? *(SD specific)* |
| | | **Job**<br />Manage jobs<br />Consider to combine Job and Workflow (e.g. job only schedule + cmd, workflow is the script to execute) |
| | | **Exchange** (Importer/Exporter)<br />GSD import script for customers (new entries and changed entries) *(SD specific)*<br />GSD import script for customer addresses (new entries and changed entries) *(SD specific)*<br />Allow to define exchange scripts as auto-run with a interval |
| | | **Permission**<br />Better permission handling (only show tickets the user is allowed to see) **difficult**<br />When returning models (backend and API requests) the permission should be checked (all modules)<br />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, ...) |
| | | **Admin**<br />[UI] Add user & group settings<br />[UI] Add account/group removal from each other<br />[UI] Add permission removal from accounts/groups<br />[UI] Add permission modification for accounts/groups<br />Create API key/token permissions<br />Create API key/token handling<br />Handle logging for API keys/tokens<br />Handle "login" for API keys/tokens (maybe create dummy account for that?) |
| | | **Support** (Tickets)<br />Ticket creation<br />Ticket response<br />Status update via email<br />Feedback/rating via email click (using time limited hash) **difficult**<br />Response from customer via email (using time limited hash) . Requires ticket email address, maybe create one per app?**difficult**<br />Upload files to random support directory<br />Allow ticket creation from external sources (e.g. website) by using an api key. Allow custom fields as well. |
| | | **Media**<br />Drag and drop upload<br />Ctrl+C/Ctrl+V upload<br />Move files and directories to subdirectories<br />Bulk actions (move, delete, download, ..)<br />Better file and directory permissions. Similar problem applies to permissions. **difficuly due to subdirs**<br />Implement download of directory<br />Add password support for directories.<br /> > Difficult because of subdirectories<br />Allow to actually replace media files (same DB id but replaced the file on the hard drive)<br />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.<br />Allow to create a collection when uploading multiple files |
| | | **Contract Management**<br />Show contracts after clicking on document list in contract<br />Create task/message if a contracts term runs out<br />Create job which informs people about contract end of life<br />Setting to change responsible person/group A to B (e.g. person leaves company)<br />Implement directory view for contracts |
| | | **System**<br />Create frontend event which checks for server messages regularly (e.g. server goes into maintenance/read-only mode) |
| | | **Workflow**<br />Individual UI templates incl. styles<br />Script management<br />Allow email message and response (text+time limited links via hash) |
| | | **Invoice Management**<br />OCR<br />Auto content recognition (supplier, articles, costs, taxes, payment terms)<br />Define approval workflow<br />Allow notes<br />Allow questions to other users (reference tasks and or media messages)<br />Allow to add additional documents<br />Allow PDF modifcation (allow notes on pdf, approval stamps) **difficult**<br /> > This requires a JS live preview for adding this at a specific position (maybe PDFJSAnnotate, maybe customize pdf.js)<br />Job/Schedule which checks unhandled invoices<br />Hooks/Workflows for invoices |
| | | **Quality Management**<br />Create quality issue (for account, article, other?)<br />Define workflow based on report type?<br />Statistics????<br />Export list to excel<br />Export based on filter to pdf<br />Expand GSD Exchange importer *a lot of work* *(SD specific)* |
| | | **Workflow** (implement some scripts)<br />Remove article (SD specific). How to handle data (custom database table?)<br />Create article (SD specific). How to handle data (custom database table?) |
| | | **Customer Management** (SD specific)<br />Expand GSD Exchange importer to also import customer files from CRM (files, emails)<br />Expand GSD Exchange importer to also import customer notes (notes, visitor reports) |
| | | **Sales**<br />Create easy way to create quick visitor reports (= maybe use notes for this with a type 'visit')<br />Allow to create visitor report on cell phone by using location matching (geolocation)<br />Analyze reports per sales rep (e.g. use filter for export?) |
| | | **Item Management**<br />Names<br />Base data<br />Media files<br />Expand GSD Exchange importer to also import articles *(SD specific)* |
| | | **Billing** (only data for upcoming modules)<br />Basic invoice data (no stock movement)<br />Expand GSD Exchange importer to bills as well *(SD specific)*<br />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<br />Show invoice pdf in preview on change |
| | | **Sales**<br />Sales rep ranking<br />Individual rep sales analysis (e.g. top customers, sales by product group, lost customers, ...) |
| | | **Customer Management**<br />Customer sales info/statistics (total sales, invoices, articles, groups)<br />Invoice pdf importer from hard drive (without using the Exchange module) *(SD specific)*<br />Create a view where you can see all bills of the customer<br />Create a view where you can see all items of the customer |
| | | **Sales**<br />Sales analysis reports |
| | | **Sales Analysis** (client sales analysis)<br />Sales + Gross profit<br />Quantity orders + quantity articles<br />Segment sales<br />Top articles<br />Cross selling (bought as well)<br />Amount of invoices<br />Amount of different articles |
| | | **Sales Analysis** (item sales analysis)<br />Sales + gross profit<br />quantity sales, quantity customers<br />Cross selling<br />Top customers<br />Amount of customers<br />Amount of article sales<br />Amount of new customers<br />Cross selling articles |
| | | **Job**<br />Create job which can automatically create checklists (e.g. end of month checklists) |
| | | **Checklist**<br />Create module<br />Checklists can create tasks<br />Allow to define recurring date time |
| | | **Marketing**<br />Create promotions (incl. basic info)<br />Promotion type (somehow use for cost center)<br />Create events (incl. basic info)<br />Event type (somehow use for cost center) |
| | | **Human Resource Management**<br />Handle staff information (encrypted)<br />Handle staff positions<br />Manage documents (encrypted)<br />Manage contracts (encrypted)<br />Manage salary (encrypted)<br />List of assets and documents handed over to employees (to be returned on leave) |
| | | **Item Management**<br />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?)<br />Consider to use name for attribute identification (currently only used for localization). Is this really required?id might be fine?<br />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?)<br />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**<br />Basic clocking (browser + hardware)<br />Hardware needs to make web requests for the chip clocking<br />Clocking overview for employees<br />Vacation / absence management for employees<br />Clocking overview/analysis for managers/hr<br />Vacation / absence overview/analysis for managers/hr<br />Vacation approval workflow<br />Clocking change approval<br />Export of clocking times (hr)<br />Export of vacations, sickness, ... (hr) |
| | | **Dashboard**<br />Drag&Drop element sometimes disappear on drop<br />Create default dashboard templates which can be used by users, changing them copies it for this user<br />Allow people to modify a dashboard and automatically save it / reload it<br />Implement a way for other modules to provide dashboard components (allow modules to register themselves in a database table) |
| | | **Billing** (additional features)<br />Only create pdf preview if preview is visible?<br />[Analysis] Gross profit (total bill and elements)<br />Show bill relations (on tab which shows all related bills)<br />Create send as email button inside the bill. this opens the send email view where the email is pre-written with the attached pdf<br />In the supplier and client view you should be able to select multiple bills and click print for printing<br />In the supplier and client view you should be able to select multiple bills and click send as email for email sending<br />The send bill as email should have a global settings where you can either define a global email or empty = user specific email<br />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<br />Clients should have a invoice_email address which is stored in the client |
| | | **Billing** (full implementation)<br />Allow to define re/usable templates (e.g. recurring invoices)<br />Allow to define re/usable texts<br />Automatic email invoice after finishing if user wants to use that<br />Batch print/export invoices based on filter<br />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.<br />Forward bills to sales rep (if bill > X EUR or specific type)<br />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<br />Allow to import existing bills (e.g. order -> invoice, offer -> confirmation -> delivery note ...)<br />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?<br />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) |
| | | **Warehouse Management**<br />Implement stock GSD stock importer *(SD specific)* |
| | | **Purchasing**<br />Create item list for purchasing |
| | | **Accounting**<br />Implement GSD accounting importer *(SD specific)*<br />Print receivable of customer (also allow to do this from the client view in the Client Management) |
| | | **Client Management** (additional feature implementation)<br />Add list for top articles on profile page... important for customer calls<br />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)<br />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)<br />Add a geo map of the customers location (either on a real map or on the already added SVG maps) |
| | | **Client Management** (nice to have)<br />Create a map of all customers (maybe as data points or as heat maps)<br />Create a map of sales (maybe as data points or as heat maps)<br />Create default letter Doc (with/without letter head)<br />Make customers only visible/readable to authorized people (e.g. sales rep may only see his own clients)<br />Client view should be customizable since different groups have different interests and read permissions (e.g. sales reps, finance, etc.)<br />Allow to specify the accounting account (e.g. a customer who is a supplier may have the same account) |
| | | **Accounting Analysis**<br />Create different P&L structures<br />Create different balance structures<br />Create cash analysis structure<br />Create asset/depreciation structure<br />Create comparison feature for the above mentioned structures (budget, IFRS, ...) |
The following overview tries to compare competitive software alternatives as fairly as possible. However, in many cases additional costs for maintenance, support and **especially** customizations are not known.
| Type | Current situation* | Sage | Salesforce | Datev | Lexware | OMS** |
| ------------- | ---------------------- | ---- | -------------- | --------- | -------------- | -------------- |
| Ticket system | 7,200 EUR | | | | | 5,000 EUR |
| CRM | 9,200 EUR | | 11,250 EUR + ? | | | 10,000 EUR |
| ERP | 22,000 EUR + 8,000 EUR | | | | 17,000 EUR + ? | 25,000 EUR |
| Accounting | 4,600 EUR + 400 EUR | | | 1,260 EUR | 5,000 EUR + ? | 5,000 EUR |
| Reporting | 4,200 EUR | | | | | 5,000 EUR |
| **Total** | **55,600 EUR** | | | | | **50,000 EUR** |
*ERP calculation based on 35 licenses, accounting based on 10 licenses, CRM based on 75 licenses*
\* Excluding future costs for additional software/features
\*\* Incl. features mentioned in new value and basic support & customizations (e.g. installation, software training, invoice layout)
### Milestone 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<br />![Advanced select](img/todo/dropdown.png) |
| | 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.<br /> > 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**<br /> > 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 (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 moduel |
| | 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 ...)<br />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 | Task |
| -------- | ---- | ---- |
| | | |
| Deadline | Done | Category | Task |
| -------- | ---- | -------- | ---- |
| | | | |
## Todos
Todos/tasks which are not important enough to be part of the milestones.
Todos/tasks which are not important enough to be part of the milestones (or don't impact the milestone progression significantly).
| Priority | Done | Task |
| -------- | ---- | ------------------------------------------------------------ |
| high | | **Search**<br />Implement a tag search hook which finds content based on tags<br />Implement module specific search (e.g. :tasks title ...)<br />Implement global search hook (every module performs a search based on the search)<br />Create a api search filter which allows to search in a specific module only (e.g. in the shop app only search the shop, in the QA app only search in QA) |
| high | | **UI input**<br />In the AdvancedInput, implement predefined values (e.g. predefined/default tags)<br />In the AdvancedInput, implement mandatory predefined values (e.g. tags which cannot be deleted)<br />Implement AdvancedSelect (with auto filtering, none-element, multi-select, default-selects, must-have selects)<br />![Advanced select](img/todo/dropdown.png) |
| high | | **UI change**<br />Find a way to load a different page after a successful form result (e.g. reload account creation page) |
| high | | **Table**<br />Implement drag sortable table rows (https://htmldom.dev/drag-and-drop-table-row/). Implement the same concept for other elements, maybe abstract it straight away! |
| high | | **Table**<br />Implement export (local=visible data, external=all data)<br />Implement filtering (local=visible data, external=all data)<br />Highlight filtering of the filtered columns |
| high | | **Forms**<br />On change highlight the data/element that got changed<br />Invalid API responses should undo the UI changes<br />Removing a form from the DOM should unbind it<br />Adding a template to the DOM should modify its id/generate a custom/random id for the added element<br />Add/bind UI elements after adding them to the DOM<br />Consider to allow multiple/different add buttons which behave a little bit different<br />If a form has unsaved content the browser should ask if the user really wants to change the page or close it ("beforeunload"-Event) |
| medium | | **Logs**<br />Immediately send errors also via email to the admin/server email address if it is configured that way. |
| medium | | **Registration**<br />Allow users to register by themselves<br />Send a email after creating a profile/self-registration with login information |
| medium | | **Url format**<br />Change the url format in most modules from query parameter to path (e.g. /module/profile?id=Admin to /module/Admin/profile) |
| medium | | **Modules**<br />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 | | **ActionManager**<br />Implement listeners for child elements if the selector is specified |
| medium | | **Action**<br />Create a action which adds/removes DOM elements<br />Log DOM changes to the user |
| medium | | **Modules**<br />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**<br />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) |
| low | | **Framework: Schedule**<br />Use `Interval` for scheduler instead of string etc. |
| low | | **Email**<br />Continue implementation of email sending and receiving. |
| low | | **ER diagrams**<br />Checklist<br />Contact<br />DatabaseEditor<br />Draw<br />Messages<br />Monitoring<br />Shop |
| low | | **UI tabs**<br />[Template] Fix tab indices's. On many pages the tab indices's are broken (tabs, table/list, links, forms) |
| low | | **Surveys**<br />Currently the demo (demoSetup/\*) only uses one language (en). Generate surveys with multiple langauges 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)<br />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**<br />The modules use the module name for identification in many places where the module id should be used for performance reasons |
| low | | **Modules/permissions**<br />In many places where permissions are used bad and different names are used. Sometimes the term "type" is used, sometimes the term "state" (PermissionState). Both actually represent a superficial category every module can define for permissions. (e.g. a state could be account, task, profile, tag, ...). The term "state" makes no sense since it isn't a state. The term "type" is also bad because in another place it is used to define (read, write, change, ...). Maybe we should simply call it PermissionCategory/category?! (files to change: NavElement, PermissionAbstract, PermissionState) |
| low | | **Graph**<br />Implement missing functionality:<br />Find cycles using graph coloring<br />Find a negative cycle<br />Find cycles with n length<br />Find cycles with odd length<br />Find islands<br />Check if strongly connected<br />Find longest path<br />Get the girth<br />Get the circuit rank<br />Get the node connectivity<br />Get the edge connectivity<br />Check if bipartite<br />Check if triangle free |
| low | | **QueryBuilder**<br />Implement missing functions such as sum, count, ... |
| low | | **General**<br />Once read only variables become available many models can remove getter/setter function (e.g. ApplicationAbstract, ConnectionAbstract and various models) |
| low | | **Grammar**<br />Implement schema modification grammar (alter tables) |
| low | | **Router, EventManager, Hook**<br />Instead of doing 100% regex matching, combine it with a tree search, this should be faster |
| low | | **Text search algorithm**<br />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**<br />Implement client<br />Implement server |
| low | | **ServiceWorkers**<br />Implement caching and responding |
| low | | **Code**<br />Implement QR code creation<br />Implement QR code reader<br />Implement data matrix creation<br />Implement data matrix reader<br />Implement various bar code readers |
| low | | **Speech recognition**<br />Remove the speech recognition wrapper once it becomes standard |
| low | | **Voice commands**<br />Implement table/link navigation |
| low | | **Input validation**<br />Implement nicer input validation (e.g. show check mark and x in the input fields / optionally)<br />![Input validation](img/todo/input_validation.png) |
| low | | **jsOMS Framework**<br />Consider to create a library function which finds the nearest element based on a select (horizontal and vertical search, `*.nearest()` does not work this way) |
| low | | **jsOMS UriFactory**<br />Consider to parse EVERY URL with the Uri factory. This however might cause double parsing and therefore bugs |
| low | | **Tabs**<br />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 | | **Build process/website module display**<br />Text file with all the module git links<br />Download and install<br />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)<br />Add to database |
| low | | **Logs**<br />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**<br />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.<br />> Solution: create flexbox with margin |
| low | | **Admin: Settings template**<br />In the Settings->Localization->Numeric the number format (decimal, thousands) don't have a spacer in between. Margin left doesn't work. |
| low | | **Admin**<br />The default Account mapper should not have a password reference, there should be a AccountLoginMapper which is used if anything needs to be done regarding the account password. Alternatively, think about a private field modifier which requires the programmer to specifically request the read/write permission for that field (password field). The reason for this is that otherwise the password hash might be dumped in case of an error |
| low | | **Auditor**<br />Consider to create foldable/tree view for json logs e.g. https://www.cssscript.com/json-data-tree-view/<br />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).<br />Create printable reports based on specific changes |
| low | | **Database Editor**<br />Implement basic functionality / queries in UI |
| low | | **Fleet Management** |
| low | | **Helper**<br />Implement direct print instead of opening a new window with `document.getElementById('iHelperFrame').contentWindow.print();` |
| low | | **Investments**<br />Approval<br />Comparison/calculations |
| low | | **Labeling**<br />Create default label layout for items |
| low | | **Item Management**<br />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)<br />Show additional important item information for sales/purchase, currently too controlling/stats focused<br />Define some attributes mandatory (e.g. HC-code/tariff code number) |
| low | | **Kanban**<br />Implement card status (archive, public, inactive)<br />Implement unread cards/comments notification/highlight<br />Highlight card with new comments (e.g. make comment count background red?)<br />Consider to replace card comments with normal comments from the Comments module |
| low | | **Knowledgebase**<br />Implement category create/edit view<br />Implement doc create/edit view (similar to news/editor)<br />Add category back/up button when in a subcategory |
| low | | **Monitoring**<br />Implement integrity check based on installed version and remote hash list (see monitoring-security.tpl.php) |
| low | | **Messages**<br />Implement email sending/receiving<br />Implement internal message/conversion storage<br />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**<br />Create better organigram (better grouping, maybe as SVG)<br />Make the organigram printable<br />Make the organigram versioned/approved (e.g. for ISO) |
| low | | **Profile**<br />Define a default image for new profiles. However, don't create a new media file whenever a new profile is created but instead define one global image which than is loaded for all profiles which don't have a custom image. This makes it easy to replace the default image for all existing profiles and saves a lot of space. |
| low | | **Quality Assurance** |
| low | | **QA**<br />Implement voting<br />Implement accepting answers<br />Implement question create view<br />Add question answer component/like comment in question<br />Make votes contain for who the vote is, this way the vote score sum for accounts is MUCH easier and faster<br />Create QA app with login |
| low | | **Supplier**<br />Create a view where you can see all bills of the supplier<br />Create a view where you can see all items of the supplier<br />[Doc] Create default letter Doc (with/without letter head)<br />[Payable] Print payable<br />[Analysis] Purchase EUR + gross profit<br />[Analysis] Quantity order, quantity articles<br />[Analysis] Segment purchase<br />[Analysis] Top articles<br />[Analysis] Cross selling<br />Allow to specify the accounting account (e.g. a customer who is a supplier may have the same account) |
| low | | **Tasks**<br />[Analyzer] Implement analyzing functionality (tasks created, answered, time required to finish task, always in time?)<br />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)<br />Make answer box on the right scroll down with the content, this way you can immediately respond without scrolling.<br />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!!!<br />Implement email notification on progress/changes (new task, forwarded, ...)<br />The unread task count is currently not really correct and needs to be fixed<br />Allow batch handling of tasks in the dashboard/overview for faster interaction (e.g. select and close)<br />Create a user calender for tasks which only shows when tasks are due<br />Don't show Tasks in dashboard which are far into the future, maybe create another list for this?<br />Implement has seen and unseen (use system where every task has a seen flag for a user if it is seen) |
| low | | **Calendar**<br />Load events back to a fixed amount of months (e.g. current month, previous month and next month)<br />Implement event popup in the UI on click<br />Create different interval templates (year, quarter, month, week, day)<br />Allow user to define the start of the week (e.g. Sunday, Monday)<br />Implement gantt chart<br />Create iCal parser/reader and builder<br />Create database, models and mappers |
| low | | **CMS**<br />Make file content view 100% container height<br />Allow content changes and saving<br />Ideas for applications based on modules (e.g. monitor/log dashboard, sales dashboard, calendar, support/ticket, clocking, Q&A, Wiki, shop)<br />Implement line numbers in code view<br />Implement code formatting / syntax highlighting<br />Allow different content types (e.g. pages, posts, ...) with individual templates |
| low | | **Workflow**<br />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.<br />New customer is created (approve)<br />New bill is created (approve, validate)<br />New supplier is created (approve) |
| low | | **ReadOnly**<br />Find a way to implement a read only setting. This could be helpful for maintenance times. |
| low | | **UriFactory**<br />Consider to use `\urlencode()` on every query parameter in the UriFactory. |
| low | | **ModuleMapper**<br />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**<br />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 | | **ModuleInstaller**<br />In most module *Installer.php* scripts the `installExternal()` re-implements Api functionality. Instead of creating new functions maybe the installer scripts should mock the API requests? (e.g. CMS is using the API while Media is re-implementing many functions) |
| low | | **CMS**<br />Make pages editable<br />Make posts editable |
| low | | **UI Slider**<br />Create a slider element with two elements which the user can slide (optionally also only one slider should be possible)<br />![Slider](img/todo/slider.png) |
| low | | **Demo setup - Billing**<br />Improve customer order randomization (types, dates) in the demo setup file `setupBillingClients.php`.<br />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**<br />Costs such as shipping, insurance etc. should not be hard coded but customizable costs stored in a separate table. |
| low | | **Demo setup - Support**<br />Use default values for ticket attribute types in some cases instead of always using custom values |
| low | | **Update**<br />Create update logic for application, resources, modules, ... in the Admin/ApiController (`apiCheckForUpdates`) |
| low | | **Billing**<br />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. |
| low | | **Billing**<br />The bill archive should store the customer/supplier localized version since this is the official document. |
| low | | **Billing**<br />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**<br />The tools above should directly insert the markdown into the textarea. |
| low | | **Kanban**<br />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**<br />Find a way to allow file edits if the file is not in the database but just in the file directory. At the same time this should not be possible for database files. |
| low | | **DataMapperAbstract**<br />The SQL query building seems to bee too complicated in some cases including unnecessary joins (e.g. see `TagMapper::get()`) |
| low | | **DataMapperAbstract**<br />Implement data binding |
| low | | **DataMappers**<br />Use `Mapper::class` or string names in the mappers. At the moment both can be found. This is not concise. The `Mapper::class` name is preferred in case of name changes. |
| low | | **Email**<br />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 | | **Temp directory**<br />Consider to create a temp directory in the main directory (Orange-Management) which can be used by all modules etc. Alternatively create this temp directory in `Modules/Media/Files` |
| low | | **DataMapper - ModelFactory**<br />Some models may require special initialization. For such cases a model factory should be implemented and used by the data mapper. |
| 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 | 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 | Registration | Allow users to register by themselves (if activated in the backend) |
| medium | Registration | Send a email after creating a profile/self-registration with login information |
| 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 a 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 | Admin | Create a view where it's possible to create/activate, change and delete/deactivate hooks for events. |
| 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 diagram | Checklist |
| low | ER diagram | Contact |
| low | ER diagram | DatabaseEditor |
| low | ER diagram | Draw |
| low | ER diagram | Messages |
| low | ER diagram | Monitoring |
| low | ER diagram | Shop |
| 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 | Modules/permissions | In many places where permissions are used bad and different names are used. Sometimes the term "type" is used, sometimes the term "state" (PermissionState). Both actually represent a superficial category every module can define for permissions. (e.g. a state could be account, task, profile, tag, ...). The term "state" makes no sense since it isn't a state. The term "type" is also bad because in another place it is used to define (read, write, change, ...). Maybe we should simply call it PermissionCategory/category?! (files to change: NavElement, PermissionAbstract, PermissionState) |
| 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)<br />![Input validation](img/todo/input_validation.png) |
| 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.<br />> 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 | Admin | The default Account mapper should not have a password reference, there should be a AccountLoginMapper which is used if anything needs to be done regarding the account password. Alternatively, think about a private field modifier which requires the programmer to specifically request the read/write permission for that field (password field). The reason for this is that otherwise the password hash might be dumped in case of an error |
| 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 | Profile | Define a default image for new profiles. However, don't create a new media file whenever a new profile is created but instead define one global image which than is loaded for all profiles which don't have a custom image. This makes it easy to replace the default image for all existing profiles and saves a lot of space. |
| low | Quality Assurance | Implement module |
| low | Q&A | Implement voting |
| low | Q&A | Implement accepting answers |
| low | Q&A | Implement question create view |
| low | Q&A | Add question answer component/like comment in question |
| low | Q&A | Make votes contain for who the vote is, this way the vote score sum for accounts is MUCH easier and faster |
| 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 | 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 | ModuleInstaller | In most module *Installer.php* scripts the `installExternal()` re-implements Api functionality. Instead of creating new functions maybe the installer scripts should mock the api requests? (e.g. CMS is using the api while Media is re-implementing many functions) |
| 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)<br />![Slider](img/todo/slider.png) |
| low | UI Slider | Create a radial slider (https://codepen.io/equinusocio/pen/OJMBpdK)<br />![Slider](img/todo/slider_radial.png) |
| 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 | Find a way to allow file edits if the file is not in the database but just in the file directory. At the same time this should not be possible for database files. |
| low | DataMapperAbstract | The SQL query building seems to bee too complicated in some cases including unnecessary joins (e.g. see `TagMapper::get()`) |
| low | DataMapperAbstract | Implement data binding |
| low | DataMapper | Use `Mapper::class` or string names in the mappers. At the moment both can be found. This is not concise. The `Mapper::class` name is preferred in case of name changes. |
| 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 | Temp directory | Consider to create a temp directory in the main directory (Orange-Management) which can be used by all modules etc. Alternatively create this temp directory in `Modules/Media/Files` |
| 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 | Editor | Implement versioning |
| 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 | 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 | Allow support/tickets to be transformed to Q&A question and answers |
| low | Support | Allow Q&A to be transformed to support |
| 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 | Handheald device | Going a page (or tab) back should be done with swiping |
| low | News | In order to show which news are seen and which are not seen the `NewsSeen` model needs also to reference the article, currently only the user is referenced. Of course this doesn't work! |
| 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<br /> > alphanumeric<br /> > greater<br /> > greater equals<br /> > lesser<br /> > lesser equals<br /> > contains<br /> > doesn't contain<br /> > in between<br /> > regex<br /> > pre-defined values/select<br /> > checkboxes if 0/1 values<br /> > consider other filters for data that is not shown in the table? Backend filter options? |
| low | UriFactory | In the frontend and backend there needs to be a way to only add query parameters if they have a value. The question is if we can implement that as default (very easy, just check if value available) or if we need to define it as `only if available`. The later option might be necessary because there could be situations where you want to add a query parameter without a value? Not sure though. |
| 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, ...) |
| | | |
#### Archived
| Priority | Done | Task |
| -------- | ---------- | ------------------------------------------------------------ |
| medium | 2021.12.04 | **DataMapper**<br />The ::with() function uses blacklisting it should be changed to whitelisting for relations |
| medium | 2021.12.04 | **DataMapper**<br />This is useful for Item profile, Customer profile, Supplier profile etc. Alternatively find a way to implement it in `::withConditionals` ?! Or do we need a new function `::withParameters('memberName/columnName`?', [options]). Or just a `::with()` function which we also need to specify for the future for which relations need to be loaded at all e.g. `::with('files', ['limit' => 5, 'sortBy' => 'createdAt', 'sortOrder' => 'ASC'], [Client::class])` I think the ::with(...) makes the most sense. Maybe this can also be combined with the withConditional. This way we can remove/merge withConditional. There is one problem, maybe we need a `::onlyWith` function, because we don't want to load all relations |
| low | 2021.12.04 | **DataMapper**<br />Reconsider the order of the `get(*)` parameters (e.g. depths/fill). *No longer relevant* |
| low | 2021.12.04 | **DataMapper**<br />In the DataMapper when using getQuery() and then making a ->where(...) the where will often fail because the table name is suffixed with an integer e.g. `_3`. This means you need to know the depth of the query in order to manually write it. The query builder should figure this out by himself. It knows the `_INT` value from the `FROM` clause and should just overwrite in the where clause where needed. See the GSD Importer from the exchange module for reference. *No longer relevant* |
| low | 2021.12.04 | **DataMapper**<br />Only update changed relations (e.g. allow coder to tell the DataMapper what changed) *Can be done with `->with(...)`* |
| low | 2021.12.04 | **DataMapper**<br />Implement get() where the coder can tell the DataMapper which fields and relations to fill (this might be solved with a better `::with()` function. *Can be done with `->with(...)`* |
| low | 2021.12.04 | **ModuleMapper**<br />Create a `::limit()` function which is similar in concept to the existing function `::sortBy()`. As a result the limit can be removed from most other functions. *No longer relevant* |
## Features
Features to be implemented at a later stage *nice to haves*.
### Tasks & decisions
| Priority | Done | Task |
| -------- | ---- | ------------------------------------------------------------ |
| medium | | **Editor**<br />Create immediate text preview similar to a rich text editor or Typora. |
| medium | | **Admin**<br />Create a view where it's possible to create/activate, change and delete/deactivate hooks for events. |
| low | | **Editor**<br />Create special markdown content (calendar, chart, task, news, comment, media, ...)<br />Allow download as markdown, text, PDF, word<br />Implement versioning. |
| low | | **Event Management**<br />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 %)<br />Add milestones |
| low | | **Project Management**<br />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 %)<br />Add milestones |
| low | | **Promotion**<br />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**<br />Implement accounting forensics (Benfords Law, cent value distribution analysis, amount of bookings between specific amounts, amount * bookings between specific amounts, etc.) |
| low | | **Item Management**<br />Item view should be customizable since different groups have different interests and read permissions (e.g. sales reps, finance, etc.)<br />Show different prices on item profile frontpage (e.g. domestic, export, quantity discount) |
| low | | **Purchase**<br />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**<br />Allow board templates? maybe at least colors?<br />Allow card templates? maybe at least colors? |
| low | | **Billing**<br />Automatically create recurring bills (invoices, delivery notes, etc.) if a customer wants to receive items automatically |
| low | | **Media**<br />Create preview option for images (e.g. ctrl+mouse hover or a different "list-view" like in explorer)<br />Validate file size on the frontend before uploading<br />Automatically change the file encoding of text files<br />Enable image interlacing (in the past there was a bug)<br />Implement media encryption/decryption (optionally)<br />Implement media password protection for read (optionally)<br />Implement resumable uploads<br />Implement path changes in the frontend<br />Allow the modification of collections<br />Implement external resources (URLs, dropbox, aws, ...)<br />Allow to edit the breadcrumbs, which replaces them with a text field which can be changed then than automatically loads the new path<br />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 | | **Messages**<br />Allow to transform a message as task<br />Implement push notification<br />Users may be invited to old conversations |
| low | | **Navigation**<br />Improve goto command to match based on proximity and only based on visible links<br />Consider to create on navigation language file (same as routing files) during the installation process<br />Create settings page which allows to modify the navigation in the module settings<br />Consider to implement child elements on hover (sidebar and content) |
| low | | **News**<br />Implement email/message notification on create |
| low | | **Profile**<br />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**<br />Allow support/tickets to be transformed to Q&A question and answers<br />Allow Q&A to be transformed to support<br />Create support app with login<br />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**<br />Create settings with a set of default colors |
| low | | **Settings**<br />Implement a setting which lets users see all content no matter the content language (e.g. all News) |
| low | | **Templates, Controllers, Views and Models**<br />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. |
#### Archived
| Priority | Done | Task |
| -------- | ---- | ---- |
| | | |
| Priority | Done | Category | Task |
| -------- | ---------- | --------------- | ------------------------------------------------------------ |
| high | 2021.12.30 | | **Table**<br />Implement drag sortable table rows (https://htmldom.dev/drag-and-drop-table-row/). Implement the same concept for other elements, maybe abstract it straight away! *Basic concept implemented* |
| medium | 2021.12.04 | | **DataMapper**<br />The ::with() function uses blacklisting it should be changed to whitelisting for relations |
| medium | 2021.12.04 | | **DataMapper**<br />This is useful for Item profile, Customer profile, Supplier profile etc. Alternatively find a way to implement it in `::withConditionals` ?! Or do we need a new function `::withParameters('memberName/columnName`?', [options]). Or just a `::with()` function which we also need to specify for the future for which relations need to be loaded at all e.g. `::with('files', ['limit' => 5, 'sortBy' => 'createdAt', 'sortOrder' => 'ASC'], [Client::class])` I think the ::with(...) makes the most sense. Maybe this can also be combined with the withConditional. This way we can remove/merge withConditional. There is one problem, maybe we need a `::onlyWith` function, because we don't want to load all relations |
| low | 2021.12.04 | | **DataMapper**<br />Reconsider the order of the `get(*)` parameters (e.g. depths/fill). *No longer relevant* |
| low | 2021.12.04 | | **DataMapper**<br />In the DataMapper when using getQuery() and then making a ->where(...) the where will often fail because the table name is suffixed with an integer e.g. `_3`. This means you need to know the depth of the query in order to manually write it. The query builder should figure this out by himself. It knows the `_INT` value from the `FROM` clause and should just overwrite in the where clause where needed. See the GSD Importer from the exchange module for reference. *No longer relevant* |
| low | 2021.12.04 | | **DataMapper**<br />Only update changed relations (e.g. allow coder to tell the DataMapper what changed) *Can be done with `->with(...)`* |
| low | 2021.12.04 | | **DataMapper**<br />Implement get() where the coder can tell the DataMapper which fields and relations to fill (this might be solved with a better `::with()` function. *Can be done with `->with(...)`* |
| low | 2021.12.04 | | **ModuleMapper**<br />Create a `::limit()` function which is similar in concept to the existing function `::sortBy()`. As a result the limit can be removed from most other functions. *No longer relevant* |
| low | 2021.12.31 | jsOMS Framework | Consider to create a library function which finds the nearest element based on a select (horizontal and vertical search, `*.nearest()` does not work this way). *Not implemented: seems unnecessary* |
## Bugs
### Tasks & decisions
| Priority | Done | Task |
| -------- | ---- | ------------------------------------------------------------ |
| medium | | **Human Resource Management**<br />Fix employee list (see comment at the bottom, query builder bug) |
| medium | | **DataMapper**<br />The `limit()` function is not working for relations e.g. `limit(3, 'hasMany/childHasMany')` |
| low | | **KMeans**<br />In some weird cases the Cluster test fails. This happens approximately 5 / 100 test runs (invalid center coordinate value) |
| low | | **Dashboard**<br />Why does admin not have a dashboard? Everyone should have it! |
| low | | **Table**<br />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**<br />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 | | **Wrong graph neighbors**<br />In directed graphs `getNeighbors()` might return wrong neighbors. |
| Priority | Category | Task |
| -------- | ------------------------- | ------------------------------------------------------------ |
| medium | Human Resource Management | Fix employee list (see comment at the bottom, query builder bug) |
| medium | DataMapper | The `limit()` function is not working for relations e.g. `limit(3, 'hasMany/childHasMany')` (e.g. check `ItemManagement/BackendController->viewItemManagementSalesItem()`) |
| 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 5 / 100 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 | Dashboard | Why does admin not have a dashboard? Everyone should have it! |
| 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 | HttpUri | The url parser doesn't return the correct fragment/query for urls missing a query value, such as `https://127.0.0.1/test?something#frag |
| low | UriFactory | In the frontend the `setupUriBuilder` is called on the page load which could be bad as the uri can change on the fly without a new page load. Move parts of it to the builder so that this happens on the fly (for: path, query, fragment). |
| low | ModuleManager | The module `get()` function uses as return object. 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 | Task |
| -------- | ---- | ------------------------------------------------------------ |
| high | | **DataMapper**<br />In some cases the array is required in the `::withConditional()` function. This seems to be the case if a model doesn't have the condition but a sub-model has it. The mapper should simply not use the conditional if it doesn't exist in the mapper (see `ItemManagement::BackendController` or `ClientManagement::BackendController` with the BillMapper, this is a stupid fix) *No longer relevant* |
| Priority | Done | Category | Task |
| -------- | ---- | -------- | ------------------------------------------------------------ |
| high | | | **DataMapper**<br />In some cases the array is required in the `::withConditional()` function. This seems to be the case if a model doesn't have the condition but a sub-model has it. The mapper should simply not use the conditional if it doesn't exist in the mapper (see `ItemManagement::BackendController` or `ClientManagement::BackendController` with the BillMapper, this is a stupid fix) *No longer relevant* |
### Details
@ -379,30 +694,3 @@ where ...
::with(PermissionAbstractMapper::class, $permissions)
// this will create a where condition generated by the PermissionAbstractMapper::class e.g. call PermissionAbstractMapper::createWith($query)
```
## Most recent changelog
### December 2021
#### New
##### Framework
* Implemented the new `DataMapper` / `DataMapperFactory` pattern
* This solved various issues and todos (see archived todos for details)
##### Frontend
*
#### Bug fixes
*
#### Other
*
##### Tests
*

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB