SuiteBOM: A Bill of Materials Management Software
A few years back I felt the urge to keep track of my electronic components inventory and also which components I used for a project.
Hence I developed a software for this purpose - and more.
The software is based on SuiteCRM, which is an open source CRM software.
I then added a whole bunch of patches for the core software - most of which I contributed back to the SuiteCRM community and have been merged into the official releases.
And then on top of that I added my custom modules, REST API endpoints, CSS etc.
The software uses
- a MariaDB database server
- an Elasticsearch search server
- a Redis server for caching things like PHP sessions
- an Apache webserver
- and last but least PHP and whole bunch of frameworks and libraries
I've also written quite a couple of Python programs for importing/exporting data via REST API, generating CSV files for ordering parts for one or more projects and processing CSV files for updating the inventory e.g. when parts from a supplier have arrived.
Unfortunately I've grown rather tired of this software. There are simply too many details I don't like about it and I'd rather spend my spare time creating something new that better fits my "vision" of how the software should look and function.
Some things I don't like about the current software:
- even though the filtering mechanism is quite effective and versatile it is not complete and it lacks e.g. the functionality of dynamic dropdown lists. For instance, if I want to filter for SMT (or SMD if you prefer) components I'd also like the selection box for footprints to allow me to filter for SMT footprints only.
This functionality exists in other views - but not in a filter dialog... - there is no built-in support for image galleries that are associated with a record.
But I'd like to be able to attach one or more images to some record types. That would allow the user to have images e.g. of components, which would be quite handy.
Creating an image gallery plugin for SuiteCRM is not exactly easy and would require too much development time... - the page navigation is way too cumbersome. I constantly ended up having 30 or more open tabs and then I needed to go through every tab and click on yet another link to get to the record I was actually interested in.
I partially got around this by writing little Python programs for specific tasks. But that cannot be a solution - only a temporary workaround... - implementing features such as a versioning system for what I call "Parts" can be done but it would make the navigation even more cumbersome...
- and finally the search functionality of the core software is completely overpowered and terribly ineffective at the same time. And then you even need to run a very very bloated server software (Elasticsearch) that requires loads and loads of CPU and RAM to function properly.
Future Development
So instead I've started writing an entirely new software from scratch that is based on Java/Kotlin and NodeJS/React. It is going to be a lot easier to write documentation for this new software and it is going to be an awful lot easier to install, run and use.
The foundation for this new software are the Authentication and Resource Servers I've explained in my article Java Spring Boot Security Demo (with MongoDB).
With that foundation I'll have a rock solid security framework to build upon. The client software can be web-based, CLI-based (aka a console application) or an old-fashioned desktop application.
All communication between client and server will be SSL-encrypted, use OAuth2 for authentication/authorization and use a REST API exclusively. Some might call that overkill but I tend to call it default.
Since I had never developed anything using React (formerly known as ReactJS) but always wanted to, I've decided to use this nice framework for the frontend.
Based upon my experience with my "old" BOM Management software over the last couple of years, the key features of the new software are going to be:
- the main view is going to be a tree view of all "Parts". Those can then be expanded to see the "Part-Elements". Those can be expanded to see the associated "Inventory" items. And those finally can be expanded to see all associated "Catalog Article" items
- when selecting any kind of item there is going to be a Quick View on the side (or bottom) where all the item's details are being displayed
- easy importing/exporting of data records - through files and REST API
- powerful "Order" feature: select one or more "Parts" (aka projects) you want to order components for and create an order table for them. The table will then contain the sum of required components for all "Parts" you've added, the SKUs for each component, prices etc.
- built-in component search that allows you to search several supplier catalogs (e.g. Reichelt, Farnell, Digikey and Mouser) simultaneously and even add "Catalog Articles" with all details to your local database by the press of a button
- automatic refreshing of "Catalog Article" prices and cost estimates for your "Parts" (aka projects)
- automatically generated links to datasheets
- automatically downloaded images of components
So yeah, it is going to take a while to write all of this software. But one day...