Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/programforrever/ecom/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Pickup points allow customers to collect their orders from designated locations instead of home delivery. This is ideal for:
  • Reducing shipping costs
  • Providing flexibility to customers
  • Serving customers without fixed addresses
  • Operating physical store locations
  • Partner pickup networks

Features

  • Multiple pickup point locations
  • Multilingual support for names and addresses
  • Assign staff members to manage pickup points
  • Enable/disable pickup points
  • Customer selection at checkout

Configuration

Accessing Pickup Point Management

1

Login to Admin Panel

Access your admin dashboard
2

Navigate to Pickup Points

Go to Setup & ConfigurationsShippingPickup Points
3

Create Pickup Point

Click Add New Pickup Point

Controller Location

app/Http/Controllers/PickupPointController.php

Database Models

app/Models/PickupPoint.php
app/Models/PickupPointTranslation.php

Model Implementation

app/Models/PickupPoint.php
class PickupPoint extends Model
{
    protected $with = ['pickup_point_translations'];

    public function getTranslation($field = '', $lang = false){
        $lang = $lang == false ? App::getLocale() : $lang;
        $pickup_point_translation = $this->pickup_point_translations->where('lang', $lang)->first();
        return $pickup_point_translation != null ? $pickup_point_translation->$field : $this->$field;
    }

    public function pickup_point_translations(){
        return $this->hasMany(PickupPointTranslation::class);
    }

    public function staff(){
        return $this->belongsTo(Staff::class);
    }

    public function scopeIsActive($query)
    {
        return $query->where('pick_up_status', '1');
    }
}

Creating a Pickup Point

app/Http/Controllers/PickupPointController.php
public function store(Request $request)
{
    $pickup_point = new PickupPoint;
    $pickup_point->name = $request->name;
    $pickup_point->address = $request->address;
    $pickup_point->phone = $request->phone;
    $pickup_point->pick_up_status = $request->pick_up_status;
    $pickup_point->staff_id = $request->staff_id;
    
    if ($pickup_point->save()) {
        // Save translation for default language
        $pickup_point_translation = PickupPointTranslation::firstOrNew([
            'lang' => env('DEFAULT_LANGUAGE'), 
            'pickup_point_id' => $pickup_point->id
        ]);
        $pickup_point_translation->name = $request->name;
        $pickup_point_translation->address = $request->address;
        $pickup_point_translation->save();

        flash(translate('PicupPoint has been inserted successfully'))->success();
        return redirect()->route('pick_up_points.index');
    }
}

Required Fields

  • Name: Pickup point location name
  • Address: Full address with landmarks
  • Phone: Contact number for the location
  • Status: Active/Inactive
  • Staff: Assign staff member to manage location

Multilingual Support

Pickup points support multiple languages:

Adding Translations

app/Http/Controllers/PickupPointController.php
public function update(Request $request, $id)
{
    $pickup_point = PickupPoint::findOrFail($id);
    
    // Only update main table if default language
    if($request->lang == env("DEFAULT_LANGUAGE")){
        $pickup_point->name = $request->name;
        $pickup_point->address = $request->address;
    }

    $pickup_point->phone = $request->phone;
    $pickup_point->pick_up_status = $request->pick_up_status;
    $pickup_point->staff_id = $request->staff_id;
    
    if ($pickup_point->save()) {
        // Save translation for requested language
        $pickup_point_translation = PickupPointTranslation::firstOrNew([
            'lang' => $request->lang,  
            'pickup_point_id' => $pickup_point->id
        ]);
        $pickup_point_translation->name = $request->name;
        $pickup_point_translation->address = $request->address;
        $pickup_point_translation->save();

        flash(translate('PicupPoint has been updated successfully'))->success();
        return redirect()->route('pick_up_points.index');
    }
}

Getting Translated Content

$pickup_point = PickupPoint::find(1);

// Get name in current locale
$name = $pickup_point->getTranslation('name');

// Get name in specific language
$name_fr = $pickup_point->getTranslation('name', 'fr');

Staff Assignment

Assign staff members to manage pickup points:
$pickup_point->staff_id = $request->staff_id;
Benefits:
  • Staff responsible for order handover
  • Track which staff handles which location
  • Manage inventory at pickup points
  • Communication point for customers

Pickup Point Status

Control availability of pickup points:
$pickup_point->pick_up_status = 1; // Active
$pickup_point->pick_up_status = 0; // Inactive
Inactive pickup points won’t appear at checkout.

Retrieving Active Pickup Points

Use the isActive scope:
$active_pickup_points = PickupPoint::isActive()->get();

Frontend Integration

Checkout Process

At checkout, customers can choose pickup point delivery:
1

Customer Selects Delivery Method

Customer chooses “Pickup from Store” option
2

Display Available Pickup Points

Show list of active pickup points with:
  • Name
  • Address
  • Phone number
  • Map (optional)
3

Customer Selects Pickup Point

Customer chooses preferred location
4

