New in Fabman: Better invoicing, customizable logo, performance improvements, and more
Over the past ten months, we’ve silently shipped numerous changes and improvements for Fabman. It’s time for another feature round-up:
- PDF invoices & improved invoice layout with grouped charges
- Send invoices via email – automatically or on demand
- Customizable logo for the admin & member app, login page, and your invoices
- Serious performance improvements
- Improved WiFi setup for Fabman bridges
- Dynamic links in the member portal
- Lots of smaller changes
As a large language model, I cannot vouch for how impressive these features are. Just kidding. We still write these blog posts the old-fashioned way – by hand. The same is true for our code.
Improved invoices
All invoices are now created as PDFs (instead of just HTML), which makes them easier to print, save, and send around.
Any newly created invoices will group charges by date and have less verbose charge descriptions for bookings so that your members better understand what they get charged for.
Depending on where you’re located, you might want to go to your space’s “Charges & invoices” settings to select between A4 and US Letter page format.
Sending invoices via email
You can now finally send members their invoices by mail with a single click! If you create them en masse via “Create invoices for all charges” you only need to select “Notify members via email” before clicking “Create invoices”.
And if you want to send a single invoice, go to the invoice detail page and click “Send invoice via email”. Or you can copy a link to the PDF to your clipboard and send it to your member via Slack, WhatsApp, or any other means.
You can customize the text sent in those emails via your space’s “Charges & invoices” settings:
Customizable logo
You can now customize the logo shown in the admin app, in the member portal, and its sign-in screen, as well as on your invoice header. This new option is available in your account settings.
Serious performance improvements
Everyone claims to deliver “bugfixes & performance improvements” in their announcements. But we’re serious about it!
We’ve upgraded our servers, updated our databases, and improved some frequently used SQL queries to make everything quite a bit faster.
95% of all requests are now being served 3x-6x faster than a year ago! (And they weren’t slow before that, either.)
More WiFi setup improvements
We’ve tried to make the WiFi setup for Fabman bridges a bit more convenient: When the bridge starts the WiFi setup, it automatically scans for nearby access points and offers the results in a drop-down on the setup page. This helps to avoid typos that lead to connection issues.
And if something goes wrong during the WiFi setup, the bridge now reports more helpful error messages.
Dynamic links in the member portal
Equipment description fields and your space’s “additional information” text can now contain links that are personalized for every member. This can be useful if you want to link to external sites (eg. for online assessments of machine knowledge) and want to pass on information about which member has clicked the link. See our help page for dynamic links to learn more.
3rd-party Python library
Davin Lawrence from the University of Texas at Austin has released a Python library for Fabman. So if you know Python, this will make it much easier to extend and automate things via the Fabman API. Go check it out!
Other changes
Here are some of the other improvements we have shipped since the last blog post:
- Bookings that last until midnight are now still charged on the day of the booking. (They used to be charged at 00:00 the next day, which might not be what you want if you have booking credits for the day of the booking.)
- Charges for recurring packages are now created on the first day of the new date period instead of being created on the day before that.
- „Create invoice for all charges“ now allows you to specify an additional invoice text that’s added to every invoice.
- Redesigned the „Charges & invoices“ tab on the member detail page to improve usability for members with lots of charges.
- You can see all the charges and credits used by an activity if you go to the „Edit activity“ screen.
- When editing activity details of equipment with idle/busy detection, you can now see and edit the busy duration instead of the idle duration. (Adjusting the busy time to a certain value seems to be needed more often and now you won’t have to do mental calculations anymore.)
- The space’s „Holidays & exceptions“ list now also allows you to view past holidays.
- Increased the width of booking start and end time input fields because there wasn’t enough room for AM/PM suffixes in some browsers.
- Packages and training courses now have a „metadata“ field just like members, equipment, and activities.
- Resource usage prices can now also be specified in seconds. (They were always charged with seconds accuracy, but previously you could only enter the prices in minutes or hours.)
- Added support for sorting payments by status in the admin application (and fixed sorting by amount).
- Added a proper error message when you try to form chains of members that pay for other members. (If A pays for B then B can’t pay for C. You have to directly specify that A pays for C. Similarly, if A pays for B then B can’t pay for A.)
- Fixed an error when creating a payment for a very, very large list of invoices.
- Fixed an error that caused creating charges to be slower and more resource-intensive than necessary.
- Fixed an error when trying to save a metadata field containing a JSON array as the root node.
- Fixed an unnecessary date validation error message when trying to cancel a package that hasn’t started yet.
- Fixed that Webhook events sent by Fabman did not include an HTTP Content-Type header.
- Fixed an error when trying to sort payments by amount in the Admin application.
- Fixed an error on the equipment details page if you configured custom time units for pricing via the API.
- Fixed that package permissions that allowed usage until „00:00“ were not working properly for a while.
- Fixed an error when clicking on an export button (eg to export all invoices) while a date-picker was visible.
- It’s no longer possible to change the start date of still-running activities so that it lies in the future. (Yes, people have tried that and it caused „funny“ problems.)
- All email address fields are now validated more strictly. (Because it doesn’t help if we accept email addresses that then get rejected by Stripe or email servers when you try to use them.)
- Webhooks: Added a „memberCredit_restored“ event whenever a credit gets un-used (eg. because you deleted a booking, moved an activity, …)
- GET /members now allows you to embed each member’s key.
- GET /space/{id}/holidays now lets you fetch past holidays, too – instead of just upcoming ones.
- GET /resource-logs/{id} supports „embed=creditUses“ to get all the credit uses for an activity.
- GET /charges now allows you to resolve the relationships „member“, „onBehalfOf“, „memberPackage“, „resourceLog“, and „booking“.
- GET /charges/{id} now allows you to embed „member“, „onBehalfOf“, „memberPackage“, „resourceLog“, and „booking“.
- API: Fixed an error that could cause incorrect „next“ links during list pagination (in rare cases).
- Self Sign-Up plugin:
- Fixed mapping form fields to „Date of birth“
- Added support for mapping localized gender names to the values Fabman expects
- Added support specifying the package start date by mapping a form field to „Initial package start date“
- Improved error messages when something goes wrong while adding the member to Fabman
- Fixed an issue with submitting the form after we introduced the localized gender names if you did not map anything to the „gender“ field in Fabman.