v0.9.5

Order { .text-brand }

Orchestrate orders from checkout to fulfillment. Handle complex workflows, rigorous status transitions, and shipment tracking without the spaghetti code.

Getting Started

Installation

$ composer require obelaw/ium-oms

Publish Configuration

$ php artisan vendor:publish --tag=ium-oms-config

Run Migrations

$ php artisan migrate

Requirements

  • PHP 8.2+
  • Laravel 10+
  • MySQL 8.0+ or PostgreSQL 14+

Orders

Orders are the central entity in IUM-OMS. Create, update, and transition orders through configurable status workflows with full audit logging.

Creating an Order

use Obelaw\Ium\Oms\Actions\CreateOrder;

$order = CreateOrder::run([
    'customer_id' => 42,
    'currency' => 'USD',
    'items' => [
        ['sku' => 'WIDGET-001', 'qty' => 2, 'price' => 29.99],
        ['sku' => 'WIDGET-002', 'qty' => 1, 'price' => 49.99],
    ],
]);

Order Statuses

Pending → Processing → Shipped → Delivered

Workflows

Define custom status transitions with guards, actions, and notifications. The workflow engine validates every transition and prevents invalid state changes.

Transitioning an Order

use Obelaw\Ium\Oms\Actions\TransitionOrder;

// Move order to processing
TransitionOrder::run($order, 'processing');

// Invalid transitions throw an exception
TransitionOrder::run($order, 'delivered'); // ❌ WorkflowException
  • Payment verification
  • Stock availability check
  • Address validation
  • Custom guard classes
  • Email notifications
  • Stock reservation / release
  • Invoice generation
  • Webhook dispatching

:::

Shipments

Create shipments from orders with carrier integration. Track parcels and handle partial shipments for split deliveries.

Creating a Shipment

use Obelaw\Ium\Oms\Actions\CreateShipment;

$shipment = CreateShipment::run($order, [
    'carrier' => 'fedex',
    'tracking_number' => '7489236401',
    'items' => [
        ['sku' => 'WIDGET-001', 'qty' => 2],
    ],
]);

Invoices

Generate invoices automatically on order transitions or manually. Invoices support line-item totals, tax calculation, and credit memos.

Generating an Invoice

use Obelaw\Ium\Oms\Actions\GenerateInvoice;

$invoice = GenerateInvoice::run($order);

$invoice->number;      // INV-2026-0042
$invoice->subtotal;    // 109.97
$invoice->tax;         // 9.90
$invoice->total;       // 119.87