Categories
Uncategorized

Open-Source Dolibarr Modules for Customer Product Lifecycle Management

I’ve taken full advantage of having Anthropic’s Claude Code tool. With it, I built a suite of three interconnected Dolibarr modules that give small manufacturers and distributors a complete view of the customer product lifecycle — from delivery to return to warranty resolution. We’re using it at DPG Supply to keep track of hardware out in the field.

All three are open-source, built for Dolibarr 16+, and designed to work together seamlessly.


Customer Inventory

What it does: Adds a dedicated tab to every customer’s third-party card showing every product and service they’ve ever received — pulled from shipments, invoices, and sales orders into a single, unified view.

Key features:

  • Four viewing modes: flat list, grouped by sales order, by invoice, or by product
  • Serial number and lot tracking from shipment batches
  • Sortable columns with pagination
  • When paired with the Customer Returns module, automatically calculates net quantities (shipped minus returned) and shows return status per item

No new database tables — it’s a read-only aggregation layer over your existing Dolibarr data.

GitHub: zacharymelo/dolibarr-customer-inventory


Customer Returns

What it does: Provides a full return management workflow — create, validate, and close customer merchandise returns with automatic stock movement tracking.

Key features:

  • Draft → Validated → Closed status workflow
  • Automatic stock movements: returned items are re-added to your warehouse inventory on validation
  • Links returns to original shipments for full traceability
  • Serial number tracking on returned items
  • Per-line product detail with quantities, pricing, and warehouse assignment
  • Five-level permission system (read, write, delete, validate, close)

When a return is validated, stock is automatically replenished in the designated warehouse — no manual inventory adjustments needed.

GitHub: zacharymelo/doli-returns


Warranty & RMA Management

What it does: A comprehensive RMA (Return Merchandise Authorization) and warranty system designed for businesses selling serialized equipment. Handles service request intake, warranty coverage tracking, guided troubleshooting, and resolution workflows.

Key features:

  • Service Requests: Full lifecycle from intake to resolution with six resolution types (component shipment, full unit swap, on-site service, and more)
  • Warranty Records: Per-serial-number coverage tied to customers and products, with automatic expiry tracking
  • Auto-Warranty Creation: When a shipment is validated, warranty records can be created automatically for serialized products
  • Guided Troubleshooting: Product-aware diagnostic checklists with multi-session logging
  • Movement Tracking: Carrier and tracking number management for outbound and return shipments within a service case

GitHub: zacharymelo/Dolibarr-Warranties


How They Work Together

These three modules are designed as independent tools that become more powerful in combination. The integration points are lightweight and optional — each module functions on its own, but enabling all three creates a closed loop:

  1. A product ships out. The Warranty module can automatically create a warranty record from a validated shipment. The Customer Inventory module picks up the delivery and displays it on the customer’s card.
  2. A customer reports a problem. A service request is created in the Warranty module, which matches the serial number to the existing warranty for coverage verification and walks your team through troubleshooting.
  3. A return is needed. A Customer Return is created and linked to the service request. When validated, stock is automatically replenished. The Warranty module detects the return and advances the service request status.
  4. The customer’s card stays current. The Customer Inventory tab reflects net quantities — what was shipped minus what was returned — giving your team an accurate picture without manual reconciliation.

All cross-module communication happens through Dolibarr’s native element_element linking table and trigger system. There are no hard dependencies — just graceful enhancements when sibling modules are present.


Getting Started

All three modules require Dolibarr 16.0+ and PHP 7.0+. Install them like any custom module — drop the files into your htdocs/custom/ directory and activate from the module setup page.

Full disclosure, these tools were built with the help of AI coding tools. These modules do not strictly adhere to the Dolibarr module best practices and have not been registered with the Dolibarr foundation yet. I cared more about sharing the work that works for me than modifying the doc file to claim IDs for the modules – you may need to assign new ID for any of the modules to get it to work for you.

Categories
Repair Tutorials Uncategorized Video

What’s Inside of Puffco’s Peak Vaporizer? Fixing a Broken Puffco that Does Not Charge

