Order Approval Add-On

The SubloginOrderApproval add-on provides multi-level order approval workflows with email notifications and role-based approvers.

Overview

The Order Approval add-on extends the base Sublogin module with:

  • Approval Workflows: Orders require approval before processing
  • Amount Thresholds: Approval based on order value
  • Role-Based Approvers: Permissions control who can approve
  • Email Notifications: Automatic approval request emails
  • Approval Tokens: Secure approval links
  • Multi-Level Approval: Hierarchical approval chains

Installation

composer config bearer.repo.softwaresilo.io composer config repositories.softwaresilo composer https://repo.softwaresilo.io/ composer require mageb2b/sublogin-orderapproval:* php bin/magento module:enable MageB2B_SubloginOrderApproval php bin/magento setup:upgrade php bin/magento cache:flush

Note: Requires SubloginRole add-on for role-based approvers.

Core Concepts

Order Needs Approval

Flag on sublogin that determines if their orders require approval.

Approval Amount Check

Threshold value - orders above this amount require approval.

Approval Token

Unique token generated for each order requiring approval.

Approver IDs

List of sublogin IDs who can approve the order.

Configuration

Enable Order Approval for Sublogin

Method 1: Admin Panel

  1. Navigate to Customers >All Customers
  2. Edit customer
  3. Go to Sublogins tab
  4. Edit sublogin
  5. Find Order Approval section
  6. Set Order Needs Approval: Yes
  7. Set Order Approval Amount Check: 1000.00
  8. Save sublogin

Method 2: Customer Account

  1. Log in as customer
  2. Go to My Sublogins
  3. Edit sublogin
  4. Configure approval settings
  5. Save

Approval Settings

Order Needs Approval

Yes: All orders require approval No: Orders process normally

Order Approval Amount Check

Amount: 1000.00 Orders <= €1000: Process normally Orders >€1000: Require approval

Example:

Order Needs Approval: Yes Amount Check: 1000.00 Order €500: Requires approval (flag is Yes) Order €1500: Requires approval (flag is Yes AND exceeds amount) Order Needs Approval: No Amount Check: 1000.00 Order €500: No approval needed Order €1500: No approval needed (flag is No)

Approval Workflow

Step 1: Sublogin Places Order

  1. Sublogin adds products to cart
  2. Proceeds to checkout
  3. Places order
  4. Order is created with status: Pending Approval

Step 2: Approval Token Generated

Order #000123 Approval Token: a1b2c3d4e5f6g7h8i9j0 Approver IDs: 5,12,18

Step 3: Email Notification Sent

Email sent to all approvers:

Subject: Order Approval Required - Order #000123 Dear [Approver Name], A new order requires your approval: Order Number: #000123 Placed By: John Doe (john@company.com) Order Total: €1,250.00 Date: January 15, 2024 [Approve Order] [Decline Order] Or use this link: https://store.com/sublogin/approval/approve/token/a1b2c3d4e5f6g7h8i9j0

Step 4: Approver Reviews Order

Approver can:

  • View order details
  • Check budget availability
  • Review products ordered
  • Approve or decline

Step 5: Approval Decision

If Approved:

  1. Order status changes to: Processing
  2. Order is processed normally
  3. Confirmation email sent to sublogin
  4. Approver ID added to sublogin_approver_ids

If Declined:

  1. Order status changes to: Canceled
  2. Decline reason recorded
  3. Notification email sent to sublogin
  4. Order cannot be reactivated

Approval Permissions

Requires SubloginRole add-on for permission-based approval.

Approval Permissions

  • approve_order_all - Approve any order
  • approve_order_same_level - Approve orders from same group level
  • approve_order_lower_level - Approve orders from lower group levels
  • decline_order_all - Decline any order
  • decline_order_same_level - Decline orders from same level
  • decline_order_lower_level - Decline orders from lower levels

Example Role: Manager

Role: Department Manager Permissions: - approve_order_same_level - approve_order_lower_level - decline_order_same_level - decline_order_lower_level Can approve/decline: - Orders from same department - Orders from sub-departments Cannot approve/decline: - Orders from other departments - Orders from higher levels

Example Role: Director

Role: Director Permissions: - approve_order_all - decline_order_all Can approve/decline: - All orders regardless of level

Determining Approvers

Method 1: Role-Based (Automatic)

System automatically finds approvers based on permissions:

Sublogin A (Employee) places order Group: Sales Department System searches for sublogins with: - approve_order_all permission (any group) - approve_order_same_level permission (Sales Department) - approve_order_lower_level permission (parent groups) Found Approvers: - Manager B (Sales Department, same level) - Director C (Company, higher level with _all permission)

Method 2: Manual Assignment

Admin manually assigns approvers to sublogin:

Sublogin Settings: Approvers: Manager B, Director C All orders from this sublogin go to these approvers

Multi-Level Approval

Scenario: Hierarchical Approval Chain

Company Structure: ├── Director (Level 0) │ └── Manager (Level 1) │ └── Employee (Level 2) Approval Rules: - Orders €0-€500: No approval - Orders €500-€2000: Manager approval - Orders €2000+: Director approval

