මොඩියුලය 8

ඉන්වෙන්ටරි කළමනාකරණය සහ Events & Listeners


1 ඉන්වෙන්ටරි තත්ත්ව පිටුවක් නිර්මාණය කිරීම

සුපිරි වෙළඳසැලක මෙහෙයුම් සඳහා තොග කළමනාකරණය අත්‍යවශ්‍ය වේ. අපි තොග ප්‍රමාණය සහ නැවත ඇණවුම් කළ යුතු මට්ටම (`reorder_level`) සංසන්දනය කර, අවසන් වීමට ආසන්න නිෂ්පාදන සඳහා ඇඟවීම් පෙන්වන පිටුවක් නිර්මාණය කරමු.

Migration එක වෙනස් කිරීම:

පළමුව, `products` වගුවට `reorder_level` තීරුව එක් කිරීමට නව migration එකක් සෑදිය යුතුය.

php artisan make:migration add_reorder_level_to_products_table --table=products

ඉන්පසු, එම migration ගොනුවේ `up()` method එක තුළ schema එක නිර්වචනය කර `php artisan migrate` කරන්න.

$table->integer('reorder_level')->default(10)->after('quantity');
2 Events සහ Listeners: යෙදුමේ ක්‍රියා වෙන් කිරීම

Events සහ Listeners යනු **Observer design pattern** එක ක්‍රියාත්මක කිරීමකි. සරලවම, යම් සිදුවීමක් (Event) සිදු වූ විට, ඊට සවන් දෙන (Listen) එකක් හෝ කිහිපයක් ක්‍රියාත්මක වීමයි.

අපගේ උදාහරණය:

  • Event (සිදුවීම): `SaleProcessed` (විකිණීමක් සාර්ථකව අවසන් වීම).
  • Listener (සවන් දෙන්නා): `UpdateStockQuantity` (අදාළ නිෂ්පාදනවල තොග ප්‍රමාණය අඩු කිරීම).

මෙම ක්‍රමය මගින්, POS පද්ධතියේ Controller එකට, තොග අඩු කරන්නේ කෙසේදැයි දැනගැනීමට අවශ්‍ය නැත. එහි එකම වගකීම වන්නේ විකිණීම අවසන් වූ පසු `SaleProcessed` event එක `dispatch` කිරීම (සිදුවීම ප්‍රකාශයට පත් කිරීම) පමණි. ඉතිරි කාර්යය Listener එක මගින් බලා ගනී.

Event සහ Listener සෑදීම:
php artisan make:event SaleProcessed php artisan make:listener UpdateStockQuantity --event=SaleProcessed

⭐ ප්‍රායෝගික පැවරුම: විකිණීමෙන් පසු තොග ස්වයංක්‍රීයව යාවත්කාලීන කිරීම

පියවර 1: Event (`SaleProcessed.php`) සහ Listener (`UpdateStockQuantity.php`) සකස් කිරීම

`app/Events/SaleProcessed.php` ගොනුව විවෘත කර, constructor එක තුළ, සිදු වූ විකිණීමට අදාළ `Sale` model එක ලබාගැනීමට සකසන්න.

ඉන්පසු, `app/Listeners/UpdateStockQuantity.php` ගොනුවේ `handle()` method එක තුළ, එම `Sale` model එකෙන් විකිණූ භාණ්ඩ (sale items) ලබාගෙන, `@foreach` loop එකක් මගින් එක් එක් නිෂ්පාදනයේ `quantity` එක අඩු කිරීමට අවශ්‍ය Eloquent කේතය ලියන්න.

// In UpdateStockQuantity.php -> handle() public function handle(SaleProcessed $event): void { foreach ($event->sale->saleItems as $item) { $product = $item->product; $product->quantity -= $item->qty; $product->save(); } }

පියවර 2: POS Component එකෙන් Event එක Dispatch කිරීම

අප 6 වන මොඩියුලයේදී සෑදූ `PointOfSale` Livewire component එකේ (හෝ ඔබගේ POS Controller එකේ), විකිණීම දත්ත සමුදායේ සටහන් කළ වහාම, `SaleProcessed` event එක dispatch කරන්න.

// In PointOfSale.php -> processSale() use App\Events\SaleProcessed; // ... // After saving the sale to the database... $newSale = Sale::create([...]); // ... SaleProcessed::dispatch($newSale);

පියවර 3: ඉන්වෙන්ටරි පිටුව (`inventory.blade.php`) නිර්මාණය කිරීම

`InventoryController` එකක් සහ ඊට අදාළ route එකක් සාදන්න. Controller එකේ `index` method එක තුළ, තොග අඩු (`quantity <= reorder_level`) සහ සියලුම නිෂ්පාදන ලබාගෙන view එකට යවන්න. View එක තුළ, Bootstrap table භාවිතයෙන් එම දත්ත පෙන්වන්න. තොග අඩු භාණ්ඩ සඳහා විශේෂ වර්ණයක් යොදන්න.

දැන්, POS පද්ධතියෙන් විකිණීමක් සිදු කර, ඉන්වෙන්ටරි පිටුවට ගොස් බලන්න. අදාළ නිෂ්පාදනවල තොග ප්‍රමාණය ස්වයංක්‍රීයව අඩු වී ඇත්නම්, ඔබ මෙම මොඩියුලය සාර්ථකව නිම කර ඇත!

‹‹ පෙර මොඩියුලය (Module 7) ඊළඟ මොඩියුලය (Module 9) ››