This faulty Puffco Peak vaporizer came into my possession within the last few weeks, via a friend of mine. I was told, “It doesn’t charge – it’s broken.”

These devices are simple, and with that in mind; there shouldn’t be too many ways for the device to fail. I just needed to get inside and start probing around with my multimeter.

The teardown video is up on Youtube now:

Step by Step Instructions: How to Open a Puffco Peak

Let’s assume you don’t need a hand in figuring out how to remove the glass from your puffco. We’re starting off with a standard Puffco Peak base – glass removed.

Step 1: Remove the Atomizer & Surrounding Components

Begin the disassembly process by removing the atomizer, bucket, and surrounding components. This can be removed as one whole piece, or disassembled and removed piece by piece. If you have done this before it makes sense, otherwise: read on.

  1. The first piece to be removed is a silicone and ceramic ring. It will lift off, and may require a twisting motion or a small amount of heat if it feels stuck.
  2. Next is the bucket. It should lift right out. If it feels stuck, apply a small amount of heat and try again. Do not force this out. The bucket rests directly atop the heating element – extract can glue it in place – and tugging on the element can damage it’s fragile connecting wires.
  3. Unscrew the metal housing for the heater by turning it counter clockwise several times to disengage the threads. Lift the entire component out of the silicone well.

Step 2: Pry the Shiny Metal Piece Upwards

Place your fingers above the USB port where the shiny material and silicone meet and pry upwards on the shiny metal/plastic piece that surrounds the Puffco Peak. This piece is glued in place, and requires a small amount of force to lift. Be careful and go slow. You may use a guitar pick or some other soft plastic prying tool to start the job if your fingers can’t get in there.

Step 3: Remove the Silicone Boot

Using your thumbs, press outwards from the center on the base of the Puffco Peak. The silicone will lift out from under the shiny metal base of the Puffco. Work your way around, breaking the seal and releasing the silicone from the bottom of the Puffco. Once the silicone boot is loose the the bottom, pry upwards from below the USB port and remove the silicone sort of like a sock, where the atomizer connection is the toe.

This is the most confusing part of this disassembly, and I suggest you watch the video starting from about the 1:00 minute mark for a video example.

Step 4: Pry the Metal Base Off

Note: In my video, I perform step 5 before step 4 – and it really doesn’t matter in the end, but I feel it’s easier in this order.

Use your fingers or a pry tool to peel the metal disc off of the bottom of the plastic Puffco Peak base. It may help to warm this area with a hair dryer or gently using a heat gun. The adhesive is fairly strong, and so some force is required to remove this piece.

Step 5: Unscrew 3 Security Screws

Use a screwdriver set like this one from Amazon to remove the three screws holding the plastic assembly together. One of these screws is below a security sticker, revealing silver ‘VOID’ markings when removed. Remove all three screws, and your Puffco will almost fall apart in your hands.

Step 6: Open and Inspect

That’s it, your Puffco Peak is open before you. In my case – I did some poking around with a multimeter and determined that my battery was not putting out a high enough voltage. I still have some detective work to do to determine why my Puffco Peak doesn’t charge.

What’s Wrong with My Puffco Peak?

The Puffco lights up, and indicates it’s taking a charge when plugged in to USB. When removed however, the battery is completely dead and the Puffco shows no signs of life. Checking the voltage supplied to the battery while plugged into USB showed only 4.5v – too low to charge a 7.4v battery pack – unless there were a buck converter somewhere on the battery pack I have yet to find.

I suspect that there is an onboard boost converter that steps USB voltage up to above 7v, and it is defective. I assume that this is the case, because when I apply 7.5v to the battery connection leads – the battery charges and holds its charge. It’s only on USB power that the device fails to charge.

Next steps are to poke around a bit more, and see if rescuing this battery back above it’s rated voltage is enough to keep it working. If that isn’t the case, I’ll be adding an external battery pack to make up for the lack of internal charge circuit.

Ideally, finding out which component has failed; and swapping it for a working one is best – but my electronics skills are limited. If anyone has input, questions or ideas – I would love to hear them in the comments below or on the Youtube video linked above.