Implementation:

Employee Sublogin: - Order Needs Approval: Yes - Amount Check: 500.00 Manager Role: - approve_order_lower_level (for Employee orders) - Amount limit: €2000 Director Role: - approve_order_all - No amount limit

Workflow:

Employee orders €300: → No approval needed (< €500) Employee orders €1000: → Manager approval required (€500-€2000) Employee orders €3000: → Director approval required (>€2000) → Manager cannot approve (exceeds their limit)

Approval Methods

  1. Approver receives email
  2. Clicks "Approve Order" button
  3. Redirected to approval page
  4. Confirms approval
  5. Order is approved

Method 2: Frontend Account

  1. Approver logs in
  2. Goes to My Account >Orders Pending Approval
  3. Views order details
  4. Clicks Approve or Decline
  5. Adds optional comment
  6. Confirms decision

Method 3: Admin Panel

  1. Admin logs in
  2. Goes to Sales >Orders
  3. Filters by "Pending Approval" status
  4. Opens order
  5. Clicks Approve Order or Decline Order
  6. Adds comment
  7. Saves

Decline Reasons

When declining an order, approver can provide reason:

Decline Reasons: - Exceeds budget - Unauthorized purchase - Wrong products - Duplicate order - Other (custom reason)

Example:

Order #000123 - DECLINED Declined By: Manager B Decline Reason: Exceeds budget Comment: Monthly budget already exhausted. Please resubmit next month. Date: January 15, 2024

Email Templates

Approval Request Email

Template: sublogin_order_approval_request Variables: - {{var order.increment_id}} - {{var sublogin.name}} - {{var sublogin.email}} - {{var order.grand_total}} - {{var approval_url}}

Approval Confirmation Email

Template: sublogin_order_approved Variables: - {{var order.increment_id}} - {{var approver.name}} - {{var approval_date}} - {{var approver_comment}}

Decline Notification Email

Template: sublogin_order_declined Variables: - {{var order.increment_id}} - {{var approver.name}} - {{var decline_reason}} - {{var decline_comment}}

Integration with Budget Add-On

When both Order Approval and Budget add-ons are installed:

Scenario 1: Budget Check Before Approval

Order Total: €1500 Budget Remaining: €1000 Result: Order blocked at checkout Reason: Exceeds budget (no approval needed)

Scenario 2: Budget Check After Approval

Order Total: €1500 Budget Remaining: €2000 Requires Approval: Yes Workflow: 1. Order placed (within budget) 2. Order status: Pending Approval 3. Approver approves 4. Budget is deducted 5. Order status: Processing

Scenario 3: Budget Exceeded During Approval

Order Total: €1500 Budget at Order Time: €2000 Budget at Approval Time: €500 (other orders placed) Result: Approval fails Reason: Budget no longer sufficient

Practical Examples

Example 1: Simple Manager Approval

Company: Small Business Structure: Owner >Employees Configuration: - All employee orders require approval - Owner is the only approver - No amount threshold Employee Sublogin: - Order Needs Approval: Yes - Amount Check: 0 (all orders) Owner Role: - approve_order_all - decline_order_all

Example 2: Department-Based Approval

Company: Medium Business Structure: - Company - Sales Department - Sales Manager - Sales Reps - IT Department - IT Manager - IT Staff Configuration: - Sales Manager approves Sales Rep orders - IT Manager approves IT Staff orders - No cross-department approval Sales Rep Sublogin: - Order Needs Approval: Yes - Group: Sales Department Sales Manager Role: - approve_order_same_level - approve_order_lower_level - Group: Sales Department

Example 3: Amount-Based Escalation

Company: Large Enterprise Structure: Employee >Manager > Director Configuration: - €0-€1000: No approval - €1000-€5000: Manager approval - €5000+: Director approval Employee Sublogin: - Order Needs Approval: Yes - Amount Check: 1000.00 Manager Role: - approve_order_lower_level - Max Amount: €5000 Director Role: - approve_order_all - No amount limit

Troubleshooting

Order Not Requiring Approval

  1. Check "Order Needs Approval" is Yes
  2. Verify order amount vs threshold
  3. Check sublogin configuration
  4. Clear cache

No Approvers Found

  1. Verify SubloginRole add-on is installed
  2. Check approval permissions are assigned
  3. Verify group structure
  4. Check role assignments

Approval Email Not Sent

  1. Check email configuration
  2. Verify approver email addresses
  3. Check email template
  4. Review var/log/system.log

Cannot Approve Order

  1. Check approver has correct permissions
  2. Verify approval token is valid
  3. Check order status is "Pending Approval"
  4. Ensure approver is logged in

Configuration Reference

Stores >Configuration > MageB2B > Sublogin Order Approval - Enable Order Approval: Yes/No - Default Approval Behavior: Require/Optional - Email Sender: Sales/Support/Custom - Approval Request Email Template - Approval Confirmation Email Template - Decline Notification Email Template - Approval Token Expiration: 7 days - Allow Multiple Approvers: Yes/No - Require All Approvers: Yes/No (if multiple)

Next Steps

Found an issue with this documentation? Let us know