@extends('layouts.app') @section('title', 'Bulk Stock Upload') @section('content')

Bulk Stock Upload

Back to Adjustments
@if (session('error_details'))
Some rows had issues:
@endif @if ($errors->any())
@endif
1Download the template

Full template: every product with its current stock. Fill in Quantity to Add and Batch No for the products you are restocking and leave the rest blank.

Blank template: the same columns with one sample row. Replace the sample with your own items (SKU or product name as in the system). The sample row is never imported.

2Upload the filled template
@csrf
Maximum file size: 5MB. Save as CSV if editing in Excel.
Used for rows where the Reason column is empty.
How it works
  • Stock is only added to products that already exist, matched by SKU (or Product Name if SKU is blank).
  • No new products are created. Unknown products are listed as errors; add them under Products first.
  • A product can appear on several rows, one per batch. Identical rows (same batch and expiry date) are skipped.
  • Uploading the same data again is rejected, so stock is never added twice.
  • Rows with an empty or zero quantity are ignored.
  • New prices are optional; leave them blank to keep the current values.
  • Each row is received as a new batch. It needs a batch number, and its expiry date must be after today.
  • "Current Stock" in the template is for reference only and is not imported.
  • Dates are read day first: 01/02/2027 is 1 February 2027. YYYY-MM-DD (2027-02-01) always works.
  • All rows are applied together. If something fails, no stock is changed.
@endsection @section('scripts') @endsection