Skip to content

Inventory Management recipe — assets, locations, assignments

The Inventory Management recipe (openintranet_inventory) turns the intranet into a real asset-tracking system. It models three entities — items (the physical things), locations (where they live by default) and assignments (the time-bounded handovers to a user) — and ties them together with a set of views that answer the questions IT and facilities actually ask: “who has the MacBook with serial XYZ?”, “what’s in the Berlin storeroom right now?”, “which laptops are out of warranty?”.

It is a recipe, so it is opt-in — install with drush recipe recipes/openintranet_inventory when the company outgrows the spreadsheet of assets in Drive.

The recipe ships three content types, one taxonomy vocabulary and three views:

  • Inventory Item (inventory_item) — the asset record. Title, image, type, serial number, model, manufacturer, purchase date, warranty expiry, current location, specifications, notes.
  • Inventory Location (inventory_location) — a place an item can live. Title (e.g. Berlin storeroom, Warsaw IT closet) plus a description.
  • Inventory Assignment (inventory_assignment) — a time-bounded handover. References the item, the user (or the destination location), the dates, plus optional notes and a photo (for handover proof).
  • Inventory Item Types taxonomy — the lookup list for the Type field on items (laptop, monitor, phone, headset, …).
FieldTypeNotes
TitleTextThe asset’s name (e.g. MacBook Pro 16” — admin).
Inventory numberStringInternal identifier (asset tag, barcode, …).
Item typeTaxonomy reference (Inventory Item Types)Laptop / Monitor / Phone / etc.
Serial numberStringVendor’s serial number.
ModelStringE.g. Pro 16” M3.
ManufacturerStringE.g. Apple.
Purchase dateDateWhen the item was bought.
Warranty expiryDateUsed by views to filter out-of-warranty items.
Current locationEntity reference (Inventory Location)Where the item lives by default.
Item specificationsLong textSpec sheet / config notes.
Item notesLong textFree-form notes (damage, repairs, …).
Item imageImageA photo of the item (or a stock vendor image).

Items are revisioned so the audit trail is complete (who changed the warranty date, when, why).

A location is a stable place — a room, a closet, a desk, a department area. Each one is a node with a title, body and (typically) a picture. Locations are referenced by items (current location) and by assignments (assigned to location — for moves between rooms).

An assignment is the handover record. It has:

FieldTypeNotes
TitleAuto-generated by Auto Entity Label from the item + user references — e.g. MacBook Pro 16” — admin assigned to Alice (2026-03-01).
Assigned itemEntity reference (Inventory Item)The item being handed over.
Assigned to userEntity reference (User)The person taking the item — optional.
Assigned to locationEntity reference (Inventory Location)The place receiving the item — optional.
Assignment dateDateWhen the handover took effect.
Expected return dateDateWhen the item should come back (or null for a permanent assignment).
Assignment notesLong textReason, conditions, notes.
Assignment imageImagePhoto of the signed handover form / item state at handover.

Either user or location (or both) can be set — supports loans to people and moves between locations using one record type.

The Prepopulate module is enabled, so the assignment form can be opened from an item page with the Reassign this item button — the Assigned item field is pre-filled.

The recipe ships three views:

  • Inventory items (views.view.inventory_items) — The catalogue. Title, image, type, serial, model, current location. Filterable by type, location and warranty status.
  • Inventory item assignments (views.view.inventory_item_assignments) — The history of handovers for a single item. Embedded as a tab on the item page so an admin can see the entire chain of custody at a glance.
  • Inventory reassign this item button (views.view.inventory_reassign_this_item_button) — A single-row view that renders a Reassign this item button next to the item, opening a pre-populated assignment form.

The day-to-day flow looks like:

  1. Create the item once when the asset is purchased. Fill the serial / model / warranty fields.
  2. Create a location for each storeroom / desk / department. Once.
  3. Assign the item every time it changes hands or moves — open the assignment form (or click Reassign this item on the item page), pick the recipient or destination, fill in the dates, save. The assignment becomes a permanent record.
  4. Search the catalogue with the item view when someone asks “do we have a spare USB-C charger?” or “who has the four-monitor stand?”.
  5. Audit history by opening the item and looking at the assignments tab — the full chain of custody is right there.
  • Search — Items, locations and assignments are indexed (when the Inventory Item / Inventory Location / Inventory Assignment bundles are added to the DB Index Content index). A search for “MacBook Pro 16” surfaces the item alongside any News / KB pages mentioning it.
  • Access Control & Groups — Items can be restricted per group (a sensitive piece of equipment kept inside one team).
  • Engagement scoring — Submitting / reading inventory entries does not contribute to engagement by default (asset tracking is administrative work), but the bundle can be added to the engagement signal if useful.
  • AI assistant — Use the AI button in the Specifications / Notes CKEditor fields to generate spec sheets or polish handover notes.
  • Multilingual — Inventory bundles can be opted into Content language settings per the standard multilingual story.
  • ECA — A model can fire on an Insert Inventory Assignment event to broadcast a notification to the recipient (“you’ve been assigned a MacBook Pro — please collect it from Berlin storeroom”).

The recipe relies on standard Drupal node permissions. Common defaults:

PermissionDefault role(s)
Create / edit / delete inventory_itemIT / Facilities admin
Create / edit / delete inventory_locationIT / Facilities admin
Create / edit / delete inventory_assignmentIT / Facilities admin
View published inventory_item / location / assignmentAuthenticated user

A typical configuration restricts create / edit / delete of the three types to a custom Inventory manager role and lets every authenticated user view the catalogue.

Terminal window
cd web
drush recipe recipes/openintranet_inventory
drush cr

After applying:

  • /node/add/inventory_item, /node/add/inventory_location, /node/add/inventory_assignment are the creation forms.
  • /inventory-items (the configured view path) is the catalogue.
  • An Inventory main-menu link is typically added by hand from /admin/structure/menu/manage/main.
  • node, field, user, taxonomy, views, views_ui, datetime, options, text, image, file — Drupal core
  • Auto Entitylabel — auto-generates assignment titles
  • Prepopulate — pre-fills the Assigned item field when opening an assignment from an item page
  • Default Content — sample items / locations / assignments to seed the system