Order Confirmation

Include pickup point details in order confirmation

Example Implementation

// In checkout view
$pickup_points = PickupPoint::isActive()->get();

@foreach($pickup_points as $point)
    <div class="pickup-point-option">
        <h4>{{ $point->getTranslation('name') }}</h4>
        <p>{{ $point->getTranslation('address') }}</p>
        <p>{{ $point->phone }}</p>
    </div>
@endforeach

Deleting a Pickup Point

app/Http/Controllers/PickupPointController.php
public function destroy($id)
{
    $pickup_point = PickupPoint::findOrFail($id);
    
    // Delete all translations
    $pickup_point->pickup_point_translations()->delete();

    if(PickupPoint::destroy($id)){
        flash(translate('PicupPoint has been deleted successfully'))->success();
        return redirect()->route('pick_up_points.index');
    }
    else{
        flash(translate('Something went wrong'))->error();
        return back();
    }
}

Search Functionality

Admin panel includes search:
app/Http/Controllers/PickupPointController.php
public function index(Request $request)
{
    $sort_search = null;
    $pickup_points = PickupPoint::orderBy('created_at', 'desc');
    
    if ($request->has('search')){
        $sort_search = $request->search;
        $pickup_points = $pickup_points->where('name', 'like', '%'.$sort_search.'%');
    }
    
    $pickup_points = $pickup_points->paginate(10);
    return view('backend.setup_configurations.pickup_point.index', compact('pickup_points','sort_search'));
}

Use Cases

Physical Store Locations

Name: Downtown Store
Address: 123 Main Street, City Center, State 12345
Phone: +1 (555) 123-4567
Staff: Store Manager
Status: Active

Partner Locations

Name: ABC Convenience Store (Partner)
Address: 456 Oak Avenue, Suburb, State 12346
Phone: +1 (555) 234-5678
Staff: Partner Coordinator
Status: Active

Warehouse Pickup

Name: Main Warehouse - Customer Pickup
Address: 789 Industrial Blvd, Warehouse District
Phone: +1 (555) 345-6789
Staff: Warehouse Supervisor
Status: Active

Benefits for Customers

  • Cost Savings: No shipping fees for pickup
  • Flexibility: Choose convenient pickup time
  • Security: No package left at doorstep
  • Speed: Often available for same-day pickup
  • Verification: Can verify products before leaving

Benefits for Business

  • Lower Shipping Costs: Save on delivery expenses
  • Customer Interaction: Face-to-face engagement
  • Reduced Returns: Customers inspect before taking
  • Local Presence: Physical touchpoints in communities
  • Inventory Distribution: Spread stock across locations

Best Practices

Pickup Point Management Tips
  • Choose accessible, high-traffic locations
  • Provide clear directions and landmarks
  • Ensure adequate parking availability
  • Set realistic pickup hours
  • Train staff on order handover procedures
  • Maintain sufficient storage space
  • Implement order verification process
  • Send pickup ready notifications to customers
  • Set pickup time limits (e.g., 7 days)
  • Handle uncollected orders appropriately

Notifications

Implement customer notifications:
  1. Order Placed: Confirm pickup point selection
  2. Order Ready: Notify when available for pickup
  3. Reminder: Send pickup reminder after 2-3 days
  4. Final Notice: Last chance before order cancellation

Pickup Process Workflow

1

Customer Places Order

Selects pickup point at checkout
2

Order Prepared

Staff prepares order at pickup location
3

Customer Notified

SMS/Email sent when order ready
4

Customer Arrives

Visits pickup point with order ID
5

Verification

Staff verifies order and customer identity
6

Handover

Customer receives and inspects order
7

Order Completed

Status updated to delivered/collected

Permissions

Requires pickup_point_setup permission:
app/Http/Controllers/PickupPointController.php
public function __construct() {
    $this->middleware(['permission:pickup_point_setup'])->only('index','create','edit','destroy');
}

Database Tables

pickup_points

  • id
  • name
  • address
  • phone
  • pick_up_status
  • staff_id
  • created_at
  • updated_at

pickup_point_translations

  • id
  • pickup_point_id
  • lang
  • name
  • address
  • created_at
  • updated_at

Integration with Orders

When an order uses pickup point:
$order->shipping_type = 'pickup_point';
$order->pickup_point_id = $pickup_point->id;
$order->shipping_address = null; // Not needed for pickup

Troubleshooting

Check:
  • Pickup point status is active (pick_up_status = 1)
  • At least one active pickup point exists
  • Pickup delivery option is enabled in settings
Check:
  • Translation exists for current language
  • Language code matches (e.g., ‘en’, ‘fr’, ‘es’)
  • Falls back to default language if translation missing
Check:
  • Staff member is properly assigned
  • Staff has valid email/phone
  • Notification system is configured

Shipping Carriers

Configure shipping carriers

Delivery Boys

Manage delivery personnel

Build docs developers (and LLMs) love