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
- Navigate to Customers >All Customers
- Edit customer
- Go to Sublogins tab
- Edit sublogin
- Find Order Approval section
- Set Order Needs Approval: Yes
- Set Order Approval Amount Check: 1000.00
- Save sublogin
Method 2: Customer Account
- Log in as customer
- Go to My Sublogins
- Edit sublogin
- Configure approval settings
- Save
Approval Settings
Order Needs Approval
Yes: All orders require approval No: Orders process normallyOrder Approval Amount Check
Amount: 1000.00 Orders <= €1000: Process normally Orders >€1000: Require approvalExample:
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
- Sublogin adds products to cart
- Proceeds to checkout
- Places order
- Order is created with status: Pending Approval
Step 2: Approval Token Generated
Order #000123 Approval Token: a1b2c3d4e5f6g7h8i9j0 Approver IDs: 5,12,18Step 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/a1b2c3d4e5f6g7h8i9j0Step 4: Approver Reviews Order
Approver can:
- View order details
- Check budget availability
- Review products ordered
- Approve or decline
Step 5: Approval Decision
If Approved:
- Order status changes to: Processing
- Order is processed normally
- Confirmation email sent to sublogin
- Approver ID added to
sublogin_approver_ids
If Declined:
- Order status changes to: Canceled
- Decline reason recorded
- Notification email sent to sublogin
- Order cannot be reactivated
Approval Permissions
Requires SubloginRole add-on for permission-based approval.
Approval Permissions
approve_order_all- Approve any orderapprove_order_same_level- Approve orders from same group levelapprove_order_lower_level- Approve orders from lower group levelsdecline_order_all- Decline any orderdecline_order_same_level- Decline orders from same leveldecline_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 levelsExample Role: Director
Role: Director Permissions: - approve_order_all - decline_order_all Can approve/decline: - All orders regardless of levelDetermining 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 approversMulti-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 approvalImplementation:
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 limitWorkflow:
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
Method 1: Email Link
- Approver receives email
- Clicks "Approve Order" button
- Redirected to approval page
- Confirms approval
- Order is approved
Method 2: Frontend Account
- Approver logs in
- Goes to My Account >Orders Pending Approval
- Views order details
- Clicks Approve or Decline
- Adds optional comment
- Confirms decision
Method 3: Admin Panel
- Admin logs in
- Goes to Sales >Orders
- Filters by "Pending Approval" status
- Opens order
- Clicks Approve Order or Decline Order
- Adds comment
- 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, 2024Email 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: ProcessingScenario 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 sufficientPractical 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_allExample 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 DepartmentExample 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 limitTroubleshooting
Order Not Requiring Approval
- Check "Order Needs Approval" is Yes
- Verify order amount vs threshold
- Check sublogin configuration
- Clear cache
No Approvers Found
- Verify SubloginRole add-on is installed
- Check approval permissions are assigned
- Verify group structure
- Check role assignments
Approval Email Not Sent
- Check email configuration
- Verify approver email addresses
- Check email template
- Review
var/log/system.log
Cannot Approve Order
- Check approver has correct permissions
- Verify approval token is valid
- Check order status is "Pending Approval"
- 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)