mirror of
https://github.com/Karaka-Management/Organization-Guide.git
synced 2026-01-11 21:08:41 +00:00
73 KiB
73 KiB
Project Status and Tasks
Summary
Last update of this file: 2022.05.01
Latest changelog
July 2022
New
Application
- Implement table sorting
Auditor
- Turned auditing data from text to blob and compressed it resulting in a storage reduction by approx. 75% - 80%
Framework
- Hard limit JSON requests and urldata to 1MB
Bug fixes
Framework
Other
Challenges & problems
UI
- Adding existing events to dynamically added DOM elements becomes a real problem.
- Solution: Implement event bubbling
Key tasks
Archived
| Deadline | Done | Category | Task |
|---|---|---|---|
Todos
Todos/tasks which are not important enough to be part of the milestones (or don't impact the milestone progression significantly).
| Priority | Category | Task |
|---|---|---|
| high | Forms | Invalid api responses should undo the UI changes |
| high | Forms | Adding a template to the DOM should modify its id/generate a custom/random id for the added element |
| high | Forms | If a form has unsaved content the browser should ask if the user really wants to change the page or close it (use beforeunload event). |
| medium | Job | Consider to run jobs through the cli application. This means a job executes php cli.php put:/admin/job -i 3 which runs the command of job 3. This would allow to log the job execution time and response. If you don't want to wait for the execution to finish you may as well run it async (this means of course no execution time or output can be logged, but at least the start time). |
| medium | Form/Table | Implement a filter highlight function (either in forms or in tables, where the filter icon is highlighted, if a filter is defined). One solution could be to put an additional hidden filter checkbox in front of the filter icon and check for filter changes (bubble up) and then activate this hidden checkbox if a filter is defined. In css just define the filter icon as active/highlighted, if the hidden check box is active. This means we have two hidden checkboxes in front of the filter icon (one in case the filter menu is open = popup is visible and another one for highlighting the filter icon if a filter is defined). |
| medium | Form/Table | How to preserve form filter data to the next page? Not an issue, in the future we don't want to reload the whole page, but only exchange the table/list content with the backend response -> the header/filter will not get changed and remains as defined. This means for tables (maybe even forms?) to setup content replacement earlier than for other pages?! |
| medium | CMS | Create functionality which allows to replace application files. Instead of just overwriting them they get backed up in a backup directory. |
| medium | UI select | Bind data to select options such as visible elements and data pre-fills. When an option is selected certain ui elements become visible and get filled out with default values. |
| medium | phpOMS | Implement Redis / memcached sessions |
| medium | Knowledgebase | Add org ID to wiki app (optional) and add a default flag. In the backend load the default wiki app for the current organization $this->app->orgId |
| medium | Tasks | Allow to create a reminder for a task (e.g. small bell next to the user name which highlights the task/removes the has_seen flag + says somewhere you got remindered) |
| medium | Tasks | Create different overviews list by date + list by priority (very high + next day, high + next 2 days, medium + next 5 days, low + next 10 days, very low + remaining). Of course the grouping may change based on how long ago the creation date is. |
| medium | Tasks | Show stats at the top (e.g. open, in progress, maybe even open high priority) |
| medium | Billing | Allow to define multiple documents which are created upon invoice completion. Right now only the internal invoice document is generated. |
| medium | Push/pull content | Auto update data changes in the backend (e.g. pull every x seconds, or use websockets for push) |
| medium | Concurrency lock | Lock data for concurrency (e.g. table row lock or heartbeat) |
| medium | Logs | Immediately send errors also via email to the admin/server email address if it is configured that way (maybe create callback global and for different log levels). |
| medium | Url format | Change the url format in most modules from query parameter to path (e.g. /module/profile?id=Admin to /module/Admin/profile) |
| medium | Modules | Many models would benefit from unit and app association. Sometimes models should only be available/associated with a specific unit (e.g. news article for website, backend, shop etc.) |
| medium | Frontend Action | Create an action which adds/removes DOM elements |
| medium | Frontend Action | Log DOM changes to the user |
| medium | Modules | Find a way to handle optional modules (e.g. comment module in the news module) in the past the Mapper was modified (comments were removed) if the comment module was installed. Somehow this is no longer available but maybe another solution could be a different Mapper which is replaced if the comment module is installed. But instead of replacing a complete file, a diff should be generated between the files and the ADDED lines should be merged. How to handle uninstall because here it doesn't work? I would need to know exactly what to remove. |
| medium | DataMapper | In the DataMapper implement iterable fetch. Currently all models are returned in one go, additionally an iterator should be returned for iterable access in case of MANY results (e.g. Exchange module). Maybe add mapper function (->iterable() which then returns an iterator after ->execute()) |
| medium | Editor | Create immediate text preview similar to a rich text editor or Typora. |
| medium | Editor | Add inline charts (e.g. Mermaid and Toast UI Chart) |
| medium | Editor | Add math formulas (e.g. Katex) |
| medium | Editor | Add emojis |
| medium | Admin | Create a view where it's possible to create/activate, change and delete/deactivate hooks for events. |
| medium | EventManagement | Use Cli application for async event handling, alternatively web requests via curl, alternatively at runtime of the main process. This should depend on the configuration of the application. |
| low | Registration | Allow users to register by themselves (if activated in the backend) |
| low | Registration | Send an email after creating a profile/self-registration with login information |
| low | Tasks | Show which tasks have a file attached (similar to emails) |
| low | Tasks | Show in the different task overviews who the task is for. |
| low | Forms | On change highlight the data/element that got changed (e.g. background color transition in and transition out) |
| low | Framework Schedule | Use Interval for scheduler instead of string etc. |
| low | Continue implementation of email sending and receiving | |
| low | ER diagrams | Update/Create for all modules |
| low | UI tabs | [Template] Fix tab indices's. On many pages the tab indices's are broken (tabs, table/list, links, forms) |
| low | Surveys | Currently the demo (demoSetup/*) only uses one language (en). Generate surveys with multiple languages similar to other module demos (e.g. Wiki, News). In that case also prefix the text with the language so it's easy to see which language is loaded e.g. EN: (like in the tag module demo) |
| low | Surveys | Consider to add a closing paragrah. The description comes at the end, but maybe a paragraph at the end of the survey should be added?! |
| low | Modules | The modules use the module name for identification in many places where the module id should be used for performance reasons |
| low | Framework graph | Implement find cycles using graph coloring |
| low | Framework graph | Implement find negative cycle |
| low | Framework graph | Implement find cycles with n length |
| low | Framework graph | Implement find cycles with odd length |
| low | Framework graph | Implement find islands |
| low | Framework graph | Implement check if strongly connected |
| low | Framework graph | Implement find longest path |
| low | Framework graph | Implement get the girth |
| low | Framework graph | Implement get the circuit rank |
| low | Framework graph | Implement get the node connectivity |
| low | Framework graph | Implement get the edge connectivity |
| low | Framework graph | Implement check if bipartite |
| low | Framework graph | Implement check if triangle free |
| low | QueryBuilder | Implement sum |
| low | QueryBuilder | Implement count |
| low | General | Once read only variables become available many models can remove getter/setter function (e.g. ApplicationAbstract, ConnectionAbstract and various models) |
| low | Query Grammar | Implement schema modification grammar (alter tables) |
| low | Router, EventManager, Hook | Instead of doing only regex matching, combine it with a tree search, this should be faster |
| low | Text search | Implement a decent full text search for files/variables which finds texts that are similar (e.g. similar spelling, only some words in between, maybe different word order, etc.) |
| low | OAuth2 | Implement client |
| low | OAuth2 | Implement server |
| low | ServiceWorker | Implement caching and responding |
| low | Code | Implement QR code creation |
| low | Code | Implement data matrix creation |
| low | Code | Implement data matrix reader |
| low | Code | Implement various bar code readers |
| low | Speech recognition | Remove the speech recognition wrapper once it becomes standard |
| low | Voice commands | Implement table/link navigation |
| low | Input validation | Implement nicer input validation (e.g. show check mark and x in the input fields / optionally)![]() |
| low | jsOMS UriFactory | Consider to parse EVERY URL with the Uri factory. This however might cause double parsing and therefore bugs |
| low | UI Tabs | The frontend loads the correct tab based on the provided fragment, but it is slow. Doing this in the backend can already fix this but the frontend implementation should be fixed, because this should be the job of the frontend. |
| low | Module build process | Default inspections/tests (unit tests, info.json, language files used, language files in all languages same content, amount of languages, routes in controller available, dependencies valid, code coverage, phpstan, phpcs) (daily/on change) |
| low | Module showcasing | Text file with all the module git links which gets loaded from the website and then shows the modules based on the module information etc. |
| low | Module | Implement in app download and installation |
| low | Logs | The "Log" tabs in many models should have a separate permission which hides them. Maybe a user needs to have read permissions of the monitoring module in order to see them? Alternatively it could be a *_MONITOR permission for the specific model in every module. This is a little bit finer but also expands the permission complexity |
| low | UI sections/portlets | Sections/portlets with a footer sometimes have problems with floated elements. e.g. a right floated button will break the layout if the left element(s) are too long causing wrapping. > Solution: create flexbox with margin |
| low | Admin: Settings template | In the Settings->Localization->Numeric the number format (decimal, thousands) don't have a spacer in between. Margin left doesn't work. |
| low | Auditor | Consider to create foldable/tree view for json logs e.g. https://www.cssscript.com/json-data-tree-view/ |
| low | Auditor | Implement blockchain for the auditor. This either requires database locking (slow),modification of audit logs after inserts (slow) or a background process which calculates theblockchain (OK) |
| low | Auditor | Create printable reports based on specific changes |
| low | Database Editor | Implement basic functionality / queries in UI |
| low | Fleet Management | Implement |
| low | Helper | Implement direct print instead of opening a new window with document.getElementById('iHelperFrame').contentWindow.print(); |
| low | Investments | Implement request and approval process |
| low | Investments | Comparison/calculations |
| low | Labeling | Create module |
| low | Labeling | Create easy front end label editor (drag and drop, images, textareas, database values, ...) |
| low | Labeling | Create default label layout for items |
| low | Item Management | ItemAttributeTypes should specify which datatype they expect. The ApiController needs to validate if a value can be created for an attribute type (check validation pattern, datatype, is required) |
| low | Item Management | Show additional important item information for sales/purchase, currently too controlling/stats focused |
| low | Item Management | Define some attributes mandatory (e.g. HC-code/tariff code number) |
| low | Kanban | Implement card status (archive, public, inactive) |
| low | Kanban | Implement unread cards/comments notification/highlight |
| low | Kanban | Highlight card with new comments (e.g. make comment count background red?) |
| low | Kanban | Consider to replace card comments with normal comments from the Comments module |
| low | Knowledgebase | Implement category create/edit view |
| low | Knowledgebase | Implement doc create/edit view (similar to news/editor) |
| low | Knowledgebase | Add category back/up button when in a subcategory |
| low | Monitoring | Implement integrity check based on installed version and remote hash list (see monitoring-security.tpl.php) |
| low | Messages | Implement email sending/receiving |
| low | Messages | Implement internal message/conversion storage |
| low | Messages | Implement global messaging to users/groups in the app as notification. Allow to define which users and or groups to message, also define multiple localization if needed. Allow to create template messages (e.g. Server is going into maintenance in X minutes) |
| low | Organigram | Create better organigram (better grouping, maybe as SVG) |
| low | Organigram | Make the organigram printable |
| low | Organigram | Make the organigram versioned/approved (e.g. for ISO) |
| low | Quality Assurance | Implement module |
| low | Q&A | Implement question create view |
| low | Q&A | Add question answer component/like comment in question |
| low | Q&A | Create Q&A app with login |
| low | Supplier Management | Create a view where you can see all bills of the supplier |
| low | Supplier Management | Create a view where you can see all items of the supplier |
| low | Supplier Management | [Doc] Create default letter Doc (with/without letter head) |
| low | Supplier Management | [Payable] Print payable |
| low | Supplier Management | [Analysis] Purchase EUR + gross profit |
| low | Supplier Management | [Analysis] Quantity order, quantity articles |
| low | Supplier Management | [Analysis] Segment purchase |
| low | Supplier Management | [Analysis] Top articles |
| low | Supplier Management | [Analysis] Cross selling |
| low | Supplier Management | [Analysis] Cross selling |
| low | Tasks | [Analyzer] Implement analyzing functionality (tasks created, answered, time required to finish task, always in time?) |
| low | Tasks | Instead of hiding (or as an additional type) tasks created from other modules (e.g. support) make them link to the UI where it can be handled (e.g. ticket) |
| low | Tasks | Make answer box on the right scroll down with the content, this way you can immediately respond without scrolling |
| low | Tasks | Attach custom event, if status is changed (e.g. trigger checklist event). Maybe don't do it, maybe other modules should instead check the status of the task!!! |
| low | Tasks | Implement email notification on progress/changes (new task, forwarded, ...) |
| low | Tasks | The unread task count is currently not really correct and needs to be fixed |
| low | Tasks | Allow batch handling of tasks in the dashboard/overview for faster interaction (e.g. select and close) |
| low | Tasks | Create a user calender for tasks which only shows when tasks are due |
| low | Tasks | Don't show Tasks in dashboard which are far into the future, maybe create another list for this? |
| low | Tasks | Implement has seen and unseen (use system where every task has a seen flag for a user if it is seen) |
| low | Tasks | Allow users to unset the seen flag. |
| low | Tasks | First show open tasks to the user, then show open tasks to other users, then show all closed/canceled/finished tasks |
| low | Calendar | Load events back to a fixed amount of months (e.g. current month, previous month and next month) |
| low | Calendar | Implement event popup in the UI on click |
| low | Calendar | Create different interval templates (year, quarter, month, week, day) |
| low | Calendar | Allow user to define the start of the week (e.g. Sunday, Monday) |
| low | Calendar | Implement gantt chart |
| low | Calendar | Create iCal parser/reader and builder |
| low | Calendar | Create database, models and mappers |
| low | CMS | Make file content view 100% container height |
| low | CMS | Allow content changes and saving |
| low | CMS | Ideas for applications based on modules (e.g. monitor/log dashboard, sales dashboard, calendar, support/ticket, clocking, Q&A, Wiki, shop) |
| low | CMS | Implement line numbers in code view |
| low | CMS | Implement code formatting / syntax highlighting |
| low | CMS | Allow different content types (e.g. pages, posts, ...) with individual templates |
| low | Workflow | Implement an approval module which only runs a module/user specific action once it is approved. This functionality might be part of the workflow module or at least smoothly interact with this module. Additionally, it should probably make use of the Tasks module |
| low | Workflow | New customer is created (approve) |
| low | Workflow | New bill is created (approve, validate) |
| low | Workflow | New supplier is created (approve) |
| low | ReadOnly | Find a way to implement a read only setting. This could be helpful for maintenance times. |
| low | UriFactory | Consider to use \urlencode() on every query parameter in the UriFactory |
| low | Module Mapper | Implement module description, name, createdAt in the database table and use them. Currently they are available in the model but not yet implemented in the database schema |
| low | Templates | In some forms there are 2 buttons which a user shouldn't accidentally press (a save and create button or delete button). Position them far apart by using flexbox positioning (e.g. Module->Support->Settings) |
| low | CMS | Make pages editable |
| low | CMS | Make posts editable |
| low | UI Slider | Create a slider element with two elements which the user can slide (optionally also only one slider should be possible) (https://codepen.io/thebabydino/pen/NWWerZG)![]() |
| low | UI Slider | Create a radial slider (https://codepen.io/equinusocio/pen/OJMBpdK)![]() |
| low | Demo setup - Billing | Improve customer order randomization (types, dates) in the demo setup file setupBillingClients.php |
| low | Demo setup - Billing | Create text lines in bills, currently no text lines are created only entries with items, but sometimes you want to write some text in an invoice |
| low | Billing | Costs such as shipping, insurance etc. should not be hard coded but customizable costs stored in a separate table. |
| low | Demo setup - Support | Use default values for ticket attribute types in some cases instead of always using custom values |
| low | Update | Create update logic for application, resources, modules, ... in the Admin/ApiController (apiCheckForUpdates) |
| low | Billing | Create setting for bill format per bill type (e.g. invoice, order, ...). NO! This should be handled with the different bill types! The bill types should also have a format defined and a default template. Bill types should have multiple bill templates assigned to them (e.g. invoice, proforma invoice, picking checklist, ...) |
| low | Billing | The bill archive should store the customer/supplier localized version since this is the official document |
| low | Billing | Customers and suppliers should have default invoice and delivery addresses which should be used if no other address or custom input is used |
| low | Editor | The tools above should directly insert the markdown into the textarea |
| low | Kanban | The kanban board currently assumes up to 4 columns, however there should be a layout which allows more than 4 columns. Don't use flexbox but min-width and max-width combined with a horizontal scrollable board content |
| low | Media | Allow to index a local file if it is not in the database (e.g. button with text "Add to Application"). Un-indexed files cannot be changed/moved/deleted. |
| low | DataMapperAbstract | Implement data binding |
| low | DataMapperFactory | Handle column search/filter for columns which are not 1 to 1 members (e.g. columns are manipulated or the result of multiple data values). One solution could be to pass callbacks for such columns. |
| low | DataMapperFactory | Consider to only allow search in fields which have autocomplete => true defined |
| low | Find a way to localize some hard coded email content. Pass localization array? Manually overwrite email body if a hard coded/default message should be returned (maybe by checking for a flag/status code)? | |
| low | DataMapper / ModelFactory | Some models may require special initialization. For such cases a model factory should be implemented and used by the data mapper. One solution could be to create a default ModelFactory which behaves as the current DataMapper functions which set/update the model members. This factory could be extended in case custom behavior becomes necessary. In the Mapper you would just have to define a const FACTORY constant which references the factory to use (instead of the default one). Since there hasn't been a situation where this was necessary it will not be implemented until we actually need this (it would additional overhead which maybe never becomes necessary) |
| low | Editor | Create special markdown content (calendar, chart, task, news, comment, media, ...) |
| low | Editor | Allow download as markdown, text, PDF, word |
| low | Event Management | Implement goal definition. Goals could be based on tasks (every completed task represents x%), linear time line (every day represents x%), value based (a calculated value represents x%), manual input based (the user decides the completion %) |
| low | Event Management | Add milestones |
| low | Project Management | Implement goal definition. Goals could be based on tasks (every completed task represents x%), linear time line (every day represents x%), value based (a calculated value represents x%), manual input based (the user decides the completion %) |
| low | Project Management | Add milestones |
| low | Promotion | Implement goal definition. Goals could be based on tasks (every completed task represents x%), linear time line (every day represents x%), value based (a calculated value represents x%), manual input based (the user decides the completion %). |
| low | Finance | Implement accounting forensics (Benfords Law, cent value distribution analysis, amount of bookings between specific amounts, amount * bookings between specific amounts, etc.) |
| low | Item Management | Item view should be customizable since different groups have different interests and read permissions (e.g. sales reps, finance, etc.) |
| low | Item Management | Show different prices on item profile frontpage (e.g. domestic, export, quantity discount) |
| low | Purchase | Consider to add a purchased analysis, used analysis and manufactured analysis (currently only sales focused). Examples items delivered in time, bad quality ratio) |
| low | Kanban | Allow board templates? maybe at least colors? |
| low | Kanban | Allow card templates? maybe at least colors? |
| low | Billing | Automatically create recurring bills (invoices, delivery notes, etc.) if a customer wants to receive items automatically |
| low | Media | Create preview option for images (e.g. ctrl+mouse hover or a different "list-view" like in explorer) |
| low | Media | Validate file size on the frontend before uploading |
| low | Media | Automatically change the file encoding of text files |
| low | Media | Enable image interlacing (in the past there was a bug) |
| low | Media | Implement media encryption/decryption (optionally) |
| low | Media | Implement media password protection for read (optionally) |
| low | Media | Implement resumable uploads |
| low | Media | Implement path changes in the frontend |
| low | Media | Allow the modification of collections |
| low | Media | Implement external resources (URLs, dropbox, aws, ...) |
| low | Media | Allow to edit the breadcrumbs, which replaces them with a text field which can be changed then than automatically loads the new path |
| low | Media | Implement temporary file storage (very useful for making files downloadable for a limited time). Maybe create a new temp file directory or database collection where a available_until timedate gets defined (must be handled in the database). The biggest problem is how to delete them, this requires a background process/task scheduler. Additionally, these files must have permissions because they may be only for one user or a group of users |
| low | Media | Allow to rename files/directories virtually and actually |
| low | Media | Allow to move/cut/delete files/directories virtually and actually |
| low | Media | List data from online drives such as dropbox, google drives, AWS |
| low | Knowledgebase | Consider to use the Editor module for the content instead of handling the content separately in the wiki module. |
| low | Messages | Allow to transform a message as task |
| low | Messages | Implement push notification |
| low | Messages | Users may be invited to old conversations |
| low | Navigation | Improve goto command to match based on proximity and only based on visible links |
| low | Navigation | Consider to create on navigation language file (same as routing files) during the installation process |
| low | Navigation | Create settings page which allows to modify the navigation in the module settings |
| low | Navigation | Consider to implement child elements on hover (sidebar and content) |
| low | News | Implement email/message notification on create |
| low | Profile | Find a way to hide some contact/address information for some modules. Some information are only meant for specific modules (e.g. private address, phone number e.g. HR module) The reason why this is difficult is that this information should not be part of the model table but in the relation (many-to-many). At the moment the information in the relation table is not used apart from the relations it self. A solution could be to specify a filter in the relation in the mapper. Empty = all relations, filter = only populate the model array with relations which match the filter. |
| low | Support | Create support app with login |
| low | Support | TicketAttributeTypes should specify which datatype they expect. The ApiController needs to validate if a value can be created for an attribute type (check validation pattern, datatype, is required) |
| low | Tag | Create settings with a set of default colors |
| low | Settings | Implement a setting which lets users see all content no matter the content language (e.g. all News) |
| low | Help | Create better search help, the current implementation is very simplistic |
| low | Search | Consider to prioritize search results based on the page the user is currently on (e.g. help page -> first return help results)? The bad thing about this would be different search results for the same search term depending on the page the user is on. A solution could be to auto prefix the search with the module name and if the user wants a independent global search he just removes this prefix (or use a drop down like search filter like github where you can select repository, organization, ... before pressing enter). Alternatively create a prefix button which shows where the search is (e.g. button with globe as icon = global, module name = module...) and if someone clicks on that icon the person can change the search filter (or by typing :modulename which does the same but without clicking the button for people who want to use their keyboard only) |
| low | Media uploader | The Media Controller/Uploader on the frontend should support multiple upload inputs in the same form, currently only one upload intput field is allowed. This is useful if a model can have multiple different media types. Maybe this also effects the backend? |
| low | Media uploader (frontend) | The Media uploader on the frontend should check if the file size is reasonable (e.g. less than 50GB) and if the file type for that form is valid |
| low | Media uploader | Implement resumable uploads |
| low | Handheald device | Going a page (or tab) back should be done with swiping |
| low | WarehouseManagement | Create StockMovement explanations (these are NOT StockMovementTypes but reasons why a stock booking happened e.g. destroy, return, ...). See StockMevementType at the end for some examples which should be turned into these explanations. |
| low | Workflow | Request IT permission changes (go to head of department, then IT?) |
| low | Workflow | Article price changes |
| low | Workflow | Article customer price changes |
| low | Workflow | Credit score/delivery approval |
| low | Permission | If a user doesn't have sufficient permissions for something the user should receive info message/log with a button to request these permissions. |
| low | Monitoring optimization | The Monitoring module should have a tab with optimization suggestions |
| low | Monitoring optimization | If a user has all sub permissions instead of the parent permission with a wildcard for the child permissions. The optimizer should suggest to change this (e.g. user has all permissions for every element in a view but not the module permission, this should be changed). This could save a lot of performance when checking permissions. |
| low | Form | Allow on change listener in input elements. If this is set, automatically update the data after a change (for text elements e.g. input[type=text], textarea use delay before submitting) |
| low | Table | Tables have a re-ordering function, this should be generalized. This should not be part of a table but some general orderable container! (e.g. we also need it for sorting cards/columns in the kanban) |
| low | Table | Implement column visibility (save locally and apply locally only) |
| low | Table | Implement table filter > alphanumeric > greater > greater equals > lesser > lesser equals > contains > doesn't contain > in between > regex > pre-defined values/select > checkboxes if 0/1 values > consider other filters for data that is not shown in the table? Backend filter options? |
| low | Table | Allow export by also based on selected elements (optionally in a different language) |
| low | BasicOcr | Implement image reading for non-mnist files (either convert to mnist or use something else) |
| low | Directory | If the object oriented/node version of the local file handler changes files the already loaded nodes need to be updated (e.g. when calling delete, add, ...) |
| low | TextAnalysis | Implement text similarity algorithms (https://medium.com/@adriensieg/text-similarities-da019229c894) |
| low | Image | Implement image de-noising (consider https://www.hindawi.com/journals/complexity/2021/5578788/) |
| low | Image | Fix kernel 5x5 implementation with imagecolersat and imagecolerat (https://rosettacode.org/wiki/Image_convolution). Currently not doing anything. |
| low | ModuleManager | The function initRequestModules pre-loads all modules based on path. However it should also be possible to define the application for this. Otherwise modules will be loaded on the same uri even if it is a different application which only has the same uri on accident. |
| low | cOMS | Create tool which checks size and form of defined objects (in multiple orientations) with other elements. No match -> error |
| low | cOMS | Create a tool which measures the volume and volume distribution in containers (incl. x-ray images). Define objects (in multiple orientations) and where the low and high levels are. If volume below or above threshold or volume distribution is bad (e.g. bubbles) -> error |
| low | cOMS | Create tool which matches texts and layouts (e.g. labels). Define layouts with mandatory elements, optional elements, colors, sizes, regex text. No match -> error |
| low | Application | Api and backend use different ways how to return information from a controller. One is modifying a response and the other one is returning a view. Both should be unified so that the information flow is always the same. Suggestion: Either always modify the response or always return a response. |
Archived
| Priority | Done | Category | Task |
|---|---|---|---|
Bugs
Tasks & decisions
| Priority | Category | Task |
|---|---|---|
| low | Navigation | The sidebar navigation is not working properly if the content is too wide. In this case the sidebar becomes smaller than its defined width (test by resizing the window) |
| low | KMeans | In some weird cases the Cluster test fails. This happens approximately 1 / 1,000,000 test runs (invalid center coordinate value). Idea: Since the coordinates are chosen randomly a debug session with a loop might be necessary where the same test runs until it hits the bug. |
| low | Table | The table overflow was fixed with putting them in a scrollable container (in the portlet). This broke the .sticky head, since the table no longer knows the head is out of view. Since it's in an overflow container it doesn't know about its changed scroll position. If this cannot be solved don't revert back because overflowing tables are much worse! |
| low | Rest | There is a weird bug where the multipart/form-data cannot use the normal boundary= header to define the boundary. If this correct format is used the server somehow cannot populate the php://input correctly. If we move the = to a different position e.g. bound=ary this works fine. Currently this is solved by not using a = sign but /. This requires further inspections later on and could result in a bug with a different webserver (e.g. nginx). |
| low | Graph | In directed graphs getNeighbors() might return wrong neighbors. |
| low | Forms | The FormManager expects a table/tbody for inline edits. This should not be the case, generalize! |
| low | VoiceManager | If voice input is enabled check every x seconds if the service is still running. I think it stops automatically after some time?! |
| low | ModuleManager | The module get() function uses object as return. This is a workaround to fix static inspection. There is no inline docblock to type hint the correct function return since it can be so many. Howerver with object the code quality check tools at least don't complain in the different modules where we call ->get(...) |
Archived
| Priority | Done | Category | Task |
|---|---|---|---|
Drafts, concepts & ideas
Drafts, concepts & ideas which are more complex or require more explanation.
Invoice OCR (already started with the implementation!)
Steps:
- Turn into image if it isn't image
- Modify image (grayscale, remove noise, thresholding, dilate, erode, opening/morphology, canny, skew correction/deskew, rotate e.g. upside down or slanted)
- Extract text (maintain layout)
- Get all suppliers and match against invoice (find name, alternatively try
invoice match_code) - Has supplier template defined? Find custom areas. Sometimes a page 2 template must be defined if the second page looks different.
- Match template areas to invoice (consider slanted invoice, longer text etc.), extract partial images.
- Template areas should ideally contain a keyword and the actual value.
- Parse partial images
- Match according to
regex - Find item list area from template (recurring elements unless only one element is defined)
- Start should be defined by keywords (e.g. table headline)
- Create sub definitions such as quantity/unit, single price, total price, ...
- How to identify end of list?
- How to handle multiline line elements (e.g. detailed article/service description)
- How to automatically find account (e.g. article number, description, template definition)?
Software:
- Tesseract + OpenCV + above mentioned steps
- Some API (e.g. google vision ai, amazon textract, amazon recognition)
Search
- page: {/base} (if search_type=page)
- search:
- &search={#search} (can be empty = normal list)
- &search_fields=id,module,action (can be empty = all fields)
- sort: (can be omitted)
- &sort_by=module
- &sort_order=desc
- filter1: (can be omitted)
- &filter1_type=text
- &filter1_value=myvalue
- filter2: (can be omitted)
- &filter2_type=number
- &filter2_value_1=12
- &filter2_value_2=33
- search:
- global: {/root}search
- ...
Workflow
- Listen to multiple event triggers (a state might get triggered from different triggers)
- Every state needs to load the workflow instance globally for that state
- A workflow must have multiple events such as
- events must have a name/id
- events can have a description
- if (with true and false branches and with simple && and || connections)
- Comparisons:
- equals
- not equals
- exists
- doesn't exist
- greater than
- lesser than
- greater or equals than
- lesser or equals than
- contains
- doesn't contain
- in between (inclusive)
- Connections
- Only simple && and ||
- No complex sub conditions e.g. (a && b) || (b && (c || d))
- Comparisons:
- Function
- Call
- function from module
- function from static script
- function from workflow
- simulate API call (internally populate request/response)
- Define variable names in order of function parameters
- Define response variable name
- Call
- Data definition (important for naming and defining values for follow up steps)
- Fixed values
- Dynamic re-assigning/copying
- take old variable and re-name it
- allow array path e.g.
varname/key1/key2 => newvarname - the same variable can be copied to many different new variable names
- Event trigger
- similar to function but trigger event
- Routing
- similar to function but run routing into dispatcher
- Rest request
- similar to function but using rest
- Execute script assigned to workflow template
- This way workflow could be completely defined in a custom script if it is very complicated
- Response message population
- Create workflow diagram (see example below)
- Main question: How to handle workflows during UI interaction instead of async?
- Solution 1: Define SYNC triggers which run the workflow runWorkflow command
flowchart LR
subgraph A
A_TRIGGER[State1: Event Triggers]-->IF{if}
IF-->|TRUE|IF_TRUE1[Run]
IF_TRUE1-->RUN1[Collect result]
RUN1-->NEW_VAR[Assign data]
NEW_VAR-->TRIGGER2[Execute Event]
NEW_VAR-->MESSAGE[Populate Message]
IF-->|TRUE|RUN2[Run]
RUN2-->OTHER1[...]
IF-->|FALSE|ELSEIF{if}
ELSEIF-->|TRUE|ELSE_TRUE[Run]
ELSE_TRUE-->OTHER2[...]
ELSEIF-->|FALSE|FALSE[Error]
end
A-->|State Change|B
A-->|State Change|C
subgraph B
B_TRIGGER[State2: Event Triggers]-->B_IF{...}
end
B-->|State Change|C
subgraph C
C_TRIGGER[State3: Event Triggers]-->C_IF{...}
end



